您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Ignore users on Picarto.tv channel chats.
// ==UserScript== // @name Picarto.tv ignore // @namespace picarto.tv.ignore.stuff.dasprids.de // @description Ignore users on Picarto.tv channel chats. // @include https://picarto.tv/* // @version 3 // @grant none // ==/UserScript== try { var blockedUsers = JSON.parse(window.localStorage.getItem('blockedUsers')); } catch (e) { var blockedUsers = []; } // Handle ignores var checkMessage = function($node, username, hide) { // Normal messages if ($node.hasClass('um-' + username.toLowerCase())) { hide ? $node.hide() : $node.show(); return; } // Action messages if ($node.hasClass('messageli') && $node.find('img[title="' + username + '"]').length > 0) { hide ? $node.hide() : $node.show(); return; } // Whisper messages if ($node.hasClass('whisperli') && $node.find('span[title="whisper ' + username + '"]').length > 0) { hide ? $node.hide() : $node.show(); return; } } var hideIgnoredMessage = function(node) { var $node = window.jQuery(node); blockedUsers.forEach(function(username) { checkMessage($node, username, true); }); } var observer = new MutationObserver(function(mutations) { for (var i = 0; i < mutations.length; ++i) { for (var j = 0; j < mutations[i].addedNodes.length; ++j) { hideIgnoredMessage(mutations[i].addedNodes[j]); } } }); var targetNode = document.getElementById('msgs'); if (targetNode) { observer.observe(targetNode, { childList: true }); window.jQuery('#msgs > li').each(function() { hideIgnoredMessage(this); }); } // Handle toolbox var handleToolbox = function(node) { var $node = window.jQuery(node); if ($node.attr('id') !== 'toolsDiv') { return; } var username = $node.find('#toolsUsername').text(); var blocked = window.jQuery.inArray(username, blockedUsers) > -1; var button = window.jQuery('<button id="toolsIgnore" class="toolButtons"/>'); button.text(blocked ? 'Unblock' : 'Block'); $node.append(button); button.on('click', function() { if (blocked) { blockedUsers.splice(window.jQuery.inArray(username, blockedUsers), 1); button.text('Block'); } else { blockedUsers.push(username); button.text('Unblock'); } blocked = !blocked; window.jQuery('#msgs > li').each(function() { checkMessage($(this), username, blocked); }); window.localStorage.setItem('blockedUsers', JSON.stringify(blockedUsers)); }); } var observer = new MutationObserver(function(mutations) { for (var i = 0; i < mutations.length; ++i) { for (var j = 0; j < mutations[i].addedNodes.length; ++j) { handleToolbox(mutations[i].addedNodes[j]); } } }); var targetNode = document.getElementById('channel_chat'); if (targetNode) { observer.observe(targetNode, { childList: true }); }