Bilibili Black Deque

Make blacklist of bilibili a deque

当前为 2023-11-09 提交的版本,查看 最新版本

// ==UserScript==
// @name Bilibili Black Deque
// @version 0.0.1
// @namespace http://tampermonkey.net/
// @description Make blacklist of bilibili a deque
// @author Zxilly
// @license https://opensource.org/licenses/MIT
// @match *://www.bilibili.com/*
// @require https://cdn.jsdelivr.net/npm/[email protected]
// ==/UserScript==

/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	var __webpack_modules__ = ({

/***/ 166:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {


var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
const pop_1 = __webpack_require__(224);
function main() {
    return __awaiter(this, void 0, void 0, function* () {
        const uin = window.prompt("想移除的黑名单数量");
        if (uin === null) {
            alert("必须输入一个整数");
            return;
        }
        const deleteNum = Number.parseInt(uin);
        if (Number.isNaN(deleteNum)) {
            alert(`${uin} 不能被解释为合法整数`);
            return;
        }
        if (deleteNum <= 0) {
            alert("数字必须大于 0");
        }
        yield (0, pop_1.popBlack)(deleteNum);
    });
}
document.addEventListener("keydown", (ev) => {
    if (ev.ctrlKey && ev.key === "b") {
        main();
    }
});


/***/ }),

/***/ 224:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {


var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.popBlack = void 0;
const axios_1 = __importDefault(__webpack_require__(467));
const csrf_token = document.cookie.split('; ').find(row => row.startsWith('bili_jct')).split('=')[1];
function popBlack(num) {
    return __awaiter(this, void 0, void 0, function* () {
        const result = (yield axios_1.default.get('https://api.bilibili.com/x/relation/blacks', {
            withCredentials: true
        })).data;
        let total = result.data.total;
        if (total < num) {
            alert(`当前黑名单中的人数 ${total} 少于 ${num}`);
            return;
        }
        console.log(`当前黑名单人数 ${total}`);
        const last_page = Math.ceil(total / 50);
        const toRemove = [];
        for (let current_page = last_page; current_page > 0; current_page--) {
            const resp = (yield axios_1.default.get('https://api.bilibili.com/x/relation/blacks', {
                params: {
                    ps: 20,
                    pn: current_page
                },
                withCredentials: true
            })).data;
            const list = resp.data.list;
            list.reverse();
            for (const user of list) {
                const id = user['mid'];
                toRemove.push(id);
                if (toRemove.length >= num) {
                    break;
                }
            }
            if (toRemove.length >= num) {
                break;
            }
        }
        console.log(JSON.stringify(toRemove));
        console.log("收集完成,准备解除");
        console.groupCollapsed("解除请求细节");
        for (let id of toRemove) {
            const params = new URLSearchParams();
            params.append("fid", id);
            params.append("csrf", csrf_token);
            params.append("act", "6");
            params.append("re_src", "116");
            const resp = (yield axios_1.default.post("https://api.bilibili.com/x/relation/modify", params, {
                withCredentials: true
            })).data;
            console.debug(JSON.stringify(resp));
        }
        console.groupEnd();
        alert("处理完成");
        yield (function test() {
            return __awaiter(this, void 0, void 0, function* () {
                const result = (yield axios_1.default.get('https://api.bilibili.com/x/relation/blacks', {
                    withCredentials: true
                })).data;
                let total = result.data.total;
                console.log(`当前黑名单人数 ${total}`);
            });
        })();
    });
}
exports.popBlack = popBlack;


/***/ }),

/***/ 467:
/***/ ((module) => {

module.exports = axios;

/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	
/******/ 	// startup
/******/ 	// Load entry module and return exports
/******/ 	// This entry module is referenced by other modules so it can't be inlined
/******/ 	var __webpack_exports__ = __webpack_require__(166);
/******/ 	
/******/ })()
;