水源低质量发帖过滤器

从水源主页直接屏蔽常见类型的低质量发帖,如垃圾标题、戾气帖子等。误伤概率高,宁杀一千原则,请谨慎使用。

目前为 2023-11-25 提交的版本。查看 最新版本

// ==UserScript==
// @name         水源低质量发帖过滤器
// @license      MIT
// @namespace    https://gf.qytechs.cn/
// @version      1.1
// @description  从水源主页直接屏蔽常见类型的低质量发帖,如垃圾标题、戾气帖子等。误伤概率高,宁杀一千原则,请谨慎使用。
// @match        https://shuiyuan.sjtu.edu.cn/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    var removeMode;
    var keywords = ["😅"];
    var whitelistWords = ["投喂"];//最高优先级:有白名单总会不屏蔽
    var biaotidangList = ["!", ":", ",", "禁", "官", "竟"];

    // 创建文字元素
    var blockTextInfo = ";\)";
    var blocktext = document.createElement('div');
    blocktext.innerText = blockTextInfo;
    blocktext.style.height = '100%';
    blocktext.style.display = 'flex';
    blocktext.style.alignItems = 'center';
    blocktext.style.justifyContent = 'center';
    blocktext.style.padding = '0 10px';
    blocktext.classList.add('block-number-text');

    function deviceCheck(){
        //移动端设备采用无感屏蔽存在无法无限加载的问题
        var htmlElement = document.documentElement;
        return htmlElement.classList.contains('mobile-view');
    }

    removeMode = !deviceCheck();//移动端不启用移除模式,而是使用隐藏模式,保留控件占位

    function block(subject){
        if(removeMode){
            subject.remove();
        }
        else{
            subject.style.visibility = 'hidden';
        }
    }

    // 查找目标位置并添加按钮
    function addTextToContainer(num) {
        if(num == 0){
            blockTextInfo = ";\)";
        }
        else{
            blockTextInfo = "x: "+num;
        }
        var container = document.getElementById('navigation-bar');
        if(container){
            var existingBlockText = container.querySelector('.block-number-text');
            if(existingBlockText){
                existingBlockText.innerText = blockTextInfo;
            }
            else{
                var firstChild = container.firstElementChild;
                container.insertBefore(blocktext, firstChild);
            }
        }
    }

    var counter = 0;//屏蔽计数器
    setInterval(function() {

    // 获取所有需要检测的元素
    var elements = document.querySelectorAll('a[role="heading"]');
    console.log('元素数量:', elements.length);

    // 字数少于5个的,删
    for (var i = 0; i < elements.length; i++) {
        var element = elements[i];
        var textContent = element.innerText.trim();
        var containsWhitelistWord = false;
        for (var j = 0; j < whitelistWords.length; j++) {
            if (textContent.includes(whitelistWords[j])) {
                containsWhitelistWord = true;
                console.log('白名单检测:', textContent, ' ', whitelistWords[j]);
                break;
            }
        }

        // 如果文本内容少于等于六个字,则隐藏其母控件的母控件的母控件
        if (textContent.length <= 6 && !containsWhitelistWord) {
            console.log('移除:', textContent);
            var parentElement = element.parentElement;
            if (parentElement && parentElement.parentElement && parentElement.parentElement.parentElement) {
                //parentElement.parentElement.parentElement.style.display = 'none';
                //parentElement.parentElement.parentElement.style.height = '0';
                //parentElement.parentElement.parentElement.style.visibility = 'hidden';
                //parentElement.parentElement.parentElement.style.opacity = '0';
                //parentElement.parentElement.parentElement.remove();
                block(parentElement.parentElement.parentElement);
                counter++;
            }
        }
    }

    // 标题含关键词的
    for (i = 0; i < elements.length; i++) {
        element = elements[i];
        textContent = element.innerText.trim();
        containsWhitelistWord = false;
        for (j = 0; j < whitelistWords.length; j++) {
            if (textContent.includes(whitelistWords[j])) {
                containsWhitelistWord = true;
                console.log('白名单检测:', textContent, ' ', whitelistWords[j]);
                break;
            }
        }

        // 检查文本是否包含关键词
        var containsKeyword = false;
        for (j = 0; j < keywords.length; j++) {
            if (textContent.includes(keywords[j])) {
                containsKeyword = true;
                console.log('关键词检测:', textContent, ' ', keywords[j]);
                break;
            }
        }
        if (containsKeyword && !containsWhitelistWord) {
            console.log('移除:', textContent);
            parentElement = element.parentElement;
            if (parentElement && parentElement.parentElement && parentElement.parentElement.parentElement) {
                //parentElement.parentElement.parentElement.style.display = 'none';
                //parentElement.parentElement.parentElement.style.height = '0';
                //parentElement.parentElement.parentElement.style.visibility = 'hidden';
                //parentElement.parentElement.parentElement.style.opacity = '0';
                //parentElement.parentElement.parentElement.remove();
                block(parentElement.parentElement.parentElement);
                counter++;
            }
        }
    }

    // 标题党专项屏蔽:逻辑为,12个字符以内,含有2个敏感字符(!:,禁官竟)
    for (i = 0; i < elements.length; i++) {
        element = elements[i];
        textContent = element.innerText.trim();
        containsWhitelistWord = false;
        for (j = 0; j < whitelistWords.length; j++) {
            if (textContent.includes(whitelistWords[j])) {
                containsWhitelistWord = true;
                console.log('白名单检测:', textContent, ' ', whitelistWords[j]);
                break;
            }
        }

        // 检查文本是否包含关键词
        var BiaotidangIndex = 0;
        for (j = 0; j < biaotidangList.length; j++) {
            if (textContent.includes(biaotidangList[j])) {
                BiaotidangIndex++;
            }
        }
        if (BiaotidangIndex>=2 && textContent.length <= 12 && !containsWhitelistWord) {
            console.log('移除:', textContent);
            parentElement = element.parentElement;
            if (parentElement && parentElement.parentElement && parentElement.parentElement.parentElement) {
                //parentElement.parentElement.parentElement.style.display = 'none';
                //parentElement.parentElement.parentElement.style.height = '0';
                //parentElement.parentElement.parentElement.style.visibility = 'hidden';
                //parentElement.parentElement.parentElement.style.opacity = '0';
                //parentElement.parentElement.parentElement.remove();
                block(parentElement.parentElement.parentElement);
                counter++;
            }
        }
    }

    //显示屏蔽数量
        addTextToContainer(counter);

    }, 500);
})();

QingJ © 2025

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