// ==UserScript== // @name bilibili每月自动充电 // @namespace BILIBILI-HELPER // @version 1.0.0 // @author wyz // @crontab * * * once * // @grant GM_getValue // @grant GM_xmlhttpRequest // @grant GM_notification // @grant GM_cookie // @grant GM_log // @require https://cdn.jsdelivr.net/npm/scriptcat-lib@1.0.1/dist/msg-push.js // @definition https://cdn.jsdelivr.net/npm/scriptcat-lib@1.0.1/src/types/msg-push.d.ts // @connect api.bilibili.com // @connect pay.bilibili.com // ==/UserScript== /* ==UserConfig== 基础配置: uid: title: 用户id description: 充电的用户id default: 17047572 ---- 钉钉推送: token: title: token description: 钉钉推送token,webhook后面那一截 secret: title: secret description: 钉钉推送密钥,不输入默认使用其他方式进行推送 ==/UserConfig== */ const HELPER = "bilibili-helper"; let dingtoken = GM_getValue("钉钉推送.token"); let platform = []; console.log(dingtoken); if (dingtoken) { platform.push(new DingTalk(dingtoken, GM_getValue("钉钉推送.secret"))); } let push = new MsgCenter(platform); return new Promise((resolve, reject) => { let notice = async function (content) { GM_notification({ title: HELPER, text: content }); await push.pushMsg({ type: "text", content: "bilibili-helper:" + content, }); GM_log(content, "error"); reject(content); } GM_cookie("list", { url: "https://api.bilibili.com/x/vip/privilege/receive", name: "bili_jct", }, (cookie) => { let csrf = ""; let recharge = async function () { let uid = GM_getValue("基础配置.uid", "17047572"); GM_xmlhttpRequest({ url: "https://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/quick", method: "POST", data: "bp_num=5&is_bp_remains_prior=true&up_mid=" + uid + "&otype=up&oid=" + uid + "&csrf=" + csrf, headers: { 'Content-Type': 'application/x-www-form-urlencoded', "Referer": "https://space.bilibili.com/" + uid, "Origin": "https://www.bilibili.com" }, async onload(xhr) { let code = xhr.response.code || 'unknow'; let msg = xhr.response.message || 'unknow'; switch (xhr.response.code) { case 0: let content = "充电成功!" GM_notification({ title: HELPER, text: content }); await push.pushMsg({ type: "text", content: "bilibili-helper:" + content, }); GM_log(content); resolve(); default: { notice("充电失败:" + xhr.status + " " + code + " " + msg); } } }, onerror() { notice("给up充电时网络错误"); } }); } if (cookie.length) { csrf = cookie[0].value; GM_xmlhttpRequest({ url: "https://api.bilibili.com/x/vip/privilege/receive", method: "POST", data: "type=1&csrf=" + csrf, headers: { 'Content-Type': 'application/x-www-form-urlencoded', "Referer": "https://account.bilibili.com/account/big/myPackage", "Origin": "https://www.bilibili.com" }, onload(xhr) { let code = xhr.response.code || 'unknow'; let msg = xhr.response.message || 'unknow'; switch (xhr.response.code) { case 0: GM_log("领券成功"); recharge(); break; case -101: notice("自动充电失败,账号未登录,请先登录"); break; default: if (xhr.status == 200) { GM_log("领券未成功,查询是否有免费余额"); let time = new Date().getTime(); GM_xmlhttpRequest({ url: "https://pay.bilibili.com/paywallet/wallet/getUserWallet", method: "POST", data: `{"platformType":3,"panelType":3,"traceId":` + time + `,"timestamp":` + time + `,"version":"1.0"}`, headers: { 'Content-Type': 'application/json', "Referer": "https://pay.bilibili.com/pay-v2-web/bcoin_index", "Origin": "https://pay.bilibili.com" }, onload(xhr) { let data = xhr.response.data; if (data) { if (data.couponBalance >= 5) { GM_log("余额查询成功,默认拿5B币去充电"); recharge(); } else { notice("余额(" + data.couponBalance + "B币)不足5B币,充电失败"); } } else { notice("查询免费余额出错:" + xhr.status + " " + xhr.responseText); } }, onerror() { notice("查询免费余额时网络出错"); } }); } else { notice("领券失败:" + xhr.status + " " + code + " " + msg); } } }, onerror() { notice("领取每月赠送b券时网络错误"); } }); } else { notice("获取b站cookie失败,请确认是否在浏览器上登录"); } }); });