您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Simple script to auto translate all chat messages in MineFun into English :)
// ==UserScript== // @name MineFun Chat Translator // @namespace http://tampermonkey.net/ // @version 1.2 // @description Simple script to auto translate all chat messages in MineFun into English :) // @author November2246 // @match https://minefun.io/* // @icon https://www.google.com/s2/favicons?sz=64&domain=minefun.io // @run-at document-start // @license ISC // @grant none // ==/UserScript== // Rip data attribute for messages let messageDataAttribute; document.addEventListener('DOMContentLoaded', async () => { const messageDataInterval = setInterval(() => { try { let css = [...document.styleSheets].find(x => x?.href && x?.href.includes('assets/Game-')); if (!css) return; let match = [...css.cssRules].find(x => x?.selectorText && x?.selectorText.includes('.messages[data-v-'))?.selectorText; if (!match) return; messageDataAttribute = match.slice(10, -1); clearInterval(messageDataInterval); } catch {} }, 250); }); // Hook setAttribute on div elements to handle message divs const _createElement = document.createElement; document.createElement = function createElement() { const el = _createElement.apply(this, arguments); if (el.tagName !== 'DIV') return el; const _setAttribute = el.setAttribute; el.setAttribute = function setAttribute() { if (messageDataAttribute && arguments[0] === messageDataAttribute) handleMessage(this); return _setAttribute.apply(this, arguments); } return el; } // Handle message translation, adding [language] prefix and translated content function handleMessage(el) { if (!el || el?.children?.length !== 2) return; const userEl = el.children[0]; const textEl = el.children[1]; if (!textEl.innerText) return; console.log(`Attempting to auto-translate message: "${textEl.innerText}"`); translateMessage(textEl.innerText).then(translated => { if (!textEl?.innerText) return; textEl.innerText = `[${translated[0]}]: ${translated[1]}`; }).catch(err => { console.warn('Tranlation error...', e); }); } // Message cache to prevent duplicate requests to Google's API const messageCache = {}; // Abuse google translate API to auto translate message text async function translateMessage(text) { if (messageCache[text]) return messageCache[text]; const res = await fetch("https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=en&dt=t&q=" + encodeURIComponent(text)); const data = await res.json(); const result = [data[2], data[0].map(x => x[0]).join('')]; messageCache[text] = result; return result; }