您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
When entering something in textarea of russian-speaking room, this script replace cyrillic letters in roots of obscene words on similar unicode symbol, correctly displayed on browser and not containing control characters of unicode. Made by 060uDy_qpuJIbTp (https://www.kongregate.com/accounts/060uDy_qpuJIbTp) for russian-speaking room ("Room: Московский Кремль") on Kongregate (www.kongregate.com).
// ==UserScript== // @name obfuscateObsceneLexicon // @name:en obfuscateObsceneLexicon // @name:ru замена обсценных слов // @namespace operationsWithObsceneLexicon // @description:en When entering something in textarea of russian-speaking room, this script replace cyrillic letters in roots of obscene words on similar unicode symbol, correctly displayed on browser and not containing control characters of unicode. Made by 060uDy_qpuJIbTp (https://www.kongregate.com/accounts/060uDy_qpuJIbTp) for russian-speaking room ("Room: Московский Кремль") on Kongregate (www.kongregate.com). // @description:ru Этот скрипт при вводе текста в русскоговорящей комнате заменяет буквы в корнях матерных слов на похожие символы юникода, правильно отображаемые в браузере и не содержащие управляющие символы юникода. Сделано 060uDy_qpuJIbTp (https://www.kongregate.com/accounts/060uDy_qpuJIbTp) для русскоговорящей комнаты ("Room: Московский Кремль") на Kongregate (www.kongregate.com). // @author 060uDy_qpuJIbTp // @version 1.0.1 // @grant none // @include https://www.kongregate.com/* // @include http://www.kongregate.com/* // @run-at document-end // @description When entering something in textarea of russian-speaking room, this script replace cyrillic letters in roots of obscene words on similar unicode symbol, correctly displayed on browser and not containing control characters of unicode. Made by 060uDy_qpuJIbTp (https://www.kongregate.com/accounts/060uDy_qpuJIbTp) for russian-speaking room ("Room: Московский Кремль") on Kongregate (www.kongregate.com). // ==/UserScript== /* made by 060uDy_qpuJIbTp (https://www.kongregate.com/accounts/060uDy_qpuJIbTp) for russian-speaking room ("Room: Московский Кремль") on www.kongregate.com https://pastebin.com/uZG3823z */ window.addEventListener("load", pageFullyLoaded_); var Random_ = { getRandomInt: function(min, max) /* min = 0, max = 999999999999999 || 2147483647*/ { return Math.floor(Math.random() * (max - min + 1)) + min; } }; function getGlobalRegExp(find){ return new RegExp(find, 'g'); } function replaceAll(str_, find, replace) { return str_.replace(getGlobalRegExp(find), replace); } /* [original_letter, [letters_for_replace...]] */ /* all: */ var letters = [ ["А", ["Ӑ", "Ӓ", "Α"]], ["Б", ["Ҕ"]], ["В", ["ϐ", "Β"]], ["Г", ["Ӷ", "Ѓ", "Ґ", "Ғ", "Ӻ", "Γ"]], ["Д", ["Ꚉ", "Ꚁ"]], ["Е", ["Ҽ", "Ҿ", "Ε"]], ["Ж", ["Җ", "Ӂ"]], ["З", ["Ҙ", "Ѯ", "Ӟ", "Ӡ", "Ȝ"]], ["И", ["Ͷ"]], ["Й", ["Ҋ"]], ["К", ["Қ", "Ќ", "Ҝ", "Ҟ", "Ҡ", "Κ"]], ["Л", ["Ӆ", "Ԓ", "Λ"]], ["М", ["Ӎ", "Ϻ", "Μ"]], ["Н", ["Ң", "Ҥ", "Ӈ", "Ӊ", "Ԋ", "Η"]], ["О", ["Ӧ", "Ο"]], ["П", ["Ԥ", "Π"]], ["Р", ["Ҏ", "Ρ", "Ⲣ"]], ["С", ["Ҫ", "Ҁ", "Ϲ"]], ["Т", ["Ҭ", "Ͳ", "Τ", "Ƭ", "Ț"]], ["У", ["Ӯ", "Ӱ", "Ӳ"]], ["Ф", ["Φ"]], ["Х", ["Ҳ", "Ӽ", "Ӿ", "Χ", "᙭", "Ⲭ"]], ["Ц", ["Ꚏ"]], ["Ч", ["Ҷ", "Ҹ", "Ӌ", "Ӵ"]], ["Ш", ["Ⲽ", "Ɯ"]], ["Щ", ["Ꚗ"]], ["Ъ", []], ["Ы", ["Ӹ"]], ["Ь", ["Ꙏ"]], ["Э", ["Ӭ"]], ["Ю", ["ꀒ", "ꆉ"]], ["Я", []], ["а", ["ӓ", "ӑ", "α", "ɑ"]], ["б", ["ҕ"]], ["в", ["β"]], ["г", ["ӷ", "ѓ", "ґ", "ғ", "ӻ"]], ["д", ["ꚉ", "ꚁ"]], ["е", ["ҽ", "ҿ", "ε"]], ["ж", ["җ", "ӝ"]], ["з", ["ҙ", "ѯ", "ӟ", "ӡ", "ȝ"]], ["и", ["ᴎ", "ͷ"]], ["й", ["ҋ", "ӣ"]], ["к", ["қ", "ќ", "ҡ", "κ"]], ["л", ["ӆ", "ԓ"]], ["м", ["ӎ", "ϻ"]], ["н", ["ң", "ҥ", "ӈ", "ӊ", "ԋ"]], ["о", ["ӧ", "ο"]], ["п", ["ԥ", "π"]], ["р", ["ҏ", "ρ", "ⲣ"]], ["с", ["ҫ", "ϲ"]], ["т", ["ҭ"]], ["у", ["ў", "ӳ"]], ["ф", ["ϕ", "ȹ"]], ["х", ["ҳ", "ӽ", "ӿ", "χ", "ⲭ"]], ["ц", ["ꚏ"]], ["ч", ["ҷ", "ҹ", "ӌ", "ӵ"]], ["ш", ["ⲽ", "ɯ"]], ["щ", ["ꚗ", "ꗌ"]], ["ъ", ["ꙏ","ᕹ"]], ["ы", ["ӹ"]], ["ь", ["Ⱃ"]], ["э", ["ӭ"]], ["ю", ["ꀒ", "ꆉ"]], ["я", ["ᴙ"]] ]; /* minimal: */ /* var letters = [ ["А", ["Α"]], ["Б", ["Ƃ"]], ["В", ["Β"]], ["Г", ["Γ"]], ["Д", ["Ꚉ", "Ꚁ"]], ["Е", ["Ε"]], ["Ж", ["Җ", "Ӂ"]], ["З", ["Ӡ", "Ȝ"]], ["И", ["Ͷ"]], ["Й", ["Ҋ"]], ["К", ["Κ"]], ["Л", ["Λ"]], ["М", ["Μ"]], ["Н", ["Η"]], ["О", ["Ο"]], ["П", ["Π"]], ["Р", ["Ρ"]], ["С", ["Ϲ"]], ["Т", ["Τ"]], ["У", ["Ӯ", "Ӱ", "Ӳ"]], ["Ф", ["Φ"]], ["Х", ["Χ"]], ["Ц", ["Ꚏ"]], ["Ч", ["Ҷ", "Ҹ", "Ӌ", "Ӵ"]], ["Ш", ["Ɯ"]], ["Щ", ["Ꚗ"]], ["Ъ", []], ["Ы", ["Ӹ"]], ["Ь", ["Ƅ", "Ꙏ"]], ["Э", ["Ӭ"]], ["Ю", ["ꀒ", "ꆉ"]], ["Я", []], ["а", ["α", "ɑ"]], ["б", ["ҕ", "ƃ"]], ["в", ["β"]], ["г", ["ӷ", "ґ"]], ["д", ["ꚉ", "ꚁ"]], ["е", ["ҽ"]], ["ж", ["җ", "ӝ"]], ["з", ["ӡ", "ȝ"]], ["и", ["ᴎ"]], ["й", ["ӣ"]], ["к", ["κ"]], ["л", ["ӆ", "ԓ"]], ["м", ["ӎ", "ϻ"]], ["н", ["ң", "ҥ", "ӊ", "ԋ"]], ["о", ["ο"]], ["п", ["π"]], ["р", ["ρ"]], ["с", ["ϲ"]], ["т", ["ҭ"]], ["у", ["ў", "ӳ"]], ["ф", ["ϕ", "ȹ"]], ["х", ["ҳ", "ӽ", "ӿ", "χ"]], ["ц", ["ꚏ"]], ["ч", ["ҷ", "ҹ", "ӌ", "ӵ"]], ["ш", ["ɯ"]], ["щ", ["ꚗ"]], ["ъ", ["ꙏ","ᕹ"]], ["ы", ["ӹ"]], ["ь", ["Ⱃ"]], ["э", ["ӭ"]], ["ю", ["ꀒ", "ꆉ"]], ["я", ["ᴙ"]] ]; */ var obscene_roots = [ "ху[ийеё]", "(на|по)х", "хрен", "хер", "хул[иеь]", "п[ие]д[ао]р", "п[иеё]зд", "бл", "[её]б", "жоп", "муд", "сра", "с[еёи]р", "с[оа]с", "член", "сса", "сик", "кук", "г[оа]вн", "убл", "манд", "фиг", "л[ао][хш]", "г[ао]нд", "елд", "залуп", "п[её]р[дн]*", "бзд", "дрист", "дер", "идио", "ан", "ваг", "др[юо]ч", "я[ий][цч]", "трах", "сн[ао]ш", "г[ао]м", "ге[ейи]", "дилд", "дод", "д[ао]лб", "су[кч]" ]; function findObscene(str) { var obsceneContains = false; for(var i = 0; !obsceneContains && i < obscene_roots.length; i++) { obsceneContains = str.match(new RegExp(obscene_roots[i])); } return obsceneContains; } function obfuscate(str) { for(var i = 0; i < letters.length; i++) { var lettersForReplace = letters[i][1]; var lettersForReplaceAmount = lettersForReplace.length; if(lettersForReplaceAmount > 0) { var replace_ = ""; if(lettersForReplaceAmount == 1){ replace_ = lettersForReplace[0]; } else { var indx_letter = Random_.getRandomInt(0, lettersForReplaceAmount - 1); replace_ = lettersForReplace[indx_letter]; } str = replaceAll(str, letters[i][0], replace_); } } return str; } function obfuscateObscene(str) { var new_str_ = str; var str_for_find = str.toLocaleLowerCase(); for(var i = 0; i < obscene_roots.length; i++) { finded_ = str_for_find.match(new RegExp(obscene_roots[i])); if(finded_ !== null) { for(var j = 0; j < finded_.length; j++) { new_str_ = new_str_.replace(finded_[j], obfuscate(finded_[j])); } } } return new_str_; } function actionWithSavePosition(chat_input, action) { var selectionStart_ = chat_input.selectionStart; var selectionEnd_ = chat_input.selectionEnd; action(); chat_input.setSelectionRange(selectionStart_, selectionEnd_); } function oninputObfuscateHandler() { function obfuscateRussianChat(){ russianChatInput.value = obfuscateObscene(russianChatInput.value); } actionWithSavePosition(russianChatInput, obfuscateRussianChat); } var chatLoadedChecker; var russianChatInput; function chatLoadedCheck() { var chats_inputs = document.querySelectorAll("textarea.chat_input"); russianChatInput = chats_inputs[2]; if(russianChatInput != undefined) { clearInterval(chatLoadedChecker); russianChatInput.oninput = oninputObfuscateHandler; } } function pageFullyLoaded_() { chatLoadedChecker = setInterval(chatLoadedCheck, 1000); }