Translate Buttons for beta.character.ai

Adds a translate buttons for character messages in the chat for beta.character.ai

目前為 2022-12-13 提交的版本,檢視 最新版本

// ==UserScript==
// @name        Translate Buttons for beta.character.ai
// @namespace   TranslateButtonsForBetaCharacterAI
// @version     1.6
// @description Adds a translate buttons for character messages in the chat for beta.character.ai
// @icon        https://www.google.com/s2/favicons?sz=64&domain=beta.character.ai
// @match       https://beta.character.ai/chat?char=*
// @grant       GM_xmlhttpRequest
// @run-at      document-end
// @license     MIT
// ==/UserScript==

function addButtons() {
    var elements = document.getElementsByClassName("msg char-msg");
    for (var i = 0; i < elements.length; i++) {
        const charMsg = elements[i];
        const markdownWrapper = charMsg.querySelector(".markdown-wrapper");
        const rootMarkdownWrapper = markdownWrapper.parentElement;

        if (charMsg.querySelector(".translate-button") === null) {
            var btn = document.createElement("button");
            btn.textContent = "Tr";
            btn.classList.add("translate-button");
            btn.style.cssText = "width: 30px; height: 30px;";

            // Add event listener for click event on translate button
            btn.addEventListener("click", function () {
                const translateNodeName = "translate-markdown-wrapper";

                var translateNode = rootMarkdownWrapper.querySelector(`.${translateNodeName}`);
                if (translateNode) {
                    rootMarkdownWrapper.removeChild(translateNode)
                }

                var clone = markdownWrapper.cloneNode(true);
                clone.className = translateNodeName;
                rootMarkdownWrapper.insertBefore(clone, rootMarkdownWrapper.firstChild);

                const text = clone.innerHTML;
                console.log("Message text: " + text);

                // Use the user's language as the target language in the API request
                var url = "https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=" + navigator.language + "&dt=t&q=" + encodeURIComponent(text);

                GM_xmlhttpRequest({
                    method: "GET",
                    url: url,
                    onload: function (response) {
                        const responseText = JSON.parse(response.responseText);

                        let translation = "";
                        responseText[0].forEach((part) => {
                            translation += part[0];
                        });

                        // Log the translation
                        console.log("Translated text: " + translation);

                        // Replace the original text with the translated text
                        clone.innerHTML = translation;
                    }
                });

            });

            // Log the button being added
            console.log("Added translate button for element: " + charMsg);
            charMsg.insertBefore(btn, charMsg.firstChild);
        }
    }
}

// Check every second
setInterval(addButtons, 1000);