【聊天室危险消息屏蔽】

屏蔽含有\rule(latex支持的一种代码,会产生大小几乎不受限的长方形页面元素)的危险消息。你也可以自定义屏蔽内容(使用正则表达式)。现在还可以屏蔽敏感词并用【已屏蔽】代替。

当前为 2022-08-21 提交的版本,查看 最新版本

// ==UserScript==
// @name         【聊天室危险消息屏蔽】
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  屏蔽含有\rule(latex支持的一种代码,会产生大小几乎不受限的长方形页面元素)的危险消息。你也可以自定义屏蔽内容(使用正则表达式)。现在还可以屏蔽敏感词并用【已屏蔽】代替。
// @author       firetree
// @match        https://crosst.chat/?*
// @match        https://hack.chat/?*
// @match        https://xq.kzw.ink/?*
// @match        https://chat.thz.cool/?*
// @icon         none
// @grant        GM_setValue
// @grant        GM_getValue
// @license      WTFPL
// ==/UserScript==

(function() {
    'use strict';

    function filter_msg() {//遍历所有消息并进行屏蔽
        var msg_divs
        var regex_str = GM_getValue('chatroom_regex')
        var regex = new RegExp(regex_str)
        msg_divs = Array.from(document.querySelectorAll('div.message'))//获取class为msg的div元素
        if (msg_divs != undefined && msg_divs != [])
        {
            for (var i=0;i<msg_divs.length;i++)
            {
                var div,msg
                div = msg_divs[i]
                msg = div.innerHTML
                if (regex.test(msg) && div.style.display != 'none')//屏蔽的内容为rule,已经屏蔽过的不再次处理
                {
                    div.style.display = 'none'
                    console.log('[危险消息屏蔽] 已屏蔽危险消息:')//由于rule刷屏常常频率极高,因此不适合仅仅改变文本,只能将元素完全隐藏,在控制台将原文留档。
                    console.log(div)
                }
            }
        }
    }

    function set_regex() {
        console.log()
        let regex_str = prompt('输入正则表达式(不含左右斜杠):',GM_getValue('chatroom_regex'))//这里是prompt的输入,不需要转义,输入两个斜杠就是两个斜杠
        GM_setValue('chatroom_regex',regex_str)
    }

    var settings = document.getElementById('sidebar-content')
    var p = document.createElement('p')
    var btn = document.createElement('button')
    btn.onclick = set_regex
    var text = document.createTextNode('设置危险消息正则表达式')
    btn.appendChild(text)
    p.appendChild(btn)
    settings.innerHTML += '<hr><h4>危险消息屏蔽设置</h4>'
    settings.appendChild(p)
    //
    if (!GM_getValue('chatroom_regex')) {
        let a = GM_getValue('chatroom_regex')
        let regex_str = '\\rule'.replace(/\\/g,'\\\\')//这里需要使得双引号里的两个斜杠变成的字面量里的一个斜杠再变成两个斜杠,以在正则表达式里匹配一个斜杠。
        GM_setValue('chatroom_regex',regex_str)
        console.log(`发现正则表达式为缺失值${a},已设为默认值${regex_str}`)
    }

    var observer = new MutationObserver(filter_msg);//设置聊天室内有新消息后所执行的函数为filter_msg
    const messages = document.getElementById('messages')//获取messages元素
    const config = {childList: true}//配置观察器观察子节点变化
    observer.observe(messages,config)//开始观察
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址