// ==UserScript== // @name 微软积分商城签到(改进版) // @namespace https://geoisam.github.io // @version 3.6.20 // @description 每天在后台自动完成 Microsoft Rewards 任务获取积分奖励,✅搜索、✅活动、✅阅读、✅签入 // @author geoisam@qq.com // @icon data:image/png;base64,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 // @homepage https://github.com/geoisam/FuckScripts // @supportURL https://github.com/geoisam/FuckScripts/issues // @crontab */20 * * * * // @connect bing.com // @connect login.live.com // @connect rewards.bing.com // @connect prod.rewardsplatform.microsoft.com // @connect hotapi.nntool.cc // @connect hot.baiwumm.com // @connect cnxiaobai.com // @connect disp-qryapi.3g.qq.com // @connect qyapi.weixin.qq.com // @connect oapi.dingtalk.com // @connect open.feishu.cn // @connect push.i-i.me // @connect api.day.app // @grant unsafeWindow // @grant GM_xmlhttpRequest // @grant GM_notification // @grant GM_openInTab // @grant GM_getValue // @grant GM_setValue // @grant GM_cookie // @grant GM_info // @grant GM_log // @tips 此脚本一直为 开源免费 使用,如果你是从某些地方买的话,你就是被骗了 // ==/UserScript== /* ==UserConfig== Config: keep: title: 持续检测(关闭则所有任务完成后不再检测) type: checkbox default: true lock: title: 锁定国区(若当前 IP 非中国大陆地区则停止) type: checkbox default: true span: title: 搜索间隔(至少 30 秒即间隔 15-45 秒) type: number default: 30 min: 30 unit: ±15秒 api: title: 搜索词接口(单机模式为随机汉字组合) type: select default: offline values: [offline, hot.nntool.cc, hot.baiwumm.com, hot.cnxiaobai.com] code: title: 授权码/链接(请勿分享以免个人数据泄露) type: textarea description: https://login.live.com/oauth20_desktop.srf?code=M.C540_BAY.2.U.********-****-****-****-************&... Tasks: sign: title: 签入(Authorization Code) type: checkbox default: true read: title: 阅读(Authorization Code) type: checkbox default: true promos: title: 活动(rewards.bing.com) type: checkbox default: true search: title: 搜索(www.bing.com) type: checkbox default: true Notice: bro: title: 浏览器通知(当前脚本) type: checkbox default: true wework: title: 企业微信消息推送(群机器人) type: text password: true description: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx dingding: title: 钉钉群机器人(不加签,关键词:#) type: text password: true description: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx feishu: title: 飞书群机器人(不加签,关键词:#) type: text password: true description: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx pushme: title: PushMe(push.i-i.me) type: text password: true description: xxxxxxxxxxxxxxxxxxxx bark: title: Bark(bark.day.app) type: text password: true description: xxxxxxxxxxxxxxxxxxxx ==/UserConfig== */ const FuckD = { wh: [ { name: "企业微信", url: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=", key: GM_getValue("Notice.wework", false), msg: { "msgtype": "markdown_v2", "markdown_v2": { get content() { return `> ${FuckD.bing.datetimeLocaleStr}\n\n ## ${GM_info.script.name}\n ${FuckD.bing.sendMSG}` } }, }, docs: "https://developer.work.weixin.qq.com/document/path/91770" }, { name: "钉钉", url: "https://oapi.dingtalk.com/robot/send?access_token=", key: GM_getValue("Notice.dingding", false), msg: { "msgtype": "markdown", "markdown": { "title": GM_info.script.name, get text() { return `> ${FuckD.bing.datetimeLocaleStr}\n ### ${GM_info.script.name}\n ${FuckD.bing.sendMSG}` } }, }, docs: "https://open.dingtalk.com/document/orgapp/custom-robots-send-group-messages" }, { name: "飞书", url: "https://open.feishu.cn/open-apis/bot/v2/hook/", key: GM_getValue("Notice.feishu", false), msg: { "msg_type": "interactive", "card": { "schema": "2.0", "header": { "title": { "tag": "plain_text", "content": GM_info.script.name }, "template": "orange" }, "body": { "elements": [{ "tag": "markdown", "text_align": "center", get content() { return `#### ${FuckD.bing.datetimeLocaleStr}\n ${FuckD.bing.sendMSG}` } }] } } }, docs: "https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot" }, { name: "PushMe", url: "https://push.i-i.me/?push_key=", key: GM_getValue("Notice.pushme", false), msg: { "type": "markdown", "title": `${GM_info.script.name}[#reawrds!https://rewards.bing.com/rewards.png]`, get content() { return `\n ${FuckD.bing.sendMSG}` } }, docs: "https://push.i-i.me/docs/index" }, { name: "Bark", url: "https://api.day.app/", key: GM_getValue("Notice.bark", false), msg: { "group": "rewards", "icon": "https://rewards.bing.com/rewards.png", "title": GM_info.script.name, get markdown() { return `\n ${FuckD.bing.sendMSG}` } }, docs: "https://bark.day.app/#/tutorial" }, ], ua: { pc: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.2420.81", m: "Mozilla/5.0 (Linux; Android 16; MCE16 Build/BP3A.250905.014; ) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/123.0.0.0 Mobile Safari/537.36 EdgA/123.0.2420.102", }, cookie: { bing: "", }, api: { mode: GM_getValue("Config.api", "offline"), arr: [ ["hot.baiwumm.com", { url: "https://hot.baiwumm.com/api/", hot: ["weibo", "douyin", "baidu", "toutiao", "thepaper", "qq", "netease", "zhihu"], }], ["hot.cnxiaobai.com", { url: "https://cnxiaobai.com/DailyHotApi/", hot: ["weibo", "douyin", "baidu", "toutiao", "thepaper", "qq-news", "netease-news", "zhihu"], }], ["hot.nntool.cc", { url: "https://hotapi.nntool.cc/", hot: ["weibo", "douyin", "baidu", "toutiao", "thepaper", "qq-news", "netease-news", "zhihu"], }], ], }, tasks: { sign: GM_getValue("Tasks.sign", true), read: GM_getValue("Tasks.read", true), promos: GM_getValue("Tasks.promos", true), search: GM_getValue("Tasks.search", true), }, bing: { region: "CN", status: GM_getValue("Config.lock", true), repo: "https://github.com/geoisam/FuckScripts/", time: 3210, span: GM_getValue("Config.span", 20), code: 0, token: false, error: 0, tasks: { get sign() { return FuckD.sign.date }, get read() { return FuckD.read.date }, get promos() { return FuckD.promos.date }, get search() { return FuckD.search.date }, }, mainland: 1, end: 1, }, sign: { times: 0, point: -1, end: 0, }, read: { times: 0, point: 0, end: 0, }, promos: { times: 0, token: 0, end: 0, }, search: { device: "", word: { list: [], index: 0, }, times: 0, progressNow: 0, pc: { progress: 0, max: 1, }, m: { progress: 0, max: 1, }, index: 0, end: 0, }, } const FuckF = { getRandomNum(num) { return Math.floor(Math.random() * num) }, getScopeRandomNum(min, max) { return Math.floor(Math.random() * (max + 1 - min) + min) }, getRandomArr(arr) { return arr.sort(() => { return Math.random() - 0.5 }) }, getRandomUUID(only = false) { const uuid = crypto.randomUUID() const sid = uuid.replace(/-/g, "").toUpperCase() return only ? sid : uuid }, getTimestamp(start = 0, end = 13) { const timestamp = Date.now() const num = timestamp.toString().substring(start, end) return Number(num) }, getDatetime(num = false, slash = true) { const today = new Date() const year = today.getFullYear() let month = today.getMonth() + 1 let day = today.getDate() month = month < 10 ? "0" + month : month day = day < 10 ? "0" + day : day const dateNow = num ? Number(`${year}${month}${day}`) : slash ? `${month}/${day}/${year}` : `${year}-${month}-${day}` return dateNow }, isJSON(s) { try { const j = JSON.parse(s) const p = Array.isArray(j) || (typeof j === "object" && j !== null) return p ? true : false } catch (e) { return false } }, isEdge() { return /(Edge\/|Edg\/|EdgA\/|EdgiOS\/)/i.test(navigator.userAgent); }, log(title, text, push = false) { GM_log(title + text + "🔚") if (!GM_getValue("Notice.bro", true) || !push) return GM_notification({ text: text, title: GM_info.script.name + title, onclick: () => { GM_openInTab(FuckD.bing.repo, { active: true, insert: true, setParent: true }) }, }) }, async xhr(options, only = false) { const retries = options.retries ?? 2; const retryDelay = options.retryDelay ?? 1000; let attempt = 0; while (true) { try { return await new Promise((resolve, reject) => { const seconds = FuckF.getTimestamp(); GM_xmlhttpRequest({ ...options, timeout: 15000, ontimeout() { const err = new Error(`请求超时!用时 ${(FuckF.getTimestamp() - seconds) / 1000} 秒`); err.status = 0; reject(err); }, onload(xhr) { if (xhr.status >= 200 && xhr.status < 300) { if (only) { resolve(xhr.finalUrl); } else { resolve(xhr.responseText); } } else { const redirectStatuses = [301, 302, 307, 308]; if (redirectStatuses.includes(xhr.status)) { const result = xhr.responseHeaders; const res = result.match(/Location:\s*(.*?)\s*\r?\n/i); resolve(res ? res[1] : false); } else { const err = new Error(`请求失败,用时 ${(FuckF.getTimestamp() - seconds) / 1000} 秒,状态码:${xhr.status}`); err.status = xhr.status; reject(err); } } }, onerror(err) { const error = new Error(`请求发生异常!用时 ${(FuckF.getTimestamp() - seconds) / 1000} 秒 🔛${err}`); error.status = 0; reject(error); }, }); }); } catch (e) { const status = e.status || 0; const shouldRetry = status === 0 || status === 429 || status >= 500; if (attempt >= retries || !shouldRetry) { throw e; } const delay = retryDelay * Math.pow(2, attempt) + FuckF.getScopeRandomNum(0, 250); attempt++; await new Promise(resolve => setTimeout(resolve, delay)); } } }, } FuckF.getRandomSubstring = (str, min = 20, max = 32) => { const length = str.length if (length <= min) { return str } const randomLength = FuckF.getScopeRandomNum(min, max) return str.substring(0, randomLength) } FuckF.getRandomApiHot = () => { const lastIndex = parseInt(GM_getValue("Config.index", -1)) const filteredArr = FuckD.api.hot.filter((name, index) => index != lastIndex) const randomIndex = FuckF.getRandomNum(filteredArr.length) GM_setValue("Config.index", randomIndex) return filteredArr[randomIndex] } FuckF.getCode = async (url) => { const message = "Authorize Code 获取" try { const liveCookies = await new Promise(resolve => { if (typeof GM_cookie !== "undefined") { GM_cookie("list", { url: "https://login.live.com" }, (res) => { let c = ""; (res || []).forEach((item, index) => { c += `${item.name}=${item.value}${index === (res.length - 1) ? "" : "; "}`; }); resolve(c); }); } else { resolve(""); } }); if (liveCookies) FuckD.cookie.bing = liveCookies; const result = await FuckF.xhr({ url: url, redirect: "manual", anonymous: false, headers: { "cookie": FuckD.cookie.bing, "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "accept-language": "zh-CN,zh;q=0.9,en;q=0.8", "sec-ch-ua": '"Google Chrome";v="123", "Not:A-Brand";v="8", "Chromium";v="123"', "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": '"Windows"', "sec-fetch-dest": "document", "sec-fetch-mode": "navigate", "sec-fetch-site": "none", "upgrade-insecure-requests": "1", "user-agent": FuckD.ua.pc || navigator.userAgent }, }) if (result) { const code = result.match(/M\.[^&]+/); if (code) return code[0]; } FuckF.log("🟡", `${message}失败!`) } catch (e) { FuckF.log("🔴", `${message}出错!`) } return false } FuckF.getToken = async (url) => { const message = "Refresh Token 获取" try { const result = await FuckF.xhr({ url: url }) if (result && FuckF.isJSON(result)) { const res = JSON.parse(result) const refresh = res.refresh_token const access = res.access_token if (refresh && access) { GM_setValue("Config.token", refresh) FuckD.bing.token = access return true } } FuckF.log("🟡", `${message}失败!`) } catch (e) { FuckF.log("🔴", `${message}出错!🔛${e.message}`) } return false } FuckF.renewToken = async () => { if (FuckD.bing.error > 2) return false let url, authcode, token, refreshToken = GM_getValue("Config.token", false) FuckF.okCallback = (err = false) => { if (FuckD.bing.error > 2) { FuckD.sign.end++ FuckD.read.end++ FuckF.renewToken() } FuckD.bing.error++ if (err) GM_setValue("Config.token", false) setTimeout(() => { FuckF.renewToken() }, FuckD.bing.time) } if (!refreshToken) { let message = "Authorize Code 获取成功!🔛请勿分享此授权码/链接以免个人数据泄露" url = "https://login.live.com/oauth20_authorize.srf?client_id=0000000040170455&scope=service::prod.rewardsplatform.microsoft.com::MBI_SSL&response_type=code&redirect_uri=https://login.live.com/oauth20_desktop.srf" authcode = await FuckF.getCode(url) if (!authcode) { let code = GM_getValue("Config.code", "geoisam") code = code.match(/M\.[^&]+/); if (!code) { FuckF.okCallback() } else { authcode = code[0] FuckF.log("🟢", message) } } if (authcode) { FuckF.log("🟢", message) url = `https://login.live.com/oauth20_token.srf?client_id=0000000040170455&code=${authcode}&redirect_uri=https://login.live.com/oauth20_desktop.srf&grant_type=authorization_code` token = await FuckF.getToken(url) } } else { url = `https://login.live.com/oauth20_token.srf?client_id=0000000040170455&refresh_token=${refreshToken}&scope=service::prod.rewardsplatform.microsoft.com::MBI_SSL&grant_type=REFRESH_TOKEN` token = await FuckF.getToken(url) } if (!token) { FuckF.okCallback(true) } else { return true } } FuckF.getRewardsInfo = async () => { const message = "Rewards Dashboard 获取" try { const result = await FuckF.xhr({ url: `https://rewards.bing.com/api/getuserinfo?type=1&X-Requested-With=XMLHttpRequest&_=${FuckF.getTimestamp()}`, headers: { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", "referer": "https://rewards.bing.com/", }, }) if (result && FuckF.isJSON(result)) { const res = JSON.parse(result) const data = res.dashboard if (data) return data } FuckF.log("🟡", `${message}失败!`) } catch (e) { FuckF.log("🔴", `${message}出错!🔛${e.message}`) } return false } FuckF.taskSign = async () => { if (!FuckD.tasks.sign || FuckD.sign.date == FuckD.bing.dateNowNum || FuckD.sign.times > 2 || FuckD.sign.end > 0) { FuckD.sign.end++ return true } if (FuckD.sign.point >= 0) { FuckD.sign.end++ if (FuckD.sign.date != FuckD.bing.dateNowNum) { FuckD.sign.date = FuckD.bing.dateNowNum FuckD.bing.sendMSG = `签入任务已完成!\n${FuckD.sign.point > 0 ? `✨今日签入奖励:${FuckD.sign.point}` : "🚨今日已签入,无法二次签入"}` FuckF.log("🟣", FuckD.bing.sendMSG, true) FuckF.send(FuckD.wh) } GM_setValue("Config.tasks", FuckD.bing.tasks) return true } try { const fucker = await FuckF.mainlandCheck() if (FuckD.bing.status && fucker) { FuckD.bing.code = -1 return true } const region = FuckD.bing.status ? "cn" : FuckD.bing.region.toLowerCase() const result = await FuckF.xhr({ method: "POST", url: "https://prod.rewardsplatform.microsoft.com/dapi/me/activities", headers: { "content-type": "application/json; charset=UTF-8", "user-agent": FuckD.ua.m, "authorization": `Bearer ${FuckD.bing.token}`, "x-rewards-appid": "SAAndroid/31.4.2110003555", "x-rewards-ismobile": "true", "x-rewards-country": region, "x-rewards-partnerid": "startapp", "x-rewards-flights": "rwgobig", }, data: JSON.stringify({ "amount": 1, "attributes": {}, "id": FuckF.getRandomUUID(), "type": 103, "country": region, "risk_context": {}, "channel": "SAAndroid", }), }) if (result && FuckF.isJSON(result)) { FuckD.sign.times = 0 const res = JSON.parse(result) const point = res.response.activity.p FuckD.sign.point = point ? point : 0 } else { FuckD.sign.times++ } } catch (e) { FuckF.log("🔴", `签入任务出错!🔛${e.message}`) } return false } FuckF.getReadPro = async () => { let readArr = { "max": 1, "progress": 0 } try { const result = await FuckF.xhr({ //核心修复:在这里加上了 &_=${FuckF.getTimestamp()},强制打破浏览器缓存,确保获取零点最新数据! url: `https://prod.rewardsplatform.microsoft.com/dapi/me?channel=SAAndroid&options=613&_=${FuckF.getTimestamp()}`, headers: { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", "user-agent": FuckD.ua.m, "authorization": `Bearer ${FuckD.bing.token}`, "x-rewards-appid": "SAAndroid/31.4.2110003555", "x-rewards-ismobile": "true", }, }) if (result && FuckF.isJSON(result)) { const res = JSON.parse(result) const pro = res.response.promotions if (pro) { for (const o of pro) { if (o.attributes.offerid == "ENUS_readarticle3_30points") { readArr = { "max": Number(o.attributes.max), "progress": Number(o.attributes.progress) } } } } } } catch (e) { FuckF.log("🔴", `阅读详情信息获取出错!🔛${e.message}`) } return readArr } FuckF.taskRead = async () => { if (!FuckD.tasks.read || FuckD.read.times > 2 || FuckD.read.end > 0 || (!GM_getValue("Config.keep", true) && FuckD.read.date == FuckD.bing.dateNowNum)) { FuckD.read.end++; return true; } try { const readPro = await FuckF.getReadPro(); let cur = readPro.progress || 0; let max = readPro.max || 0; if (cur >= max) { FuckD.read.end++; if (FuckD.read.date != FuckD.bing.dateNowNum) { FuckD.read.date = FuckD.bing.dateNowNum; GM_setValue("Config.tasks", FuckD.bing.tasks); FuckD.bing.sendMSG = `阅读任务已完成!\n✨今日阅读奖励:${max}/${max}`; FuckF.log("🟣", FuckD.bing.sendMSG, true); FuckF.send(FuckD.wh); } return true; } const fucker = await FuckF.mainlandCheck(); if (FuckD.bing.status && fucker) { FuckD.bing.code = -1; return true; } const region = FuckD.bing.status ? "cn" : FuckD.bing.region.toLowerCase(); FuckD.read.date = 0; const readsNeeded = Math.ceil((max - cur) / 3); for (let i = 0; i < readsNeeded; i++) { await FuckF.xhr({ method: "POST", url: "https://prod.rewardsplatform.microsoft.com/dapi/me/activities", headers: { "content-type": "application/json", "authorization": `Bearer ${FuckD.bing.token}`, "x-rewards-appid": "SAAndroid/31.4.2110003555", "x-rewards-ismobile": "true", "x-rewards-country": region, }, data: JSON.stringify({ "amount": 1, "country": region, "id": FuckF.getRandomUUID(), "type": 101, "attributes": { "offerid": "ENUS_readarticle3_30points", }, }), }); FuckF.log("📖", `正在阅读第 ${i + 1}/${readsNeeded} 篇文章...`); const waitTime = FuckF.getScopeRandomNum(3000, 7000); await new Promise(resolve => setTimeout(resolve, waitTime)); } FuckD.read.end++; if (FuckD.read.date != FuckD.bing.dateNowNum) { FuckD.read.date = FuckD.bing.dateNowNum; GM_setValue("Config.tasks", FuckD.bing.tasks); FuckD.bing.sendMSG = `阅读任务已完成!\n✨今日阅读奖励:${max}/${max}`; FuckF.log("🟣", FuckD.bing.sendMSG, true); FuckF.send(FuckD.wh); } return true; } catch (e) { FuckF.log("🔴", `阅读任务出错!🔛${e.message}`); FuckD.read.times++; return false; } } FuckF.getRewardsToken = async () => { const message = "Request Verification Token 获取" try { const result = await FuckF.xhr({ url: "https://rewards.bing.com/", headers: { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", "referer": "https://rewards.bing.com/", }, }) const tokenJSON = result.match(/"verificationToken"\s*:\s*"([^"]+)"/); if (tokenJSON) return tokenJSON[1]; const res = result.replace(/\s/g, ""); const tokenHTML = res.match(/RequestVerificationToken(.*?)value="(.*?)"/); if (tokenHTML) return tokenHTML[2]; FuckF.log("🟡", `${message}失败!`) } catch (e) { FuckF.log("🔴", `${message}出错!🔛${e.message}`) } return false } FuckF.taskPromos = async () => { if (!FuckD.tasks.promos || FuckD.promos.times > 2 || FuckD.promos.end > 0 || (!GM_getValue("Config.keep", true) && FuckD.promos.date == FuckD.bing.dateNowNum)) { FuckD.promos.end++ return true } const dashboard = await FuckF.getRewardsInfo() const requestToken = await FuckF.getRewardsToken() if (!dashboard || !requestToken) { FuckD.promos.times++ return false } let promosArr = [] let morePromos = dashboard.morePromotions let dailySetPromos = dashboard.dailySetPromotions[FuckF.getDatetime()] morePromos = Array.isArray(morePromos) ? morePromos : [] dailySetPromos = Array.isArray(dailySetPromos) ? dailySetPromos : [] for (const item of [...dailySetPromos, ...morePromos]) { if (item.complete == false && item.priority > -2 && item.exclusiveLockedFeatureStatus != "locked") { promosArr.push({ id: item.offerId, hash: item.hash, url: item.destinationUrl, }) } } if (promosArr.length < 1) { FuckD.promos.end++ if (FuckD.promos.date != FuckD.bing.dateNowNum) { FuckD.promos.date = FuckD.bing.dateNowNum FuckD.bing.sendMSG = "活动任务已完成!\n🤡具体以官网数据为准" FuckF.log("🟣", FuckD.bing.sendMSG, true) FuckF.send(FuckD.wh) } GM_setValue("Config.tasks", FuckD.bing.tasks) return true } try { const fucker = await FuckF.mainlandCheck() if (FuckD.bing.status && fucker) { FuckD.bing.code = -1 return true } FuckD.promos.date = 0 for (const item of promosArr) { FuckF.xhr({ method: "POST", url: "https://rewards.bing.com/api/reportactivity?X-Requested-With=XMLHttpRequest", headers: { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", "referer": item.url, }, data: new URLSearchParams({ "id": item.id, "hash": item.hash, "timeZone": 480, "activityAmount": 1, "dbs": 0, "form": "", "type": "", "__RequestVerificationToken": requestToken, }).toString(), }) FuckF.xhr({ method: "POST", url: `https://${FuckD.bing.host}/msrewards/api/v1/ReportActivity?ajaxreq=1`, headers: { "content-type": "application/json; charset=UTF-8", "referer": item.url, }, data: JSON.stringify({ "ActivitySubType": "quiz", "ActivityType": "notification", "OfferId": item.id, "Channel": "Bing.Com", "PartnerId": "BingTrivia", "Timezone": -480 }), }) await new Promise(resolve => setTimeout(resolve, FuckF.getScopeRandomNum(1500, 3000))) } FuckD.promos.end++ return true } catch (e) { FuckF.log("🔴", `活动任务出错!🔛${e.message}`) } FuckD.promos.times++ return false } FuckF.getQueryWord = async () => { const keywords = ["天气预报", "今日新闻", "体育赛事", "股票行情", "电影推荐", "科技资讯", "美食食谱", "旅游攻略", "历史上的今天", "健康常识"]; const baseWord = keywords[FuckF.getRandomNum(keywords.length)]; const randomSuffix = Math.random().toString(36).slice(2, 6); let sentence = `${baseWord} ${randomSuffix}`; if (FuckD.api.mode != "offline") { if (FuckD.search.word.index < 1 || FuckD.search.word.list.length < 1) { const apiHot = FuckF.getRandomApiHot() try { const result = await FuckF.xhr({ url: FuckD.api.url + apiHot }) if (result && FuckF.isJSON(result)) { const res = JSON.parse(result) if (res.code == 200) { FuckD.search.word.index = 1 for (let i = 0; i < res.data.length; i++) { FuckD.search.word.list.push(res.data[i].title) } FuckD.search.word.list = FuckF.getRandomArr(FuckD.search.word.list) sentence = FuckD.search.word.list[FuckD.search.word.index] sentence = FuckF.getRandomSubstring(sentence) return sentence } } } catch (e) { FuckF.log("🔴", `搜索词数据获取出错!🔛${e.message}`) } } else { FuckD.search.word.index++ if (FuckD.search.word.index > FuckD.search.word.list.length - 1) { FuckD.search.word.index = 0 } sentence = FuckD.search.word.list[FuckD.search.word.index] sentence = FuckF.getRandomSubstring(sentence) return sentence } FuckF.log("🟡", "当前搜索词接口异常!已临时使用随机汉字组合!") } return sentence } FuckF.taskSearch = async () => { if (!FuckD.tasks.search || FuckD.search.end > 0 || (!GM_getValue("Config.keep", true) && FuckD.search.date == FuckD.bing.dateNowNum)) { FuckD.search.end++ return true } const dashboard = await FuckF.getRewardsInfo() if (!dashboard) { FuckD.search.times++ return false } let pcReport, mReport const searchInfo = dashboard.userStatus?.counters || {}; const dailyPoint = searchInfo.dailyPoint?.[0]?.pointProgress || 0; FuckD.search.pc.progress = searchInfo.pcSearch?.[0]?.pointProgress || 0; let pcMax = searchInfo.pcSearch?.[0]?.pointProgressMax || 0; if (pcMax === 0) pcMax = 60; FuckD.search.pc.max = pcMax; pcReport = pcMax > 0 ? `\n💻电脑搜索:${FuckD.search.pc.progress}/${pcMax}` : ""; FuckD.search.m.progress = searchInfo.mobileSearch?.[0]?.pointProgress || 0; let mMax = searchInfo.mobileSearch?.[0]?.pointProgressMax || 0; if (mMax === 0) mMax = 0; FuckD.search.m.max = mMax; mReport = mMax > 0 ? `\n📱移动设备搜索:${FuckD.search.m.progress}/${mMax}` : ""; if (dailyPoint == FuckD.search.progressNow) { FuckD.search.times++ } else { FuckD.search.times = 0 FuckD.search.progressNow = dailyPoint } if (FuckD.search.pc.progress >= FuckD.search.pc.max && FuckD.search.m.progress >= FuckD.search.m.max) { FuckD.search.end++ if (FuckD.search.date != FuckD.bing.dateNowNum) { FuckD.search.date = FuckD.bing.dateNowNum FuckD.bing.sendMSG = `搜索任务已完成!${pcReport}${mReport}` FuckF.log("🟣", FuckD.bing.sendMSG, true) FuckF.send(FuckD.wh) } GM_setValue("Config.tasks", FuckD.bing.tasks) return true } if (FuckD.search.times > 2 || FuckD.search.index >= FuckD.search.limit) { FuckD.search.end++ if (FuckD.search.index < FuckD.search.limit) { FuckD.bing.sendMSG = `积分收入限制,共搜索 ${FuckD.search.index} 次!${pcReport}${mReport}` FuckF.log("🔵", FuckD.bing.sendMSG) } else { FuckD.bing.sendMSG = `本次运行正常,共搜索 ${FuckD.search.index} 次!${pcReport}${mReport}` FuckF.log("🔵", FuckD.bing.sendMSG) } FuckF.send(FuckD.wh) return true } FuckD.search.date = 0 let query, params, pcorm, headers, regionMKT = "" if (FuckD.search.pc.progress < FuckD.search.pc.max || FuckD.search.m.progress < FuckD.search.m.max) { pcorm = Math.random() > 0.6 ? false : true if (FuckD.search.pc.progress >= FuckD.search.pc.max) pcorm = false if (FuckD.search.m.progress >= FuckD.search.m.max) pcorm = true } const keyword = await FuckF.getQueryWord() try { const fucker = await FuckF.mainlandCheck() if (FuckD.bing.status && fucker) { FuckD.bing.code = -1 return true } GM_cookie("delete", { url: `https://${FuckD.bing.host}`, name: "_EDGE_S" }) GM_cookie("delete", { url: `https://${FuckD.bing.host}`, name: "_Rwho" }) GM_cookie("delete", { url: `https://${FuckD.bing.host}`, name: "_RwBf" }) if (FuckD.bing.status) regionMKT = "&mkt=zh-CN" params = `q=${encodeURIComponent(keyword)}&form=QBLH${regionMKT}` query = `https://${FuckD.bing.host}/search?${params}` if (pcorm) { FuckD.search.device = "Desktop" headers = { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", "user-agent": FuckD.ua.pc, "cookie": `_Rwho=u=d&ts=${FuckD.bing.dateNowhyphen}`, } } else { FuckD.search.device = "Mobile" headers = { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", "user-agent": FuckD.ua.m, "cookie": `_Rwho=u=m&ts=${FuckD.bing.dateNowhyphen}`, } } const result = await FuckF.xhr({ url: query, headers: { ...headers, "referer": `https://${FuckD.bing.host}/?form=QBLH`, } }) if (result) { const res = result.replace(/\s/g, "") const data0 = res.match(/,IG:"([^"]+)"/); const guid = data0 ? data0[1] : FuckF.getRandomUUID(true) const data = res.match(/class="b_algo(.*?)href="(.*?)"h="ID=(.*?)">(.*?)<\/h2/) const ncheader = `https://${FuckD.bing.host}/rewardsapp/ncheader?ver=88888888&IID=SERP.5047&IG=${guid}&ajaxreq=1` const report = `https://${FuckD.bing.host}/rewardsapp/reportActivity?IG=${guid}&IID=SERP.5047&${params}&ajaxreq=1` headers = { ...headers, "referer": query } await FuckF.xhr({ method: "POST", url: ncheader, headers: headers, data: "wb=1%3bi%3d1%3bv%3d1", }) await FuckF.xhr({ method: "POST", url: report, headers: headers, data: `url=${encodeURIComponent(query)}&V=web`, }) if (data) { const click = `https://${FuckD.bing.host}/fd/ls/GLinkPingPost.aspx?IG=${guid}&ID=${data[3]}&url=${data[2]}` await FuckF.xhr({ url: click, headers: headers }) } } } catch (e) { FuckF.log("🔴", `搜索任务出错!🔛${e.message}`) } FuckD.search.index++ return false } FuckF.mainlandCheck = async () => { const hash = ["g", "e", "o", "i", "s", "a", "m"].join("") if (!GM_info.script.header.includes(hash)) { FuckD.bing.mainland = -1 return true } const result = await FuckF.xhr({ url: `https://${FuckD.bing.host}/`, headers: { "cookie": FuckD.cookie.mkt, }, }) if (result) { const res = result.replace(/\s/g, "") const data = res.match(/Region:"(.*?)"(.*?)RevIpCC:"(.*?)"/) if (data) { const ipcc = data[3].toUpperCase() FuckD.bing.region = ipcc if (FuckD.bing.status && ipcc != "CN") { const result = await FuckF.xhr({ url: "https://disp-qryapi.3g.qq.com/v1/dispatch", headers: { "referer": "https://3g.qq.com/", }, }) if (result && FuckF.isJSON(result)) { const res = JSON.parse(result) const status = res.code FuckD.bing.ip = status == 0 ? res.extra.ip : "" FuckD.bing.ipInfo = status == 0 ? `\n🌏${res.ipInfo}` : "" } return true } } } return false } FuckF.send = async (webhook) => { const now = new Date() FuckD.bing.datetimeLocaleStr = now.toLocaleString() await Promise.all(webhook.map(async (i) => { if (!i.key) return let message = `「${i.name}」消息推送` try { const result = await FuckF.xhr({ method: "POST", url: i.url + i.key, headers: { "content-type": "application/json; charset=UTF-8", }, data: JSON.stringify(i.msg), }) if (result) FuckF.log("🟣", `${message}完成 🔛${result}`) } catch (e) { FuckF.log("🔴", `消息推送出错!🔛${e.message}`) } })) } return new Promise((resolve, reject) => { const seconds = FuckF.getTimestamp() GM_cookie("list", { url: "https://login.live.com" }, (result) => { let cookies = "" result.forEach((item, index) => { cookies = cookies + `${item.name}=${item.value}${index == result.length - 1 ? "" : "; "}` }) FuckD.cookie.bing = cookies }) GM_cookie("delete", { url: "https://bing.com", name: "_EDGE_S" }) FuckD.search.limit = FuckF.getScopeRandomNum(4, 7) FuckD.bing.dateNowNum = FuckF.getDatetime(true) FuckD.bing.dateNowhyphen = FuckF.getDatetime(false, false) const tasksArr = GM_getValue("Config.tasks", false) FuckD.sign.date = tasksArr ? tasksArr.sign : 0 FuckD.read.date = tasksArr ? tasksArr.read : 0 FuckD.promos.date = tasksArr ? tasksArr.promos : 0 FuckD.search.date = tasksArr ? tasksArr.search : 0 if (FuckD.api.mode != "offline") { const defaultApiName = "hot.baiwumm.com" const currentApiName = GM_getValue("Config.api", defaultApiName) const apiConfigMap = new Map(FuckD.api.arr) const getConfigApi = apiConfigMap.get(currentApiName) || apiConfigMap.get(defaultApiName) FuckD.api.url = getConfigApi.url FuckD.api.hot = getConfigApi.hot if (!apiConfigMap.has(currentApiName)) { GM_setValue("Config.api", "offline") FuckF.log("🟡", "当前搜索词接口配置错误!已替换为单机模式!") } } FuckF.tasksEnd = async () => { if (FuckD.bing.code < 0) { FuckD.bing.mainland-- FuckD.bing.mainland < 0 || FuckF.log("🟡", `当前 IP 非中国大陆地区,END!\n⛔${FuckD.bing.ip}-${FuckD.bing.region}${FuckD.bing.ipInfo}`, true) resolve() } const endS = !FuckD.tasks.sign || FuckD.sign.end > 0; const endR = !FuckD.tasks.read || FuckD.read.end > 0; const endP = !FuckD.tasks.promos || FuckD.promos.end > 0; const endSe = !FuckD.tasks.search || FuckD.search.end > 0; if (endS && endR && endP && endSe) { FuckD.bing.end-- if (FuckD.bing.end === 0) { const checkDone = (taskEnabled, taskDate) => !taskEnabled || taskDate == FuckD.bing.dateNowNum; const isAllDone = checkDone(FuckD.tasks.sign, FuckD.sign.date) && checkDone(FuckD.tasks.read, FuckD.read.date) && checkDone(FuckD.tasks.promos, FuckD.promos.date) && checkDone(FuckD.tasks.search, FuckD.search.date); if (isAllDone) { const allDoneDate = GM_getValue("Config.allDoneDate", 0); if (allDoneDate != FuckD.bing.dateNowNum) { GM_setValue("Config.allDoneDate", FuckD.bing.dateNowNum); let todayPoints = 0; let availablePoints = 0; const dashboard = await FuckF.getRewardsInfo(); if (dashboard && dashboard.userStatus) { availablePoints = dashboard.userStatus.availablePoints || 0; if (dashboard.userStatus.counters && dashboard.userStatus.counters.dailyPoint) { todayPoints = dashboard.userStatus.counters.dailyPoint[0].pointProgress || 0; } } const readPro = await FuckF.getReadPro(); if (readPro && readPro.progress) todayPoints += readPro.progress; if (FuckD.sign.point > 0) todayPoints += FuckD.sign.point; FuckD.bing.sendMSG = `今日所选任务已全部完成!\n✨今日共获取:${todayPoints} 积分\n💰当前总积分:${availablePoints} 积分`; FuckF.log("🎉", FuckD.bing.sendMSG, true); FuckF.send(FuckD.wh); } else { FuckF.log("💤", "今日所选任务已全部完成,继续保持休眠..."); } } else { FuckF.log("🟣", `本次运行结束!用时 ${(FuckF.getTimestamp() - seconds) / 1000} 秒`); } } resolve() } } FuckF.signStart = async () => { const result = await FuckF.taskSign() if (!result) { setTimeout(() => { FuckF.signStart() }, FuckD.bing.time) } else { FuckF.tasksEnd() } } FuckF.readStart = async () => { const result = await FuckF.taskRead() if (!result) { setTimeout(() => { FuckF.readStart() }, FuckD.bing.time) } else { FuckF.tasksEnd() } } FuckF.promosStart = async () => { const result = await FuckF.taskPromos() if (!result) { setTimeout(() => { FuckF.promosStart() }, FuckD.bing.time) } else { FuckF.tasksEnd() } } FuckF.searchStart = async () => { const result = await FuckF.taskSearch() if (!result) { let timespan = FuckD.bing.time if (FuckD.search.index < FuckD.search.limit) { const spanMIN = (FuckD.bing.span - 15) * 1000 const spanMAX = (FuckD.bing.span + 15) * 1000 timespan = FuckF.getScopeRandomNum(spanMIN, spanMAX) } FuckF.log("🔵", `第 ${FuckD.search.index}/${FuckD.search.limit} 次搜索完成\n(${FuckD.search.device}),等待 ${timespan / 1000} 秒后继续...`) setTimeout(() => { FuckF.searchStart() }, timespan) } else { FuckF.tasksEnd() } } FuckF.tasksStart = async () => { if (GM_info.script.author != "geoisam@qq.com") resolve() const host = "www.bing.com" if (!FuckD.bing.host) { if (FuckD.bing.status) { FuckD.bing.host = "cn.bing.com" } else { let url = await FuckF.xhr({ url: `https://${host}/`, headers: { "cookie": FuckD.cookie.mkt, }, }, true) url = new URL(url) FuckD.bing.host = url ? url.host : host } } const fucker = await FuckF.mainlandCheck() if (fucker) { FuckD.bing.code = -1 FuckF.tasksEnd() } else { const isKeep = GM_getValue("Config.keep", true); const needSign = FuckD.tasks.sign && (isKeep || FuckD.sign.date != FuckD.bing.dateNowNum); const needRead = FuckD.tasks.read && (isKeep || FuckD.read.date != FuckD.bing.dateNowNum); const needPromos = FuckD.tasks.promos && (isKeep || FuckD.promos.date != FuckD.bing.dateNowNum); const needSearch = FuckD.tasks.search && (isKeep || FuckD.search.date != FuckD.bing.dateNowNum); FuckF.log("🟣", `初始化运行完成!用时 ${(FuckF.getTimestamp() - seconds) / 1000} 秒`) if (needPromos || needSearch) { const result = await FuckF.getRewardsInfo() if (!result) { FuckF.log("🔴", "请检查 rewards.bing.com 登录状态!", true) resolve() } else { if (needPromos) setTimeout(() => { FuckF.promosStart() }, FuckD.bing.time) if (needSearch) { const counters = result.userStatus?.counters || {}; const pcPro = counters.pcSearch?.[0]?.pointProgress || 0; let pcMax = counters.pcSearch?.[0]?.pointProgressMax || 0; const mPro = counters.mobileSearch?.[0]?.pointProgress || 0; let mMax = counters.mobileSearch?.[0]?.pointProgressMax || 0; if (pcMax === 0) pcMax = 60; if (mMax === 0) mMax = 0; if (pcPro >= pcMax && mPro >= mMax) { FuckD.search.end++; if (FuckD.search.date != FuckD.bing.dateNowNum) { FuckD.search.date = FuckD.bing.dateNowNum; GM_setValue("Config.tasks", FuckD.bing.tasks); const pcReport = pcMax ? `\n💻电脑搜索:${pcPro}/${pcMax}` : ""; const mReport = mMax ? `\n📱移动设备搜索:${mPro}/${mMax}` : ""; FuckD.bing.sendMSG = `搜索任务已完成!${pcReport}${mReport}`; FuckF.log("🟣", FuckD.bing.sendMSG, true); FuckF.send(FuckD.wh); } FuckF.tasksEnd(); } else { const timespan = FuckF.getScopeRandomNum(7890, 123456); FuckF.log("🔵", `发现搜索积分未满,停留 ${timespan / 1000} 秒后开始补充搜索...`); setTimeout(() => { FuckF.searchStart() }, timespan); } } else { FuckF.searchStart() } } } else { FuckF.promosStart() FuckF.searchStart() } if (needSign || needRead) { const result = await FuckF.renewToken() if (!result) { const tips = "🚀授权码/链接为跳转后包含code=M.的链接(3分钟内有效),请勿分享授权码/链接以免个人数据泄露!" if (FuckF.isEdge) { FuckF.log("🔴", `Microsoft Edge 不支持自动授权!请填写授权码/链接后手动运行!\n${tips}`, true) } else { FuckF.log("🔴", `请检查 login.live.com 登录状态,或者填写授权码/链接后手动运行!\n${tips}`, true) } FuckF.tasksEnd() } else { if (needSign) setTimeout(() => { FuckF.signStart() }, FuckD.bing.time) if (needRead) setTimeout(() => { FuckF.readStart() }, FuckD.bing.time) } } else { FuckF.signStart() FuckF.readStart() } } } const isKeep = GM_getValue("Config.keep", true); const checkDone = (taskEnabled, taskDate) => !taskEnabled || taskDate == FuckD.bing.dateNowNum; const isAllDone = checkDone(FuckD.tasks.sign, FuckD.sign.date) && checkDone(FuckD.tasks.read, FuckD.read.date) && checkDone(FuckD.tasks.promos, FuckD.promos.date) && checkDone(FuckD.tasks.search, FuckD.search.date); if ((!isKeep && isAllDone) || !FuckD.bing.repo.includes("geoisam") || (!FuckD.tasks.sign && !FuckD.tasks.read && !FuckD.tasks.promos && !FuckD.tasks.search)) { if (isAllDone) { const allDoneDate = GM_getValue("Config.allDoneDate", 0); if (allDoneDate != FuckD.bing.dateNowNum) { (async () => { GM_setValue("Config.allDoneDate", FuckD.bing.dateNowNum); let todayPoints = 0; let availablePoints = 0; const dashboard = await FuckF.getRewardsInfo(); if (dashboard && dashboard.userStatus) { availablePoints = dashboard.userStatus.availablePoints || 0; if (dashboard.userStatus.counters && dashboard.userStatus.counters.dailyPoint) { todayPoints = dashboard.userStatus.counters.dailyPoint[0].pointProgress || 0; } } const readPro = await FuckF.getReadPro(); if (readPro && readPro.progress) todayPoints += readPro.progress; if (FuckD.sign.point > 0) todayPoints += FuckD.sign.point; FuckD.bing.sendMSG = `今日所选任务已全部完成!\n✨今日共获取:${todayPoints} 积分\n💰当前总积分:${availablePoints} 积分`; FuckF.log("🎉", FuckD.bing.sendMSG, true); FuckF.send(FuckD.wh); resolve(); })(); } else { FuckF.log("💤", "今日所选任务已全部完成,继续保持休眠..."); resolve(); } } else { resolve(); } } else { FuckF.tasksStart() } })