// ==UserScript==
// @name B站自用工具箱
// @namespace http://tampermonkey.net/
// @version 1.0.4
// @description bilibili自用工具箱,清理转发抽奖动态、批量取关、自动签到
// @author Eliauk
// @match *://*.bilibili.com/*
// @exclude *://api.bilibili.com/*
// @exclude *://api.*.bilibili.com/*
// @exclude *://*.bilibili.com/api/*
// @exclude *://member.bilibili.com/studio/bs-editor/*
// @exclude *://t.bilibili.com/h5/dynamic/specification
// @exclude *://bbq.bilibili.com/*
// @exclude *://message.bilibili.com/pages/nav/header_sync
// @exclude *://s1.hdslb.com/bfs/seed/jinkela/short/cols/iframe.html
// @exclude *://open-live.bilibili.com/*
// @resource ArcoDesignStyle https://update.greasyfork.org/scripts/490751/ArcoDesignStyle.user.css
// @icon https://www.bilibili.com/favicon.ico?v=1
// @icon64 data:image/png;base64,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
// @license GPL-3.0 License
// @grant GM_addStyle
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_deleteValue
// @grant GM_getResourceText
// @grant GM_registerMenuCommand
// @require https://update.greasyfork.org/scripts/493023/1363403/UnaTools.js
// @noframes
// ==/UserScript==
const isDebug = false; // 调试日志用
const debug = isDebug ? log : () => {};
const pathname = /\d+/.exec(window.location.pathname);
const dedeUserID = getCookie("DedeUserID");
const mid = pathname ? +pathname[0] : 0;
const my_mid = dedeUserID ? +dedeUserID : 0;
const url = window.location.href;
const prefix = "eliauk_";
const globalStyle = `.el-hidden{display:none}`;
const ELIAUK_TOOLS_CONFIG = "eliauk_tools_config";
const ELIAUK_DYNAMIC_KEY = "eliauk_dynamic_key";
const ELIAUK_SIGN_TIME = "eliauk_sign_time";
const DefaultConfig = {
times: 90 * 60 * 60 * 24 * 1000, // 默认动态过期时间
setting: {
"dynamic_function": {
title: "删除转发抽奖动态", enable: true
}, "follow_function": {
title: "批量取关", enable: true
}, "sign_function": {
title: "自动签到", enable: true
}
}
};
/**
* 动态类型
* @type {{forward: string, lottery: string}}
*/
const DynamicType = {
forward: "DYNAMIC_TYPE_FORWARD", lottery: "RICH_TEXT_NODE_TYPE_LOTTERY"
};
/**
* 获取cookie的值
* @param e
* @returns { string | null }
*/
function getCookie(e) {
return decodeURIComponent(document.cookie.replace(new RegExp(`(?:(?:^|.*;)\\s*${encodeURIComponent(e).replace(/[\-.+*]/g, "\\$&")}\\s*=\\s*([^;]*).*$)|^.*$`), "$1")) || null;
}
/**
* 获取token
* @returns { string | null }
*/
function getUserCSRF() {
return getCookie("bili_jct");
}
(function () {
'use strict';
let SConfig = {};
/**
* 主方法
*/
function main() {
load_config();
preload_style();
setting_modal();
Object.entries(SConfig.setting).forEach(([fun, config]) => {
if (config.enable) {
if (eval(`typeof ${fun}`) === 'function') {
eval(`${fun}();`);
} else {
log("El", `${fun} not found`);
}
}
});
// dynamic_function();
// follow_function();
// sign_function();
}
/**
* 保存配置
*/
function save_config() {
GM_setValue(ELIAUK_TOOLS_CONFIG, JSON.stringify(SConfig));
debug(SConfig);
}
/**
* 加载配置
*/
function load_config() {
const res = GM_getValue(ELIAUK_TOOLS_CONFIG);
if (res && (res !== 'undefined' && res !== 'null')) {
try {
SConfig = JSON.parse(res);
} catch (e) {
SConfig = res;
}
} else {
SConfig = DefaultConfig;
debug("default", SConfig);
}
}
/**
* 预加载样式
*/
function preload_style() {
function loadResource(resourceName) {
const data = GM_getResourceText(resourceName);
GM_addStyle(data);
}
loadResource("ArcoDesignStyle");
// 添加全局样式
GM_addStyle(aniStyle);
GM_addStyle(toastStyle);
GM_addStyle(globalStyle);
}
/**
* 控制面板
*/
function setting_modal() {
const id = prefix + generateMixed(8).toLocaleLowerCase();
safeFunction("body", () => {
retryInterval(() => {
if (!render()) return false;
register_menu();
add_event_listener();
debug("mount success");
return true;
});
});
/**
* 改变设置
* @param e
*/
function setting_change(e) {
const $ev = e || window.event;
const target = $ev.target || $ev.srcElement;
const enable = parseBoolean(target.getAttribute("aria-checked"));
const data_id = target.dataset.id;
SConfig.setting[data_id].enable = enable;
save_config();
}
/**
* 设置列表
* @returns { string }
*/
function setting_list() {
const setting = SConfig.setting;
debug(SConfig);
return Object.entries(setting).reduce((list, [id, config]) => {
return list.concat(`<div class="arco-collapse-item""><div class="arco-collapse-item-header arco-collapse-item-header-left""><div class="arco-collapse-item-header-title"">${config?.title}</div><div class="arco-collapse-item-header-extra"><button type="button" role="switch" title="${config?.title}" aria-checked="${!!config?.enable}" class="setting-switch arco-switch arco-switch-type-circle arco-switch-small${!!config?.enable ? " arco-switch-checked" : " "}" data-id="${id}""><span class="arco-switch-handle""><span class="arco-switch-handle-icon""></span></span></button></div></div></div>`);
}, '');
}
/**
* 添加事件监听
*/
function add_event_listener() {
$all(`#${id} .close-button`).forEach((element) => {
element.addEventListener("click", hide);
});
$all(".arco-modal-body .page-body .arco-switch").forEach(ele => {
ele.addEventListener("click", arcoSwitchChange);
});
// $one(`#${id}`).addEventListener("blur", hide);
window.addEventListener('beforeunload', (e) => {
$all(`#${id} .setting-switch`).forEach(ele => {
ele.removeEventListener("change", setting_change);
});
hide();
});
}
/**
* 设置列表监听
*/
function setting_list_listen() {
$all(`#${id} .setting-switch`).forEach(ele => {
ele.addEventListener("change", setting_change);
});
}
/**
* 显示
*/
function show() {
document.addEventListener('mousedown', inside_check);
fadeInShow($one(`#${id}`));
}
/**
* 隐藏
*/
function hide() {
fadeOutHide($one(`#${id}`));
document.removeEventListener('mousedown', inside_check);
}
/**
* 注册菜单
*/
function register_menu() {
GM_registerMenuCommand(`⚙️控制面板`, () => {
show();
});
GM_registerMenuCommand(`🔄脚本重置 - 修复脚本`, () => {
GM_deleteValue(ELIAUK_TOOLS_CONFIG);
location.reload();
});
}
/**
* 内部检查
* @param e
*/
function inside_check(e) {
debug("inside check");
if (!insideCheck(e, `#${id}`)) {
hide();
}
}
/**
* 样式
* @param id
* @returns { string }
*/
function globalStyle(id) {
return `#${id} a,#${id} abbr,#${id} address,#${id} blockquote,#${id} caption,#${id} cite,#${id} code,#${id} dd,#${id} del,#${id} dfn,#${id} dl,#${id} dt,#${id} em,#${id} fieldset,#${id} form,#${id} h1,#${id} h2,#${id} h3,#${id} h4,#${id} h5,#${id} h6,#${id} iframe,#${id} img,#${id} ins,#${id} label,#${id} legend,#${id} li,#${id} object,#${id} ol,#${id} p,#${id} pre,#${id} q,#${id} small,#${id} strong,#${id} sub,#${id} sup,#${id} table,#${id} tbody,#${id} td,#${id} tfoot,#${id} th,#${id} thead,#${id} tr,#${id} ul{border:0;margin:0;padding:0}#${id} {position:fixed;top:3.9vw;right:12.5vw;z-index:999999;box-shadow:-2px 2px 5px rgb(0 0 0 / 30%);border-radius:var(--border-radius-medium);font-family:HarmonyOS Sans SC,Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,noto sans,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif}#${id} .arco-modal{position:static;width:265px}#${id} .arco-collapse-item-header-left{padding-right:13px;padding-left:13px;cursor:default}#${id} .arco-modal-header{border-bottom:none;height:40px}#${id} .arco-divider-horizontal.arco-divider-with-text{margin:26px 0}#${id} .arco-modal-body{padding-top:0;padding-bottom:0;overflow:visible;margin-bottom:28px}#${id} .arco-modal-body .arco-divider-horizontal.arco-divider-with-text:first-child{margin-top:0}#${id} .arco-collapse-item .arco-collapse-item-header .arco-collapse-item-header-title{font-weight:500}#${id} div::-webkit-scrollbar{width:10px;background:transparent}#${id} div::-webkit-scrollbar-thumb{background:var(--color-fill-3) content-box;border:2px solid transparent;border-radius:5px}`;
}
/**
* 渲染
* @returns { boolean }
*/
function render() {
if (!document.body) return false;
if (!!$one(`#${id}`)) return true;
try {
const modal = document.createElement("div");
modal.id = id;
modal.tabIndex = "-1";
modal.outline="0";
modal.hidefocus="true"
modal.className = "el-hidden eliauk-container";
modal.innerHTML = `<div class="arco-modal"><div class="arco-modal-header"><div class="arco-modal-title arco-modal-title-align-center"></div><div tabindex="-1" role="button" aria-label="Close" class="close-button arco-modal-close-btn"><span class="arco-icon-hover"><svg viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg" stroke="currentColor" class="arco-icon arco-icon-close" stroke-width="4" stroke-linecap="butt" stroke-linejoin="miter"><path d="M9.857 9.858 24 24m0 0 14.142 14.142M24 24 38.142 9.858M24 24 9.857 38.142"></path></svg></span></div></div><div class="arco-modal-body"><div class="arco-divider arco-divider-horizontal arco-divider-with-text"><span id="page-title" class="arco-divider-text arco-divider-text-left">控制面板</span></div><div class="page-body"><div id="rule-list-config-collapse" class="arco-collapse">${setting_list()}</div></div></div></div>`;
document.body.appendChild(modal);
setting_list_listen();
GM_addStyle(globalStyle(id));
return true;
} catch (e) {
log(e);
return false;
}
}
}
/**
* 动态
* @returns { void }
*/
function dynamic_function() {
debug("dynamic function loading");
if (!/https?:\/\/space\.bilibili\.com\/(\d+)\/dynamic(?=\/|\?|$)/.test(url)) {
debug("动态", "该页面不适用");
return;
}
if (!(mid && my_mid && mid === my_mid)) {
return;
}
let group, buttongroup;
const id = prefix + generateMixed(8).toLocaleLowerCase();
class Group {
constructor(key, id, load) {
this.key = key;
this.load = load;
this.target = $one(`#${id} .target`);
this.clean = $one(`#${id} .target .clean`);
this.cleanEnter = $one(`#${id} .target .clean-enter`);
this.children = $all(`#${id} .target .clean-children`);
}
status() {
return !GM_getValue(this.key);
}
enable() {
GM_deleteValue(this.key);
if (this.load) {
this.clean.classList.remove("clean-loading");
}
}
disable() {
GM_setValue(this.key, true);
if (this.load) {
this.clean.classList.add("clean-loading");
}
}
buttongroup() {
return {
target: this.target, clean: this.clean, cleanEnter: this.cleanEnter, children: this.children
};
}
}
/**
* @returns { void }
*/
function initial() {
render();
group = new Group(ELIAUK_DYNAMIC_KEY, id, true);
buttongroup = group.buttongroup();
}
/**
* 历史动态api
* @param offset
* @returns { Promise<any> }
*/
function space_dynamic_api(offset = null) {
return request('https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space', 'GET', filterNullUndefined({
host_mid: mid, offset: offset, timezone_offset: '-480', features: 'itemOpusStyle'
}));
}
/**
* 历史动态
* @param dynamic_id
* @returns { Promise<any> }
*/
function lottery_notice_api(dynamic_id) {
return request('https://api.vc.bilibili.com/lottery_svr/v1/lottery_svr/lottery_notice', 'GET', {
business_type: 4, business_id: dynamic_id
});
}
/**
* 删除动态api
* @param dynamic_id
* @returns { Promise<any> }
*/
function rm_dynamic_api(dynamic_id) {
return request('https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/rm_dynamic', "POST", {
dynamic_id, csrf_token: getUserCSRF()
});
}
/**
* 是否为抽奖动态
* @param summary
* @returns { boolean }
*/
function is_lottery_dynamic(summary) {
let rich_text_nodes = summary["rich_text_nodes"] ?? [];
return rich_text_nodes.some(tag => tag.type === DynamicType.lottery);
}
/**
* 空间动态
* @returns { Promise<any[]> }
*/
async function space_dynamic() {
let offset = null;
let results = [];
for (let has_more = 1; has_more;) {
const res = await space_dynamic_api(offset);
debug("space items", res);
if (!res || res.code || !res.data) {
break;
}
const data = res.data;
const items = data["items"];
offset = data["offset"];
has_more = data["has_more"];
if (!items || items.length < 1) {
continue;
}
results = results.concat(items);
}
return results;
}
/**
* 删除动态
* @param dynamic_id
* @returns { Promise<boolean> }
*/
async function rm_dynamic(dynamic_id) {
if (!dynamic_id) return false;
const result = await rm_dynamic_api(dynamic_id);
debug(result);
return !(!result || result.code || !result.data);
}
/**
* 抽奖结果是否已出
* @param dynamic_id
* @returns { Promise<boolean> }
*/
async function has_lottery_result(dynamic_id) {
const result = await lottery_notice_api(dynamic_id);
if (!result || result.code || !result.data) {
return false;
}
const notice = result.data;
return !!notice["lottery_result"];
}
/**
* 删除动态主方法
* @param dynamic
* @returns { Promise<number> }
*/
async function rm_dynamic_item(dynamic) {
// 转发动态
if (DynamicType.forward !== dynamic["type"]) {
debug("该动态非转发动态");
return 0;
}
debug(dynamic);
// 该动态是转发动态
const origin_dynamic = dynamic["orig"];
if (!origin_dynamic) {
debug("orig is null");
return 0;
}
const modules = origin_dynamic["modules"];
if (!modules) {
debug("modules is null");
return 0;
}
const summary = acquireChain(["module_dynamic", "major", "opus", "summary"], modules);
if (is_lottery_dynamic(summary)) {
// 原始动态id
const origin_id = origin_dynamic["id_str"];
const pub_ts = acquireChain(["module_author", "pub_ts"], modules);
// 是互动抽奖
if (!isExpired(pub_ts, SConfig.times) && !await has_lottery_result(origin_id)) {
debug("未过指定天数且未出结果", summary["text"]);
return 0;
}
return (await rm_dynamic(dynamic["id_str"])) ? 1 : 0;
} else {
debug("不是抽奖动态");
}
return 0;
}
/**
* @returns { void }
*/
function render() {
if ($one(`#${id}`)) {
return;
}
const ele = document.createElement("div");
ele.id = id;
ele.innerHTML = `<svg width="0" height="0" style="position: absolute;"><defs><filter id="goo"><feGaussianBlur in="SourceGraphic" stdDeviation="10" result="blur"/><feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 19 -9" result="goo"/><feComposite in="SourceGraphic" in2="goo" operator="atop"/></filter></defs></svg><div class="target noselect"><div class="clean clean-box">清理</div><span class="clean-children clean-box icon-clean-left">取消</span><span class="clean-children clean-box icon-clean-right clean-enter">确定</span></div>`;
$one("#page-dynamic .section.user-info").appendChild(ele);
// 添加全局样式
GM_addStyle(globalStyle(id));
}
/**
* @returns { void }
*/
function childrenClick() {
buttongroup.target.classList.remove("checked");
buttongroup.clean.addEventListener("click", cleanClick);
buttongroup.children.forEach(ele => {
ele.removeEventListener("click", childrenClick);
});
}
/**
* @returns { void }
*/
function cleanClick() {
if (!group.status()) return;
buttongroup.target.classList.add("checked");
buttongroup.children.forEach(ele => {
ele.addEventListener("click", childrenClick);
});
buttongroup.clean.removeEventListener("click", cleanClick);
}
/**
* @returns { Promise<any> }
*/
async function cleanEnterClick() {
if (!group.status()) return;
try {
group.disable();
debug("remove start");
const dynamics = await space_dynamic();
debug("space dynamic list", dynamics);
let success = await dynamics.reduce(async (cnt, dynamic) => await cnt + await rm_dynamic_item(dynamic), 0);
debug(`共有${dynamics.length}条动态, 已成功删除${success}条`);
toast(`共有${dynamics.length}条动态, 已成功删除${success}条`, ToastType.success, 2000);
} catch (e) {
log(`删除失败, ${e.message}`);
toast(`删除失败, ${e.message}`, ToastType.error, 2000);
} finally {
debug("remove end");
group.enable();
}
}
/**
* 全局样式
* @param id
* @returns { string }
*/
function globalStyle(id) {
return `.clean-loading::after {content:'';position:absolute;top:0;left:0;right:0;bottom:0;margin:auto;border:5px solid transparent;border-left:5px solid #8f41e9;border-right:5px solid #8f41e9;border-radius:50%;animation:spin 1s linear infinite;}#${id}{padding-top:18px;border-top:1px solid #e5e9ef;margin-top:10px}#${id}.join-button{position:relative;display:inline;cursor:pointer;height:20px;width:20px}#${id}.join-button__btn{color:#23c9ed;font-size:20px;text-align:center;border:none;font-size:20px;border-radius:4px}#${id}.join-button__btn.checked{background:#019cd3}#${id}.join-button__btn:active{color:#4FD4F1}#${id}.join-button__btn:after{content:attr(data-tips);position:absolute;white-space:nowrap;opacity:0;left:50%;transform:translateX(-50%);transition:.1s;font-size:16px;background-image:-webkit-linear-gradient(left,#00e0ee,#2d97ff);-webkit-background-clip:text;-webkit-text-fill-color:transparent;pointer-events:none}#${id}.join-button:hover .join-button__btn:after{opacity:1 !important;transform:translate(-50%,-150%)}.noselect{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.target{max-width:200px;filter:url("#goo");text-align:center;margin:auto;position:relative}.clean{display:block;position:relative;z-index:1;scale:1}.clean-box{font-size:12px;color:#fff;background-image:linear-gradient(0deg,rgb(255 186 251),rgb(41 201 255));border-radius:50%;width:45px;line-height:45px;margin:auto;cursor:pointer;transition:1s ease}.clean-children{position:absolute;top:0;left:0;right:0}.target.checked .icon-clean-left{-ms-transform:translateX(-45px);-webkit-transform:translateX(-45px);transform:translateX(-45px)}.target.checked .icon-clean-right{-ms-transform:translateX(45px);-webkit-transform:translateX(45px);transform:translateX(45px)}.target.checked .clean{opacity:0;scale:0;cursor:default}`;
}
safeWaitFunc("#page-dynamic .section.user-info", () => {
initial();
buttongroup.clean.addEventListener("click", cleanClick);
buttongroup.cleanEnter.addEventListener("click", cleanEnterClick);
window.addEventListener('beforeunload', (e) => {
group.enable();
buttongroup.clean.removeEventListener("click", cleanClick);
buttongroup.cleanEnter.removeEventListener("click", cleanEnterClick);
});
});
}
/**
* 关注
* @returns { void }
*/
function follow_function() {
if (!/https?:\/\/space\.bilibili\.com\/(\d+)\/fans\/follow(?=\/|\?|$)/.test(url)) {
debug("关注", "该页面不适用");
return;
}
if (!(mid && my_mid && mid === my_mid)) {
return;
}
const id = prefix + generateMixed(8).toLocaleLowerCase();
let eliauk_model;
/**
* 初始化消息框
*/
function init_message_box() {
if (!!$one(`#${id}`)) return;
let modal = document.createElement('div');
modal.className = 'modal-container el-hidden';
modal.id = id;
modal.innerHTML = `<div class="modal-mask"></div><div class="modal-wrapper eliauk-message-wrapper"><div class="modal"><div class="modal-header"><i id="message-box-close" class="modal-header-close iconfont icon-ic_close"></i><div class="eliauk-modal-title modal-title"><p id="message-box-title">取消关注</p></div></div><div class="modal-body message-box-body"><div class="message-box-content"></div></div><div class="btn-container modal-footer"><button type="button" class="message-box-button" id="message-box-cancel"><span class="message-box-button-span">取消</span></button><button type="button" class="message-box-button" id="message-box-action"><span class="message-box-button-span">确定</span></button></div></div></div>`;
document.body.appendChild(modal);
eliauk_model = $one(`#${id}`);
// 添加全局样式
GM_addStyle(globalStyle(id));
}
/**
* 消息框确定事件
* @param e
* @returns { Promise<void> }
*/
async function message_box_enter(e) {
e.preventDefault();
debug(this._param);
await unfollows(this._param?.tag_id);
}
/**
* 打开消息框
* @param tag_id
*/
function load_message_box(tag_id) {
const box = $one('.message-box-content');
box.innerHTML = '确定取消本分组下所有关注?';
fadeInShow(eliauk_model);
const button = $one('#message-box-action');
button._param = { tag_id };
button.addEventListener('click', message_box_enter);
$one('#message-box-close').addEventListener('click', exit_message_box);
$all('.message-box-button').forEach(ele => {
ele.addEventListener('click', exit_message_box);
});
}
/**
* 退出消息框
*/
function exit_message_box() {
fadeOutHide(eliauk_model);
$one('#message-box-action').removeEventListener('click', message_box_enter);
$all('.message-box-button').forEach(ele => {
ele.removeEventListener('click', exit_message_box);
});
$one('#message-box-close').removeEventListener('click', exit_message_box);
}
/**
* 获取该分组下的关注列表
* @param tag_id
* @returns { Promise<[]> }
*/
async function tag_follow(tag_id) {
const size = 20;
let page = 1;
let results = [];
let length = 0;
do {
const res = await tag_follow_api(tag_id, page++, size);
debug("tag follow list", res);
if (!res || res.code || !res.data) {
break;
}
const data = res.data;
length = data.length;
results = results.concat(data);
} while (length === size);
return results;
}
/**
* 获取该分组关注api
* @param tag_id
* @param pn
* @param ps
* @returns { Promise<*> }
*/
function tag_follow_api(tag_id, pn, ps) {
return request("https://api.bilibili.com/x/relation/tag", 'GET', {
mid: mid, tagid: tag_id, pn: pn, ps: ps
});
}
/**
* @returns { void }
*/
function render() {
$all(".follow-list-container .follow-item.custom-group").forEach((ele) => {
const dropdown_menu = $one(".be-dropdown-menu", ele);
const cancel_follows = $all("cancel-follows", dropdown_menu);
if (!!cancel_follows && cancel_follows.length > 0) {
debug("该分组下已经存在");
return;
}
const dropdown_cancel = document.createElement("li");
dropdown_cancel.className = "be-dropdown-item be-dropdown-item-delimiter cancel-follows";
dropdown_cancel.innerHTML = "取消关注";
const tag_id = ele.getAttribute('tagid');
dropdown_menu.insertBefore(dropdown_cancel, dropdown_menu.children[0]);
dropdown_cancel.addEventListener("click", async () => {
load_message_box(tag_id);
});
});
}
/**
* 取关用户api
* @param uid
* @returns { Promise<*> }
*/
function unfollow_api(uid) {
return request("https://api.bilibili.com/x/relation/modify", "POST", {
fid: uid, act: 2, re_src: 11, csrf: getUserCSRF()
});
}
/**
* 取关用户
* @param uid
* @returns { Promise<number> }
*/
async function unfollow(uid) {
const res = await unfollow_api(uid);
debug("unfollow", res);
if (!res || res.code) {
return 0;
}
return 1;
}
/**
* 分组取关
* @param tag_id
* @returns { Promise<void> }
*/
async function unfollows(tag_id) {
let action, cancel_item;
try {
debug("unfollow start");
debug("tag id", tag_id);
action = $one(`li[tagid="${tag_id}"]`);
cancel_item = $one(".cancel-follows", action);
cancel_item.classList.add("el-disabled");
const follows = await tag_follow(tag_id);
if (follows?.length < 1) {
toast('没有需要取消关注的up主', ToastType.info, 2000);
return;
}
const unfollow_list = follows.map(f => f.mid);
let success = await unfollow_list.reduce(async (cnt, uid) => cnt + await unfollow(uid), 0);
debug(`共有${unfollow_list.length}位up主需要取关, 已成功取关${success}位`);
toast(`共有${unfollow_list.length}位up主需要取关, 已成功取关${success}位`, ToastType.success, 2000);
location.reload();
} catch (e) {
log(`取关失败, ${e.message}`);
toast(`取关失败, ${e.message}`, ToastType.error, 2000);
} finally {
debug("unfollow end");
cancel_item.classList.remove("el-disabled");
}
}
/**
* 全局样式
* @param id
* @returns { string }
*/
function globalStyle(id) {
return `#${id} .eliauk-message-wrapper{width:420px}#${id} .eliauk-modal-title{padding:0 !important}#${id} .modal-wrapper .modal-footer{padding:5px 15px 10px;text-align:right}#${id} #message-box-title{text-align:left;padding:15px 15px 10px;margin-bottom:0;font-size:18px;line-height:1;color:#303133}#${id} .message-box-body{position:relative;color:#606266;padding:10px 15px !important}#${id} .message-box-content{position:relative;overflow:auto;text-align:left;height:auto !important}#${id} .message-box-button{margin-right:0;display:inline-block;padding:9px 15px;line-height:1;transition:all .2s ease;text-align:center;vertical-align:middle;outline:none;border-radius:3px;cursor:pointer;white-space:nowrap;box-sizing:border-box;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}#${id} #message-box-action{color:#fff;margin-left:10px;background-color:#00a1d6;border:1px solid #00a1d6}#${id} #message-box-cancel{background:#fff;border:1px solid #dcdfe6;color:#606266}#${id} #message-box-action:hover,#${id} #message-box-action:focus{color:#fff;background-color:#00b5e5;border-color:#00b5e5}#${id} #message-box-cancel:hover,#${id} #message-box-cancel:focus{color:#00a1d6;border-color:#c6e2ff;background-color:#ecf5ff}#${id} .el-disabled{cursor:not-allowed;color:#cfd0d3;pointer-events:none;}`;
}
/**
* @returns { void }
*/
function initial() {
render();
init_message_box();
}
safeWaitFunc(".follow-list-container .follow-item.custom-group .be-dropdown-menu", () => {
initial();
});
}
/**
* 签到
* @returns { void }
*/
function sign_function() {
if (!dedeUserID) {
log("请先进行登录~");
toast("🎉请先进行登录~", ToastType.warn, 2000);
return;
}
/**
* 是否为今天
* @param t
* @returns { boolean }
*/
function same_day(t) {// 是否同一天
return t === new Date().toDateString();
}
/**
* 签到api
* @returns { Promise<*> }
*/
function sign_api() {
return request("https://api.live.bilibili.com/xlive/web-ucenter/v1/sign/DoSign", "GET");
}
/**
* 签到
* @returns { Promise<void> }
*/
async function sign() {
const { code, message } = await sign_api();
if (code === 0) {
toast("🎉签到成功!", ToastType.success, 5000);
GM_setValue(ELIAUK_SIGN_TIME, new Date().toDateString());
} else if (code === 1011040) {
log(message);
GM_setValue(ELIAUK_SIGN_TIME, new Date().toDateString());
} else {
toast(message, ToastType.error, 2000);
}
}
const time = GM_getValue(ELIAUK_SIGN_TIME);
if (!time || !same_day(time)) {
sign().then();
} else {
log("🎉已经签到过了~");
}
}
safeFunction(main, (e) => {
log(e);
})
})();