// ==UserScript== // @name Civilized Twitch Chat // @description Turns the Twitch chat into a civilized chat room by removing spam, all caps messages, repeated phrases, repeated messages, banned messages, repeated letters and more. // @version 0.2.1 // @author Sewil // @match *://*.twitch.tv/* // @require http://code.jquery.com/jquery-latest.min.js // @namespace https://greasyfork.org/users/14470 // @downloadURL https://update.greasyfork.icu/scripts/17941/Civilized%20Twitch%20Chat.user.js // @updateURL https://update.greasyfork.icu/scripts/17941/Civilized%20Twitch%20Chat.meta.js // ==/UserScript== /* * arrive.js * v2.2.0 * https://github.com/uzairfarooq/arrive * MIT licensed * * Copyright (c) 2014-2015 Uzair Farooq */ (function(n,q,v){function r(a,b,c){if(e.matchesSelector(a,b.selector)&&(a._id===v&&(a._id=w++),-1==b.firedElems.indexOf(a._id))){if(b.options.onceOnly)if(0===b.firedElems.length)b.me.unbindEventWithSelectorAndCallback.call(b.target,b.selector,b.callback);else return;b.firedElems.push(a._id);c.push({callback:b.callback,elem:a})}}function p(a,b,c){for(var d=0,f;f=a[d];d++)r(f,b,c),0 -1) { return true; } } return false; } function bannedMessage(str) { for(var i = 0; i < bannedMessages.length; i++) { var message = bannedMessages[i]; if(str == message.toLowerCase()) { return true; } } return false; } function repeatedMessage(str) { if(str.length >= r9koffset) { var lowerStr = str.toLowerCase(); if(messages[lowerStr] === undefined) { messages[lowerStr] = 1; } var timeNow = new Date().getTime(); var notRepeated = messages[lowerStr] < r9klimit; var cooledDown = r9kcooldown < timeNow - messages[lowerStr]; if(notRepeated || cooledDown) { if(notRepeated) { messages[lowerStr]++; if(messages[lowerStr] == r9klimit) { messages[lowerStr] = timeNow; } } else { messages[lowerStr] = 1; } } else { return true; } } return false; } function repeatedPhrases(str) { var phrases = str.split(" "); var arr = {}; for(var i = 0; i < phrases.length; i++) { var lowerPhrase = phrases[i].toLowerCase(); if(lowerPhrase.length >= repeatedPhrasesOffset) { if(arr[lowerPhrase] === undefined) { arr[lowerPhrase] = 1; } else if(arr[lowerPhrase] < repeatedPhrasesLimit) { arr[lowerPhrase]++; } else { return true; } } } return false; } function repeatedLetters(str) { var pattern = "(.)"; for(var i = 1; i < repeatedLettersLimit;i++) { pattern += "\\1"; } var patt = new RegExp(pattern); return patt.test(str); } function allCaps(str) { var caps = str.replace(/[^A-Z]/g, "").length; var percentage = caps / str.length; return str.length >= capsOffset && percentage >= capsLimit; } function removeEmoticons($message) { var $emoticons = $message.find('img'); $.each($emoticons, function() { var alt = decodeURIComponent($(this).attr('alt')); var dr = decodeURIComponent($(this).attr('data-regex')); if(allowedEmoticons[alt] !== true && allowedEmoticons[dr] !== true) { $(this).remove(); } }); }