Greasy Fork

Greasy Fork is available in English.

Ctrl+X键阴阳人屏蔽器

在各大内容平台(默认支持知乎、微博和贴吧)展开评论区后,按下Ctrl+X键(或⌘+X键)屏蔽某些不友善言论。折叠评论区并再次打开以恢复原貌。

当前为 2022-07-26 提交的版本,查看 最新版本

// ==UserScript==
// @name         Ctrl+X键阴阳人屏蔽器
// @namespace    https://mr-metasequoia.github.io/tools/YYGQ/
// @version      0.7.2
// @description  在各大内容平台(默认支持知乎、微博和贴吧)展开评论区后,按下Ctrl+X键(或⌘+X键)屏蔽某些不友善言论。折叠评论区并再次打开以恢复原貌。
// @author       水杉metasequoia
// @match        *://*.zhihu.com/*
// @match        *://*.weibo.com/*
// @match        *://tieba.baidu.com/p/*
// @icon         https://s3.bmp.ovh/imgs/2022/07/23/b3927876e3d4ba39.png
// @grant        none
// @license      MPL
// ==/UserScript==

//支持正则表达式
var badword = ['全在美方','贏麻了','润','底层','孝子','奴','老爷','小鬼','键盘','杠精','热搜','拐零','尬黑','人性','小作文'
               ,'有没有可能|有没有这种可能|有没有这样一种可能','好似','哈{6,}']

//var badword = ['的|是']//'的|是'在汉语中出现频率很高,可以用作测试。

var where = ['CommentContent css-1ygdre8','wbpro-list','card-review s-ptb10','l_post j_l_post l_post_bright  ']//知乎,微博首页,微博搜索结果页,贴吧

//贴吧的改变状态
var changed = false

function findLen() {
    for(let i=0;i<where.length;i++)
        {
            if(document.getElementsByClassName(where[i]).length!=0)
            {
                let len = document.getElementsByClassName(where[i]).length
                switch(i)
                {
                    case 0:
                        return [len,"知乎"]
                        break
                    case 1:
                        return [len,"微博首页"]
                        break
                    case 2:
                        return [len,"微博搜索结果页"]
                        break
                    case 3:
                        return [len,"贴吧"]
                        break
                }
            }
        }
    return [0,"未知"]
}

(function() {

    document.addEventListener('keydown',e=>{

        //var key = e.key;
        const { ctrlKey , metaKey, key } = e;

        //comment和len放里面,是为了每次监听新的值
        //这里的几个comment主要为了让后面代码简短一点。
        var zhihuComment = document.getElementsByClassName("CommentContent css-1ygdre8")
        var weibo1Comment = document.getElementsByClassName("wbpro-list")//微博首页,这个div包括了评论的次级评论
        var weibo2Comment = document.getElementsByClassName("card-review s-ptb10")//微博搜索结果页
        var tiebaComment = document.getElementsByClassName("l_post j_l_post l_post_bright  ")

        var len=findLen()[0]
        var loc=findLen()[1]

        if( ctrlKey || metaKey )//按下Ctrl键+X,或mac系统的⌘键+X
        {
            if(key === 'x')//x的意思是抽象手势“哒咩!”,好按并避免和知乎微博的快捷键冲突。
            {
                console.log(loc+"评论数量:"+len)

                if(loc=="贴吧")//贴吧的评论区不是生成的,需要整页恢复(刷新)——即需要单独考虑其逻辑。
                {
                    if(!changed)
                    {
                        for(let i=0;i<len;i++)
                        {
                            for(let j=0;j<badword.length;j++)
                            {
                                let bad = new RegExp(badword[j],'g');//本次循环得到的badword
                                if((parseInt(tiebaComment[i].innerHTML.split("?").length) - 1)>3)
                                {
                                    document.getElementsByClassName("l_post j_l_post l_post_bright  ")[i].innerHTML = "「急急國王の碎念」"
                                }else
                                {
                                    document.getElementsByClassName("l_post j_l_post l_post_bright  ")[i].innerHTML = tiebaComment[i].innerHTML.replace(bad,'🌳')
                                }
                            }
                        }
                        changed = true
                        console.log("after changed:"+changed)
                    }
                    else
                    {
                        location.reload();
                    }
                }
                //贴吧以外其他平台的逻辑
                else
                {
                    for(let i=0;i<len;i++)
                    {
                        for(let j=0;j<badword.length;j++)
                        {
                            //这里可以再加一个循环,即判断场景。
                            let bad = new RegExp(badword[j],'g');
                            if(loc=="知乎")
                            {
                                if(zhihuComment[i].innerHTML.indexOf("<img src=\"https://pic2.zhimg.com/v2-3846906ea3ded1fabbf1a98c891527fb.png\" class=\"sticker\">") != -1)
                                {
                                    document.getElementsByClassName("CommentContent css-1ygdre8")[i].innerHTML = "「阴阳人の怪話」"
                                }else if((parseInt(zhihuComment[i].innerHTML.split("?").length) - 1)>3)//一个评论中使用超过3个问号
                                {
                                    document.getElementsByClassName("CommentContent css-1ygdre8")[i].innerHTML = "「急急國王の碎念」"
                                }
                                else
                                {
                                    document.getElementsByClassName("CommentContent css-1ygdre8")[i].innerHTML = zhihuComment[i].innerHTML.replace(bad,'🌳')
                                }
                            }
                            else if(loc=="微博首页")
                            {
                                if((parseInt(weibo1Comment[i].innerHTML.split("?").length) - 1)>3)
                                {
                                    document.getElementsByClassName("wbpro-list")[i].innerHTML = "「急急國王の碎念」"
                                }else
                                {
                                    document.getElementsByClassName("wbpro-list")[i].innerHTML = weibo1Comment[i].innerHTML.replace(bad,'🌳')
                                }
                            }
                            else if(loc=="微博搜索结果页")
                            {
                                if((parseInt(weibo2Comment[i].innerHTML.split("?").length) - 1)>3)
                                {
                                    document.getElementsByClassName("card-review s-ptb10")[i].innerHTML = "「急急國王の碎念」"
                                }else
                                {
                                    document.getElementsByClassName("card-review s-ptb10")[i].innerHTML = weibo2Comment[i].innerHTML.replace(bad,'🌳')
                                }
                            }
                            else
                            {
                                console.log("暂不支持的平台")
                            }
                        }
                    }
                }

            }
        }

    })

})();

//我知道这代码质量很差,但闭上眼睛当作黑盒来使用的话——其实也还彳亍吧?