您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
🔥功能介绍:1、支持B站所有激励计划,是否成功取决于b站接口是否更新,与游戏版本无关;2、根据验证码通过情况自适应请求速度
当前为
// ==UserScript== // @name rush4award // @namespace vurses // @license Mit // @match https://www.bilibili.com/blackboard/new-award-exchange.html?task_id=* // @version 3.1.0 // @author layenh // @icon https://i0.hdslb.com/bfs/activity-plat/static/b9vgSxGaAg.png // @homepage https://github.com/vruses/get-bili-redeem // @supportURL https://github.com/vruses/get-bili-redeem/issues // @run-at document-start // @grant none // @description 🔥功能介绍:1、支持B站所有激励计划,是否成功取决于b站接口是否更新,与游戏版本无关;2、根据验证码通过情况自适应请求速度 // ==/UserScript== const ReceiveTime = 1000; const SlowerTime = 10000; const workerJs = function () { class TimerManager { constructor() { this.timers = new Map(); } set(key, callback, delay) { this.clean(key); const id = setTimeout(() => { callback(); }, delay); this.timers.set(key, id); } clean(key) { if (this.timers.has(key)) { clearTimeout(this.timers.get(key)); this.timers.delete(key); } } cleanAll() { for (let id of this.timers.values()) { clearTimeout(id); } this.timers.clear(); } has(key) { return this.timers.has(key); } } const manager = new TimerManager(); self.addEventListener("message", function (e) { manager.set("receiveTask", () => self.postMessage("signal"), e.data); }); }; workerJs.toString(); const blob = new Blob([`(${workerJs})()`], { type: "application/javascript" }); const url = URL.createObjectURL(blob); const worker = new Worker(url); const originalCall = Function.prototype.call; Function.prototype.call = function (...args) { if (this.name === "fb94") { let temp = this.toString(); temp.indexOf("this.$nextTick(()=>{}),"); temp = temp.replace( `this.$nextTick(()=>{}),`, (res) => res + "Object.assign(window,{awardInstance:this})," ); // 禁止pub¬ify错误页消息 temp = temp.replace( `setCommonDialog(t){b.commonErrorDialog=t},`, `setCommonDialog(t){},` ); // 防止不再弹出验证码 temp = temp.replace(`e.destroy()`, ``); temp = eval("(" + temp + ")"); return originalCall.apply(temp, args); } return originalCall.apply(this, args); }; const originalFetch = window.fetch; window.fetch = function (input, init = {}) { let url = ""; // 处理 input 可能是字符串或 Request 对象 if (typeof input === "string") { url = input; } else if (input instanceof Request) { url = input.url; } if (url.includes("/x/activity_components/mission/receive")) { return originalFetch.call(this, input, init).then( (res) => { res .clone() .json() .then((res) => { if (res.code === 202100) { worker.postMessage(SlowerTime); } else { worker.postMessage(ReceiveTime); } }); return res; }, (err) => err ); } return originalFetch.call(this, input, init); }; window.addEventListener("load", function () { if (awardInstance.cdKey) { return; } setTimeout(() => { awardInstance.handelReceive(); }, 1000); awardInstance.$watch("pageError", function (newVal, oldVal) { this.pageError = false; }); awardInstance.$watch("cdKey", function (newVal, oldVal) { window.fetch = originalFetch; manager.cleanAll(); }); worker.addEventListener("message", function (e) { console.log("post to window: " + e.data); awardInstance.handelReceive(); }); });