// ==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);
/******/
/******/ })()
;