您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Frogniggers ETERNALLY BTFO
// ==UserScript== // @name Frognigger Ratio [PUBLIC] // @namespace soyjak.party // @match http*://soyjak.party/* // @version 1.0 // @author Nigger // @description Frogniggers ETERNALLY BTFO // @license wtfpl // ==/UserScript== const modifiers = ["==", "%%", "--", "'", ""]; let done = new Array(20); let stringSets = { "Frognigger":["FROGNIGGERS BTFO","FROGTROONS BTFO","GO BACK TO TROONC0RD","GO BACK TO FEDSCHAN","FROGNIGGER GLOWNIGGER COAL","KILL ALL FROGTROONS","DIE OUT","KILL YOURSELF FROGNIGGER","FROGCUCKS ARE OWNED BY BIG SOY COCK","GLOWNIGGER GO BACK","HANG YOURSELF FROGTROON","KILL YOURSELF FROGMUTT","FROGNIGGERS ARE FOREVER CUCKED BY SOYKINGS","YOU WILL NEVER BE WELCOME HERE","GO EXTINCT"], "Frognigger Redtext":["==FROGNIGGERS BTFO==","==FROGTROONS BTFO==","==GO BACK TO TROONC0RD==","==GO BACK TO FEDSCHAN==","==FROGNIGGER GLOWNIGGER COAL==","==KILL ALL FROGTROONS==","==DIE OUT==","==KILL YOURSELF FROGNIGGER==","==FROGCUCKS ARE OWNED BY BIG SOY COCK==","==GLOWNIGGER GO BACK==","==HANG YOURSELF FROGTROON==","==KILL YOURSELF FROGMUTT==","==FROGNIGGERS ARE FOREVER CUCKED BY SOYKINGS==","==YOU WILL NEVER BE WELCOME HERE==","==GO EXTINCT=="] } let targetPosts = []; let sets = [stringSets["Generic"]]; setInterval(() => { document.querySelectorAll(".button.alert_button").forEach(e => e.click()); if (targetPosts.length == 0 || sets.length == 0) { return; } let post = ""; targetPosts.forEach(p => post += `>>${p}\n`); let effect = ""; if (Math.random() > 0.5) { effect = modifiers[Math.floor(Math.random() * modifiers.length)]; } post += effect; let strings = sets.flat(); stringsLength = strings.length; let found = false; while (!found) { text = strings[(Math.floor(Math.random() * stringsLength))]; if (!done.includes(text)) { if (Math.random() > 0.5) { text = text.toUpperCase(); } post += text; found = true; done.unshift(text); done.pop(); } } post += effect; document.querySelector("form[name=post] textarea#body").value = post; document.querySelector("form[name=post] input[value*='Reply']").click(); }, 12000); function addRatioButton(post) { post.querySelector(".intro").insertAdjacentHTML("beforeend", `<a href="javascript:void(0);" class="ratio" postNumber="${post.getElementsByClassName("post_no")[1].textContent}">[Ratio]</a>`); } let options = Options.add_tab("ratio", "gear", "Ratio").content[0]; let optionsHTML = ""; for ([key, value] of Object.entries(stringSets)) { optionsHTML += `<input type="checkbox" id="ratio-${key}" name="${key}"><label for="ratio-${key}">${key}</label><br>`; } options.insertAdjacentHTML("beforeend", optionsHTML); options.querySelectorAll("input[type=checkbox]").forEach(e => { e.addEventListener("change", e => { sets = []; options.querySelectorAll("input[type=checkbox]:checked").forEach(c => sets.push(stringSets[c.getAttribute("name")])); }); e.checked = e.getAttribute("name") == "Generic"; }); const updateObserver = new MutationObserver(list => { list.forEach(node => { if (node.addedNodes[0].nodeName == "DIV") { addRatioButton(node.addedNodes[0]); } }); }); updateObserver.observe(document.querySelector(".thread"), { childList: true }); [...document.getElementsByClassName("post")].forEach(e => { addRatioButton(e); }); document.addEventListener("click", e => { let t = e.target; if (t.classList.contains("ratio")) { if (t.textContent == "[Ratio]") { t.textContent = "[Unratio]"; targetPosts.push(t.getAttribute("postNumber")); } else { targetPosts = targetPosts.filter(p => p != t.getAttribute("postNumber")); t.textContent = "[Ratio]"; } } });