bili_rebuild

b站评论过滤器

// ==UserScript==
// @name bili_rebuild
// @description b站评论过滤器
// @license MIT
// @namespace dreamcenter
// @version 2.0.0.2
// @match *://*.bilibili.com/video/*
// @match *://*.bilibili.com/opus/*
// @match *://space.bilibili.com/*/dynamic
// @grant GM_xmlhttpRequest
// ==/UserScript==


/*******************************下方内容可以修改***************************************/
let banMap = [
    'test','随机','恶心','病','纯','ch','CH','op','策划'
];


/*******************************下方内容不要修改***************************************/

function judgeIfBanned(raw) {
    for(var key of banMap) {
        if (raw.includes(key)) return true;
    }
    return false;
}

(function() {
    'use strict';
    window.onload=function(){

        var startMark = false

        setInterval(function(){
            // 判断是否可以开始执行核心程序
            if (startMark){
                runCore();
            } else {
                // 判断节点是否渲染完毕
                startMark = document.querySelector("bili-comments") != null
            }
        },100)
    }



    function runCore (){
        // 获取整楼评论
        var reviews = document.querySelector("bili-comments").shadowRoot.querySelectorAll("#feed > bili-comment-thread-renderer");
        for(var review of reviews){
            // 判断该元素是否为null(可能元素还没渲染出来)

            // 检查楼主评论是否过滤过,过滤则不再计算
            if (review.getAttribute('filtered') == null){
                // 获取楼主评论
                var comment = review.shadowRoot.querySelector('#comment')
                // 获取楼主评论内容
                var commentText = comment.shadowRoot.querySelector("#content > bili-rich-text").shadowRoot.querySelector("#contents").innerHTML;
                // 状态设置成已经过滤判断过
                review.setAttribute('filtered',true)
                // 过滤判断
                if(judgeIfBanned(commentText)) {
                    review.style.display = "none";
                }
            }

            // 获取回复评论集
            var replies = review.shadowRoot.querySelector("#replies > bili-comment-replies-renderer").shadowRoot.querySelectorAll("#expander-contents > bili-comment-reply-renderer:not([filtered])")
            for(var reply of replies) {
                // 获取回复评论内容
                var replyCommentText = reply.shadowRoot.querySelector("#main > bili-rich-text").shadowRoot.querySelector("#contents").innerHTML;
                // 状态设置成已经过滤判断过
                reply.setAttribute('filtered',true)
                // 过滤判断
                if(judgeIfBanned(replyCommentText)) {
                    reply.style.display = "none";
                }
            }
        }
    }

})();