diff --git a/docker/default_task.sh b/docker/default_task.sh index 26da7f0f7f1637ddc3993b283feed27db7091bfd..f86d9a091199ad6ad15eff5804a72f0358f4c4b4 100644 --- a/docker/default_task.sh +++ b/docker/default_task.sh @@ -110,7 +110,7 @@ fi if [ $RANDOM_DELAY_MAX ]; then if [ $RANDOM_DELAY_MAX -ge 1 ]; then echo "已设置随机延迟为 $RANDOM_DELAY_MAX , 设置延迟任务中... " - sed -i "/\(jd_bean_sign.js\|jd_blueCoin.js\|jd_joy_reward.js\|jd_joy_steal.js\|jd_joy_feedPets.js\)/!s/node/sleep \$((RANDOM % \$RANDOM_DELAY_MAX)); node/g" $mergedListFile + sed -i "/\(jd_bean_sign.js\|jd_blueCoin.js\|jd_joy_reward.js\|jd_joy_steal.js\|jd_joy_feedPets.js\|jd_car_exchange.js\)/!s/node/sleep \$((RANDOM % \$RANDOM_DELAY_MAX)); node/g" $mergedListFile fi else echo "未配置随即延迟对应的环境变量,故不设置延迟任务" @@ -127,7 +127,7 @@ else sh -x /scripts/docker/shell_script_mod.sh echo "自定义远程shell脚本下载并执行结束。" else - if [ !$CUSTOM_SHELL_FILE ]; then + if [ ! -f $CUSTOM_SHELL_FILE ]; then echo "自定义shell脚本为docker挂载脚本文件,但是指定挂载文件不存在,跳过执行。" else echo "docker挂载的自定shell脚本,开始执行..." diff --git a/jdJxncShareCodes.js b/jdJxncShareCodes.js new file mode 100644 index 0000000000000000000000000000000000000000..48d1856a9ecd28a18dcd37b822dd9bfd1b2b3c86 --- /dev/null +++ b/jdJxncShareCodes.js @@ -0,0 +1,32 @@ +/* +京喜农场助力码 +此助力码要求种子 active 相同才能助力,多个账号的话可以种植同样的种子,如果种子不同的话,会自动跳过使用云端助力 +此文件为Node.js专用。其他用户请忽略 +支持京东N个账号 + */ +//云服务器腾讯云函数等NOde.js用户在此处填写京京喜农场的好友码。 +// github action用户的好友助力码填写到Action->Settings->Secrets->new Secret里面(Name填写 JxncShareCodes(此处的Name必须按此来写,不能随意更改),内容处填写助力码,填写规则如下) +// 同一个京东账号的好友助力码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例 +// 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2 +let JxncShareCodes = [ + '',//账号一的好友shareCode,不同好友中间用@符号隔开 + '',//账号二的好友shareCode,不同好友中间用@符号隔开 +] +// 判断github action里面是否有京喜农场助力码 +if (process.env.JXNCSHARECODES) { + if (process.env.JXNCSHARECODES.indexOf('&') > -1) { + console.log(`您的京喜农场助力码选择的是用&隔开\n`) + JxncShareCodes = process.env.JXNCSHARECODES.split('&'); + } else if (process.env.JXNCSHARECODES.indexOf('\n') > -1) { + console.log(`您的京喜农场助力码选择的是用换行隔开\n`) + JxncShareCodes = process.env.JXNCSHARECODES.split('\n'); + } else { + JxncShareCodes = process.env.JXNCSHARECODES.split(); + } +} else if (process.env.JD_COOKIE) { + // console.log(`由于您secret里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`) +} +for (let i = 0; i < JxncShareCodes.length; i++) { + const index = (i + 1 === 1) ? '' : (i + 1); + exports['JxncShareCode' + index] = JxncShareCodes[i]; +} diff --git a/jdJxncTokens.js b/jdJxncTokens.js new file mode 100644 index 0000000000000000000000000000000000000000..009c0bcf4785294d9e4d444b3290818af85f1d3d --- /dev/null +++ b/jdJxncTokens.js @@ -0,0 +1,29 @@ +/* +京喜农场 Tokens +此文件为Node.js专用。其他用户请忽略 +支持京东N个账号 + */ +// 每个账号 token 是一个 json,示例如下 +// {"farm_jstoken":"749a90f871adsfads8ffda7bf3b1576760","timestamp":"1610165423873","phoneid":"42c7e3dadfadsfdsaac-18f0e4f4a0cf"} +let JxncTokens = [ + '',//账号一的好友shareCode,不同好友中间用@符号隔开 + '',//账号二的好友shareCode,不同好友中间用@符号隔开 +] +// 判断github action里面是否有京喜农场 token +if (process.env.JXNCTOKENS) { + if (process.env.JXNCTOKENS.indexOf('&') > -1) { + console.log(`您的京喜农场 token 选择的是用&隔开\n`) + JxncTokens = process.env.JXNCTOKENS.split('&'); + } else if (process.env.JXNCTOKENS.indexOf('\n') > -1) { + console.log(`您的京喜农场 token 选择的是用换行隔开\n`) + JxncTokens = process.env.JXNCTOKENS.split('\n'); + } else { + JxncTokens = process.env.JXNCTOKENS.split(); + } +} else if (process.env.JD_COOKIE) { + console.log(`由于您secret里面未提供 tokens,当种植 APP 种子时,将不能正常进行任务,请提供 token 或 种植非 APP 种子!`) +} +for (let i = 0; i < JxncTokens.length; i++) { + const index = (i + 1 === 1) ? '' : (i + 1); + exports['JXNCTOKEN' + index] = JxncTokens[i]; +} diff --git a/jd_crazy_joy_coin.js b/jd_crazy_joy_coin.js index 3cebc0fb75e5a9fd06322bc2720e5db92ed6f163..d6d9c9053df60e441ccc2421c3d4d3305c968287 100644 --- a/jd_crazy_joy_coin.js +++ b/jd_crazy_joy_coin.js @@ -210,6 +210,16 @@ async function jdJxStory() { $.log(`${$.joyIds[4]} ${$.joyIds[5]} ${$.joyIds[6]} ${$.joyIds[7]}`) $.log(`${$.joyIds[8]} ${$.joyIds[9]} ${$.joyIds[10]} ${$.joyIds[11]}\n`) } + + // 如果格子全部被占有且没有可以合并的JOY,只能回收低级的JOY (没有34级JOY时才会执行) + if(checkHasFullOccupied() && !checkCanMerge() && !checkHas34Level()) { + const minJoyId = Math.min(...$.joyIds); + const boxId = $.joyIds.indexOf(minJoyId); + console.log(`格子全部被占有且没有可以合并的JOY,回收${boxId + 1}号位等级为${minJoyId}的JOY`) + await sellJoy(minJoyId, boxId); + await getJoyList(); + } + for (let i = 0; i < $.joyIds.length; ++i) { if (!$.canBuy) { $.log(`金币不足,跳过购买`) @@ -248,6 +258,31 @@ async function jdJxStory() { console.log(`当前信息:${$.bean} 京豆,${$.coin} 金币`) } +function checkHasFullOccupied() { + return !$.joyIds.includes(0); +} + +// 查询是否有34级JOY +function checkHas34Level() { + return $.joyIds.includes(34); +} + +function checkCanMerge() { + let obj = {}; + let canMerge = false; + $.joyIds.forEach((vo, idx) => { + if (vo !== 0 && vo !== 34) { + if (obj[vo]) { + obj[vo].push(idx) + canMerge = true; + } else { + obj[vo] = [idx] + } + } + }); + return canMerge; +} + function getJoyList() { $.joyIds = [] return new Promise(async resolve => { @@ -362,6 +397,38 @@ function buyJoy(joyId) { }) } +// 出售(回收)joy +function sellJoy(joyId, boxId) { + const body = {"action": "SELL", "joyId": joyId, "boxId": boxId} + return new Promise((resolve) => { + $.get(taskUrl('crazyJoy_joy_trade', JSON.stringify(body)), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + data = JSON.parse(data); + if (data.success) { + if (data.data.eventInfo) { + await openBox(data.data.eventInfo.eventType, data.data.eventInfo.eventRecordId) + $.canBuy = false + return + } + $.log(`回收${joyId}级joy成功,剩余金币【${data.data.totalCoins}】`) + $.coin = data.data.totalCoins + } else { + console.log(data.message) + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + }) +} + function hourBenefit() { let body = {"eventType": "HOUR_BENEFIT"} return new Promise(async resolve => { diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index e6de12ff78400290ce5314229bd71ef627653f82..e599bee5f57eaf4334ebee855b5336e658e10363 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -488,7 +488,7 @@ function completeTask(taskId, taskName) { function doTask(taskId) { return new Promise(async resolve => { // const url = `/newtasksys/newtasksys_front/DoTask?source=dreamfactory&bizCode=dream_factory&taskId=${taskId}&sceneval=2&g_login_type=1`; - $.get(newtasksysUrl('DoTask', taskId), (err, resp, data) => { + $.get(newtasksysUrl('DoTask', taskId, '_time,bizCode,configExtra,source,taskId'), (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) @@ -1434,11 +1434,14 @@ function taskurl(functionId, body = '') { } } } -function newtasksysUrl(functionId, taskId) { +function newtasksysUrl(functionId, taskId, stk) { let url = `${JD_API_HOST}/newtasksys/newtasksys_front/${functionId}?source=dreamfactory&bizCode=dream_factory&sceneval=2&g_login_type=1&_time=${Date.now()}&_=${Date.now()}`; if (taskId) { url += `&taskId=${taskId}`; } + if (stk) { + url += `&_stk=${stk}`; + } return { url, "headers": { diff --git a/jd_get_share_code.js b/jd_get_share_code.js index 739db5c36fc0146d2a1ad8d76c284af50fb62328..83b52a7c24416de2d0bedae27aaf38bdc510cc17 100644 --- a/jd_get_share_code.js +++ b/jd_get_share_code.js @@ -244,7 +244,7 @@ function getJxFactory(){ try { if (err) { console.log(`${JSON.stringify(err)}`); - console.log(`惊喜工厂 API请求失败,请检查网路重试`); + console.log(`京喜工厂 API请求失败,请检查网路重试`); } else { if (safeGet(data)) { data = JSON.parse(data); @@ -262,7 +262,7 @@ function getJxFactory(){ $.commodityDimId = production.commodityDimId; $.encryptPin = data.user.encryptPin; // subTitle = data.user.pin; - console.log(`【账号${$.index}(${$.nickName || $.UserName})惊喜工厂】${data.user.encryptPin}`); + console.log(`【账号${$.index}(${$.nickName || $.UserName})京喜工厂】${data.user.encryptPin}`); } } else { $.unActive = false; //标记是否开启了京喜活动或者选购了商品进行生产 @@ -289,6 +289,55 @@ function getJxFactory(){ ); }) } + +function getJxNc(){ + const JXNC_API_HOST = "https://wq.jd.com/"; + + function JXNC_taskurl(function_path, body) { + return { + url: `${JXNC_API_HOST}cubeactive/farm/${function_path}?${body}&farm_jstoken=&phoneid=×tamp=&sceneval=2&g_login_type=1&_=${Date.now()}&g_ty=ls`, + headers: { + Cookie: cookie, + Accept: `*/*`, + Connection: `keep-alive`, + Referer: `https://st.jingxi.com/pingou/dream_factory/index.html`, + 'Accept-Encoding': `gzip, deflate, br`, + Host: `wq.jd.com`, + 'Accept-Language': `zh-cn`, + }, + }; + } + + return new Promise(resolve => { + $.get( + JXNC_taskurl('query', `type=1`), + async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`); + console.log(`京喜农场 API请求失败,请检查网路重试`); + } else { + data = data.match(/try\{Query\(([\s\S]*)\)\;\}catch\(e\)\{\}/)[1]; + if (safeGet(data)) { + data = JSON.parse(data); + if (data["ret"] === 0) { + console.log(`【账号${$.index}(${$.nickName || $.UserName})京喜农场助力码】${data["smp"]}`); + console.log(`【账号${$.index}(${$.nickName || $.UserName})京喜农场active】 ${$.info.active}`); + } + } else { + console.log(`京喜农场返回值解析异常:${JSON.stringify(data)}`); + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve() + } + } + ); + }) +} + function getJdPet(){ const JDPet_API_HOST = "https://api.m.jd.com/client.action"; @@ -600,6 +649,7 @@ async function getShareCode() { console.log(`======账号${$.index}开始======`) await getJdFactory() await getJxFactory() + await getJxNc() await getJdPet() await getPlantBean() await getJDFruit() diff --git a/jd_jxnc.js b/jd_jxnc.js new file mode 100644 index 0000000000000000000000000000000000000000..035c2ea37082d088502d0de72ec632346b856f58 --- /dev/null +++ b/jd_jxnc.js @@ -0,0 +1,779 @@ +/* +特别声明: +本脚本搬运自 https://github.com/whyour/hundun/blob/master/quanx/jx_nc.js +感谢 @whyour 大佬 + +京喜农场:脚本更新地址 https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jxnc.js +更新时间:2021-01-09 20:46:10 +东东农场活动链接:https://wqsh.jd.com/sns/201912/12/jxnc/detail.html?ptag=7155.9.32&smp=b47f4790d7b2a024e75279f55f6249b9&active=jdnc_1_chelizi1205_2 +已支持IOS双京东账号,Node.js支持N个京东账号 +理论上脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js +助力码shareCode请先手动运行脚本查看打印可看到 + +==========================Quantumultx========================= +[task_local] +0 9,12,18 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jxnc.js, tag=京喜农场, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jxnc.png, enabled=true +[rewrite_local] +^https\:\/\/wq\.jd\.com\/cubeactive\/farm\/dotask url script-request-header https://raw.githubusercontent.com/whyour/hundun/master/quanx/jx_nc.cookie.js +=========================Loon============================= +[Script] +http-request ^https\:\/\/wq\.jd\.com\/cubeactive\/farm\/dotask script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jxnc_cookie.js, requires-body=false, timeout=10, tag=京喜农场cookie +cron "0 9,12,18 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jxnc.js,tag=京喜农场 + +=========================Surge============================ +京喜农场 = type=cron,cronexp="0 9,12,18 * * *",timeout=60,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jxnc.js +京喜农场cookie = type=http-request,pattern=^https\:\/\/wq\.jd\.com\/cubeactive\/farm\/dotask,requires-body=0,max-size=0,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jxnc_cookie.js + +=========================小火箭=========================== +京喜农场 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jxnc.js, cronexpr="0 9,12,18 * * *", timeout=200, enable=true + +*/ + +const $ = new Env('京喜农场'); +let notify = ''; // nodejs 发送通知脚本 +let cookieArr = []; // 用户 cookie 数组 +let currentCookie = ''; // 当前用户 cookie +let tokenNull = {'farm_jstoken': '', 'phoneid': '', 'timestamp': ''}; // 内置一份空的 token +let tokenArr = []; // 用户 token 数组 +let currentToken = {}; // 当前用户 token +const shareCode = '22bd6fbbabbaa770a45ab2607e7a1e8a@197c6094e965fdf3d33621b47719e0b1'; // 内置助力码 +let jxncShareCodeArr = []; // 用户 助力码 数组 +let currentShareCode = []; // 当前用户 要助力的助力码 +const openUrl = `openjd://virtual?params=${encodeURIComponent('{ "category": "jump", "des": "m", "url": "https://wqsh.jd.com/sns/201912/12/jxnc/detail.html?ptag=7155.9.32&smp=b47f4790d7b2a024e75279f55f6249b9&active=jdnc_1_chelizi1205_2"}',)}`; // 打开京喜农场 +let subTitle = '', message = '', option = {'open-url': openUrl}; // 消息副标题,消息正文,消息扩展参数 +const JXNC_API_HOST = 'https://wq.jd.com/'; + +$.helpTask = null; +$.allTask = []; // 任务列表 +$.info = {}; // 用户信息 +$.answer = 0; +$.drip = 0; +$.maxHelpNum = shareCode.split('@').length; // 助力 ret 1011 错误最大计数 +$.helpNum = 0; // 当前账号 助力 ret 1011 次数 + +!(async () => { + await requireConfig(); + if (!cookieArr[0]) { + $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); + return; + } + + for (let i = 0; i < cookieArr.length; i++) { + if (cookieArr[i]) { + currentCookie = cookieArr[i]; + $.UserName = decodeURIComponent(currentCookie.match(/pt_pin=(.+?);/) && currentCookie.match(/pt_pin=(.+?);/)[1]) + $.index = i + 1; + $.isLogin = true; + $.nickName = ''; + $.log(`检查【京东账号${$.index}】${$.UserName} cookie 是否有效`); + await TotalBean(); + $.log(`开始【京东账号${$.index}】${$.nickName || $.UserName}\n`); + if (!$.isLogin) { + $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"}); + if ($.isNode()) { + await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); + } + continue + } + subTitle = ''; + message = ''; + option = {}; + $.helpNum = 0; + await tokenFormat(); // 处理当前账号 token + await shareCodesFormat(); // 处理当前账号 助力码 + await jdJXNC(); // 执行当前账号 主代码流程 + } + } +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + console.log(e); + }) + .finally(() => { + $.done(); + }) + +// 加载配置 cookie token shareCode +function requireConfig() { + return new Promise(resolve => { + $.log('开始获取配置文件\n') + notify = $.isNode() ? require('./sendNotify') : ''; + //Node.js用户请在jdCookie.js处填写京东ck; + const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; + const jdTokenNode = $.isNode() ? require('./jdJxncTokens.js') : ''; + const jdJxncShareCodeNode = $.isNode() ? require('./jdJxncShareCodes.js') : ''; + //IOS等用户直接用NobyDa的jd cookie + if ($.isNode()) { + Object.keys(jdCookieNode).forEach((item) => { + if (jdCookieNode[item]) { + cookieArr.push(jdCookieNode[item]); + } + }) + if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => { + }; + } else { + cookieArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); + } + + $.log(`共${cookieArr.length}个京东账号\n`); + + if ($.isNode()) { + Object.keys(jdTokenNode).forEach((item) => { + tokenArr.push(tokenArr[item] ? JSON.parse(jxncShareCodeArr[item]) : tokenNull) + }) + } else { + tokenArr.push(...[$.getdata('jxnc_token1') || tokenNull, $.getdata('jxnc_token2') || tokenNull]); + } + + if ($.isNode()) { + Object.keys(jdJxncShareCodeNode).forEach((item) => { + if (jxncShareCodeArr[item]) { + jxncShareCodeArr.push(jxncShareCodeArr[item]) + } + }) + } + + // console.log(`jdFruitShareArr::${JSON.stringify(jdFruitShareArr)}`) + // console.log(`jdFruitShareArr账号长度::${jdFruitShareArr.length}`) + $.log(`您提供了${jxncShareCodeArr.length}个账号的京喜农场助力码`); + resolve() + }) +} + +// 查询京东账户信息(检查 cookie 是否有效) +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": currentCookie, + "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") + } + } + $.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 + } + $.nickName = data['base'].nickname; + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +// 处理当前账号token +function tokenFormat() { + return new Promise(async resolve => { + if (tokenArr[$.index - 1] && tokenArr[$.index - 1].farm_jstoken) { + currentToken = tokenArr[$.index - 1]; + } else { + currentToken = tokenNull; + } + resolve(); + }) +} + +// 处理当前账号助力码 +function shareCodesFormat() { + return new Promise(async resolve => { + // console.log(`第${$.index}个京东账号的助力码:::${jdFruitShareArr[$.index - 1]}`) + if (jxncShareCodeArr[$.index - 1]) { + currentShareCode = jxncShareCodeArr[$.index - 1].split('@'); + let length = currentShareCode.length; + if (length < 3) { + currentShareCode.push(...(shareCode.split('@').splice(0, 3 - length))); + } + } else { + $.log(`由于您第${$.index}个京东账号未提供shareCode,将采纳本脚本自带的助力码`) + currentShareCode = shareCode.split('@'); + } + $.log(`第${$.index}个京东账号将要助力的好友${JSON.stringify(currentShareCode)}`) + resolve(); + }) +} + +async function jdJXNC() { + subTitle = `【京东账号${$.index}】${$.nickName}`; + $.log(`获取用户信息 & 任务列表`); + const startInfo = await getTaskList(); + if (!startInfo) { // 未选择种子时,当前账号流程结束 + return false; + } + message += `【水果名称】${startInfo.prizename}\n`; + $.log(`【京东账号${$.index}(${$.nickName || $.UserName})的${$.name}好友互助码】 ${$.info.smp}`); + $.log(`【京东账号${$.index}(${$.nickName || $.UserName})的${$.name}种子active】 ${$.info.active}`); + await $.wait(500); + const isOk = await browserTask(); + if (!isOk) { + return false; + } + await $.wait(500); + await answerTask(); + await $.wait(500); + const endInfo = await getTaskList(); + getMessage(endInfo, startInfo); + const next = await helpFriends(); + if (next) { + await submitInviteId($.UserName); + await $.wait(500); + await createAssistUser(); + } + await showMsg() +} + +// 获取任务列表与用户信息 +function getTaskList() { + return new Promise(async resolve => { + $.get(taskUrl('query', `type=1`), async (err, resp, data) => { + try { + const res = data.match(/try\{whyour\(([\s\S]*)\)\;\}catch\(e\)\{\}/)[1]; + const {detail, msg, task = [], retmsg, ...other} = JSON.parse(res); + $.helpTask = task.filter(x => x.tasktype === 2)[0]; + $.allTask = task.filter(x => x.tasktype !== 3 && x.tasktype !== 2 && parseInt(x.left) > 0); + $.info = other; + $.log(`获取任务列表 ${retmsg} 总共${$.allTask.length}个任务!`); + if (!$.info.active) { + $.log('账号未选择种子,请先去京喜农场选择种子,选择 APP 专属种子时,必须提供 token'); + $.msg($.name, subTitle, '请先去京喜农场选择种子!\n选择app专属种子时,请参考脚本头部说明获取token,点击通知跳转', option); + if ($.isNode()) { + await notify.sendNotify(`${$.name}`, `京东账号${$.index}[${$.nickName || $.UserName}]请先去京喜农场选择种子!\n选择app专属种子时,请参考脚本头部说明获取token`); + } + resolve(false); + } + resolve(other); + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(true); + } + }); + }); +} + +function browserTask() { + return new Promise(async resolve => { + const tasks = $.allTask.filter(x => x.tasklevel !== 6); + const times = Math.max(...[...tasks].map(x => x.limit)); + for (let i = 0; i < tasks.length; i++) { + const task = tasks[i]; + $.log(`开始第${i + 1}个任务:${task.taskname}`); + const status = [0]; + for (let i = 0; i < times; i++) { + const random = Math.random() * 3; + await $.wait(random * 1000); + if (status[0] === 0) { + status[0] = await doTask(task); + } + if (status[0] !== 0) { + break; + } + } + if (status[0] === 1032) { + $.log('任务执行失败,种植的 APP 专属种子,请提供 token 或种植非 APP 种子'); + $.msg($.name, '请参考脚本头部说明获取token', '或者改中非app专属种子,点击通知跳转', option); + if ($.isNode()) { + await notify.sendNotify(`${$.name}`, `京东账号${$.index}[${$.nickName || $.UserName}]请参考脚本头部说明获取token\n或者改中非app专属种子`); + } + resolve(false); + return; + } + + $.log(`结束第${i + 1}个任务:${task.taskname}`); + } + resolve(true); + }); +} + +function answerTask() { + const _answerTask = $.allTask.filter(x => x.tasklevel === 6); + if (!_answerTask || !_answerTask[0]) return; + const {tasklevel, left, taskname, eachtimeget} = _answerTask[0]; + $.log(`准备做答题任务:${taskname}`); + return new Promise(async resolve => { + if (parseInt(left) <= 0) { + resolve(false); + $.log(`${taskname}[做任务]: 任务已完成,跳过`); + return; + } + $.get( + taskUrl( + 'dotask', + `active=${$.info.active}&answer=${$.info.indexday}:${['A', 'B', 'C', 'D'][$.answer]}:0&joinnum=${ + $.info.joinnum + }&tasklevel=${tasklevel}`, + ), + async (err, resp, data) => { + try { + const res = data.match(/try\{whyour\(([\s\S]*)\)\;\}catch\(e\)\{\}/)[1]; + let {ret, retmsg, right} = JSON.parse(res); + retmsg = retmsg !== '' ? retmsg : '成功'; + $.log(`${taskname}[做任务]:ret:${ret} retmsg:"${retmsg.indexOf('活动太火爆了') !== -1 ? '任务进行中或者未到任务时间' : retmsg}"`); + if (ret === 0 && right === 1) { + $.drip += eachtimeget; + } + if (((ret !== 0 && ret !== 1029) || retmsg === 'ans err') && $.answer < 4) { + $.answer++; + await $.wait(1000); + await answerTask(); + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(); + } + }, + ); + }); +} + +function getMessage(endInfo) { + const need = endInfo.target - endInfo.score; + const get = $.drip; + message += `【水滴】获得水滴${get} 还需水滴${need}\n`; +} + +// 提交助力码 +function submitInviteId(userName) { + return new Promise(resolve => { + if (!$.info || !$.info.smp) { + resolve(); + return; + } + $.post( + { + url: `https://api.ninesix.cc/api/jx-nc/${$.info.smp}/${encodeURIComponent(userName)}?active=${$.info.active}`, + }, + (err, resp, _data) => { + try { + const {code, data = {}} = JSON.parse(_data); + $.log(`邀请码提交:${code}`); + if (data.value) { + message += '【邀请码】提交成功!\n'; + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(); + } + }, + ); + }); +} + +// 获取随机助力码并助力 +function createAssistUser() { + return new Promise(resolve => { + $.get({url: `https://api.ninesix.cc/api/jx-nc?active=${$.info.active}`}, async (err, resp, _data) => { + try { + const {code, data = {}} = JSON.parse(_data); + $.log(`获取随机助力码 ${code}`); + if (!data.value) { + $.log('随机助力码不存在,跳过助力'); + resolve(); + return; + } + const next = await helpShareCode(data.value); + if (next) { + await createAssistUser(); + } else { + resolve(); + } + } catch (e) { + $.logErr(e, resp); + } + }); + }); +} + +// 为好友助力 return true 继续助力 false 助力结束 +async function helpFriends() { + for (let code of currentShareCode) { + if (!code) { + continue + } + const next = await helpShareCode(code); + if (!next) { + return false; + } + } + return true; +} + +// 执行助力 return true 继续助力 false 助力结束 +function helpShareCode(code) { + return new Promise(async resolve => { + $.get( + taskUrl('help', `active=${$.info.active}&joinnum=${$.info.joinnum}&smp=${code}`), + async (err, resp, data) => { + try { + const res = data.match(/try\{whyour\(([\s\S]*)\)\;\}catch\(e\)\{\}/)[1]; + const {ret, retmsg = ''} = JSON.parse(res); + $.log(`助力结果:ret=${ret} retmsg="${retmsg ? retmsg : '助力成功'}"`); + if (ret === 0 || ret === 1021) { // 0 助力成功 1021 不能助力自己 + resolve(true); + } + if (ret === 1011) { // 1011 active 不同 + $.helpNum++; + if ($.helpNum <= $.maxHelpNum) { + resolve(true); + } + } + // ret 1016 助力上限 + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(false); + } + }, + ); + }); +} + + +function doTask({tasklevel, left, taskname, eachtimeget}) { + return new Promise(async resolve => { + if (parseInt(left) <= 0) { + $.log(`${taskname}[做任务]: 任务已完成,跳过`); + resolve(false); + } + $.get( + taskUrl( + 'dotask', + `active=${$.info.active}&answer=${$.info.indexday}:D:0&joinnum=${$.info.joinnum}&tasklevel=${tasklevel}`, + ), + (err, resp, data) => { + try { + const res = data.match(/try\{whyour\(([\s\S]*)\)\;\}catch\(e\)\{\}/)[1]; + let {ret, retmsg} = JSON.parse(res); + retmsg = retmsg !== '' ? retmsg : '成功'; + $.log(`${taskname}[做任务]:ret:${ret} retmsg:"${retmsg.indexOf('活动太火爆了') !== -1 ? '任务进行中或者未到任务时间' : retmsg}"`); + if (ret === 0) { + $.drip += eachtimeget; + } + resolve(ret); + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(); + } + }, + ); + }); +} + +function taskUrl(function_path, body) { + return { + url: `${JXNC_API_HOST}cubeactive/farm/${function_path}?${body}&farm_jstoken=${currentToken['farm_jstoken']}&phoneid=${currentToken['phoneid']}×tamp=${currentToken['timestamp']}&sceneval=2&g_login_type=1&callback=whyour&_=${Date.now()}&g_ty=ls`, + headers: { + Cookie: currentCookie, + Accept: `*/*`, + Connection: `keep-alive`, + Referer: `https://st.jingxi.com/pingou/dream_factory/index.html`, + 'Accept-Encoding': `gzip, deflate, br`, + Host: `wq.jd.com`, + 'Accept-Language': `zh-cn`, + }, + }; +} + +async function showMsg() { + $.msg($.name, subTitle, message, option); + if ($.isNode()) { + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `${subTitle}\n${message}`); + } +} + +// prettier-ignore +function Env(t, e) { + 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, o) => { + 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.logSeparator = "\n", this.startTime = (new Date).getTime(), Object.assign(this, e), this.log("", `\ud83d\udd14${this.name}, \u5f00\u59cb!`) + } + + 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 o = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); + o = o ? 1 * o : 20, o = e && e.timeout ? e.timeout : o; + const [r, h] = i.split("@"), a = { + url: `http://${h}/v1/scripting/evaluate`, + body: {script_text: t, mock_type: "cron", timeout: o}, + headers: {"X-Key": r, Accept: "*/*"} + }; + this.post(a, (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), o = JSON.stringify(this.data); + s ? this.fs.writeFileSync(t, o) : i ? this.fs.writeFileSync(e, o) : this.fs.writeFileSync(t, o) + } + } + + lodash_get(t, e, s) { + const i = e.replace(/\[(\d+)\]/g, ".$1").split("."); + let o = t; + for (const t of i) if (o = Object(o)[t], void 0 === o) return s; + return o + } + + 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), o = s ? this.getval(s) : ""; + if (o) try { + const t = JSON.parse(o); + e = t ? this.lodash_get(t, i, "") : e + } catch (t) { + e = "" + } + } + return e + } + + setdata(t, e) { + let s = !1; + if (/^@/.test(e)) { + const [, i, o] = /^@(.*?)\.(.*?)$/.exec(e), r = this.getval(i), + h = i ? "null" === r ? null : r || "{}" : "{}"; + try { + const e = JSON.parse(h); + this.lodash_set(e, o, t), s = this.setval(JSON.stringify(e), i) + } catch (e) { + const r = {}; + this.lodash_set(r, o, t), s = this.setval(JSON.stringify(r), 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 = (() => { + })) { + t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"]), this.isSurge() || this.isLoon() ? $httpClient.get(t, (t, s, i) => { + !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) + }) : this.isQuanX() ? $task.fetch(t).then(t => { + const {statusCode: s, statusCode: i, headers: o, body: r} = t; + e(null, {status: s, statusCode: i, headers: o, body: r}, r) + }, t => e(t)) : this.isNode() && (this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { + try { + const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); + this.ckjar.setCookieSync(s, null), e.cookieJar = this.ckjar + } catch (t) { + this.logErr(t) + } + }).then(t => { + const {statusCode: s, statusCode: i, headers: o, body: r} = t; + e(null, {status: s, statusCode: i, headers: o, body: r}, r) + }, t => e(t))) + } + + post(t, e = (() => { + })) { + 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()) $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", $task.fetch(t).then(t => { + const {statusCode: s, statusCode: i, headers: o, body: r} = t; + e(null, {status: s, statusCode: i, headers: o, body: r}, r) + }, 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: o, body: r} = t; + e(null, {status: s, statusCode: i, headers: o, body: r}, r) + }, t => e(t)) + } + } + + time(t) { + let e = { + "M+": (new Date).getMonth() + 1, + "d+": (new Date).getDate(), + "H+": (new Date).getHours(), + "m+": (new Date).getMinutes(), + "s+": (new Date).getSeconds(), + "q+": Math.floor(((new Date).getMonth() + 3) / 3), + S: (new Date).getMilliseconds() + }; + /(y+)/.test(t) && (t = t.replace(RegExp.$1, ((new Date).getFullYear() + "").substr(4 - RegExp.$1.length))); + for (let s in e) new RegExp("(" + s + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? e[s] : ("00" + e[s]).substr(("" + e[s]).length))); + return t + } + + msg(e = t, s = "", i = "", o) { + const r = t => { + if (!t || !this.isLoon() && this.isSurge()) return t; + if ("string" == typeof t) return this.isLoon() ? t : this.isQuanX() ? {"open-url": t} : void 0; + if ("object" == typeof t) { + if (this.isLoon()) { + let e = t.openUrl || t["open-url"], s = t.mediaUrl || t["media-url"]; + return {openUrl: e, mediaUrl: s} + } + if (this.isQuanX()) { + let e = t["open-url"] || t.openUrl, s = t["media-url"] || t.mediaUrl; + return {"open-url": e, "media-url": s} + } + } + }; + this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, r(o)) : this.isQuanX() && $notify(e, s, i, r(o))); + let h = ["", "==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="]; + h.push(e), s && h.push(s), i && h.push(i), console.log(h.join("\n")), this.logs = this.logs.concat(h) + } + + 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("", `\u2757\ufe0f${this.name}, \u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name}, \u9519\u8bef!`, t) + } + + wait(t) { + return new Promise(e => setTimeout(e, t)) + } + + done(t = {}) { + const e = (new Date).getTime(), s = (e - this.startTime) / 1e3; + this.log("", `\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) + } + }(t, e) +} diff --git a/jd_pet.js b/jd_pet.js index ebe4e917c3e7c39effb560d3068d817018d5d6e8..6f11aa5b113d2ad06fda25003a61291062daac4f 100644 --- a/jd_pet.js +++ b/jd_pet.js @@ -1,6 +1,6 @@ /* 东东萌宠 更新地址: https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_pet.js -更新时间:2021-01-06 +更新时间:2021-01-10 已支持IOS双京东账号,Node.js支持N个京东账号 脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js @@ -123,7 +123,7 @@ async function jdPet() { await petSport();//遛弯 await slaveHelp();//助力好友 - //await masterHelpInit();//获取助力的信息 + await masterHelpInit();//获取助力的信息 await doTask();//做日常任务 await feedPetsAgain();//再次投食 await energyCollect();//收集好感度 @@ -263,8 +263,8 @@ async function masterHelpInit() { * 运行脚本时你自己的shareCode会在控制台输出, 可以将其分享给他人 */ async function slaveHelp() { - $.log(`\n因1.6日好友助力功能下线。故暂时屏蔽\n`) - return + //$.log(`\n因1.6日好友助力功能下线。故暂时屏蔽\n`) + //return let helpPeoples = ''; for (let code of newShareCodes) { console.log(`开始助力京东账号${$.index} - ${$.nickName}的好友: ${code}`); @@ -472,8 +472,8 @@ function shareCodesFormat() { newShareCodes = shareCodes[tempIndex].split('@'); } //因好友助力功能下线。故暂时屏蔽 - // const readShareCodeRes = await readShareCode(); - const readShareCodeRes = null; + const readShareCodeRes = await readShareCode(); + //const readShareCodeRes = null; if (readShareCodeRes && readShareCodeRes.code === 200) { newShareCodes = [...new Set([...newShareCodes, ...(readShareCodeRes.data || [])])]; } diff --git a/jd_superMarket.js b/jd_superMarket.js index 1362872f8c4a903f6ea1c3b603e4947bf5ef8c42..209beee055df7a15be4a94ad8677fe3168020845 100644 --- a/jd_superMarket.js +++ b/jd_superMarket.js @@ -2,7 +2,7 @@ * @Author: lxk0301 https://github.com/lxk0301 * @Date: 2020-08-16 18:54:16 * @Last Modified by: lxk0301 - * @Last Modified time: 2021-1-9 18:22:37 + * @Last Modified time: 2021-1-9 21:22:37 */ /* 东东超市(活动入口:京东APP-》首页-》京东超市-》底部东东超市) @@ -90,7 +90,7 @@ async function jdSuperMarket() { await daySign();//每日签到 await BeanSign()// await doDailyTask();//做日常任务,分享,关注店铺, - await help();//商圈助力 + // await help();//商圈助力 //await smtgQueryPkTask();//做商品PK任务 await drawLottery();//抽奖功能(招财进宝) // await myProductList();//货架 @@ -99,7 +99,8 @@ async function jdSuperMarket() { // await limitTimeProduct(); await smtg_shopIndex(); await smtgHome(); - await receiveUserUpgradeBlue() + await receiveUserUpgradeBlue(); + await Home(); } function showMsg() { $.log(`【京东账号${$.index}】${$.nickName}\n${message}`); @@ -706,7 +707,7 @@ async function receiveUserUpgradeBlue() { if ($.userUpgradeBlueVos && $.userUpgradeBlueVos.length > 0) { for (let item of $.userUpgradeBlueVos) { const receiveCoin = await smtgReceiveCoin({ "id": item.id, "type": 5 }) - $.log(`\n${JSON.stringify(receiveCoin)}`) + // $.log(`\n${JSON.stringify(receiveCoin)}`) if (receiveCoin && receiveCoin.data['bizCode'] === 0) { $.receiveUserUpgradeBlue += receiveCoin.data.result['receivedBlue'] } @@ -719,6 +720,15 @@ async function receiveUserUpgradeBlue() { console.log(`\n收取营业额:获得 ${res.data.result['receivedTurnover']}蓝币\n`); } } +async function Home() { + const homeRes = await smtgHome(); + if (homeRes && homeRes.data['bizCode'] === 0) { + const { result } = homeRes.data; + const { shopName, totalBlue } = result; + subTitle = shopName; + message += `【总蓝币】${totalBlue}个\n`; + } +} //=============================================脚本使用到的京东API===================================== //===新版本 @@ -734,7 +744,8 @@ function smtg_shopIndex() { } else { data = JSON.parse(data); if (data && data.data['bizCode'] === 0) { - const { shopId, shelfList } = data.data['result']; + const { shopId, shelfList, merchandiseList, level } = data.data['result']; + message += `【店铺等级】${level}\n`; if (shelfList && shelfList.length > 0) { for (let item of shelfList) { //status: 2可解锁,1可升级,-1不可解锁 @@ -753,6 +764,16 @@ function smtg_shopIndex() { } } } + if (data.data['result']['forSaleMerchandise']) { + $.log(`\n限时商品${data.data['result']['forSaleMerchandise']['name']}已上架`) + } else { + if (merchandiseList && merchandiseList.length > 0) { + for (let item of merchandiseList) { + console.log(`发现限时商品${item.name}\n`); + await smtg_sellMerchandise({"shopId": shopId,"merchandiseId": item['id'],"channel":"18"}) + } + } + } } } } catch (e) { @@ -802,6 +823,26 @@ function smtg_shelfUpgrade(body) { }) }) } +//售卖限时商品API +function smtg_sellMerchandise(body) { + return new Promise((resolve) => { + $.get(taskUrl('smtg_sellMerchandise', body), (err, resp, data) => { + try { + if (err) { + console.log('\n京小超: API查询请求失败 ‼️‼️') + console.log(JSON.stringify(err)); + } else { + $.log(`限时商品售卖结果:${data}\n`) + data = JSON.parse(data); + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + }) +} //新版东东超市 function updatePkActivityId(url = 'https://raw.githubusercontent.com/lxk0301/updateTeam/master/jd_updateTeam.json') { return new Promise(resolve => { @@ -945,8 +986,6 @@ function smtgHome() { const { shopName, totalBlue, userUpgradeBlueVos, turnoverProgress } = result; $.userUpgradeBlueVos = userUpgradeBlueVos; $.turnoverProgress = turnoverProgress;//是否可解锁 - subTitle = shopName; - message += `【总蓝币】${totalBlue}个\n`; } } } catch (e) {