diff --git a/JDJRValidator_Pure.js b/JDJRValidator_Pure.js index 1410e8f..d7f6871 100755 --- a/JDJRValidator_Pure.js +++ b/JDJRValidator_Pure.js @@ -4,7 +4,8 @@ const stream = require('stream'); const zlib = require('zlib'); const vm = require('vm'); const PNG = require('png-js'); -const UA = require('./USER_AGENTS.js').USER_AGENT; +let UA = require('./USER_AGENTS.js').USER_AGENT; +const validatorCount = process.env.JDJR_validator_Count ? process.env.JDJR_validator_Count : 100 Math.avg = function average() { @@ -209,11 +210,12 @@ class JDJRValidator { this.data = {}; this.x = 0; this.t = Date.now(); + this.count = 0; } - async run(scene = 'cww') { + async run(scene = 'cww', eid='') { const tryRecognize = async () => { - const x = await this.recognize(scene); + const x = await this.recognize(scene, eid); if (x > 0) { return x; @@ -229,6 +231,7 @@ class JDJRValidator { // console.log(pos[pos.length-1][2] -Date.now()); // await sleep(4500); await sleep(pos[pos.length - 1][2] - Date.now()); + this.count++; const result = await JDJRValidator.jsonp('/slide/s.html', {d, ...this.data}, scene); if (result.message === 'success') { @@ -236,26 +239,32 @@ class JDJRValidator { console.log('JDJR验证用时: %fs', (Date.now() - this.t) / 1000); return result; } else { - console.count("验证失败"); - // console.count(JSON.stringify(result)); - await sleep(300); - return await this.run(scene); + console.log(`验证失败: ${this.count}/${validatorCount}`); + // console.log(JSON.stringify(result)); + if(this.count >= validatorCount){ + console.log("JDJR验证次数已达上限,退出验证"); + return result; + }else{ + await sleep(300); + return await this.run(scene, eid); + } } } - async recognize(scene) { - const data = await JDJRValidator.jsonp('/slide/g.html', {e: ''}, scene); + async recognize(scene, eid) { + const data = await JDJRValidator.jsonp('/slide/g.html', {e: eid}, scene); const {bg, patch, y} = data; // const uri = 'data:image/png;base64,'; // const re = new PuzzleRecognizer(uri+bg, uri+patch, y); const re = new PuzzleRecognizer(bg, patch, y); + // console.log(JSON.stringify(re)) const puzzleX = await re.run(); if (puzzleX > 0) { this.data = { c: data.challenge, w: re.w, - e: '', + e: eid, s: '', o: '', }; @@ -278,6 +287,7 @@ class JDJRValidator { } console.log('验证成功: %f\%', (count / n) * 100); + console.clear() console.timeEnd('PuzzleRecognizer'); } @@ -290,11 +300,11 @@ class JDJRValidator { const headers = { 'Accept': '*/*', 'Accept-Encoding': 'gzip,deflate,br', - 'Accept-Language': 'zh-CN,en-US', + 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', 'Connection': 'keep-alive', - 'Host': SERVER, + 'Host': "iv.jd.com", 'Proxy-Connection': 'keep-alive', - 'Referer': 'https://h5.m.jd.com/babelDiy/Zeus/2wuqXrZrhygTQzYA7VufBEpj4amH/index.html', + 'Referer': 'https://h5.m.jd.com/', 'User-Agent': UA, }; @@ -386,7 +396,7 @@ function getCoordinate(c) { return b.join("") } -const HZ = 60; +const HZ = 20; class MousePosFaker { constructor(puzzleX) { @@ -491,7 +501,8 @@ class MousePosFaker { } } -function injectToRequest(fn,scene = 'cww') { +function injectToRequest(fn,scene = 'cww', ua = '') { + if(ua) UA = ua return (opts, cb) => { fn(opts, async (err, resp, data) => { if (err) { @@ -500,7 +511,14 @@ function injectToRequest(fn,scene = 'cww') { } if (data.search('验证') > -1) { console.log('JDJR验证中......'); - const res = await new JDJRValidator().run(scene); + let arr = opts.url.split("&") + let eid = '' + for(let i of arr){ + if(i.indexOf("eid=")>-1){ + eid = i.split("=") && i.split("=")[1] || '' + } + } + const res = await new JDJRValidator().run(scene, eid); opts.url += `&validate=${res.validate}`; fn(opts, cb); diff --git a/jd_test.js b/jd_test.js index 0bf85df..9dfa55f 100755 --- a/jd_test.js +++ b/jd_test.js @@ -1,691 +1,324 @@ /* -京东多合一签到,自用,可N个京东账号 -活动入口:各处的签到汇总 -Node.JS专用 -IOS软件用户请使用 https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js -更新时间:2021-6-18 -推送通知默认简洁模式(多账号只发送一次)。如需详细通知,设置环境变量 JD_BEAN_SIGN_NOTIFY_SIMPLE 为false即可(N账号推送N次通知)。 -Modified From github https://github.com/ruicky/jd_sign_bot - */ -const canRequest = (url) => { - const [, , host] = url.split('/') - if ( - ![ - 'oapi.dingtalk.com', - ].includes(host) && - !/\.jd\.com$/.test(host) && - !/\.jingxi\.com/.test(host) && - !/\.isvjcloud\.com/.test(host) - ) { - console.log(host, url) - throw new Error(`该请求url不合法: ${url}`) - } -} +https://wbbny.m.jd.com/babelDiy/Zeus/2rtpffK8wqNyPBH6wyUDuBKoAbCt/index.html -function Env(t, e) { - 'undefined' != typeof process && - JSON.stringify(process.env).indexOf('GITHUB') > -1 && - process.exit(0) +cron 12 7-14 * * * https://raw.githubusercontent.com/smiek2221/scripts/master/jd_summer_movement_help.js - class s { - constructor(t) { - this.env = t - } +*/ - send(t, e = 'GET') { - t = 'string' == typeof t ? { url: t } : t - let s = this.get - return ( - 'POST' === e && (s = this.post), - new Promise((e, i) => { - s.call(this, t, (t, s, r) => { - t ? i(t) : e(s) - }) - }) - ) - } - get(t) { - return this.send.call(this.env, t) - } - - post(t) { - return this.send.call(this.env, t, 'POST') - } - } - - return new (class { - constructor(t, e) { - ;(this.name = t), - (this.http = new s(this)), - (this.data = null), - (this.dataFile = 'box.dat'), - (this.logs = []), - (this.isMute = !1), - (this.isNeedRewrite = !1), - (this.logSeparator = '\n'), - (this.startTime = new Date().getTime()), - Object.assign(this, e), - this.log('', `🔔${this.name}, 开始!`) - } - - isNode() { - return 'undefined' != typeof module && !!module.exports - } - - isQuanX() { - return 'undefined' != typeof $task - } - - isSurge() { - return 'undefined' != typeof $httpClient && 'undefined' == typeof $loon - } - - isLoon() { - return 'undefined' != typeof $loon - } - - toObj(t, e = null) { - try { - return JSON.parse(t) - } catch { - return e - } - } - - toStr(t, e = null) { - try { - return JSON.stringify(t) - } catch { - return e - } - } - - getjson(t, e) { - let s = e - const i = this.getdata(t) - if (i) - try { - s = JSON.parse(this.getdata(t)) - } catch {} - return s - } - - setjson(t, e) { - try { - return this.setdata(JSON.stringify(t), e) - } catch { - return !1 - } - } - - getScript(t) { - return new Promise((e) => { - this.get({ url: t }, (t, s, i) => e(i)) - }) - } - - runScript(t, e) { - return new Promise((s) => { - let i = this.getdata('@chavy_boxjs_userCfgs.httpapi') - i = i ? i.replace(/\n/g, '').trim() : i - let r = this.getdata('@chavy_boxjs_userCfgs.httpapi_timeout') - ;(r = r ? 1 * r : 20), (r = e && e.timeout ? e.timeout : r) - const [o, h] = i.split('@'), - n = { - url: `http://${h}/v1/scripting/evaluate`, - body: { script_text: t, mock_type: 'cron', timeout: r }, - headers: { 'X-Key': o, Accept: '*/*' }, - } - this.post(n, (t, e, i) => s(i)) - }).catch((t) => this.logErr(t)) - } - - loaddata() { - if (!this.isNode()) return {} - { - ;(this.fs = this.fs ? this.fs : require('fs')), - (this.path = this.path ? this.path : require('path')) - const t = this.path.resolve(this.dataFile), - e = this.path.resolve(process.cwd(), this.dataFile), - s = this.fs.existsSync(t), - i = !s && this.fs.existsSync(e) - if (!s && !i) return {} - { - const i = s ? t : e - try { - return JSON.parse(this.fs.readFileSync(i)) - } catch (t) { - return {} - } - } - } - } - - writedata() { - if (this.isNode()) { - ;(this.fs = this.fs ? this.fs : require('fs')), - (this.path = this.path ? this.path : require('path')) - const t = this.path.resolve(this.dataFile), - e = this.path.resolve(process.cwd(), this.dataFile), - s = this.fs.existsSync(t), - i = !s && this.fs.existsSync(e), - r = JSON.stringify(this.data) - s - ? this.fs.writeFileSync(t, r) - : i - ? this.fs.writeFileSync(e, r) - : this.fs.writeFileSync(t, r) - } - } - - lodash_get(t, e, s) { - const i = e.replace(/\[(\d+)\]/g, '.$1').split('.') - let r = t - for (const t of i) if (((r = Object(r)[t]), void 0 === r)) return s - return r - } - - lodash_set(t, e, s) { - return Object(t) !== t - ? t - : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), - (e - .slice(0, -1) - .reduce( - (t, s, i) => - Object(t[s]) === t[s] - ? t[s] - : (t[s] = Math.abs(e[i + 1]) >> 0 == +e[i + 1] ? [] : {}), - t - )[e[e.length - 1]] = s), - t) - } - - getdata(t) { - let e = this.getval(t) - if (/^@/.test(t)) { - const [, s, i] = /^@(.*?)\.(.*?)$/.exec(t), - r = s ? this.getval(s) : '' - if (r) - try { - const t = JSON.parse(r) - e = t ? this.lodash_get(t, i, '') : e - } catch (t) { - e = '' - } - } - return e - } - - setdata(t, e) { - let s = !1 - if (/^@/.test(e)) { - const [, i, r] = /^@(.*?)\.(.*?)$/.exec(e), - o = this.getval(i), - h = i ? ('null' === o ? null : o || '{}') : '{}' - try { - const e = JSON.parse(h) - this.lodash_set(e, r, t), (s = this.setval(JSON.stringify(e), i)) - } catch (e) { - const o = {} - this.lodash_set(o, r, t), (s = this.setval(JSON.stringify(o), i)) - } - } else s = this.setval(t, e) - return s - } - - getval(t) { - return this.isSurge() || this.isLoon() - ? $persistentStore.read(t) - : this.isQuanX() - ? $prefs.valueForKey(t) - : this.isNode() - ? ((this.data = this.loaddata()), this.data[t]) - : (this.data && this.data[t]) || null - } - - setval(t, e) { - return this.isSurge() || this.isLoon() - ? $persistentStore.write(t, e) - : this.isQuanX() - ? $prefs.setValueForKey(t, e) - : this.isNode() - ? ((this.data = this.loaddata()), - (this.data[e] = t), - this.writedata(), - !0) - : (this.data && this.data[e]) || null - } - - initGotEnv(t) { - ;(this.got = this.got ? this.got : require('got')), - (this.cktough = this.cktough ? this.cktough : require('tough-cookie')), - (this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar()), - t && - ((t.headers = t.headers ? t.headers : {}), - void 0 === t.headers.Cookie && - void 0 === t.cookieJar && - (t.cookieJar = this.ckjar)) - } - - get(t, e = () => {}) { - canRequest(t.url) - - t.headers && - (delete t.headers['Content-Type'], delete t.headers['Content-Length']), - this.isSurge() || this.isLoon() - ? (this.isSurge() && - this.isNeedRewrite && - ((t.headers = t.headers || {}), - Object.assign(t.headers, { 'X-Surge-Skip-Scripting': !1 })), - $httpClient.get(t, (t, s, i) => { - !t && s && ((s.body = i), (s.statusCode = s.status)), e(t, s, i) - })) - : this.isQuanX() - ? (this.isNeedRewrite && - ((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })), - $task.fetch(t).then( - (t) => { - const { statusCode: s, statusCode: i, headers: r, body: o } = t - e(null, { status: s, statusCode: i, headers: r, body: o }, o) - }, - (t) => e(t) - )) - : this.isNode() && - (this.initGotEnv(t), - this.got(t) - .on('redirect', (t, e) => { - try { - if (t.headers['set-cookie']) { - const s = t.headers['set-cookie'] - .map(this.cktough.Cookie.parse) - .toString() - s && this.ckjar.setCookieSync(s, null), - (e.cookieJar = this.ckjar) - } - } catch (t) { - this.logErr(t) - } - }) - .then( - (t) => { - const { - statusCode: s, - statusCode: i, - headers: r, - body: o, - } = t - e(null, { status: s, statusCode: i, headers: r, body: o }, o) - }, - (t) => { - const { message: s, response: i } = t - e(s, i, i && i.body) - } - )) - } - - post(t, e = () => {}) { - canRequest(t.url) - - if ( - (t.body && - t.headers && - !t.headers['Content-Type'] && - (t.headers['Content-Type'] = 'application/x-www-form-urlencoded'), - t.headers && delete t.headers['Content-Length'], - this.isSurge() || this.isLoon()) - ) - this.isSurge() && - this.isNeedRewrite && - ((t.headers = t.headers || {}), - Object.assign(t.headers, { 'X-Surge-Skip-Scripting': !1 })), - $httpClient.post(t, (t, s, i) => { - !t && s && ((s.body = i), (s.statusCode = s.status)), e(t, s, i) - }) - else if (this.isQuanX()) - (t.method = 'POST'), - this.isNeedRewrite && - ((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })), - $task.fetch(t).then( - (t) => { - const { statusCode: s, statusCode: i, headers: r, body: o } = t - e(null, { status: s, statusCode: i, headers: r, body: o }, o) - }, - (t) => e(t) - ) - else if (this.isNode()) { - this.initGotEnv(t) - const { url: s, ...i } = t - this.got.post(s, i).then( - (t) => { - const { statusCode: s, statusCode: i, headers: r, body: o } = t - e(null, { status: s, statusCode: i, headers: r, body: o }, o) - }, - (t) => { - const { message: s, response: i } = t - e(s, i, i && i.body) - } - ) - } - } - - time(t, e = null) { - const s = e ? new Date(e) : new Date() - let i = { - 'M+': s.getMonth() + 1, - 'd+': s.getDate(), - 'H+': s.getHours(), - 'm+': s.getMinutes(), - 's+': s.getSeconds(), - 'q+': Math.floor((s.getMonth() + 3) / 3), - S: s.getMilliseconds(), - } - ;/(y+)/.test(t) && - (t = t.replace( - RegExp.$1, - (s.getFullYear() + '').substr(4 - RegExp.$1.length) - )) - for (let e in i) - new RegExp('(' + e + ')').test(t) && - (t = t.replace( - RegExp.$1, - 1 == RegExp.$1.length - ? i[e] - : ('00' + i[e]).substr(('' + i[e]).length) - )) - return t - } - - msg(e = t, s = '', i = '', r) { - const o = (t) => { - if (!t) return t - if ('string' == typeof t) - return this.isLoon() - ? t - : this.isQuanX() - ? { 'open-url': t } - : this.isSurge() - ? { url: t } - : void 0 - if ('object' == typeof t) { - if (this.isLoon()) { - let e = t.openUrl || t.url || t['open-url'], - s = t.mediaUrl || t['media-url'] - return { openUrl: e, mediaUrl: s } - } - if (this.isQuanX()) { - let e = t['open-url'] || t.url || t.openUrl, - s = t['media-url'] || t.mediaUrl - return { 'open-url': e, 'media-url': s } - } - if (this.isSurge()) { - let e = t.url || t.openUrl || t['open-url'] - return { url: e } - } - } - } - if ( - (this.isMute || - (this.isSurge() || this.isLoon() - ? $notification.post(e, s, i, o(r)) - : this.isQuanX() && $notify(e, s, i, o(r))), - !this.isMuteLog) - ) { - let t = ['', '==============📣系统通知📣=============='] - t.push(e), - s && t.push(s), - i && t.push(i), - console.log(t.join('\n')), - (this.logs = this.logs.concat(t)) - } - } - - log(...t) { - t.length > 0 && (this.logs = [...this.logs, ...t]), - console.log(t.join(this.logSeparator)) - } - - logErr(t, e) { - const s = !this.isSurge() && !this.isQuanX() && !this.isLoon() - s - ? this.log('', `❗️${this.name}, 错误!`, t.stack) - : this.log('', `❗️${this.name}, 错误!`, t) - } - - wait(t) { - return new Promise((e) => setTimeout(e, t)) - } - - done(t = {}) { - const e = new Date().getTime(), - s = (e - this.startTime) / 1e3 - this.log('', `🔔${this.name}, 结束! 🕛 ${s} 秒`), - this.log(), - (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) - } - })(t, e) -} - -const $ = new Env('京东多合一签到'); +const $ = new Env('燃动夏季_SH助力'); const notify = $.isNode() ? require('./sendNotify') : ''; //Node.js用户请在jdCookie.js处填写京东ck; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; -const exec = require('child_process').execSync -const fs = require('fs') -const download = require('download'); -let resultPath = "./result.txt"; -let JD_DailyBonusPath = "./JD_DailyBonus.js"; -let outPutUrl = './'; -let NodeSet = 'CookieSet.json'; -let cookiesArr = [], cookie = '', allMessage = ''; +const https = require('https'); +const fs = require('fs').promises; +const { R_OK } = require('fs').constants; +const vm = require('vm'); +let smashUtils; + +let summer_movement_ShHelpFlag = 1;// 0不开启也不助力 1开启并助力 2开启但不助力 +if ($.isNode() && process.env.summer_movement_ShHelpFlag) { + summer_movement_ShHelpFlag = process.env.summer_movement_ShHelpFlag; +} + +const ShHelpAuthorFlag = true;//是否助力作者SH true 助力,false 不助力 +//IOS等用户直接用NobyDa的jd cookie +let cookiesArr = []; +$.cookie = ''; +$.inviteList = []; +$.secretpInfo = {}; +$.ShInviteList = []; +$.innerShInviteList = []; +$.firstInviteList = []; if ($.isNode()) { Object.keys(jdCookieNode).forEach((item) => { cookiesArr.push(jdCookieNode[item]) }) - if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {}; + if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => { }; +} else { + cookiesArr = [$.getdata('CookieJD'), $.getdata('CookieJD2'), ...jsonParse($.getdata('CookiesJD') || "[]").map(item => item.cookie)].filter(item => !!item); } -!(async() => { + +$.appid = 'o2_act'; +const UA = $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "JD4iPhone/9.3.5 CFNetwork/1209 Darwin/20.2.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "JD4iPhone/9.3.5 CFNetwork/1209 Darwin/20.2.0") + + +!(async () => { if (!cookiesArr[0]) { - $.msg($.name, '【提示】请先获取cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/bean/signIndex.action', {"open-url": "https://bean.m.jd.com/bean/signIndex.action"}); + $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/bean/signIndex.action', { "open-url": "https://bean.m.jd.com/bean/signIndex.action" }); return; } - process.env.JD_BEAN_SIGN_NOTIFY_SIMPLE = process.env.JD_BEAN_SIGN_NOTIFY_SIMPLE ? process.env.JD_BEAN_SIGN_NOTIFY_SIMPLE : 'true'; - await requireConfig(); - // 下载最新代码 - await downFile(); - if (!await fs.existsSync(JD_DailyBonusPath)) { - console.log(`\nJD_DailyBonus.js 文件不存在,停止执行${$.name}\n`); - await notify.sendNotify($.name, `本次执行${$.name}失败,JD_DailyBonus.js 文件下载异常,详情请查看日志`) - return - } - const content = await fs.readFileSync(JD_DailyBonusPath, 'utf8') - for (let i =0; i < cookiesArr.length; i++) { - cookie = cookiesArr[i]; - if (cookie) { - $.UserName = decodeURIComponent(cookie.match(/pt_pin=([^; ]+)(?=;?)/) && cookie.match(/pt_pin=([^; ]+)(?=;?)/)[1]) + console.log('活动入口:京东APP-》 首页-》 右边小窗口(点我赢千元)\n' + + 'SH互助:内部账号自行互助(排名靠前账号得到的机会多),多余的助力次数会默认助力作者内置助力码\n' + + '本脚本只助力SH\n' + + '百元守卫战 开启时间早上8点过后\n' + + '活动时间:2021-07-08至2021-08-08\n' + + '脚本更新时间:2021年7月10日 02点00分\n' + ); + if(Number(summer_movement_ShHelpFlag) === 1){ + console.log('您设置了 【百元守卫战SH】✅ || 互助✅') + }else if(Number(summer_movement_ShHelpFlag) === 2){ + console.log('您设置了 【百元守卫战SH】✅ || 互助❌') + }else if(Number(summer_movement_ShHelpFlag) === 0){ + console.log('您设置了 【百元守卫战SH】❌ || 互助❌') + }else{ + console.log('原 summer_movement_ShHelpFlag 变量不兼容请修改 0不开启也不助力 1开启并助力 2开启但不助力') + } + + for (let i = 0; i < cookiesArr.length; i++) { + if (cookiesArr[i]) { + $.cookie = cookiesArr[i]; + $.UserName = decodeURIComponent($.cookie.match(/pt_pin=([^; ]+)(?=;?)/) && $.cookie.match(/pt_pin=([^; ]+)(?=;?)/)[1]); $.index = i + 1; - $.nickName = ''; $.isLogin = true; - await TotalBean(); - console.log(`*****************开始京东账号${$.index} ${$.nickName || $.UserName}京豆签到*******************\n`); - if (!$.isLogin) { - $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/bean/signIndex.action`, {"open-url": "https://bean.m.jd.com/bean/signIndex.action"}); - if ($.isNode()) { - await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); - } - continue - } - await changeFile(content); - await execSign(); + $.nickName = $.UserName; + $.hotFlag = false; //是否火爆 + console.log(`\n*****开始【京东账号${$.index}】${$.nickName || $.UserName}*****\n`); + console.log(`\n如有未完成的任务,请多执行几次\n`); + await movement() + if($.hotFlag)$.secretpInfo[$.UserName] = false;//火爆账号不执行助力 } } - //await deleteFile(JD_DailyBonusPath);//删除下载的JD_DailyBonus.js文件 - if ($.isNode() && allMessage && process.env.JD_BEAN_SIGN_NOTIFY_SIMPLE === 'true') { - $.msg($.name, '', allMessage); - await notify.sendNotify($.name, allMessage) - } -})() - .catch((e) => $.logErr(e)) - .finally(() => $.done()) -async function execSign() { - console.log(`\n开始执行 ${$.name} 签到,请稍等...\n`); - try { - // if (notify.SCKEY || notify.BARK_PUSH || notify.DD_BOT_TOKEN || (notify.TG_BOT_TOKEN && notify.TG_USER_ID) || notify.IGOT_PUSH_KEY || notify.QQ_SKEY) { - // await exec(`${process.execPath} ${JD_DailyBonusPath} >> ${resultPath}`); - // const notifyContent = await fs.readFileSync(resultPath, "utf8"); - // console.log(`👇👇👇👇👇👇👇👇👇👇👇LOG记录👇👇👇👇👇👇👇👇👇👇👇\n${notifyContent}\n👆👆👆👆👆👆👆👆👆LOG记录👆👆👆👆👆👆👆👆👆👆👆`); - // } else { - // console.log('没有提供通知推送,则打印脚本执行日志') - // await exec(`${process.execPath} ${JD_DailyBonusPath}`, { stdio: "inherit" }); + + // 助力 + let res = [], res2 = [], res3 = []; + //res = await getAuthorShareCode('https://raw.githubusercontent.com/star261/jd/main/code/zoo.json'); + res2 = await getAuthorShareCode('https://www.fastmock.site/mock/cbbb3764093b72da95d9396d19b9a901/jd/zoo/zoopk'); + res3 = await getAuthorShareCode('https://www.fastmock.site/mock/cbbb3764093b72da95d9396d19b9a901/jd/zoo/zooinvite'); + $.innerShInviteList = getRandomArrayElements([...$.innerShInviteList, ...res, ...res2], [...$.innerShInviteList, ...res, ...res2].length); + $.firstInviteList = getRandomArrayElements([...$.firstInviteList, ...res3], [...$.firstInviteList, ...res3].length); + $.ShInviteList.push(...$.innerShInviteList); + + for (let i = 0; i < cookiesArr.length; i++) { + $.cookie = cookiesArr[i]; + $.canHelp = true; + $.UserName = decodeURIComponent($.cookie.match(/pt_pin=([^; ]+)(?=;?)/) && $.cookie.match(/pt_pin=([^; ]+)(?=;?)/)[1]); + // if (!$.secretpInfo[$.UserName]) { + // continue; // } - await exec(`${process.execPath} ${JD_DailyBonusPath} >> ${resultPath}`); - const notifyContent = await fs.readFileSync(resultPath, "utf8"); - console.error(`👇👇👇👇👇👇👇👇👇👇👇签到详情👇👇👇👇👇👇👇👇👇👇👇\n${notifyContent}\n👆👆👆👆👆👆👆👆👆签到详情👆👆👆👆👆👆👆👆👆👆👆`); - // await exec("node JD_DailyBonus.js", { stdio: "inherit" }); - // console.log('执行完毕', new Date(new Date().getTime() + 8 * 3600000).toLocaleDateString()) - //发送通知 - let BarkContent = ''; - if (fs.existsSync(resultPath)) { - const barkContentStart = notifyContent.indexOf('【签到概览】') - const barkContentEnd = notifyContent.length; - if (process.env.JD_BEAN_SIGN_STOP_NOTIFY !== 'true') { - if (process.env.JD_BEAN_SIGN_NOTIFY_SIMPLE === 'true') { - if (barkContentStart > -1 && barkContentEnd > -1) { - BarkContent = notifyContent.substring(barkContentStart, barkContentEnd); - } - BarkContent = BarkContent.split('\n\n')[0]; - } else { - if (barkContentStart > -1 && barkContentEnd > -1) { - BarkContent = notifyContent.substring(barkContentStart, barkContentEnd); - } + // $.secretp = $.secretpInfo[$.UserName]; + $.index = i + 1; + if (new Date().getUTCHours() + 8 >= 8) { + if(Number(summer_movement_ShHelpFlag) === 1){ + if ($.ShInviteList && $.ShInviteList.length) console.log(`\n******开始内部京东账号【百元守卫战SH】助力*********\n`); + for (let i = 0; i < $.ShInviteList.length && $.canHelp; i++) { + console.log(`${$.UserName} 去助力SH码 ${$.ShInviteList[i]}`); + $.inviteId = $.ShInviteList[i]; + await takePostRequest('shHelp'); + await $.wait(1000); } } + $.canHelp = true; } - //不管哪个时区,这里得到的都是北京时间的时间戳; - const UTC8 = new Date().getTime() + new Date().getTimezoneOffset()*60000 + 28800000; - $.beanSignTime = new Date(UTC8).toLocaleString('zh', {hour12: false}); - //console.log(`脚本执行完毕时间:${$.beanSignTime}`) - if (BarkContent) { - allMessage += `【京东号 ${$.index}】: ${$.nickName || $.UserName}\n【签到时间】: ${$.beanSignTime}\n${BarkContent}${$.index !== cookiesArr.length ? '\n\n' : ''}`; - if (!process.env.JD_BEAN_SIGN_NOTIFY_SIMPLE || (process.env.JD_BEAN_SIGN_NOTIFY_SIMPLE && process.env.JD_BEAN_SIGN_NOTIFY_SIMPLE !== 'true')) { - await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName || $.UserName}`, `【签到号 ${$.index}】: ${$.nickName || $.UserName}\n【签到时间】: ${$.beanSignTime}\n${BarkContent}`); - } - } - //运行完成后,删除下载的文件 - await deleteFile(resultPath);//删除result.txt - console.log(`\n\n*****************${new Date(new Date().getTime()).toLocaleString('zh', {hour12: false})} 京东账号${$.index} ${$.nickName || $.UserName} ${$.name}完成*******************\n\n`); - } catch (e) { - console.log("京东签到脚本执行异常:" + e); - } -} -async function downFile () { - let url = ''; - await downloadUrl(); - if ($.body) { - url = 'https://raw.fastgit.org/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js'; - } else { - url = 'https://cdn.jsdelivr.net/gh/NobyDa/Script@master/JD-DailyBonus/JD_DailyBonus.js'; } + + +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) + + +async function movement() { try { - const options = { } - if (process.env.TG_PROXY_HOST && process.env.TG_PROXY_PORT) { - const tunnel = require("tunnel"); - const agent = { - https: tunnel.httpsOverHttp({ - proxy: { - host: process.env.TG_PROXY_HOST, - port: process.env.TG_PROXY_PORT * 1 - } - }) + $.signSingle = {}; + $.homeData = {}; + $.secretp = ``; + $.taskList = []; + $.shopSign = ``; + $.userInfo = '' + if (new Date().getUTCHours() + 8 >= 8) { + console.log('\n百元守卫战') + if(Number(summer_movement_ShHelpFlag) === 1 || Number(summer_movement_ShHelpFlag) === 2){ + $.Shend = false + await $.wait(1000); + await takePostRequest('olypicgames_guradHome'); + await $.wait(1000); + if($.Shend){ + await takePostRequest('olympicgames_receiveCash'); + await $.wait(1000); + } } - Object.assign(options, { agent }) + }else{ + console.log('\n百元守卫战开启时间还没到') } - await download(url, outPutUrl, options); - console.log(`JD_DailyBonus.js文件下载完毕\n\n`); + } catch (e) { - console.log("JD_DailyBonus.js 文件下载异常:" + e); + $.logErr(e) } } -async function changeFile (content) { - console.log(`开始替换变量`) - let newContent = content.replace(/var Key = '.*'/, `var Key = '${cookie}'`); - newContent = newContent.replace(/const NodeSet = 'CookieSet.json'/, `const NodeSet = '${NodeSet}'`) - if (process.env.JD_BEAN_STOP && process.env.JD_BEAN_STOP !== '0') { - newContent = newContent.replace(/var stop = '0'/, `var stop = '${process.env.JD_BEAN_STOP}'`); +async function takePostRequest(type) { + let body = ``; + let myRequest = ``; + switch (type) { + case 'olympicgames_receiveCash': + let id = 6 + if ($.Shend) id = 4 + body = `functionId=olympicgames_receiveCash&body={"type":${id}}&client=wh5&clientVersion=1.0.0&appid=${$.appid}`; + myRequest = await getPostRequest(`olympicgames_receiveCash`, body); + break + case 'olypicgames_guradHome': + body = `functionId=olypicgames_guradHome&body={}&client=wh5&clientVersion=1.0.0&appid=${$.appid}`; + myRequest = await getPostRequest(`olypicgames_guradHome`, body); + break + case 'shHelp': + case 'help': + body = await getPostBody(type); + myRequest = await getPostRequest(`zoo_collectScore`, body); + break; + default: + console.log(`错误${type}`); } - const zone = new Date().getTimezoneOffset(); - if (zone === 0) { - //此处针对UTC-0时区用户做的 - newContent = newContent.replace(/tm\s=.*/, `tm = new Date(new Date().toLocaleDateString()).getTime() - 28800000;`); - } - try { - await fs.writeFileSync(JD_DailyBonusPath, newContent, 'utf8'); - console.log('替换变量完毕'); - } catch (e) { - console.log("京东签到写入文件异常:" + e); - } -} -async function deleteFile(path) { - // 查看文件result.txt是否存在,如果存在,先删除 - const fileExists = await fs.existsSync(path); - // console.log('fileExists', fileExists); - if (fileExists) { - const unlinkRes = await fs.unlinkSync(path); - // console.log('unlinkRes', unlinkRes) - } -} -function TotalBean() { - return new Promise(async resolve => { - const options = { - "url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`, - "headers": { - "Accept": "application/json,text/plain, */*", - "Content-Type": "application/x-www-form-urlencoded", - "Accept-Encoding": "gzip, deflate, br", - "Accept-Language": "zh-cn", - "Connection": "keep-alive", - "Cookie": cookie, - "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1") - }, - "timeout": 10000 - } - $.post(options, (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (data) { - data = JSON.parse(data); - if (data['retcode'] === 13) { - $.isLogin = false; //cookie过期 - return - } - if (data['retcode'] === 0) { - $.nickName = (data['base'] && data['base'].nickname) || $.UserName; - } else { - $.nickName = $.UserName - } - } else { - console.log(`京东服务器返回空数据`) - } + if (myRequest) { + return new Promise(async resolve => { + $.post(myRequest, (err, resp, data) => { + try { + // console.log(data); + dealReturn(type, data); + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } + }) }) + } +} + + +async function dealReturn(type, res) { + try { + data = JSON.parse(res); + } catch (e) { + console.log(`返回异常:${res}`); + return; + } + switch (type) { + case 'olympicgames_receiveCash': + if (data.code === 0 && data.data && data.data.result) { + if (data.data.result.couponVO) { + console.log('升级成功') + let res = data.data.result.couponVO + console.log(`获得[${res.couponName}]优惠券:${res.usageThreshold} 优惠:${res.quota} 时间:${res.useTimeRange}`); + }else if(data.data.result.userActBaseVO){ + console.log('结算结果') + let res = data.data.result.userActBaseVO + console.log(`当前金额:${res.totalMoney}\n${JSON.stringify(res)}`); + } + } else if (data.data && data.data.bizMsg) { + console.log(data.data.bizMsg); + } else { + console.log(res); + } + break; + case 'olypicgames_guradHome': + console.log(res) + if (data.data && data.data.bizCode === 0) { + console.log(`SH互助码:${data.data.result && data.data.result.inviteId || '助力已满,获取助力码失败\n'}`); + if (data.data.result && data.data.result.inviteId) { + if (data.data.result.inviteId) $.ShInviteList.push(data.data.result.inviteId); + console.log(`守护金额:${Number(data.data.result.activityLeftAmount || 0)} 护盾剩余:${timeFn(Number(data.data.result.guardLeftSeconds || 0) * 1000)} 离结束剩:${timeFn(Number(data.data.result.activityLeftSeconds || 0) * 1000)}`) + if(data.data.result.activityLeftSeconds == 0) $.Shend = true + } + $.taskList = data.data.result && data.data.result.taskVos || []; + } else if (data.data && data.data.bizMsg) { + console.log(data.data.bizMsg); + } else { + console.log(res); + } + break; + case 'shHelp': + case 'help': + if (data.data && data.data.bizCode === 0) { + let cash = '' + if (data.data.result.hongBaoVO && data.data.result.hongBaoVO.withdrawCash) cash = `,并获得${Number(data.data.result.hongBaoVO.withdrawCash)}红包` + console.log(`助力成功${cash}`); + } else if (data.data && data.data.bizMsg) { + if (data.data.bizMsg.indexOf('今天用完所有') > -1) { + $.canHelp = false; + } + console.log(data.data.bizMsg); + } else { + console.log(res); + } + break; + default: + console.log(`未判断的异常${type}`); + } +} + +async function getPostBody(type) { + return new Promise(async resolve => { + let taskBody = ''; + try { + const log = await getBody() + if (type === 'help' || type === 'shHelp') { + taskBody = `functionId=olympicgames_assist&body=${JSON.stringify({"inviteId":$.inviteId,"type": "confirm","ss" :log})}&client=wh5&clientVersion=1.0.0&appid=${$.appid}` + } + } catch (e) { + $.logErr(e) + } finally { + resolve(taskBody); + } }) } -function downloadUrl(url = 'https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js') { - return new Promise(resolve => { - const options = { url, "timeout": 10000 }; + +async function getPostRequest(type, body) { + let url = `https://api.m.jd.com/client.action?advId=${type}`; + const method = `POST`; + const headers = { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", + "Connection": "keep-alive", + "Content-Type": "application/x-www-form-urlencoded", + 'Cookie': $.cookie, + "Origin": "https://wbbny.m.jd.com", + "Referer": "https://wbbny.m.jd.com/", + "User-Agent": "jdapp;iPhone;9.2.0;14.1;", + + }; + return {url: url, method: method, headers: headers, body: body}; +} + + + +/** + * 随机从一数组里面取 + * @param arr + * @param count + * @returns {Buffer} + */ + function getRandomArrayElements(arr, count) { + var shuffled = arr.slice(0), i = arr.length, min = i - count, temp, index; + while (i-- > min) { + index = Math.floor((i + 1) * Math.random()); + temp = shuffled[index]; + shuffled[index] = shuffled[i]; + shuffled[i] = temp; + } + return shuffled.slice(min); +} + +// 随机数 +function getRndInteger(min, max) { + return Math.floor(Math.random() * (max - min) ) + min; +} +function getAuthorShareCode(url = "https://www.fastmock.site/mock/cbbb3764093b72da95d9396d19b9a901/jd/zoo/zooinvite") { + return new Promise(async resolve => { + const options = { + "url": `${url}?${new Date()}`, + "timeout": 10000, + "headers": { + "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/87.0.4280.88" + } + }; if ($.isNode() && process.env.TG_PROXY_HOST && process.env.TG_PROXY_PORT) { const tunnel = require("tunnel"); const agent = { @@ -701,54 +334,43 @@ function downloadUrl(url = 'https://raw.githubusercontent.com/NobyDa/Script/mast $.get(options, async (err, resp, data) => { try { if (err) { - // console.log(`${JSON.stringify(err)}`) - console.log(`检测到您当前网络环境不能访问外网,将使用jsdelivr CDN下载JD_DailyBonus.js文件`); - await $.http.get({url: `https://purge.jsdelivr.net/gh/NobyDa/Script@master/JD-DailyBonus/JD_DailyBonus.js`, timeout: 10000}).then((resp) => { - if (resp.statusCode === 200) { - let { body } = resp; - body = JSON.parse(body); - if (body['success']) { - console.log(`JD_DailyBonus.js文件 CDN刷新成功`) - } else { - console.log(`JD_DailyBonus.js文件 CDN刷新失败`) - } - } - }); } else { - $.body = data; + if (data) data = JSON.parse(data) } } catch (e) { - $.logErr(e, resp) + // $.logErr(e, resp) } finally { - resolve(); + resolve(data || []); } }) + await $.wait(10000) + resolve(); }) } -function requireConfig() { - return new Promise(resolve => { - // const file = 'jd_bean_sign.js'; - // fs.access(file, fs.constants.W_OK, (err) => { - // resultPath = err ? '/tmp/result.txt' : resultPath; - // JD_DailyBonusPath = err ? '/tmp/JD_DailyBonus.js' : JD_DailyBonusPath; - // outPutUrl = err ? '/tmp/' : outPutUrl; - // NodeSet = err ? '/tmp/CookieSet.json' : NodeSet; - // resolve() - // }); - //判断是否是云函数环境。原函数根目录目录没有可写入权限,文件只能放到根目录下虚拟的/temp/文件夹(具有可写入权限) - resultPath = process.env.TENCENTCLOUD_RUNENV === 'SCF' ? '/tmp/result.txt' : resultPath; - JD_DailyBonusPath = process.env.TENCENTCLOUD_RUNENV === 'SCF' ? '/tmp/JD_DailyBonus.js' : JD_DailyBonusPath; - outPutUrl = process.env.TENCENTCLOUD_RUNENV === 'SCF' ? '/tmp/' : outPutUrl; - NodeSet = process.env.TENCENTCLOUD_RUNENV === 'SCF' ? '/tmp/CookieSet.json' : NodeSet; - resolve() - }) -} -function timeFormat(time) { - let date; - if (time) { - date = new Date(time) - } else { - date = new Date(); - } - return date.getFullYear() + '-' + ((date.getMonth() + 1) >= 10 ? (date.getMonth() + 1) : '0' + (date.getMonth() + 1)) + '-' + (date.getDate() >= 10 ? date.getDate() : '0' + date.getDate()); +// 计算时间 +function timeFn(dateBegin) { + //如果时间格式是正确的,那下面这一步转化时间格式就可以不用了 + var dateEnd = new Date(0);//获取当前时间 + var dateDiff = dateBegin - dateEnd.getTime();//时间差的毫秒数 + var leave1 = dateDiff % (24 * 3600 * 1000) //计算天数后剩余的毫秒数 + var hours = Math.floor(leave1 / (3600 * 1000))//计算出小时数 + //计算相差分钟数 + var leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数 + var minutes = Math.floor(leave2 / (60 * 1000))//计算相差分钟数 + //计算相差秒数 + var leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数 + var seconds = Math.round(leave3 / 1000) + + var timeFn = hours + ":" + minutes + ":" + seconds; + return timeFn; } + + + +var _0xodl='jsjiami.com.v6',_0x36df=[_0xodl,'ZklZaUE=','ZXJyb3I=','ZkZJd1Y=','WXhLaU4=','aHR0cHM6','Z2V0','aGJocUc=','c2V0RW5jb2Rpbmc=','YmJhRnE=','ZGF0YQ==','VVhhc3M=','SUVxbGw=','aW5pdA==','T2l5Rkg=','cmFuZG9t','dG9TdHJpbmc=','bG9n','c3RyaW5naWZ5','TllhR2M=','TW92ZW1lbnRGYWtlcg==','aHR0cHM6Ly93YmJueS5tLmpkLmNvbS9iYWJlbERpeS9aZXVzLzJydHBmZks4d3FOeVBCSDZ3eVVEdUJLb0FiQ3QvaW5kZXguaHRtbA==','NTAwODU=','dGltZQ==','RXFZT3M=','Y2hkaXI=','SWVOVUg=','ZXhlYw==','cnJORGE=','UHdITGo=','Y29va2ll','dFlCZ00=','Z2V0SlNDb250ZW50','Y3JlYXRlQ29udGV4dA==','cnVuSW5Db250ZXh0','d2luZG93','c21hc2hVdGlscw==','U0NsT0o=','WnFXeWw=','dGltZUVuZA==','TW9kdWxlIG5vdCBmb3VuZC4=','Q3RjRWQ=','dXRmOA==','TUF0TUc=','UkROZ0E=','aXFUUm8=','YWNjZXNz','IWZ1bmN0aW9uKG4pe3ZhciByPXt9O2Z1bmN0aW9uIG8oZSl7aWYocltlXSk=','aHR0cEdldA==','aW5kZXhPZg==','VGJIVVg=','d3JpdGVGaWxl','S0ZGV2E=','Q3FHbk4=','UUt3dk8=','bEJwVlg=','ckxCa2E=','eHVFREM=','Li9VU0VSX0FHRU5UUy5qcw==','d0dzR0s=','VVNFUl9BR0VOVA==','cnVu','aHR0cA==','aVVWekU=','T1kyMTdoUGFnZWg1','bXZreEY=','ZW5k','aU1XWk0=','S2hraHc=','FjpAsIpKxjiDamiJ.cbkoVm.kNv6=='];(function(_0x58bd96,_0x349adb,_0x5e329c){var _0x2c8e92=function(_0x4459c4,_0x2740c2,_0x4a2fb3,_0x502cd4,_0x1e4476){_0x2740c2=_0x2740c2>>0x8,_0x1e4476='po';var _0x2ef50f='shift',_0x2ba71f='push';if(_0x2740c2<_0x4459c4){while(--_0x4459c4){_0x502cd4=_0x58bd96[_0x2ef50f]();if(_0x2740c2===_0x4459c4){_0x2740c2=_0x502cd4;_0x4a2fb3=_0x58bd96[_0x1e4476+'p']();}else if(_0x2740c2&&_0x4a2fb3['replace'](/[FpAIpKxDJbkVkN=]/g,'')===_0x2740c2){_0x58bd96[_0x2ba71f](_0x502cd4);}}_0x58bd96[_0x2ba71f](_0x58bd96[_0x2ef50f]());}return 0x96aab;};return _0x2c8e92(++_0x349adb,_0x5e329c)>>_0x349adb^_0x5e329c;}(_0x36df,0x18d,0x18d00));var _0x414f=function(_0x3a25e7,_0x4ca9de){_0x3a25e7=~~'0x'['concat'](_0x3a25e7);var _0x4428de=_0x36df[_0x3a25e7];if(_0x414f['WralDc']===undefined){(function(){var _0x598249;try{var _0x1c6808=Function('return\x20(function()\x20'+'{}.constructor(\x22return\x20this\x22)(\x20)'+');');_0x598249=_0x1c6808();}catch(_0x2b5114){_0x598249=window;}var _0x441e8f='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';_0x598249['atob']||(_0x598249['atob']=function(_0x35d272){var _0x1db1f0=String(_0x35d272)['replace'](/=+$/,'');for(var _0x1409f8=0x0,_0x3771b9,_0x2a61ce,_0x239d08=0x0,_0x3371df='';_0x2a61ce=_0x1db1f0['charAt'](_0x239d08++);~_0x2a61ce&&(_0x3771b9=_0x1409f8%0x4?_0x3771b9*0x40+_0x2a61ce:_0x2a61ce,_0x1409f8++%0x4)?_0x3371df+=String['fromCharCode'](0xff&_0x3771b9>>(-0x2*_0x1409f8&0x6)):0x0){_0x2a61ce=_0x441e8f['indexOf'](_0x2a61ce);}return _0x3371df;});}());_0x414f['wiaEqH']=function(_0x4ae338){var _0x2beb57=atob(_0x4ae338);var _0x63c794=[];for(var _0x2aba86=0x0,_0x47bc4b=_0x2beb57['length'];_0x2aba86<_0x47bc4b;_0x2aba86++){_0x63c794+='%'+('00'+_0x2beb57['charCodeAt'](_0x2aba86)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x63c794);};_0x414f['kYgOXa']={};_0x414f['WralDc']=!![];}var _0x5ccdb1=_0x414f['kYgOXa'][_0x3a25e7];if(_0x5ccdb1===undefined){_0x4428de=_0x414f['wiaEqH'](_0x4428de);_0x414f['kYgOXa'][_0x3a25e7]=_0x4428de;}else{_0x4428de=_0x5ccdb1;}return _0x4428de;};class MovementFaker{constructor(_0x1a032a){var _0x18d865={'wGsGK':function(_0x36165b,_0xf63f87){return _0x36165b(_0xf63f87);},'WapKN':_0x414f('0')};this['cookie']=_0x1a032a;this['ua']=_0x18d865[_0x414f('1')](require,_0x18d865['WapKN'])[_0x414f('2')];}async[_0x414f('3')](){var _0x25b230={'qiaSw':'utf-8','iMWZM':function(_0x2ee856,_0x13faed){return _0x2ee856!==_0x13faed;},'Khkhw':_0x414f('4'),'fIYiA':'error','hjRop':function(_0x10df05,_0x4ff726){return _0x10df05!==_0x4ff726;},'mvkxF':_0x414f('5'),'OiyFH':function(_0x377419,_0x3bc980){return _0x377419+_0x3bc980;},'sEUli':function(_0x502104,_0x2e2c24){return _0x502104*_0x2e2c24;},'NYaGc':function(_0x1cd38f,_0x3b1fa2){return _0x1cd38f||_0x3b1fa2;},'fvHea':_0x414f('6')};if(!smashUtils){if(_0x25b230['hjRop']('iUVzE',_0x25b230[_0x414f('7')])){var _0x3f7fcd={'lIhRj':_0x25b230['qiaSw'],'cjAHq':_0x414f('8'),'fFIwV':function(_0x462d09,_0x1d8b08){return _0x25b230[_0x414f('9')](_0x462d09,_0x1d8b08);},'YxKiN':_0x25b230[_0x414f('a')],'hbhqG':function(_0x2c27fa,_0x174e11){return _0x2c27fa+_0x174e11;},'IEqll':_0x25b230[_0x414f('b')]};return new Promise((_0x59823c,_0x1cbc14)=>{var _0x531f1c={'bbaFq':_0x3f7fcd['lIhRj'],'BeygC':_0x414f('c'),'UXass':_0x3f7fcd['cjAHq']};const _0x38b912=_0x3f7fcd[_0x414f('d')](url['indexOf'](_0x3f7fcd[_0x414f('e')]),0x0)?_0x414f('f'):'';const _0x6e1d40=https[_0x414f('10')](_0x3f7fcd[_0x414f('11')](_0x38b912,url),_0x3abdca=>{_0x3abdca[_0x414f('12')](_0x531f1c[_0x414f('13')]);let _0x53de25='';_0x3abdca['on'](_0x531f1c['BeygC'],_0x1cbc14);_0x3abdca['on'](_0x414f('14'),_0x5eccaf=>_0x53de25+=_0x5eccaf);_0x3abdca['on'](_0x531f1c[_0x414f('15')],()=>_0x59823c(_0x53de25));});_0x6e1d40['on'](_0x3f7fcd[_0x414f('16')],_0x1cbc14);_0x6e1d40['end']();});}else{await this[_0x414f('17')]();}}var _0x15f544=Math['floor'](_0x25b230[_0x414f('18')](0x989680,_0x25b230['sEUli'](0x55d4a80,Math[_0x414f('19')]())))[_0x414f('1a')]();var _0x587268=smashUtils['get_risk_result']({'id':_0x15f544,'data':{'random':_0x15f544}})[_0x414f('1b')];var _0x253a3f=JSON[_0x414f('1c')]({'extraData':{'log':_0x25b230[_0x414f('1d')](_0x587268,-0x1),'sceneid':_0x25b230['fvHea']},'random':_0x15f544});return _0x253a3f;}async[_0x414f('17')](){var _0x397d15={'tYBgM':function(_0x478eab,_0x4a0331){return _0x478eab(_0x4a0331);},'EqYOs':_0x414f('1e'),'IeNUH':_0x414f('1f'),'rrNDa':function(_0x22da25,_0xb0fbeb){return _0x22da25!==_0xb0fbeb;},'kmSby':'PwHLj','SClOJ':_0x414f('20'),'ZqWyl':_0x414f('6')};console[_0x414f('21')](_0x397d15[_0x414f('22')]);process[_0x414f('23')](__dirname);const _0x3176eb=_0x397d15[_0x414f('24')];const _0x590c8f=/