NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Robin Enhancement Suite // @namespace com.pta2002.robines // @description Enhances robin // @include https://www.reddit.com/robin // @include http://www.reddit.com/robin // @include https://reddit.com/robin // @include http://reddit.com/robin // @include https://www.reddit.com/robin/ // @include http://www.reddit.com/robin/ // @include https://reddit.com/robin/ // @include http://reddit.com/robin/ // @version 1.4.4 // @grant none // ==/UserScript== var l = document.createElement('script'); l.src = "https://cdnjs.cloudflare.com/ajax/libs/jQuery-linkify/1.1.7/jquery.linkify.min.js"; document.getElementsByTagName('body')[0].appendChild(l); // CSS setup $('head').append('<style>\ .robin--user-class--self {\ background: #eee;\ }\ .robin--user-class.self .robin--username {font-weight: bold !important;}\ .robin--user-class--self.robin--flair-class--flair-0 .robin--username {\ color: #e50000 !important;}\ .robin--user-class--self.robin--flair-class--flair-1 .robin--username {\ color: #db8e00 !important;}\ .robin--user-class--self.robin--flair-class--flair-2 .robin--username {\ color: #ccc100 !important;}\ .robin--user-class--self.robin--flair-class--flair-3 .robin--username {\ color: #02be01 !important;}\ .robin--user-class--self.robin--flair-class--flair-4 .robin--username {\ color: #0083c7 !important;}\ .robin--user-class--self.robin--flair-class--flair-5 .robin--username {\ color: #820080 !important;}\ '); function sendMessage(message){ $("#robinSendMessage > input[type='text']").val(message); $("#robinSendMessage > input[type='submit']").click(); } username = $('.user a:first').text(); $('#robinVoteWidget').prepend($('<div id="RESUserCount" class="robin-chat--vote" style="width: 100%;">').text("Current participants: ")); settingsPage = $('<div class="robin-chat--sidebar" style="display:none;" id="RESSettings">'); settingsWidget = $('<div class="robin-chat--sidebar-widget robin-chat--vote-widget" id="RESSettingsWidget">'); settingsPage.append(settingsWidget); openSettingsButton = $('<div id="RESOpenSettings" class="robin-chat--vote" style="cursor: pointer">').text('Open settings'); closeSettingsButton = $('<div id="RESCloseSettings" class="robin-chat--vote" style="cursor: pointer">').text('Close settings'); function openSettings() { $('.robin-chat--sidebar').hide(); $('#RESSettings').show(); } function closeSettings() { $('.robin-chat--sidebar').show(); $('#RESSettings').hide(); } openSettingsButton.on('click', openSettings); closeSettingsButton.on('click', closeSettings); settingsWidget.append(closeSettingsButton); curTime = $('<div class="robin-chat--vote" id="RESTimeLeft" style="width: 100%;">') $('#robinVoteWidget').prepend(curTime); // SETTINGS SETUP function saveSetting(setting) { localStorage["res-settings"] = JSON.stringify(setting); } function loadSetting() { var setting = localStorage["res-settings"]; if (setting) { setting = JSON.parse(setting); } else { setting = {}; } return setting; } var settings = loadSetting(); function addBoolSetting(name, description, defaultSetting) { defaultSetting = settings[name] || defaultSetting; settingsWidget.append('<div class="robin-chat--sidebar-widget robin-chat--notification-widget"><label><input type="checkbox" name="setting-' + name + '">' + description + '</label></div>'); $("input[name='setting-" + name + "']").on("click", function() { settings[name] = !settings[name]; saveSetting(settings); }); if (settings[name] !== undefined) { $("input[name='setting-" + name + "']").prop("checked", settings[name]); } else { settings[name] = defaultSetting; } } function addButtonSetting(description, action) { button = $('<div class="robin-chat--sidebar-widget robin-chat--vote-widget">'); button.append($('<div class="robin-chat--vote" style="width: 100%; cursor: pointer;">').text(description)); button.on("click", action); settingsWidget.append(button); } $('.robin-chat--sidebar').before(settingsPage); $('#robinVoteWidget').append(openSettingsButton); addBoolSetting("spamFilter", "Enable spam filter", true); addBoolSetting("autoGrow", "Auto click grow", false); setInterval(function(){ $('.robin-message--message').linkify(); $('.robin-message--message:contains(' + username + ')').parent().css({'background': '#9DF595', 'font-weight': 'bold'}) var users = 0; $.get("/robin/", function(a) { var start = "{" + a.substring(a.indexOf("\"robin_user_list\": [")); var end = start.substring(0, start.indexOf("}]") + 2) + "}"; list = JSON.parse(end).robin_user_list; var increaseCount = list.filter(function(voter) { return voter.vote === "INCREASE"; }).length; var abandonCount = list.filter(function(voter) { return voter.vote === "ABANDON"; }).length; var novoteCount = list.filter(function(voter) { return voter.vote === "NOVOTE"; }).length; var continueCount = list.filter(function(voter) { return voter.vote === "CONTINUE"; }).length; $('#robinVoteWidget .robin--vote-class--increase .robin-chat--vote-label').html('grow<br>(' + increaseCount + ')'); $('#robinVoteWidget .robin--vote-class--abandon .robin-chat--vote-label').html('abandon<br>(' + abandonCount + ')'); $('#robinVoteWidget .robin--vote-class--continue .robin-chat--vote-label').html('stay<br>(' + continueCount + ')'); users = list.length; $("#RESUserCount").text("Current participants: " + users); }); var lastChatString = $(".robin-message--timestamp").last().attr("datetime"); var timeSinceLastChat = new Date() - (new Date(lastChatString)); var now = new Date(); if (timeSinceLastChat !== undefined && (timeSinceLastChat > 60000 && now - timeStarted > 60000)) { window.location.reload(); // reload if we haven't seen any activity in a minute. } timeLeftU = r.config.robin_room_reap_time-(new Date).getTime(); if (timeLeftU > 0) { timeLeft = new Date(timeLeftU); curTime.text("Time left: " + timeLeft.getMinutes() + ':' + timeLeft.getSeconds()); }else { curTime.text("Ending soon"); } // SPAM FILTER - FROM ROBIN-GROW if (loadSettings().spamFilter) { function hashString(str) { var hash = 0; if (str != 0) { for (i = 0; i < str.length; i++) { char = str.charCodeAt(i); if (str.charCodeAt(i) > 0x40) { // Let's try to not include the number in the hash in order to filter bots hash = ((hash << 5) - hash) + char; hash = hash & hash; // Convert to 32bit integer } } } return hash; } // Searches through all messages to find and hide spam var spamCounts = {}; function findAndHideSpam() { var $messages = $(".robin-message"); var maxprune = parseInt("1000", 10); if (maxprune < 10 || isNaN(maxprune)) { maxprune = 1000; } if ($messages.length > maxprune) { $messages.slice(0, $messages.length - maxprune).remove(); } if (loadSettings().spamFilter) { // skips over ones that have been hidden during this run of the loop $('.robin--user-class--user .robin-message--message:not(.addon--hide)').each(function() { var $this = $(this); var hash = hashString($this.text()); var user = $('.robin-message--from', $this.closest('.robin-message')).text(); if (!(user in spamCounts)) { spamCounts[user] = {}; } if (hash in spamCounts[user]) { spamCounts[user][hash].count++; spamCounts[user][hash].elements.push(this); } else { spamCounts[user][hash] = { count: 1, text: $this.text(), elements: [this] }; } $this = null; }); $.each(spamCounts, function(user, messages) { $.each(messages, function(hash, message) { if (message.count >= 3) { $.each(message.elements, function(index, element) { //console.log("SPAM REMOVE: "+$(element).closest('.robin-message').text()) $(element).closest('.robin-message').addClass('addon--hide').remove(); }); } else { message.count = 0; } message.elements = []; }); }); } } } }, 100); setTimeout(function() { if (loadSetting().autoGrow) { $(".robin-chat--vote.robin--vote-class--increase:not('.robin--active')").click(); } }, 3000); var muted=[]; addButtonSetting("Clear muted list", function() {muted=[];}); setInterval(function(){ $('.robin-message--from.robin--username').css('cursor', 'pointer').attr('alt', 'Click to block this user'); $('.robin-message--from.robin--username').click(function(){ if ($(this).text() != username) muted.push($(this).text());}); $.each(muted,function(i,v){$('.robin--username:contains('+v+')').parent().remove();});} ,100); $("#robinDesktopNotifier").detach().appendTo("#RESSettingsWidget"); $('.robin-chat--report').detach().appendTo(settingsWidget);