您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Make blacklist of bilibili a deque
当前为
// ==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); /******/ /******/ })() ;