B站-批量拉黑直播间机器人

批量拉黑直播间机器人

// ==UserScript==
// @name         B站-批量拉黑直播间机器人
// @description  批量拉黑直播间机器人
// @namespace    https://gf.qytechs.cn/zh-CN/scripts/519962
// @version      1.1.5
// @license      MIT
// @author       LadonQ
// @icon         https://www.bilibili.com/favicon.ico
// @include      http://space.bilibili.com/*
// @include      https://space.bilibili.com/*
// @connect      api.bilibili.com
// @grant        unsafeWindow
// ==/UserScript==

(function() {
    'use strict';

    const log = (...m) => console.warn('[QInfo]', ...m);
    const wait = t => new Promise(r => setTimeout(r, t));
    const batchDelay = async () => await wait(0.2 * 1000);

    // 从cookie中获取csrf_token
    const getCookie = (name) => {
        const value = `; ${document.cookie}`;
        const parts = value.split(`; ${name}=`);
        if (parts.length === 2) return parts.pop().split(';').shift();
    }
    const getCSRFToken = () => getCookie("bili_jct");
    log("Cookie:" + getCSRFToken())

    const getFollowURL = () => `https://api.bilibili.com/x/relation/modify`;

    const optHeaders = () => {
        return {
            "user-agent": unsafeWindow.navigator.userAgent,
            "cookie": unsafeWindow.document.cookie.split('; ').map(it => it.split("=")).map(it => it.map(i => i.match(/[^\x00-\x7F]/gm) ? encodeURIComponent(i) : i)).map(it => it.join("=")).join(", "),
            "origin": "space.bilibili.com",
            "referer": "https://www.bilibili.com/"
        }
    };
    const optGetRequest = path => new Request(path, {
        method: 'GET',
        headers: optHeaders(),
        credentials: "include"
    });

    const optPostRequest = (path, body = null) => new Request(path, {
        method: 'POST',
        headers: optHeaders(),
        credentials: "include",
        body
    });

    const RELE_ACTION = {
        // 加入黑名单
        BLOCK: 5,
        // 移除黑名单
        UNBLOCK: 6
    }
    const get_RELE_ACTION_Text = (id, fallback = '?') => {
        //let actText = "";
        switch (id) {
            case 5:
                return "加入黑名单";
            case 6:
                return "移除黑名单";
            default: return fallback;
        }
    }

    // 需要加入黑名单的UID列表
    const uid_list = [
        3546776046930594,
        3546739774589238,
        3546776317463299,
        3546741041269015,
        3546740993034384,
        3546751638178164,
        3493260519540812,
        3546794472508038,
        3546652910553267,
        3546677594032573,
        3546794403301573,
        3546656152750753,
        3546766708312646,
        3494361998297713,
        3546654636509299,
        3546654644898246,
        3546608931178814,
        3546656127584796,
        3546607012284656,
        3546656630901576,
        3546655817206124,
        3546778760644964,
        3546656469420368,
        3546760412661892,
        3546764527274008,
        3546586867043021,
        1938464087,
        3546760582531597,
        3546755194947608,
        3546789057661401,
        3546779928759179,
        3546787132475837,
        472738658,
        3546643123145231,
        1047441781,
        3546760899201197,
        3546776214702772,
        3546784137743274,
        247830407,
        3546760892909983,
        3546740747668080,
        3546726229085029,
        3546653829106509,
        3546719539169670,
        3546801051273762,
        3546727638371079,
        3546800180955840,
        3546761314437560,
        392427789,
        3546799820245917,
        3546652392557205,
        3546717068724629,
        3546753796147450,
        3546787363162777,
        3546801032399259,
        1920869180,
        3546643234294080,
        3546611160451732,
        3546775468116645,
        3546783410030893,
        3546786138426143,
        3546752472844964,
        3546791603604305,
        3546799553906720,
        3546761213774310,
        3546670105102441,
        3546766007863749,
        1738856490,
        1332005285,
        3546641321691585,
        1355276337,
        1830422345,
        3546654596663481,
        3546655892704220,
        279502432,
        279513013,
        3546655332764461,
        3546654600858402,
        309933628,
        3546655320180802,
        3546604273404664,
        160175853,
        3546644503070732,
        3546654569400348,
        3546641378314251,
        309831342,
        3546656096127238,
        279513321,
        3546656458934573,
        3546656320522794,
        279480466,
        3546591902305090,
        3546655309695289,
        1394122135,
        3546655911578057,
        1513289763,
        3546615371532754,
        3546646216444670,
        303357826,
        279479713,
        279513114,
        3546617988778048,
        3546655794137734,
        279515243,
        3546794279570035,
        3494357984348463,
        3546656089836096,
        3546654628121144,
        3546655603296263,
        3546654412114113,
        3546659585788033,
        279483805,
        3546720430459349,
        3546572845484288,
        322261454,
        3546652788918432,
        310642212,
        358678229,
        3546654896556552,
        302957418,
        3546654651189340,
        3546654728783954,
        3546655120951761,
        279514807,
        3546653455812609,
        3546655257266311,
        247830048,
        3546654433085698,
        3546654814767278,
        3546654649092931,
        306251576,
        3546609885383132,
        3546655873829041,
        3546655167089082,
        3546656142264973,
        3546654852516240,
        3546656148555885,
        3546564140206536,
        303349303,
        3546653405481122,
        3546654609246389,
        544909406,
        3546654649092334,
        3546763575167801,
        343267831,
        3546654571498062,
        3546655018191018,
        3546641355245904,
        3546655565547800,
        3546589427665485,
        3546656567986768,
        3546655274043577,
        620695476,
        279511078,
        3546571429907104,
        3546793912568080,
        279513620,
        3546654663772883,
        3546655964006962,
        420142987,
        3546655167088643,
        3546802829658925,
        3546787835021331,
        3546804419299347,
        629407829,
        3546799065271180,
        3546789128964128,
        3546636458396083,
        3546736031173077,
        1431353404,
        454847393,
        3546765447923892,
        3546781052832172,
        3546802728995574,
        3546645121730966,
        3546610822810053,
        3546655282432733,
        3546567319488807,
        3546605261162544,
        3546763262692165,
        311883221,
        3546655869635264,
        326615073,
        3493285295294615,
        1170951322,
        279513119,
        3546645664893138,
        332716059,
        3493290452191616,
        3546624064227336,
        279513333,
        3546653806037294,
        3546391911598566,
        3546652270921998,
        3546606657865742,
        1340558073,
        3546654447766025,
        3546607314274645,
        3546654917527566,
        3546820082928317,
        3546820082928492,
        3546820085025446,
        485818552,
        3546820093413823,
        3546820093413733,
        3546820087122390,
        3546820095510592,
        3546820093414212,
        3546820103899226,
        3546820101802924,
        3546820103899959,
        3546820105996345,
        3546820103899877,
        3546820105996889,
        3546820105996977,
        3546820108093833,
        3546663922698662,
        3546831304788020,
        3546831480948786,
        3546831613069947,
        3546831615166879,
        3546820108093958,
        3546831615167133,
        3546831619360910,
        3546831619361205,
        3546831659207095,
        3546837417986589,
        3546837415889671,
        3546837394918346,
        3546837392821147,
        3546820246505771,
        3546836235192861,
        3546836239387209,
        3546831619361239,
        3546837466220980,
        3546837468318166,
        3546837474609463,
        3546837476706684,
        3546837482998529,
        3546837487192490,
        3546837493483805,
        3546837495581477,
        3546837495581183,
        3546837506066638,
        3546837506067117,
        3546837508164171,
        3546854954371220,
        3546854952274873,
        3546854954371744,
        3546854954371348,
        3546854966954143,
        3546854981634327,
        3546854981634144,
        3546854975343012,
        3546854975343334,
        3546858064447839,
        3546858108488417,
        3546858121070749,
        3546858133653781,
        3546858129460003,
        3546858150431062,
        3546858150431267,
        3546820082927617,
        3546764336433647,
        3493140174473599,
        3546562087094946,
        3546794367649857,
        3546616982145790,
        3546776023861365,
        3546770632084106,
        3546745816484581,
        3546775658957447,
        3546774356625732,
        3546762469968505,
        3546781526788844,
        1437465244,
        3546733801900780,
        3546733801900780,
        3546773119306118,
        314381141,
        3546766980942023,
        3546739193678224,
        3546770659346823,
        3546757730405162,
        442306099,
        3546765324192079,
        3546709214890224,
        3546723565701457,
        3546740204506044,
        3546724769467235,
        3546711343499681,
        3546719321065654,
        3546743069214837,
        1990864400,
        482035128,
        3546709258930716,
        3546736966502617,
        3546388849757060,
        3546610290133582,
        3546701528828034,
        3546649146165410,
        3546733923535097,
        1564547272,
        3546823989921895,
        3546829593512015,
        3546827590732306,
        3546802806589568,
        3546825411790853,
        3546787121990015,
        3546602633431194,
        3546824927348926,
        3546828190517609,
        3546824914766297,
        3546821376870633,
        3546826168862962,
        3546837413791996,
        3546831657109868,
        3546831657109868,
        3546831657109914,
        3546831663401338,
        3546831634041603,
        3546831617264139,
        3546831617263623,
        3546837415888977,
        3546825780890206,
        3546818266794622,
        3546631926450548,
        3546837420083876,
        3546648328276065,
        3546810855459030,
        3546654661675627,
        3546654628121140,
        3546837459929535,
        3546837482998303

    ];

    // 需要移出黑名单的已注销UID列表
    const del_uid_list = [
        35467994385640,
        354678115559314,
        3546812805811012,
        3546820087122298,
        3546820103899320,
        3546820103899769,
        3546820105996749,
        3546820105996592,
        3546831661303844,
        3546820105997142,
        3546837485095862,
        3546818136770785,
        3546813487384931,
        3546858154625953

    ];

    const OperateUser = async (uids = [], actCode) => {
        const act = actCode;
        let Count = 0;
        for (let uid of uids) {
            const jsonData = await (
                await fetch(
                    optPostRequest(
                        getFollowURL(), new URLSearchParams(`fid=${uid}&act=${act}&re_src=11&gaia_source=web_main&spmid=333.999.0.0&jsonp=jsonp&csrf=${getCSRFToken()}`)
                    )
                )
            ).json()
            Count++;
            if (jsonData && jsonData.code === 0) {
                log("操作成功(" + get_RELE_ACTION_Text(act) + "):", "[" + Count + "/" + uids.length + "]", "已" + get_RELE_ACTION_Text(act), ":https://space.bilibili.com/" + uid);
                sendMsg("操作成功(" + get_RELE_ACTION_Text(act) + "): [" + Count + "/" + uids.length + "] 已" + get_RELE_ACTION_Text(act) + " :https://space.bilibili.com/" + uid);
            } else {
                log("操作失败(" + get_RELE_ACTION_Text(act) + "):", "[" + Count + "/" + uids.length + "]", jsonData.message, ":https://space.bilibili.com/" + uid);
                sendMsg("操作失败(" + get_RELE_ACTION_Text(act) + "): [" + Count + "/" + uids.length + "] " + jsonData.message + " :https://space.bilibili.com/" + uid);
            }
            await batchDelay();
        }
    }

    // 批量操作函数
    const batchOperatew = async () => {
        await OperateUser(uid_list, RELE_ACTION.BLOCK);
        await OperateUser(del_uid_list, RELE_ACTION.UNBLOCK);
        log("批量操作,执行完毕");
        sendMsg("批量操作,执行完毕");
        //alert('批量操作,执行完毕');

        return;
    }

    // 执行批量操作
    const createButton = () => {
        // 创建一个按钮元素
        const QButton = document.createElement('button');

        // 设置按钮的文本
        QButton.textContent = '开始批量拉黑';
        QButton.className = 'QButton';
        QButton.style.position = 'fixed';
        QButton.style.bottom = '20px';
        QButton.style.right = '20px';
        QButton.style.zIndex = '9999';
        QButton.style.backgroundColor = '#f25d8e';
        QButton.style.color = 'white';
        QButton.style.padding = '10px 20px';
        QButton.style.border = 'none';
        QButton.style.borderRadius = '5px';
        QButton.style.cursor = 'pointer';

        // 为按钮添加点击事件监听器
        QButton.addEventListener('click', function() {
            // 当用户点击按钮时,执行批量操作
            batchOperatew();
        });
        // 添加到页面
        document.body.appendChild(QButton);
    }

    const sendMsg = (msg, duration = 10000) => {
        const QmsgsToast = document.createElement("div");
        QmsgsToast.classList.add("Qmsgs-toast");
        QmsgsToast.style.position = "absolute";
        QmsgsToast.style.bottom = "4.5rem";
        QmsgsToast.style.right = "0.5rem";
        QmsgsToast.style.display = "flex";
        QmsgsToast.style.flexDirection = "column";
        QmsgsToast.style.alignItems = "end";
        QmsgsToast.style.zIndex = "99999";

        document.body.appendChild(QmsgsToast);

        const QmsgsDom = document.querySelector(".Qmsgs-toast");
        const QnewMsgDom = document.createElement("div");
        QnewMsgDom.innerText = msg;
        QnewMsgDom.classList.add("Qmsg-toast");
        QnewMsgDom.style.margin = "0.8rem";
        QnewMsgDom.style.padding = "1rem";
        QnewMsgDom.style.backgroundColor = "white";
        QnewMsgDom.style.borderRadius = "0.5rem";
        QnewMsgDom.style.boxShadow = "rgba(0, 0, 0, 0.3) 0px 19px 38px,rgba(0, 0, 0, 0.22) 0px 15px 12px";
        QmsgsDom.appendChild(QnewMsgDom);

        setTimeout(() => {
            QnewMsgDom.remove();
        }, duration);
    }

    // 执行创建开始按钮的操作
    createButton();

})();

QingJ © 2025

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