Переводит сообщения на английском и отображает их перевод в каналах Discord - для Web // by LZT users
当前为
// ==UserScript==
// @name DiscordAutoTranslator
// @namespace http://tampermonkey.net/
// @version 1.2
// @description Переводит сообщения на английском и отображает их перевод в каналах Discord - для Web // by LZT users
// @match *://discord.com/*
// @author Timka251 & eretly
// @grant GM_xmlhttpRequest
// @icon https://i.pinimg.com/236x/68/95/31/689531dc04ba222ab7af0fa34dc63644.jpg
// @run-at document-end
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// Функция для перевода текста с помощью Google Translate
function translateText(text, callback) {
const url = `https://translate.google.com/m?hl=ru&sl=en&tl=ru&ie=UTF-8&prev=_m&q=${encodeURIComponent(text)}`;
GM_xmlhttpRequest({
method: "GET",
url: url,
onload: function(response) {
if (response.status === 200) {
const parser = new DOMParser();
const doc = parser.parseFromString(response.responseText, "text/html");
const translatedTextElement = doc.querySelector('.result-container');
if (translatedTextElement) {
callback(translatedTextElement.textContent.trim());
} else {
console.error("Перевод не удался");
}
} else {
console.error("Ошибка при получении перевода, статус: " + response.status);
}
},
onerror: function() {
console.error("Ошибка сети во время запроса перевода");
}
});
}
// Функция для аннотирования сообщений
function annotateMessage(div) {
const originalText = div.textContent.trim();
const container = document.createElement('div');
container.style.position = 'relative';
container.style.marginBottom = '10px'; // Отступ между сообщениями
const translatedDiv = document.createElement('div');
translatedDiv.style.color = 'rgb(135, 155, 164)';
translatedDiv.style.marginTop = '0px';
translatedDiv.style.paddingLeft = '8px'; // Добавляем отступ слева
translateText(originalText, function(translatedText) {
translatedDiv.textContent = translatedText;
container.appendChild(translatedDiv);
div.parentNode.insertBefore(container, div.nextSibling);
});
}
// Функция для проверки и обработки новых DIV
function checkNewDiv() {
const divs = document.querySelectorAll('div[id^="message-content-"]');
divs.forEach(div => {
if (!div.dataset.processed) {
const text = div.textContent;
const lang = detectLanguage(text);
if (lang === 'en') {
annotateMessage(div);
}
div.dataset.processed = 'true';
}
});
}
// Функция для определения языка текста
function detectLanguage(text) {
return text.match(/[a-zA-Z]/) ? 'en' : 'ru';
}
// Проверка новых DIV через регулярные интервалы
setInterval(checkNewDiv, 1000);
})();