您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds needed formatting codes to google meet
// ==UserScript== // @name Google Meet Formatting // @namespace https://github.com/ugackMiner53/Google-Meet-Formatting/ // @version 0.0.2 // @description Adds needed formatting codes to google meet // @author ugackMiner // @match https://meet.google.com/* // @grant none // ==/UserScript== var chatbox; var yourName; function startingStuff() { var isLoaded = false; var checkExist = setInterval(function() { if (document.getElementsByClassName("z38b6 CnDs7d hPqowe").length != 0 && !isLoaded) { isLoaded = true; console.log("Exists!, calling startup"); clearInterval(checkExist); // Inserts some css for spoiler tags var styles = `.spoiler { color: black; background-color:black; display:inline-block; transition: background-color 0.3s; } .spoiler:hover { background-color: white; } blockquote { margin: 0; padding: 15px; background: #eee; border-radius: 5px; }`; var styleSheet = document.createElement("style"); styleSheet.type = "text/css"; styleSheet.innerText = styles; document.head.appendChild(styleSheet) startup(); } }, 100); var startup = function() { // Applies an ID to the messagebox where the messages are shown chatbox = document.getElementsByClassName("z38b6 CnDs7d hPqowe")[0]; chatbox.id = "chatbox"; // Adds a mutation event to the messagebox to check for messages mutationObserver.observe(chatbox, { // Looks for new messages childList: true, // Looks for edits to existing messages (i.e a new message right after an old one) subtree: true }); yourName = document.getElementsByClassName("ZjFb7c")[0].innerText; console.log("Loaded!"); // If there are already messages, then loop through them and apply formatting if (document.getElementsByClassName("oIy2qc")[0]) { for (let i = 0; i < document.getElementsByClassName("oIy2qc").length; i++) { oldMessageId = 0; onMessageEvent(document.getElementsByClassName("oIy2qc")[i]); } } // Go in a .5 sec loop to check if the chat window still exists var stillExists = setInterval(function () { if (!document.getElementsByClassName('z38b6 CnDs7d hPqowe').length) { clearInterval(stillExists); console.log("Lost connection!"); startingStuff(); } }, 500); }; } var mutationObserver = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { onMessageEvent(); }); }); var oldMessageId; var mutedPeople = []; function onMessageEvent(messageElement = null) { if (document.getElementsByClassName("gYckH").length != 0 || oldMessageId === document.getElementsByClassName("oIy2qc").length - 1) { return; } if (messageElement === null) messageElement = document.getElementsByClassName("oIy2qc")[document.getElementsByClassName("oIy2qc").length - 1]; var message = messageElement.innerHTML; var author = document.getElementsByClassName("YTbUzc")[document.getElementsByClassName("YTbUzc").length - 1].textContent; oldMessageId = document.getElementsByClassName("oIy2qc").length - 1; console.log(author + ": " + message + " - " + oldMessageId); // If the author is muted, hide their message mutedPeople.forEach(mutedPerson => { if (author.includes(mutedPerson)) { messageElement.innerHTML = ""; message = ""; return; } }); // Replace $$link$$ with an image if (/\$\$(.+?)\$\$/g.test(messageElement.innerHTML)) { messageElement.innerHTML = messageElement.innerHTML.replace(/\$\$(.*?)\$\$/g, "$1"); messageElement.innerHTML = messageElement.innerHTML.replace(/\<a(.*?)\>(.*?)\<\/a\>/g, "<img style=\"max-width: 200px; max-height: 200px\" src=\"$2\"></img>"); } // If the message contains a link, skip formatting the message in fear of formatting the link on accident if(new RegExp(/https?:\/\/(www.)?./).test(message)) { return; } // Replace ** with bold messageElement.innerHTML = messageElement.innerHTML.replace(/\*\*(.+?)\*\*/g, "<b>$1</b>"); // Replace * with italics messageElement.innerHTML = messageElement.innerHTML.replace(/\*(.+?)\*/g, "<i>$1</i>"); // Replace _ with underline messageElement.innerHTML = messageElement.innerHTML.replace(/\_(.+?)\_/g, "<u>$1</u>"); // Replace ~~ with strikethrough messageElement.innerHTML = messageElement.innerHTML.replace(/\~\~(.+?)\~\~/g, "<s>$1</s>"); // Replace ^ with superscript (range of characters) messageElement.innerHTML = messageElement.innerHTML.replace(/\^(.+?)\^/g, "<sup>$1</sup>"); // Replace ^ with superscript (single character) messageElement.innerHTML = messageElement.innerHTML.replace(/\^(\d)/g, "<sup>$1</sup>"); // Replace || with custom spoiler spans messageElement.innerHTML = messageElement.innerHTML.replace(/\|\|(.+?)\|\|/g, "<p class='spoiler'>$1</p>"); // Replace ``` with code blocks messageElement.innerHTML = messageElement.innerHTML.replace(/\`\`\`(.+?)\`\`\`/g, "<pre><code>$1</code></pre>"); // Replace ` with inline code messageElement.innerHTML = messageElement.innerHTML.replace(/\`(.+?)\`/g, "<code>$1</code>"); // Replace "" with a block quote messageElement.innerHTML = messageElement.innerHTML.replace(/\"\"(.+?)\"\"/g, "<blockquote><p>$1</p></blockquote>"); // Replace # with highlighting messageElement.innerHTML = messageElement.innerHTML.replace(/\#(.+?)\#/g, "<mark>$1</mark>"); if (message.includes("/tableflip")) messageElement.innerHTML = "(╯°□°)╯︵ ┻━┻"; else if (message.includes("/shrug")) messageElement.innerHTML = "¯\\_(ツ)_/¯"; else if (message.includes("/unflip")) messageElement.innerHTML = "┬─┬ ノ( ゜-゜ノ)"; else if (message.includes("/mute") && message.match(/@([^\s]+)/) && author === "You") { var pmName = message.match(/@([^\s]+)/)[1]; pmName = pmName.replace(/\@(.+?)/g, ""); console.log(pmName); mutedPeople.push(pmName); } else if (message.includes("/unmute") && message.match(/@([^\s]+)/) && author === "You") { var pmName = message.match(/@([^\s]+)/)[1]; pmName = pmName.replace(/\@(.+?)/g, ""); mutedPeople = mutedPeople.filter(e => e !== pmName); } // Check if message includes @ if (message.match(/@([^\s]+)/)) { var pmName = message.match(/@([^\s]+)/)[1]; pmName = pmName.replace(/\@(.+?)/g, ""); // Check if your name includes what they selected if (yourName.includes(pmName)) { messageElement.innerHTML = "<mark>" + message + "</mark>"; } else if (author !== "You") { console.log(yourName + " - " + pmName); messageElement.innerHTML = "<sub><i>Private message sent</i></sub>"; } } } startingStuff();