您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Insta-mutes spammers temporarily
// ==UserScript== // @name AntiSpam *OLD* // @description Insta-mutes spammers temporarily // @include *://www.kongregate.com/games/*/* // @version 0.0.1.20171113053427 // @namespace https://greatest.deepsurf.us/users/32649 // ==/UserScript== var interval = setInterval(test, 1000); var holodeck, dialogue, chatWindow; var people = new Object(), mutes = new Object(), muteable = false; var whitelist = new Object(), pwhitelist = new Object(); var limit, time; loadFilter(); loadWhitelist(); function test() { if(unsafeWindow.holodeck && unsafeWindow.holodeck._chat_window._active_room) { clearInterval(interval); run(); } } function run() { holodeck = unsafeWindow.holodeck; chatWindow = holodeck._chat_window; chatWindow.e3ba407c69f1fb1d = chatWindow.joinedRoom; chatWindow.joinedRoom = function(room) { this.e3ba407c69f1fb1d(room); muteable = true; } chatWindow.a2b2274f4b0e0a7d = chatWindow.leftRoom; chatWindow.leftRoom = function(room) { muteable = false; this.a2b2274f4b0e0a7d(room); } chatWindow.c46229e5ce87be98 = chatWindow.receivedRoomMessage; chatWindow.receivedRoomMessage = function(event) { var sender = event.data.user.username; if(isMuted(sender)) return; this.c46229e5ce87be98(event); registerMessage(sender); } holodeck.da2eb29e335e589a = holodeck.receivedPrivateMessage; holodeck.receivedPrivateMessage = function(event) { var sender = event.data.from; if(isMuted(sender)) return; this.da2eb29e335e589a(event); registerMessage(sender); } unsafeWindow.antispam_unmute = function(user) { if(mutes[user]) { delete mutes[user]; tell(user+" has been unmuted."); } } holodeck.addChatCommand("sasf", sasf); holodeck.addChatCommand("dasm", dasm); holodeck.addChatCommand("dasw", dasw); holodeck.addChatCommand("aswu", aswu); holodeck.addChatCommand("ascw", ascw); setInterval(clearPeople, 900000); } function registerMessage(user) { if(!people[user]) people[user] = []; var currentTime = getTime(); people[user].push(currentTime); while(true) { if(people[user][0] && people[user][0]+time < currentTime) { people[user].shift(); } else { break; } } if(people[user].length >= limit) { if(whitelist[user]) return; tell(user+" has been muted. (<a href=\"javascript:antispam_unmute(\'"+user+"\');void(0);\">Cancel</a>)"); mutes[user] = true; } } function isMuted(user) { return (mutes[user] == true); } function loadFilter() { var stuff = GM_getValue("KongregateAntispamFilter", "4 3").split(" "); limit = parseInt(stuff[0]) time = parseInt(stuff[1])*1000; } function saveFilter() { try { GM_setValue("KongregateAntispamFilter", String(limit+" "+(time/1000))); } catch(e) { tell("Error: the filter has been temporary updated, but could not be saved."); } } function loadWhitelist() { var list = GM_getValue("KongregateAntispamFilterWhitelist", "").split("|"), i; for(i=0;i<list.length;i++) { pwhitelist[list[i]] = true; whitelist[list[i]] = true; } } function saveWhitelist() { try { var str = "", i; for(i in pwhitelist) str += i+"|"; if(str.length) str = str.substr(0,str.length-1); GM_setValue("KongregateAntispamFilterWhitelist", str); if(!str.length) GM_deleteValue("KongregateAntispamFilterWhitelist"); } catch(e) { tell("Error: the whitelist has been temoprary changed, but has not been saved."); } } function getDialogue() { return holodeck._chat_window._active_room._chat_dialogue; } function getTime() { return ((new Date()).getTime()); } function sasf(holodeck, input) { var usefulParts = /^\/sasf ([0-9]+) ([0-9]+)$/.exec(input); if(usefulParts) { limit = parseInt(usefulParts[1]); time = parseInt(usefulParts[2])*1000; tell("The filter has been updated."); setTimeout(saveFilter, 0); } else { tell("Incorrect filter syntax."); } return false; } function dasm(holodeck, input) { people = new Object(); mutes = new Object(); tell("List of mutes dropped."); return false; } function aswu(holodeck, input) { var usefulParts = /^\/aswu (.+?)(\([sp]\))?$/.exec(input); if(usefulParts) { var user = usefulParts[1]; var duration = usefulParts[2]; switch(duration) { case "(p)": pwhitelist[user] = true; setTimeout(saveWhitelist, 0); case "(s)": whitelist[user] = true; default: delete mutes[user]; } tell(user+" has been whitelisted."); } else { tell("Please define which user to whitelist."); } return false; } function ascw(holodeck, input) { var usefulParts = /^\/ascw (.+?)$/.exec(input); if(usefulParts) { var user = usefulParts[1]; delete whitelist[user]; delete pwhitelist[user]; setTimeout(saveWhitelist, 0); tell(user+" has been de-whitelisted."); } else { tell("Please define which user to de-whitelist."); } return false; } function dasw(holodeck, input) { whitelist = new Object(); pwhitelist = new Object(); setTimeout(saveWhitelist, 0); tell("Whitelist dropped."); return false; } function tell(message) { getDialogue().displayUnsanitizedMessage("Antispam", message, {"class":"whisper received_whisper"}, {"non_user":true}); } function clearPeople() { var currentTime = getTime(); for(var i in people) { if(currentTime-people[i][0] > 2*time) { delete people[i]; } } }