Greasy Fork

来自缓存

Greasy Fork is available in English.

仙家军成分查询Helper

用于标记仙家军和动态转发仙以及使用仙话术的b站用户。可能存在误伤,请注意辨别。脚本改自【糊狸-B站成分查询Helper】

当前为 2023-06-22 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         仙家军成分查询Helper
// @namespace    www.bilibili.com
// @version      1.1.1.1
// @description  用于标记仙家军和动态转发仙以及使用仙话术的b站用户。可能存在误伤,请注意辨别。脚本改自【糊狸-B站成分查询Helper】
// @author       Darknights
// @match        https://*.bilibili.com/*
// @icon         https://static.hdslb.com/images/favicon.ico
// @connect      bilibili.com
// @grant        GM_xmlhttpRequest
// @license MIT
// @run-at document-end
// ==/UserScript==


(function () {
    'use strict';

    /* 配置区 */
    const config = {
        times: 2500, // 标签处理间隔时间 单位:ms
        testLog: false // 是否开启调试日志
    }
    // 显示标签配置在👇面

    const xianList = ['2626308', '91294717', '691660481', '594265974', '1399233488', '201128149', '492233743', '1384853937', '193242084', '59212436', '1547943832', '355829734', '439010078', '3493110134868545', '289739171', '455857213', '559989730', '252864981', '595397699', '1825148722', '300313419', '2142529765', '333755368', '372672537', '366752296', '628918703', '359762403', '449254922', '27748754', '1397451482', '435429250', '293497224', '87355702', '1080954745', '1005732624', '353381701', '3493146415598203', '36832623', '298253160', '3493109944027757', '1459252016', '626718713', '3493128606583732', '1413259326', '3493108211780104', '288608355', '398268451', '527079387', '1705910990', '2072727585', '19227977', '8118856710', '1986311121', '273627979', '322540587', '3493264994863124', '1436392582', '3493122713586530', '503354352', '3493267740035490', '3461576510147287', '643362376', '55417546', '3493282594163167', '20617055', '3461564359248624', '388317005', '2029973237', '543283877', '599439268', '937235', '511355405', '37660844', '511355405', '524480956', '375074321', '87296302', '44952669', '172725229', '1369696284', '389007', '589755766', '4947574', '394067676', '499866803', '35612911', '10453721', '3493295195949740', '1134025725', '1350039692', '442716028', '1044725703', '36579529', '1677221329', '5765492', '1691881192', '86520669', , '525706751', '442716028', '353839591', '10453721', '1113890768', '3461574566086858', '111339218', '1531330351', '662110818', '3461574433966081', '1770158437', '646116461', '193242084', '2112612559', '3494349983714230', '3493080227383503', '626139499', '408443934', '503777492', '490811664', '3493120108923438', '1861056960', '161537754', '355829734', '3493260081236751', '3493123518892834', '3493281459604332', '1055982250', '97156738', '549164139', '572103170', '19767091', '17426743', '26144732', '3493104510306572', '20668227', '310739216', '38134752', '2086415808', '24370011', '227711', '341345864', '131686171', '1215911548', '518890959', '361110695', '343483727', '22356679', '1500447686', '382322597', '1652444369', '1379468139', '700334419', '1920077601', '629636812', '342625887', '1999783629', '1521899960', '1250227139', '1035834480', '515953856', '1269661366', '1580057', '342504730', '492886360', '518890959', '322003546', '402337847', '509967955', '545157646', '46700199', '393185198', '330060938', '1773068006', '3493292132010608', '2049417456', '3493110134868545', '421415625', '1901385718', '1299712856', '184834562', '323316289', '592098805', '3493130307373585', '3493283921660585', '497749570', '38669319', '1886920878', '3493128552057316', '158409499', '592716471', '41500446', '259073912', '12763949', '244195965', '539194895', '3493258432874938', '185340617', '3494352779217234', '522203755', '327726586', '1727271882', '36487502', '338875111', '3493257564654426', '1920025624', '2139759349', '524487767', '544543545', '1924967026', '179842197', '1420029844', '442412268', '102046074', '495136626', '407011914', '36451416', '1790581737', '1297044734', '511375871', '454444045', '44118648', '108124076', '1025261779', '238768745', '454549461', '188592371', '495962652', '396474607', '89156315', '11485934', '1515887582', '95185631', '431370017'];

    const xianWordList = ['3412', '枘凿六合', '买量仙人', '手磨', '塞翁', '[笑哭][响指]', '仙家军', '仙不灭', '散去吧', '不是好惹的', '周处', '粥÷', '皱皮', '利刃', '原婴', '镍币人', '仙驱', '@全自动', '百分百参团', '鹰游社', '霜星高尔夫', '霜星碎片', '四字游戏', '美洲大蠊', '蟑螂巧克力', '半壁江山', '硬核不媚宅', '龙门开盒', '猴站', '烂穿地心', '(((()', '()()()()', '屠夫钩子'];

    const xianTag = ["<目标:仙>", "#11DD77"];

    const xianSmellTag = ["<环境:转发仙>", "#1E971E"];

    const xianWordTag = ["<环境:仙语>", "#04AEAB"];


    /* Functions */
    const getUid = function (htmlEntity) {
        if (isNew()) {
            return htmlEntity.dataset['userId'];
        } else {
            return htmlEntity.children[0]['href'].replace(/[^\d]/g, "");
        }
    }

    const getCommentList = function () {
        if (isNew()) {
            let lst = new Set();
            for (let c of document.getElementsByClassName('user-name')) {
                lst.add(c);
            }
            for (let c of document.getElementsByClassName('sub-user-name')) {
                lst.add(c);
            }
            return lst;
        } else {
            return document.getElementsByClassName('user');
        }
    }

    const log = function (message) {
        return config.testLog ? console.log(message) : null;
    };

    const spawnHtml = function (data) {
        return `<b style='color: ${data[1]}' >${data[0]}</b>`
    }

    const smell = function (items) {
        var flag = false;
        for (var i = 0; i < items.length; i++) {
            var item = items[i];
            for (var key in item) {
                if (key == 'orig') {
                    var did = String(item.orig.modules.module_author.mid);
                    if (xianList.indexOf(did) > -1) {
                        log('>>>>repost:' + did);
                        flag = true;
                        break;
                    }
                }
            }
            if (flag == true) break;
        }
        return flag;
    }

    const hear = function (text) {
        for (var word of xianWordList) {
            if (text.indexOf(word) > -1) {
                log('>>>>post:' + word);
                return true;
            }
        }
    }

    const hearWord = function (items) {
        var flag = false;
        for (var i = 0; i < items.length; i++) {
            var item = items[i];
            if (item.modules.module_dynamic.desc != null) {
                var ownText = item.modules.module_dynamic.desc.text;
                if (hear(ownText)) {
                    flag = true;
                }
            }
            for (var key in item) {
                if (key == 'orig' && item.orig.modules.module_dynamic.desc != null) {
                    var origText = item.orig.modules.module_dynamic.desc.text;
                    if (hear(origText)) {
                        flag = true;
                        break;
                    }
                }
            }
            if (flag == true) break;
        }
        return flag;
    }

    const blog = 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space?&host_mid=';
    // 检测是不是新版
    const isNew = function () {
        if (document.getElementsByClassName('item goback').length != 0) {
            return true;
        }
        if (document.getElementsByClassName('app-v1').length != 0) {
            return true;
        }
        if (document.getElementsByClassName('opus-detail').length != 0) {
            return true;
        }
        return false;
    };

    log(isNew());
    log("Loading...");

    setInterval(() => {
        const commentlist = getCommentList();
        if (commentlist.length != 0) {
            commentlist.forEach(htmlEntity => {
                if (htmlEntity.innerHTML.indexOf(`<span id="huli">`) == -1) {
                    htmlEntity.innerHTML += `<span id="huli">`;
                    const uid = getUid(htmlEntity);
                    log('looking...' + uid);
                    if (xianList.indexOf(uid) > -1) {
                        log('>>target:' + uid);
                        htmlEntity.innerHTML += spawnHtml(xianTag);
                    } else {
                        GM_xmlhttpRequest({
                            method: "get",
                            url: blog + uid,
                            data: '',
                            headers: {
                                'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
                            },
                            onload: res => {
                                if (res.status === 200) {
                                    const dynamicJson = JSON.parse(res.response).data;
                                    if (dynamicJson.items != null) {
                                        if (smell(dynamicJson.items)) {
                                            log('>>smell:' + uid);
                                            htmlEntity.innerHTML += spawnHtml(xianSmellTag);
                                        }
                                        if (hearWord(dynamicJson.items)) {
                                            log('>>hear:' + uid);
                                            htmlEntity.innerHTML += spawnHtml(xianWordTag);
                                        }
                                    }
                                } else {
                                    log('Fail');
                                    log(res);
                                }
                            },
                        });
                    }
                    htmlEntity.innerHTML += `</span>`;
                }
            });
        }
    }, config.times)
})();