diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index d66f68d1..3e147612 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -10,6 +10,8 @@ 10 0 * * * node /scripts/jd_health.js >> /scripts/logs/jd_health.log 2>&1 # PUBG游戏盛典(2020.12.13活动过期) 8 1,20 * * * node /scripts/jd_pubg.js >> /scripts/logs/jd_pubg.log 2>&1 +# 苹果超品日互动抽奖机(2020.12.14活动过期) +8 0,20 * * * node /scripts/jd_apple_live.js >> /scripts/logs/jd_apple_live.log 2>&1 ##############长期活动############## # 签到 @@ -74,3 +76,5 @@ 33 4 * * * node /scripts/jd_bean_home.js >> /scripts/logs/jd_bean_home.log 2>&1 # 京东直播(每日18豆) 10-20/5 11 * * * node /scripts/jd_live.js >> /scripts/logs/jd_live.log 2>&1 +# 京东金融签到 +10 6 * * * node /scripts/jr_sign.js >> /scripts/logs/jr_sign.log 2>&1 diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index 72139542..82b8d358 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -10,6 +10,8 @@ 10 0 * * * node /scripts/jd_health.js | ts >> /scripts/logs/jd_health.log 2>&1 # PUBG游戏盛典(2020.12.13活动过期) 8 1,20 * * * node /scripts/jd_pubg.js | ts >> /scripts/logs/jd_pubg.log 2>&1 +# 苹果超品日互动抽奖机(2020.12.14活动过期) +8 0,20 * * * node /scripts/jd_apple_live.js | ts >> /scripts/logs/jd_apple_live.log 2>&1 ##############长期活动############## # 签到 @@ -74,3 +76,5 @@ 33 4 * * * node /scripts/jd_bean_home.js | ts >> /scripts/logs/jd_bean_home.log 2>&1 # 京东直播(每日18豆) 10-20/5 11 * * * node /scripts/jd_live.js | ts >> /scripts/logs/jd_live.log 2>&1 +# 京东金融签到 +10 6 * * * node /scripts/jr_sign.js | ts >> /scripts/logs/jr_sign.log 2>&1 diff --git a/jd_818.js b/jd_818.js deleted file mode 100644 index 3f7ff7ed..00000000 --- a/jd_818.js +++ /dev/null @@ -1,935 +0,0 @@ -/* - * @Author: lxk0301 https://github.com/lxk0301 - * @Date: 2020-11-03 09:25:47 - * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-23 12:27:07 - */ -/* -京东手机狂欢城活动,每日可获得30+以上京豆(其中20京豆是往期奖励,需第一天参加活动后,第二天才能拿到) -活动时间10.21日-11.12日结束,活动23天,保底最少可以拿到690京豆 -活动地址: https://rdcseason.m.jd.com/#/index - -其中有20京豆是往期奖励,需第一天参加活动后,第二天才能拿到!!!! - - -每天0/6/12/18点逛新品/店铺/会场可获得京豆,京豆先到先得 -往期奖励一般每天都能拿20京豆 - -注:脚本运行会给我提供的助力码助力,介意者可删掉脚本第48行helpCode里面的东西。留空即可(const helpCode = []); - -支持京东双账号 -脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js -// quantumultx -[task_local] -#京东手机狂欢城 -1 0-18/6 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_818.js, tag=京东手机狂欢城, enabled=true -// Loon -[Script] -cron "1 0-18/6 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_818.js,tag=京东手机狂欢城 -// Surge -京东手机狂欢城 = type=cron,cronexp=1 0-18/6 * * *,wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_818.js - */ -const $ = new Env('京东手机狂欢城'); - -const notify = $.isNode() ? require('./sendNotify') : ''; -let jdNotify = false;//是否开启推送互助码 -//Node.js用户请在jdCookie.js处填写京东ck; -const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; - -//IOS等用户直接用NobyDa的jd cookie -let cookiesArr = [], cookie = ''; -if ($.isNode()) { - Object.keys(jdCookieNode).forEach((item) => { - cookiesArr.push(jdCookieNode[item]) - }) - if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {}; -} else { - let cookiesData = $.getdata('CookiesJD') || "[]"; - cookiesData = jsonParse(cookiesData); - cookiesArr = cookiesData.map(item => item.cookie); - cookiesArr.reverse(); - cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]); - cookiesArr.reverse(); -} - -const JD_API_HOST = 'https://rdcseason.m.jd.com/api/'; -const activeEndTime = '2020/11/11 23:59:59+08:00'; -const addUrl = 'http://jd.turinglabs.net/helpcode/create/'; -const printUrl = `http://jd.turinglabs.net/helpcode/print/20/`; -let helpCode = [] -!(async () => { - if (!cookiesArr[0]) { - $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); - return; - } - $.temp = []; - 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; - $.isLogin = true; - $.nickName = ''; - await TotalBean(); - console.log(`\n开始【京东账号${$.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`); - } else { - $.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 - } - continue - } - await JD818(); - // await getHelp(); - // await doHelp(); - // await main(); - } - } - // console.log($.temp) -})() - .catch((e) => { - $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') - }) - .finally(() => { - $.done(); - }) -async function main() { - // await getHelp(); - await Promise.all([ - getHelp(), - listGoods(), - shopInfo(), - listMeeting(), - ]); - await $.wait(10000); - await Promise.all([ - listGoods(), - shopInfo(), - listMeeting(), - doHelp(), - myRank(), - ]); - await Promise.all([ - getListJbean(), - getListRank(), - getListIntegral(), - ]); - await showMsg() -} -async function JD818() { - await getHelp(); - await listGoods();//逛新品 - await shopInfo();//逛店铺 - await listMeeting();//逛会场 - await $.wait(10000); - //再次运行一次,避免出现遗漏的问题 - await listGoods();//逛新品 - await shopInfo();//逛店铺 - await listMeeting();//逛会场 - await doHelp(); - await myRank();//领取往期排名奖励 - await getListJbean(); - await getListRank(); - await getListIntegral(); - await showMsg() -} -function listMeeting() { - const options = { - 'url': `${JD_API_HOST}task/listMeeting?t=${Date.now()}`, - 'headers': { - 'Host': 'rdcseason.m.jd.com', - 'Accept': 'application/json, text/plain, */*', - 'Connection':' keep-alive', - 'Cookie': cookie, - '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"), - 'Accept-Language': 'zh-cn', - 'Referer': `https://rdcseason.m.jd.com/?reloadWQPage=t_${Date.now()}`, - 'Accept-Encoding': 'gzip, deflate, br' - } - } - return new Promise((resolve) => { - $.get(options, async (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - // console.log('ddd----ddd', data.code) - if (data.code === 200 && data.data.meetingList) { - let integralNum = 0, jdNum = 0; - for (let item of data.data.meetingList) { - let res = await browseMeeting(item.id); - if (res.code === 200) { - let res2 = await getMeetingPrize(item.id); - integralNum += res2.data.integralNum * 1; - jdNum += res2.data.jdNum * 1; - } - // await browseMeeting('1596206323911'); - // await getMeetingPrize('1596206323911'); - } - console.log(`逛会场--获得积分:${integralNum}`) - console.log(`逛会场--获得京豆:${jdNum}`) - } - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -function listGoods() { - const options = { - 'url': `${JD_API_HOST}task/listGoods?t=${Date.now()}`, - 'headers': { - 'Host': 'rdcseason.m.jd.com', - 'Accept': 'application/json, text/plain, */*', - 'Connection':' keep-alive', - 'Cookie': cookie, - '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"), - 'Accept-Language': 'zh-cn', - 'Referer': `https://rdcseason.m.jd.com/?reloadWQPage=t_${Date.now()}`, - 'Accept-Encoding': 'gzip, deflate, br' - } - } - return new Promise( (resolve) => { - $.get(options, async (err, resp, data) => { - try { - // console.log('data1', data); - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - if (data.code === 200 && data.data.goodsList) { - let integralNum = 0, jdNum = 0; - for (let item of data.data.goodsList) { - let res = await browseGoods(item.id); - if (res.code === 200) { - let res2 = await getGoodsPrize(item.id); - // console.log('逛新品领取奖励res2', res2); - integralNum += res2.data.integralNum * 1; - jdNum += res2.data.jdNum * 1; - } - } - console.log(`逛新品获得积分:${integralNum}`) - console.log(`逛新品获得京豆:${jdNum}`) - } - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }); -} -function shopInfo() { - const options = { - 'url': `${JD_API_HOST}task/shopInfo?t=${Date.now()}`, - 'headers': { - 'Host': 'rdcseason.m.jd.com', - 'Accept': 'application/json, text/plain, */*', - 'Connection':' keep-alive', - 'Cookie': cookie, - '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"), - 'Accept-Language': 'zh-cn', - 'Referer': `https://rdcseason.m.jd.com/?reloadWQPage=t_${Date.now()}`, - 'Accept-Encoding': 'gzip, deflate, br' - } - } - return new Promise( (resolve) => { - $.get(options, async (err, resp, data) => { - try { - // console.log('data1', data); - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - if (data.code === 200 && data.data) { - let integralNum = 0, jdNum = 0; - for (let item of data.data) { - let res = await browseShop(item.shopId); - // console.log('res', res) - // res = JSON.parse(res); - // console.log('res', res.code) - if (res.code === 200) { - // console.log('---') - let res2 = await getShopPrize(item.shopId); - // console.log('res2', res2); - // res2 = JSON.parse(res2); - integralNum += res2.data.integralNum * 1; - jdNum += res2.data.jdNum * 1; - } - } - console.log(`逛店铺获得积分:${integralNum}`) - console.log(`逛店铺获得京豆:${jdNum}`) - } - } - // console.log('data1', data); - } catch (e) { - $.logErr(e, resp); - } finally { - resolve() - } - }) - }) - -} -function browseGoods(id) { - const options = { - "url": `${JD_API_HOST}task/browseGoods?t=${Date.now()}&skuId=${id}`, - "headers": { - "Host": "rdcseason.m.jd.com", - "Accept": "application/json, text/plain, */*", - "Connection": "keep-alive", - "Cookie": cookie, - "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"), - "Accept-Language": "zh-cn", - "Referer": "https://rdcseason.m.jd.com/", - "Accept-Encoding": "gzip, deflate, br" - } - } - return new Promise( (resolve) => { - $.get(options, (err, resp, data) => { - try { - // console.log('data1', data); - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - } - // console.log('data1', data); - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} - -function getGoodsPrize(id) { - const options = { - "url": `${JD_API_HOST}task/getGoodsPrize?t=${Date.now()}&skuId=${id}`, - "headers": { - "Host": "rdcseason.m.jd.com", - "Accept": "application/json, text/plain, */*", - "Connection": "keep-alive", - "Cookie": cookie, - "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"), - "Accept-Language": "zh-cn", - "Referer": "https://rdcseason.m.jd.com/", - "Accept-Encoding": "gzip, deflate, br" - } - } - return new Promise( (resolve) => { - $.get(options, (err, resp, data) => { - try { - // console.log('data1', data); - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -function browseShop(id) { - const options2 = { - "url": `${JD_API_HOST}task/browseShop`, - "body": `shopId=${id}`, - "headers": { - "Host": "rdcseason.m.jd.com", - "Accept": "application/json, text/plain, */*", - "Connection": "keep-alive", - "Cookie": cookie, - "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"), - "Accept-Language": "zh-cn", - "Referer": "https://rdcseason.m.jd.com/", - "Accept-Encoding": "gzip, deflate, br" - } - } - return new Promise( (resolve) => { - $.post(options2, (err, resp, data) => { - try { - // console.log('data1', data); - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -function getShopPrize(id) { - const options = { - "url": `${JD_API_HOST}task/getShopPrize`, - "body": `shopId=${id}`, - "headers": { - "Host": "rdcseason.m.jd.com", - "Accept": "application/json, text/plain, */*", - "Connection": "keep-alive", - "Cookie": cookie, - "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"), - "Accept-Language": "zh-cn", - "Referer": "https://rdcseason.m.jd.com/", - "Accept-Encoding": "gzip, deflate, br" - } - } - return new Promise( (resolve) => { - $.post(options, (err, resp, data) => { - try { - // console.log('getShopPrize', data); - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} - -function browseMeeting(id) { - const options2 = { - "url": `${JD_API_HOST}task/browseMeeting`, - "body": `meetingId=${id}`, - "headers": { - "Host": "rdcseason.m.jd.com", - "Accept": "application/json, text/plain, */*", - "Connection": "keep-alive", - "Cookie": cookie, - "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"), - "Accept-Language": "zh-cn", - "Referer": "https://rdcseason.m.jd.com/", - "Accept-Encoding": "gzip, deflate, br" - } - } - return new Promise( (resolve) => { - $.post(options2, (err, resp, data) => { - try { - // console.log('点击浏览会场', data); - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -function getMeetingPrize(id) { - const options = { - "url": `${JD_API_HOST}task/getMeetingPrize`, - "body": `meetingId=${id}`, - "headers": { - "Host": "rdcseason.m.jd.com", - "Accept": "application/json, text/plain, */*", - "Connection": "keep-alive", - "Cookie": cookie, - "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"), - "Accept-Language": "zh-cn", - "Referer": "https://rdcseason.m.jd.com/", - "Accept-Encoding": "gzip, deflate, br" - } - } - return new Promise( (resolve) => { - $.post(options, (err, resp, data) => { - try { - // console.log('getMeetingPrize', data); - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -function myRank() { - return new Promise(resolve => { - const options = { - "url": `${JD_API_HOST}task/myRank?t=${Date.now()}`, - "headers": { - "Host": "rdcseason.m.jd.com", - "Accept": "application/json, text/plain, */*", - "Connection": "keep-alive", - "Cookie": cookie, - "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"), - "Accept-Language": "zh-cn", - "Referer": "https://rdcseason.m.jd.com/", - "Accept-Encoding": "gzip, deflate, br" - } - } - $.jbeanNum = ''; - $.get(options, async (err, resp, data) => { - try { - // console.log('查询获奖列表data', data); - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - if (data.code === 200 && data.data.myHis) { - for (let i = 0; i < data.data.myHis.length; i++) { - $.date = data.data.myHis[0].date; - if (data.data.myHis[i].status === '21') { - await $.wait(1000); - console.log('开始领奖') - let res = await saveJbean(data.data.myHis[i].id); - // console.log('领奖结果', res) - if (res.code === 200 && res.data.rsCode === 200) { - // $.jbeanNum += Number(res.data.jbeanNum); - console.log(`${data.data.myHis[i].date}日奖励领取成功${JSON.stringify(res.data.jbeanNum)}`) - } - } - if (i === 0 && data.data.myHis[i].status === '22') { - $.jbeanNum = data.data.myHis[i].prize; - } - } - // for (let item of data.data.myHis){ - // if (item.status === '21') { - // await $.wait(1000); - // console.log('开始领奖') - // let res = await saveJbean(item.id); - // // console.log('领奖结果', res) - // if (res.code === 200 && res.data.rsCode === 200) { - // $.jbeanNum += Number(res.data.jbeanNum); - // } - // } - // } - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(data); - } - }) - }) -} -function saveJbean(id) { - return new Promise(resolve => { - const options = { - "url": `${JD_API_HOST}task/saveJbean`, - "body": `prizeId=${id}`, - "headers": { - "Host": "rdcseason.m.jd.com", - "Accept": "application/json, text/plain, */*", - "Connection": "keep-alive", - "Cookie": cookie, - "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"), - "Accept-Language": "zh-cn", - "Referer": "https://rdcseason.m.jd.com/", - "Accept-Encoding": "gzip, deflate, br" - } - } - $.post(options, (err, resp, data) => { - try { - // console.log('领取京豆结果', data); - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(data); - } - }) - }) -} -async function doHelp() { - console.log(`脚本自带助力码数量:${helpCode.length}`) - let body = '', nowTime = Date.now(), tempCode = []; - const zone = new Date().getTimezoneOffset(); - if (zone === 0) { - nowTime += 28800000;//UTC-0时区加上8个小时 - } - await updateShareCodes(); - if (!$.updatePkActivityIdRes) await updateShareCodesCDN(); - tempCode = $.updatePkActivityIdRes.shareCodes; - console.log(`是否大于当天九点🕘:${nowTime > new Date(nowTime).setHours(9, 0, 0, 0)}`) - //当天大于9:00才从API里面取收集的助力码 - if (nowTime > new Date(nowTime).setHours(9, 0, 0, 0)) body = await printAPI();//访问收集的互助码 - if (body) { - console.log(`printAPI返回助力码数量:${body.replace(/"/g, '').split(',').length}`) - tempCode = tempCode.concat(body.replace(/"/g, '').split(',')) - } - console.log(`累计助力码数量:${tempCode.length}`) - //去掉重复的 - tempCode = [...new Set(tempCode)]; - console.log(`去重后总助力码数量:${tempCode.length}`) - for (let item of tempCode) { - if (!item) continue; - const helpRes = await toHelp(item.trim()); - if (helpRes.data.status === 5) { - console.log(`助力机会已耗尽,跳出助力`); - break; - } - } -} -function printAPI() { - return new Promise(resolve => { - $.get({url: `${printUrl}`}, (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - // data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(data); - } - }) - }) -} -function toHelp(code) { - return new Promise(resolve => { - const options = { - "url": `${JD_API_HOST}task/toHelp`, - "body": `shareId=${code}`, - "headers": { - "Host": "rdcseason.m.jd.com", - "Content-Type": "application/x-www-form-urlencoded", - "Origin": "https://rdcseason.m.jd.com", - "Accept-Encoding": "gzip, deflate, br", - "Cookie": cookie, - "Connection": "keep-alive", - "Accept": "application/json, text/plain, */*", - "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"), - "Referer": "https://rdcseason.m.jd.com/", - "Content-Length": "44", - "Accept-Language": "zh-cn" - } - } - $.post(options, (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - console.log(`助力结果:${data}`); - data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(data); - } - }) - }) -} -function getHelp() { - return new Promise(resolve => { - const options = { - "url": `${JD_API_HOST}task/getHelp?t=${Date.now()}`, - "headers": { - "Host": "rdcseason.m.jd.com", - "Accept": "application/json, text/plain, */*", - "Connection": "keep-alive", - "Cookie": cookie, - "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"), - "Accept-Language": "zh-cn", - "Referer": "https://rdcseason.m.jd.com", - "Accept-Encoding": "gzip, deflate, br" - } - } - $.get(options, async (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - if (data.code === 200) { - console.log(`\n您的助力码shareId(互助码每天都是变化的)\n\n"${data.data.shareId}",\n`); - console.log(`每日9:00以后复制下面的URL链接在浏览器里面打开一次就能自动上车\n\n${addUrl}${data.data.shareId}\n`); - let ctrTemp; - if ($.isNode() && process.env.JD_818_SHAREID_NOTIFY) { - console.log(`环境变量JD_818_SHAREID_NOTIFY::${process.env.JD_818_SHAREID_NOTIFY}`) - ctrTemp = `${process.env.JD_818_SHAREID_NOTIFY}` === 'true'; - } else { - ctrTemp = `${jdNotify}` === 'true'; - } - console.log(`是否发送上车推送链接:${ctrTemp ? '是': '否'}`) - // 只在早晨9点钟触发一次 - let NowHours = new Date().getHours(); - const zone = new Date().getTimezoneOffset(); - if (zone === 0) { - NowHours += 8;//UTC-0时区加上8个小时 - } - if(ctrTemp && NowHours === 9 && $.isNode()) await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}互助码自动上车`, `[9:00之后上车]您的互助码上车链接是 ↓↓↓ \n\n ${addUrl}${data.data.shareId} \n\n ↑↑↑`, { - url: `${addUrl}${data.data.shareId}` - }) - // await $.http.get({url: `http://jd.turinglabs.net/helpcode/add/${data.data.shareId}/`}).then((resp) => { - // console.log(resp); - // return - // if (resp.statusCode === 200) { - // const { body } = resp; - // } - // }); - $.temp.push(data.data.shareId); - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(data); - } - }) - }) -} -//获取当前活动总京豆数量 -function getListJbean() { - return new Promise(resolve => { - const options = { - "url": `${JD_API_HOST}task/listJbean?pageNum=1`, - "headers": { - "Host": "rdcseason.m.jd.com", - "Accept": "application/json, text/plain, */*", - "Connection": "keep-alive", - "Cookie": cookie, - "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"), - "Accept-Language": "zh-cn", - "Referer": "https://rdcseason.m.jd.com", - "Accept-Encoding": "gzip, deflate, br" - } - } - $.get(options, async (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - if (data.code === 200) { - $.jbeanCount = data.data.jbeanCount; - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(data); - } - }) - }) -} - -function getListIntegral() { - return new Promise(resolve => { - const options = { - "url": `${JD_API_HOST}task/listIntegral?pageNum=1`, - "headers": { - "Host": "rdcseason.m.jd.com", - "Accept": "application/json, text/plain, */*", - "Connection": "keep-alive", - "Cookie": cookie, - "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"), - "Accept-Language": "zh-cn", - "Referer": "https://rdcseason.m.jd.com", - "Accept-Encoding": "gzip, deflate, br" - } - } - $.get(options, async (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - if (data.code === 200) { - $.integralCount = data.data.integralCount; - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(data); - } - }) - }) -} - -//查询今日累计积分与排名 -function getListRank() { - return new Promise(resolve => { - const options = { - "url": `${JD_API_HOST}task/listRank?t=${Date.now()}`, - "headers": { - "Host": "rdcseason.m.jd.com", - "Accept": "application/json, text/plain, */*", - "Connection": "keep-alive", - "Cookie": cookie, - "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"), - "Accept-Language": "zh-cn", - "Referer": "https://rdcseason.m.jd.com", - "Accept-Encoding": "gzip, deflate, br" - } - } - $.get(options, async (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - if (data.code === 200) { - if (data.data.my) { - $.integer = data.data.my.integer; - $.num = data.data.my.num; - } - if (data.data.last) { - $.lasNum = data.data.last.num; - } - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(data); - } - }) - }) -} -function updateShareCodes(url = 'https://raw.githubusercontent.com/lxk0301/updateTeam/master/jd_shareCodes.json') { - return new Promise(resolve => { - //https://cdn.jsdelivr.net/gh/lxk0301/updateTeam@master/jd_shareCodes.json - //https://raw.githubusercontent.com/lxk0301/updateTeam/master/jd_shareCodes.json - $.get({url}, async (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - } else { - $.updatePkActivityIdRes = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} -function updateShareCodesCDN(url = 'https://raw.fastgit.org/lxk0301/updateTeam/master/jd_shareCodes.json') { - return new Promise(resolve => { - //https://cdn.jsdelivr.net/gh/lxk0301/updateTeam@master/jd_shareCodes.json - //https://raw.githubusercontent.com/lxk0301/updateTeam/master/jd_shareCodes.json - $.get({url}, async (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - $.updatePkActivityIdRes = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} -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 : "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(); - } - }) - }) -} -async function showMsg() { - let nowTime = new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000; - if (nowTime > new Date(activeEndTime).getTime()) { - $.msg($.name, '活动已结束', `该活动累计获得京豆:${$.jbeanCount}个\niOS用户请删除此脚本\ngithub action用户请删除.github/workflows/jd_818.yml文件\n如果帮助到您可以点下🌟STAR鼓励我一下,谢谢\n咱江湖再见\nhttps://github.com/lxk0301/jd_scripts`, {"open-url": "https://github.com/lxk0301/jd_scripts"}); - if ($.isNode()) await notify.sendNotify($.name + '活动已结束', `请删除此脚本\ngithub action用户请删除.github/workflows/jd_818.yml文件\n如果帮助到您可以点下🌟STAR鼓励我一下,谢谢\n咱江湖再见\n https://github.com/lxk0301/jd_scripts`) - } else { - $.msg($.name, `京东账号${$.index} ${$.nickName || $.UserName}`, `${$.jbeanCount ? `${$.integer ? `今日获得积分:${$.integer}个\n` : ''}${$.num ? `今日排名:${$.num}\n` : ''}今日参数人数:${$.lasNum}人\n累计获得京豆:${$.jbeanCount}个🐶\n` : ''}${$.jbeanCount ? `累计获得积分:${$.integralCount}个\n` : ''}${$.jbeanNum ? `${$.date}日奖品:${$.jbeanNum}\n` : ''}具体详情点击弹窗跳转后即可查看`, {"open-url": "https://rdcseason.m.jd.com/#/hame"}); - } -} -function jsonParse(str) { - if (typeof str == "string") { - try { - return JSON.parse(str); - } catch (e) { - console.log(e); - $.msg($.name, '', '不要在BoxJS手动复制粘贴修改cookie') - return []; - } - } -} -// 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,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("",`\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 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("@"),a={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,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),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=(()=>{})){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();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=(()=>{})){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){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="",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}}}};this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r)));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_jxstory.js b/jd_jxstory.js deleted file mode 100644 index 2e923e1f..00000000 --- a/jd_jxstory.js +++ /dev/null @@ -1,670 +0,0 @@ -/* -京喜故事 -活动入口 :京喜APP->首页浮动窗口去领钱/京喜工厂-金牌厂长 -每天运行一次即可 - - -已支持IOS双京东账号,Node.js支持N个京东账号 -脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js -============Quantumultx=============== -[task_local] -#京喜故事 -10 7 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jxstory.js, tag=京喜故事, enabled=true - -================Loon============== -[Script] -cron "10 7 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jxstory.js,tag=京喜故事 - -===============Surge================= -京喜故事 = type=cron,cronexp="10 * * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jxstory.js - -============小火箭========= -京喜故事 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jxstory.js, cronexpr="10 * * * *", timeout=200, enable=true - - */ - - -const $ = new Env('京喜故事'); -const JD_API_HOST = 'https://m.jingxi.com'; - -const notify = $.isNode() ? require('./sendNotify') : ''; -let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 -const randomCount = 3; -let cookiesArr = [], cookie = '', message = ''; -const inviteCodes = ['qSDHMwUOz7onHcMyaju4KmdSXWf0dlv7LVnTt1Wzemo=@iuGNoGYvk9YdEImUAz25Wyzm7oeggrm0JSIYgZdHJGI=', 'iuGNoGYvk9YdEImUAz25Wyzm7oeggrm0JSIYgZdHJGI=']; -const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; -if ($.isNode()) { - Object.keys(jdCookieNode).forEach((item) => { - cookiesArr.push(jdCookieNode[item]) - }) - if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => { - }; -} else { - let cookiesData = $.getdata('CookiesJD') || "[]"; - cookiesData = jsonParse(cookiesData); - cookiesArr = cookiesData.map(item => item.cookie); - cookiesArr.reverse(); - cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]); - cookiesArr.reverse(); -} -!(async () => { - await requireConfig(); - if (!cookiesArr[0]) { - $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); - return; - } - 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; - $.isLogin = true; - $.nickName = ''; - message = ''; - $.ele = 0; - await TotalBean(); - console.log(`\n******开始【京东账号${$.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`); - } else { - $.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 - } - continue - } - await shareCodesFormat(); - await jdJxStory() - } - } -})() - .catch((e) => { - $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') - }) - .finally(() => { - $.done(); - }) - -async function jdJxStory() { - await userInfo() - await helpFriends() - await sign() - await taskList() - for(let i =0;i { - $.get(taskurl('SignIn', `date=${new Date().Format("yyyyMMdd")}&type=0`), async (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (safeGet(data)) { - data = JSON.parse(data); - if (data['ret'] === 0) { - console.log(`签到钞票:收取成功,获得 ${data['data']['rewardMoneyToday']}`) - message += `【签到钞票】:收取成功,获得 ${data['data']['rewardMoneyToday']}\n` - } else { - console.log(`签到钞票:收取失败,${data.msg}`) - message += `【签到钞票】收取失败,${data.msg}\n` - } - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} -// 初始化任务 -function taskList() { - return new Promise(async resolve => { - $.get(newtasksysUrl('GetUserTaskStatusList'), async (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (safeGet(data)) { - data = JSON.parse(data); - let userTaskStatusList = data['data']['userTaskStatusList']; - for (let i = 0; i < userTaskStatusList.length; i++) { - const vo = userTaskStatusList[i]; - if (vo['awardStatus'] !== 1) { - if (vo.completedTimes >= vo.targetTimes) { - console.log(`任务:${vo.description}可完成`) - await completeTask(vo.taskId, vo.taskName) - await $.wait(1000);//延迟等待一秒 - } else { - switch (vo.taskType) { - case 2: // 逛一逛任务 - case 6: // 浏览商品任务 - case 9: // 开宝箱 - for (let i = vo.completedTimes; i <= vo.configTargetTimes; ++i) { - console.log(`去做任务:${vo.taskName}`) - await doTask(vo.taskId) - await completeTask(vo.taskId, vo.taskName) - await $.wait(1000);//延迟等待一秒 - } - break - case 4: // 招工 - break - case 5: // 京喜工厂投入电力 - console.log(`去做任务:${vo.taskName}`) - await doTask(vo.taskId) - await completeTask(vo.taskId, vo.taskName) - await $.wait(1000);//延迟等待一秒 - break - case 1: // 登陆领奖 - default: - break - } - } - } - } - console.log(`完成任务:共领取${$.ele}钞票`) - message += `【每日任务】领奖成功,共计 ${$.ele} 钞票\n`; - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} -// 钞票翻倍任务 -async function cardList() { - for (let i = 0; i < 10; ++i) { - await readyCard(); - } -} -function readyCard() { - return new Promise(async resolve => { - $.get(taskurl('ReadyCard'), async (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (safeGet(data)) { - data = JSON.parse(data); - - if(data['ret']===0 && data['data']['flopFinishNumber']{ - return { - "cardId" : vo['cardId'], - "cardPosition" : index+1, - "cardStatus" :0 - } - }) - cardInfo[0]['cardStatus'] = 1 - - await selectCard(cardInfo) - // await $.wait(1000); - } - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} -// 选择卡片 -function selectCard(cardInfo) { - return new Promise(async resolve => { - $.get(taskurl('SelectCard',`cardInfo=${JSON.stringify({"cardInfo":cardInfo})}`), async (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (safeGet(data)) { - data = JSON.parse(data); - if (data['ret']===0){ - await $.wait(10000); - await finishCard(cardInfo[0]['cardId']) - } - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} -// 完成卡片 -function finishCard(cardId) { - return new Promise(async resolve => { - $.get(taskurl('FinishCard',`cardid=${cardId}`), async (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (safeGet(data)) { - data = JSON.parse(data); - if (data['ret']===0){ - let ratio = data['data']['cardInfo'].filter(vo=>vo['cardId']===cardId)[0]['cardRatio'] - console.log(`翻倍成功,获得${ratio}%,共计获得${data['data']['earnRatio']}%`) - } - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} -// 升级 -function upgrade() { - return new Promise(async resolve => { - $.get(taskurl('UpgradeUserLevelDraw', `date=${new Date().Format("yyyyMMdd")}&type=0`), async (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (safeGet(data)) { - data = JSON.parse(data); - if (data['ret'] === 0&&data['data']['active']!=='') { - console.log(`升级成功,获得${JSON.stringify(data['data'])}`) - } - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} -// 点击 -function increase() { - return new Promise(async resolve => { - $.get(taskurl('IncreaseUserMoney'), async (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (safeGet(data)) { - data = JSON.parse(data); - if (data['ret'] === 0) { - console.log(`点击厂长成功,获得 ${data['data']['moneyNum']} 钞票`) - }else if(data['ret'] === 2005){ - // 点击上限 - $.click = false - }else{ - console.log(`点击厂长过快,休息25秒`) - await $.wait(25000); - } - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} -async function helpFriends() { - for (let code of $.newShareCodes) { - if (code) { - if ($.shareId === code) { - console.log(`不能为自己助力,跳过`); - continue; - } - await assistFriend(code); - } - } -} -// 帮助用户 -function assistFriend(shareId) { - return new Promise(async resolve => { - $.get(taskurl('AssistFriend',`shareId=${escape(shareId)}`), (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (safeGet(data)) { - data = JSON.parse(data); - if (data['ret'] === 0) { - console.log(`助力朋友:${shareId}成功`) - } else { - console.log(`助力朋友[${shareId}]失败:${data.msg}`) - } - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} - -// 任务领奖 -function completeTask(taskId, taskName) { - return new Promise(async resolve => { - $.get(newtasksysUrl('Award', taskId), (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (safeGet(data)) { - data = JSON.parse(data); - switch (data['data']['awardStatus']) { - case 1: - $.ele += Number(data['data']['prizeInfo'].replace('\\n', '')) - console.log(`领取${taskName}任务奖励成功,收获:${Number(data['data']['prizeInfo'].replace('\\n', ''))}钞票`); - break - case 1013: - case 0: - console.log(`领取${taskName}任务奖励失败,任务已领奖`); - break - default: - console.log(`领取${taskName}任务奖励失败,${data['msg']}`) - break - } - // if (data['ret'] === 0) { - // console.log("做任务完成!") - // } else { - // console.log(`异常:${JSON.stringify(data)}`) - // } - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} - -// 完成任务 -function doTask(taskId) { - return new Promise(async resolve => { - $.get(newtasksysUrl('DoTask', taskId), (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (safeGet(data)) { - data = JSON.parse(data); - if (data['ret'] === 0) { - console.log("做任务完成!") - } else { - console.log(`异常:${JSON.stringify(data)}`) - } - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} - -// 初始化个人信息 -function userInfo() { - return new Promise(async resolve => { - $.get(taskurl('GetUserInfo', ), async (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (safeGet(data)) { - data = JSON.parse(data); - if (data['ret'] === 0) { - data = data['data']; - $.shareId = data['shareId']; - console.log(`分享码: ${data['shareId']}`); - $.currentMoneyNum = data.currentMoneyNum; - } else { - console.log(`异常:${JSON.stringify(data)}`) - } - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} -async function showMsg() { - return new Promise(async resolve => { - let ctrTemp; - if ($.isNode() && process.env.JXSTORY_NOTIFY_CONTROL) { - ctrTemp = `${process.env.JXSTORY_NOTIFY_CONTROL}` === 'false'; - } else if ($.getdata('jdJxStory')) { - ctrTemp = $.getdata('jdJxStory') === 'false'; - } else { - ctrTemp = `${jdNotify}` === 'false'; - } - if (ctrTemp) { - $.msg($.name, '', message); - if ($.isNode()) { - await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `${message}`); - } - } else { - $.log(`\n${message}\n`); - } - resolve() - }) -} -function readShareCode() { - console.log(`开始`) - return new Promise(async resolve => { - $.get({url: `http://api.turinglabs.net/api/v1/jd/jxstory/read/${randomCount}/`}, (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (data) { - console.log(`随机取${randomCount}个码放到您固定的互助码后面`) - data = JSON.parse(data); - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(data); - } - }) - // await $.wait(2000); - // resolve() - }) -} -//格式化助力码 -function shareCodesFormat() { - return new Promise(async resolve => { - // console.log(`第${$.index}个京东账号的助力码:::${$.shareCodesArr[$.index - 1]}`) - $.newShareCodes = []; - if ($.shareCodesArr[$.index - 1]) { - $.newShareCodes = $.shareCodesArr[$.index - 1].split('@'); - } else { - console.log(`由于您第${$.index}个京东账号未提供shareCode,将采纳本脚本自带的助力码\n`) - const tempIndex = $.index > inviteCodes.length ? (inviteCodes.length - 1) : ($.index - 1); - $.newShareCodes = inviteCodes[tempIndex].split('@'); - } - // const readShareCodeRes = await readShareCode(); - // if (readShareCodeRes && readShareCodeRes.code === 200) { - // $.newShareCodes = [...new Set([...$.newShareCodes, ...(readShareCodeRes.data || [])])]; - // } - console.log(`第${$.index}个京东账号将要助力的好友${JSON.stringify($.newShareCodes)}`) - resolve(); - }) -} -function requireConfig() { - return new Promise(resolve => { - console.log(`开始获取${$.name}配置文件\n`); - //Node.js用户请在jdCookie.js处填写京东ck; - const shareCodes = $.isNode() ? require('./jdJxStoryShareCodes.js') : ''; - console.log(`共${cookiesArr.length}个京东账号\n`); - $.shareCodesArr = []; - if ($.isNode()) { - Object.keys(shareCodes).forEach((item) => { - if (shareCodes[item]) { - $.shareCodesArr.push(shareCodes[item]) - } - }) - } - // console.log(`\n种豆得豆助力码::${JSON.stringify($.shareCodesArr)}`); - console.log(`您提供了${$.shareCodesArr.length}个账号的${$.name}助力码\n`); - resolve() - }) -} -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": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" - } - } - $.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(); - } - }) - }) -} -function safeGet(data) { - try { - if (typeof JSON.parse(data) == "object") { - return true; - } - } catch (e) { - console.log(e); - console.log(`京东服务器访问数据为空,请检查自身设备网络情况`); - return false; - } -} - -function taskurl(functionId, body = '') { - return { - url: `${JD_API_HOST}/jxstory/userinfo/${functionId}?bizcode=jxstory&${body}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, - headers: { - 'Cookie': cookie, - 'Host': 'm.jingxi.com', - 'Accept': '*/*', - 'Connection': 'keep-alive', - 'User-Agent': 'jdpingou;iPhone;3.15.2;14.2;ae75259f6ca8378672006fc41079cd8c90c53be8;network/wifi;model/iPhone10,2;appBuild/100365;ADID/00000000-0000-0000-0000-000000000000;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/0;hasOCPay/0;supportBestPay/0;session/158;pap/JA2015_311210;brand/apple;supportJDSHWK/1;Mozilla/5.0 (iPhone; CPU iPhone OS 14_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148', - 'Accept-Language': 'zh-cn', - 'Referer': 'https://st.jingxi.com/pingou/jx_factory_story/index.html?ptag=138963.4.3', - 'Accept-Encoding': 'gzip, deflate, br', - } - } -} -function newtasksysUrl(functionId, taskId) { - let url = `${JD_API_HOST}/newtasksys/newtasksys_front/${functionId}?source=jxstory&bizCode=jxstory&sceneval=2&g_login_type=1&_time=${Date.now()}&_=${Date.now()}`; - if (taskId) { - url += `&taskId=${taskId}`; - } - return { - url, - "headers": { - 'Cookie': cookie, - 'Host': 'm.jingxi.com', - 'Accept': '*/*', - 'Connection': 'keep-alive', - 'User-Agent': "jdpingou;iPhone;3.15.2;13.5.1;90bab9217f465a83a99c0b554a946b0b0d5c2f7a;network/wifi;model/iPhone12,1;appBuild/100365;ADID/696F8BD2-0820-405C-AFC0-3C6D028040E5;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/1;hasOCPay/0;supportBestPay/0;session/14;pap/JA2015_311210;brand/apple;supportJDSHWK/1;", - 'Accept-Language': 'zh-cn', - 'Referer': 'https://st.jingxi.com/pingou/jx_factory_story/index.html', - 'Accept-Encoding': 'gzip, deflate, br', - } - } -} -Date.prototype.Format = function (fmt) { //author: meizz - var o = { - "M+": this.getMonth() + 1, //月份 - "d+": this.getDate(), //日 - "h+": this.getHours(), //小时 - "m+": this.getMinutes(), //分 - "s+": this.getSeconds(), //秒 - "q+": Math.floor((this.getMonth() + 3) / 3), //季度 - "S": this.getMilliseconds() //毫秒 - }; - if (/(y+)/.test(fmt)) - fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); - for (var k in o) - if (new RegExp("(" + k + ")").test(fmt)) - fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); - return fmt; -} -function jsonParse(str) { - if (typeof str == "string") { - try { - return JSON.parse(str); - } catch (e) { - console.log(e); - $.msg($.name, '', '不要在BoxJS手动复制粘贴修改cookie') - return []; - } - } -} -// 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,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("",`\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 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("@"),a={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,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),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=(()=>{})){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=(()=>{})){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){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="",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=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];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("",`\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_mohe.js b/jd_mohe.js deleted file mode 100644 index 600221c2..00000000 --- a/jd_mohe.js +++ /dev/null @@ -1,422 +0,0 @@ -/* -热8超级盲盒,可抽奖获得京豆,建议在凌晨0点时运行脚本,白天抽奖基本没有京东 -活动地址: https://blindbox.jd.com -活动时间到18号 -支持京东双账号 -更新时间:2020-08-17 -脚本兼容: QuantumultX, Surge,Loon, JSBox, Node.js -// quantumultx -[task_local] -#热8超级盲盒 -1 0,1-23/3 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_mohe.js, tag=热8超级盲盒, enabled=true -// Loon -[Script] -cron "1 0,1-23/3 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_mohe.js,tag=热8超级盲盒 -// Surge -热8超级盲盒 = type=cron,cronexp=1 0,1-23/3 * * *,wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_mohe.js - */ -const $ = new Env('热8超级盲盒'); -//Node.js用户请在jdCookie.js处填写京东ck; -const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; - -//直接用NobyDa的jd cookie -let cookie = jdCookieNode.CookieJD ? jdCookieNode.CookieJD : $.getdata('CookieJD'); -const cookie2 = jdCookieNode.CookieJD2 ? jdCookieNode.CookieJD2 : $.getdata('CookieJD2'); -let UserName = ''; -const JD_API_HOST = 'https://blindbox.jd.com'; -let shareId = ''; -!(async () => { - if (!cookie) { - $.msg('【京东账号一】热8超级盲盒', '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); - } else { - UserName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]); - // await shareUrl(); - // await addShare(); - await getCoin();//领取每三小时自动生产的热力值 - await Promise.all([ - task0(), - task1(), - ]) - await taskList(); - await getAward();//抽奖 - if ($.time('yyyy-MM-dd') === '2020-08-19') { - $.msg($.name, '活动已结束', `请禁用或删除脚本\n如果帮助到您可以点下🌟STAR鼓励我一下,谢谢\n咱江湖再见\nhttps://github.com/lxk0301/jd_scripts\n`, {"open-url": "https://github.com/lxk0301/jd_scripts"}); - } else { - $.msg($.name, '', `【京东账号一】${UserName}\n任务已做完.\n 抽奖详情查看 https://blindbox.jd.com\n`, {"open-url": "https://blindbox.jd.com"}); - } - } - await $.wait(1000); - if (cookie2) { - cookie = cookie2; - UserName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]); - console.log(`\n开始【京东账号二】${UserName}\n`) - await getCoin();//领取每三小时自动生产的热力值 - await Promise.all([ - task0(), - task1(), - ]) - await taskList(); - await getAward();//抽奖 - $.msg($.name, '', `【京东账号二】${UserName}\n任务已做完.\n 抽奖详情查看 https://blindbox.jd.com\n`, {"open-url": "https://blindbox.jd.com"}); - } -})() - .catch((e) => { - $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') - }) - .finally(() => { - $.done(); - }) - - -async function task0() { - const confRes = await conf(); - if (confRes.code === 200) { - const { brandList, skuList } = confRes.data; - if (skuList && skuList.length > 0) { - for (let item of skuList) { - if (item.state === 0) { - let homeGoBrowseRes = await homeGoBrowse(0, item.id); - console.log('商品', homeGoBrowseRes); - await $.wait(1000); - const taskHomeCoin0Res = await taskHomeCoin(0, item.id); - console.log('商品领取金币', taskHomeCoin0Res); - // if (homeGoBrowseRes.code === 200) { - // await $.wait(1000); - // await taskHomeCoin(0, item.id); - // } - } else { - console.log('精选好物任务已完成') - } - } - } - } -} -async function task1() { - const confRes = await conf(); - if (confRes.code === 200) { - const { brandList, skuList } = confRes.data; - if (brandList && brandList.length > 0) { - for (let item of brandList) { - if (item.state === 0) { - let homeGoBrowseRes = await homeGoBrowse(1, item.id); - // console.log('店铺', homeGoBrowseRes); - await $.wait(1000); - const taskHomeCoin1Res = await taskHomeCoin(1, item.id); - console.log('店铺领取金币', taskHomeCoin1Res); - // if (homeGoBrowseRes.code === 200) { - // await $.wait(1000); - // await taskHomeCoin(1, item.id); - // } - } else { - console.log('精选店铺-任务已完成') - } - } - } - } -} -function addShare(id) { - console.log(`shareId${shareId}`); - return new Promise((resolve) => { - const url = `addShare?shareId=${shareId}&t=${Date.now()}`; - $.get(taskurl(url), (err, resp, data) => { - try { - // console.log('ddd----ddd', data) - data = JSON.parse(data); - // console.log('ddd----ddd', data) - - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -function conf() { - return new Promise((resolve) => { - const url = `conf`; - $.get(taskurl(url), (err, resp, data) => { - try { - // console.log('ddd----ddd', data) - data = JSON.parse(data); - // console.log('ddd----ddd', data) - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -function homeGoBrowse(type, id) { - return new Promise((resolve) => { - const url = `homeGoBrowse?type=${type}&id=${id}`; - $.get(taskurl(url), (err, resp, data) => { - try { - // console.log('homeGoBrowse', data) - data = JSON.parse(data); - // console.log('homeGoBrowse', data) - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -function taskHomeCoin(type, id) { - return new Promise((resolve) => { - const url = `taskHomeCoin?type=${type}&id=${id}`; - $.get(taskurl(url), (err, resp, data) => { - try { - // console.log('homeGoBrowse', data) - data = JSON.parse(data); - // console.log('homeGoBrowse', data) - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -function getCoin() { - return new Promise((resolve) => { - const url = `getCoin?t=${Date.now()}`; - $.get(taskurl(url), (err, resp, data) => { - try { - // console.log('homeGoBrowse', data) - data = JSON.parse(data); - // console.log('homeGoBrowse', data) - if (data.code === 1001) { - console.log(data.msg); - $.msg($.name, '领取失败', `${data.msg}`); - $.done(); - } else { - console.log(`成功领取${data.data}热力值`) - resolve(data); - } - } catch (e) { - $.logErr(e, resp); - } - }) - }) -} -function taskList() { - return new Promise((resolve) => { - const url = `taskList?t=${Date.now()}`; - $.get(taskurl(url), async (err, resp, data) => { - try { - // console.log('homeGoBrowse', data) - data = JSON.parse(data); - console.log(`请继续等待,正在做任务,不要退出哦`) - // console.log(`成功领取${data.data}热力值`) - if (data.code === 200) { - const { task4, task6, task2, task1 } = data.data; - if (task4.finishNum < task4.totalNum) { - await browseProduct(task4.skuId); - await taskCoin(task4.type); - } - //浏览会场 - if (task1.finishNum < task1.totalNum) { - await strollActive((task1.finishNum + 1)); - await taskCoin(task1.type); - } - if (task2.finishNum < task2.totalNum) { - await strollShop(task2.shopId); - await taskCoin(task2.type); - } - if (task6.finishNum < task6.totalNum) { - await strollMember(task6.venderId); - await taskCoin(task6.type); - } - if (task4.state === 2 && task1.state === 2 && task2.state === 2 && task6.state === 2) { - console.log('taskList的任务全部做完了---') - } else { - await taskList(); - } - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -//浏览商品(16个) -function browseProduct(skuId) { - return new Promise((resolve) => { - const url = `browseProduct?0=${skuId}&t=${Date.now()}`; - $.get(taskurl(url), (err, resp, data) => { - try { - // console.log('homeGoBrowse', data) - data = JSON.parse(data); - // console.log('homeGoBrowse', data) - // console.log(`成功领取${data.data}热力值`) - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -// 浏览会场(10个) -function strollActive(index) { - return new Promise((resolve) => { - const url = `strollActive?0=${index}&t=${Date.now()}`; - $.get(taskurl(url), (err, resp, data) => { - try { - // console.log('homeGoBrowse', data) - data = JSON.parse(data); - // console.log('homeGoBrowse', data) - // console.log(`成功领取${data.data}热力值`) - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -//关注或浏览店铺(9个) -function strollShop(shopId) { - return new Promise((resolve) => { - const url = `strollShop?shopId=${shopId}&t=${Date.now()}`; - $.get(taskurl(url), (err, resp, data) => { - try { - // console.log('homeGoBrowse', data) - data = JSON.parse(data); - // console.log('homeGoBrowse', data) - // console.log(`成功领取${data.data}热力值`) - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -// 加入会员(7) -function strollMember(venderId) { - return new Promise((resolve) => { - const url = `strollMember?venderId=${venderId}&t=${Date.now()}`; - $.get(taskurl(url), (err, resp, data) => { - try { - // console.log('homeGoBrowse', data) - data = JSON.parse(data); - // console.log('homeGoBrowse', data) - // console.log(`成功领取${data.data}热力值`) - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} - -function taskCoin(type) { - return new Promise((resolve) => { - const url = `taskCoin?type=${type}&t=${Date.now()}`; - $.get(taskurl(url), (err, resp, data) => { - try { - // console.log('homeGoBrowse', data) - data = JSON.parse(data); - // console.log('homeGoBrowse', data) - // console.log(`成功领取${data.data}热力值`) - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -async function getAward() { - const coinRes = await coin(); - if (coinRes.code === 200) { - const { total, need } = coinRes.data; - if (total > need) { - const times = Math.floor(total / need); - for (let i = 0; i < times; i++) { - await $.wait(2000); - let lotteryRes = await lottery(); - if (lotteryRes.code === 200) { - console.log(`====抽奖结果====,${JSON.stringify(lotteryRes.data)}`); - console.log(lotteryRes.data.name); - console.log(lotteryRes.data.beanNum); - } else if (lotteryRes.code === 4001) { - console.log(`抽奖失败,${lotteryRes.msg}`); - break; - } - } - } else { - console.log(`目前热力值${total},不够抽奖`) - } - } -} -//获取有多少热力值 -function coin() { - return new Promise((resolve) => { - const url = `coin?t=${Date.now()}`; - $.get(taskurl(url), (err, resp, data) => { - try { - // console.log('homeGoBrowse', data) - data = JSON.parse(data); - // console.log('homeGoBrowse', data) - // console.log(`成功领取${data.data}热力值`) - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -//抽奖API -function lottery() { - return new Promise((resolve) => { - const options = { - 'url': `${JD_API_HOST}/prize/lottery?t=${Date.now()}`, - 'headers': { - "accept": "*/*", - "accept-encoding": "gzip, deflate, br", - "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6", - "content-type": "application/x-www-form-urlencoded", - "cookie": cookie, - "referer": "https://blindbox.jd.com/", - "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") - } - } - $.get(options, (err, resp, data) => { - try { - // console.log('homeGoBrowse', data) - data = JSON.parse(data); - // console.log('homeGoBrowse', data) - // console.log(`成功领取${data.data}热力值`) - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -function taskurl(url) { - return { - 'url': `${JD_API_HOST}/active/${url}`, - 'headers': { - "accept": "*/*", - "accept-encoding": "gzip, deflate, br", - "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6", - "content-type": "application/x-www-form-urlencoded", - "cookie": cookie, - "referer": "https://blindbox.jd.com/", - "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") - } - } -} -// prettier-ignore -function Env(t,s){return new class{constructor(t,s){this.name=t,this.data=null,this.dataFile="box.dat",this.logs=[],this.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,s),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}getScript(t){return new Promise(s=>{$.get({url:t},(t,e,i)=>s(i))})}runScript(t,s){return new Promise(e=>{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=s&&s.timeout?s.timeout:o;const[h,a]=i.split("@"),r={url:`http://${a}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:o},headers:{"X-Key":h,Accept:"*/*"}};$.post(r,(t,s,i)=>e(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),s=this.path.resolve(process.cwd(),this.dataFile),e=this.fs.existsSync(t),i=!e&&this.fs.existsSync(s);if(!e&&!i)return{};{const i=e?t:s;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),s=this.path.resolve(process.cwd(),this.dataFile),e=this.fs.existsSync(t),i=!e&&this.fs.existsSync(s),o=JSON.stringify(this.data);e?this.fs.writeFileSync(t,o):i?this.fs.writeFileSync(s,o):this.fs.writeFileSync(t,o)}}lodash_get(t,s,e){const i=s.replace(/\[(\d+)\]/g,".$1").split(".");let o=t;for(const t of i)if(o=Object(o)[t],void 0===o)return e;return o}lodash_set(t,s,e){return Object(t)!==t?t:(Array.isArray(s)||(s=s.toString().match(/[^.[\]]+/g)||[]),s.slice(0,-1).reduce((t,e,i)=>Object(t[e])===t[e]?t[e]:t[e]=Math.abs(s[i+1])>>0==+s[i+1]?[]:{},t)[s[s.length-1]]=e,t)}getdata(t){let s=this.getval(t);if(/^@/.test(t)){const[,e,i]=/^@(.*?)\.(.*?)$/.exec(t),o=e?this.getval(e):"";if(o)try{const t=JSON.parse(o);s=t?this.lodash_get(t,i,""):s}catch(t){s=""}}return s}setdata(t,s){let e=!1;if(/^@/.test(s)){const[,i,o]=/^@(.*?)\.(.*?)$/.exec(s),h=this.getval(i),a=i?"null"===h?null:h||"{}":"{}";try{const s=JSON.parse(a);this.lodash_set(s,o,t),e=this.setval(JSON.stringify(s),i)}catch(s){const h={};this.lodash_set(h,o,t),e=this.setval(JSON.stringify(h),i)}}else e=$.setval(t,s);return e}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,s){return this.isSurge()||this.isLoon()?$persistentStore.write(t,s):this.isQuanX()?$prefs.setValueForKey(t,s):this.isNode()?(this.data=this.loaddata(),this.data[s]=t,this.writedata(),!0):this.data&&this.data[s]||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,s=(()=>{})){t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"]),this.isSurge()||this.isLoon()?$httpClient.get(t,(t,e,i)=>{!t&&e&&(e.body=i,e.statusCode=e.status),s(t,e,i)}):this.isQuanX()?$task.fetch(t).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t)):this.isNode()&&(this.initGotEnv(t),this.got(t).on("redirect",(t,s)=>{try{const e=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();this.ckjar.setCookieSync(e,null),s.cookieJar=this.ckjar}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t)))}post(t,s=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),delete t.headers["Content-Length"],this.isSurge()||this.isLoon())$httpClient.post(t,(t,e,i)=>{!t&&e&&(e.body=i,e.statusCode=e.status),s(t,e,i)});else if(this.isQuanX())t.method="POST",$task.fetch(t).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t));else if(this.isNode()){this.initGotEnv(t);const{url:e,...i}=t;this.got.post(e,i).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t))}}time(t){let s={"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 e in s)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?s[e]:("00"+s[e]).substr((""+s[e]).length)));return t}msg(s=t,e="",i="",o){const h=t=>!t||!this.isLoon()&&this.isSurge()?t:"string"==typeof t?this.isLoon()?t:this.isQuanX()?{"open-url":t}:void 0:"object"==typeof t&&(t["open-url"]||t["media-url"])?this.isLoon()?t["open-url"]:this.isQuanX()?t:void 0:void 0;this.isSurge()||this.isLoon()?$notification.post(s,e,i,h(o)):this.isQuanX()&&$notify(s,e,i,h(o)),this.logs.push("","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="),this.logs.push(s),e&&this.logs.push(e),i&&this.logs.push(i)}log(...t){t.length>0?this.logs=[...this.logs,...t]:console.log(this.logs.join(this.logSeparator))}logErr(t,s){const e=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();e?$.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t.stack):$.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t)}wait(t){return new Promise(s=>setTimeout(s,t))}done(t={}){const s=(new Date).getTime(),e=(s-this.startTime)/1e3;this.log("",`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${e} \u79d2`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,s)} \ No newline at end of file diff --git a/jd_xtg.js b/jd_xtg.js deleted file mode 100644 index 7646aae7..00000000 --- a/jd_xtg.js +++ /dev/null @@ -1,420 +0,0 @@ -/* - * @Author: lxk0301 - * @Date: 2020-10-21 17:04:04 - * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-05 00:35:04 - */ -/** - 星推官脚本 https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_xtg.js - 星推官活动地址:https://prodev.m.jd.com/mall/active/3gSzKSnvrrhYushciUpzHcDnkYE3/index.html - 活动时间:2020年10月21日 00:00:00-2020年11月11日 23:59:59 - 京豆先到先得!!!!!!!!!!! - 出现任务做完没领取的情况,就再运行一次脚本 - 能做完所有的任务,包括自动抽奖,脚本会给内置的shareId助力 - 一共23个活动,耗时比较久,surge请加大timeout时间 - 支持京东双账号 - 脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js - // quantumultx - [task_local] - #京东星推官 - 2 0 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_xtg.js, tag=京东星推官, enabled=true - // Loon - [Script] - cron "2 0 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_xtg.js,tag=京东星推官 - // Surge - 京东星推官 = type=cron,cronexp=2 0 * * *,wake-system=1,timeout=320,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_xtg.js - */ -const $ = new Env('京东星推官'); -const activeEndTime = '2020/11/11 23:59:59+08:00';//活动结束时间 -const notify = $.isNode() ? require('./sendNotify') : ''; -//Node.js用户请在jdCookie.js处填写京东ck; -const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; - -//IOS等用户直接用NobyDa的jd cookie -let cookiesArr = [], cookie = ''; -if ($.isNode()) { - Object.keys(jdCookieNode).forEach((item) => { - cookiesArr.push(jdCookieNode[item]) - }) - if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {}; -} else { - let cookiesData = $.getdata('CookiesJD') || "[]"; - cookiesData = jsonParse(cookiesData); - cookiesArr = cookiesData.map(item => item.cookie); - cookiesArr.reverse(); - cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]); - cookiesArr.reverse(); -} -const starID = [ - 'bolangwutiaoren', - 'oulebyangzi', - 'meiditongliya', - 'chuangweimaobuyi', - 'quechaozhuyilong', - 'haierchenxiao', - 'feilipulixian', - 'feilipurenjialun', - 'feilipuwangziyi', - 'changhongsongyi', - 'jiuyangdenglun', - 'aokesilingengxin', - 'haixinchengguo', - 'fangtai', - 'lgyangzishan', - 'laobansongweilong', - 'haiermaoxiaotong', - "skgwangyibo", - "kongtiaozhangjike", - "sanxingningjing", - "xiaojiadianxiongziqi", - "heidianliyitong", - "oulebzhangyixing", -]; -const shareID = [ - 'e646c144-28a7-4b1b-8145-5b0dbff107ec', - 'b3fcb734-cbdd-4436-9f92-b13b445fc253', - 'e2d63b19-19d6-4a20-b2af-74b828e703d0', - 'a7a3b9b7-2872-4244-a627-3b82c271dee7', - 'f7b521e7-5306-4908-ba8a-df2d221bdd9d', - 'd17ec374-70d4-49d5-8673-7093e61f904c', - '915b9567-dc88-4389-8be9-ecc25588353a', - '7abdc8f4-d8f4-497f-8daa-cdab01cf645c', - '50ecc8de-1ee5-4420-bbb8-1136d86d80db', - 'fd0770e1-5007-45c1-8d69-402e02ff9a52', - 'cb9e9a59-a86b-4a0d-a308-4503fe5baaa4', - '93b3afeb-a18c-437c-b5ca-fbd9f389671d', - '8778793c-e9ad-4339-a709-723ae3ebde8e', - '921c376e-8cc5-4236-8242-ff8bb1b88a95', - '8b3ce203-4b10-4c36-a87d-da8c82efe362', - 'c8e1feb3-6ab1-4410-8444-1de8bd22e041', - "dd6b5270-3e5e-436d-be0f-295a8604cf47", - "7aef5700-4fa0-43b8-98fa-3a09f46ea47c", - "be0ec81c-bf26-4b7b-9527-d02b0286e5af", - "ecd890e0-db46-46c7-862e-cb9776c207dc", - "91ceb3eb-df84-471e-ad77-320cd95763ee", -]; -const JD_API_HOST = 'https://urvsaggpt.m.jd.com/guardianstar'; -!(async () => { - if (!cookiesArr[0]) { - $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); - return; - } - 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; - $.beanCount = 0; - $.jdNum = 0; - $.isLogin = true; - $.nickName = ''; - const beforeTotal = await TotalBean(); - console.log(`\n===============开始【京东账号${$.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`); - } else { - $.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 - } - continue - } - console.log(`一共${starID.length}个${$.name}任务,耗时会很久,请提前知晓`) - $.beanCount = beforeTotal && beforeTotal['base'].jdNum; - for (let index = 0; index < starID.length; index ++) { - $.activeId = starID[index]; - $.j = index; - await JD_XTG(); - } - console.log(`\n等待8秒后,再去领取奖励\n`) - console.log(`做任务之前京豆总计:${$.beanCount}`) - await $.wait(8000); - for (let index = 0; index < starID.length; index ++) { - $.activeId = starID[index]; - $.j = index; - await JD_XTG(); - await doSupport(shareID[index]); - } - const afterTotal = await TotalBean(); - $.jdNum = afterTotal['base'].jdNum; - await showMsg(); - } - } -})() - .catch((e) => { - $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') - }) - .finally(() => { - $.done(); - }) -async function showMsg() { - console.log(`\n做任务之前京豆总计:${$.beanCount}`) - console.log(`做完任务后京豆总计:${$.jdNum}`); - console.log(`活动活动京豆数量:${$.jdNum - $.beanCount}`); - let nowTime = new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000; - if (nowTime > new Date(activeEndTime).getTime()) { - $.msg($.name, '活动已结束', `请删除或禁用此脚本\n如果帮助到您可以点下🌟STAR鼓励我一下,谢谢\n咱江湖再见\nhttps://github.com/lxk0301/jd_scripts`, {"open-url": "https://github.com/lxk0301/jd_scripts"}); - if ($.isNode()) await notify.sendNotify($.name + '活动已结束', `请删除此脚本\n如果帮助到您可以点下🌟STAR鼓励我一下,谢谢\n咱江湖再见\nhttps://github.com/lxk0301/jd_scripts`) - } else { - $.msg($.name, `账号${$.index} ${$.nickName || $.UserName}`, `做任务之前京豆总计:${$.beanCount}\n做完任务后京豆总计:${$.jdNum}\n${($.jdNum - $.beanCount) > 0 ? `获得京豆:${$.jdNum - $.beanCount}京豆 🐶(仅供参考)\n` : ''}京豆先到先得\n活动地址点击弹窗跳转后即可查看\n注:如未获得京豆就是已被分完`, {"open-url": "https://prodev.m.jd.com/mall/active/3gSzKSnvrrhYushciUpzHcDnkYE3/index.html"}) - if ($.isNode()) await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName || $.UserName}`, `账号${$.index} ${$.nickName || $.UserName}\n做任务之前京豆总计:${$.beanCount}\n做完任务后京豆总计:${$.jdNum}\n${($.jdNum - $.beanCount) > 0 ? `获得京豆:${$.jdNum - $.beanCount}京豆 🐶(仅供参考)\n` : ''}京豆先到先得\n注:如未获得京豆就是已被分完\n活动结束时间:2020年11月12日 23:59:59\n活动地址:https://prodev.m.jd.com/mall/active/3gSzKSnvrrhYushciUpzHcDnkYE3/index.html`) - } -} -async function JD_XTG() { - await getHomePage(); - if ($.homeData && $.homeData.code === 200) { - const { shopList, venueList, productList, orderSkuList, shareId } = $.homeData.data[0]; - console.log(`\n===========活动${$.j + 1}-[${starID[$.j]}] 助力码==========\n${shareId}\n`); - for (let item of shopList) { - console.log(`\n任务一:关注${item['shopName']}`) - if (item['shopStatus'] === 4) { - console.log(`入会任务,假入会`); - await doTask('shop', item['shopId'], 0) - continue - } - if (item['shopStatus'] === 3) { - console.log(`此任务已做完,跳过`); - continue - } - console.log(`shopStatus:::${item['shopStatus']}`) - if (item['shopStatus'] !== 3 && item['shopStatus'] !== 4) { - await doTask('shop', item['shopId'], item['shopStatus']) - } - // if (item['shopStatus'] === 2) { - // await doTask('shop', item['shopId'], 2) - // } - // if (item['shopStatus'] === 4) { - // await doTask('shop', item['shopId'], 4) - // } - } - for (let item1 of venueList) { - console.log(`\n任务二:逛逛[${item1['venueName']}]-${item1['venueStatus'] !== 3 ? '' : '已做完'}`) - if (item1['venueStatus'] === 1) { - await doTask('venue', item1['venueId'], 1); - } - if (item1['venueStatus'] === 2) { - await doTask('venue', item1['venueId'], 2); - } - } - for (let item2 of productList) { - console.log(`\n任务三:逛逛[${item2['productName']}]-${item2['productStatus'] !== 3 ? '' : '已做完'}`) - if (item2['productStatus'] === 1) { - await doTask('product', item2['productId'], 1); - } - if (item2['productStatus'] === 2) { - await doTask('product', item2['productId'], 2); - } - } - //付定金 TODO - // for (let item3 of orderSkuList) { - // await doTask('order', item3['skuId'], 1); - // await doTask('order', item3['skuId'], 2); - // await doTask('order', item3['skuId'], 3); - // await doTask('order', item3['skuId'], 0); - // - // await doTask('order', item3['skuId'], 2); - // await doTask('order', item3['skuId'], 1); - // } - console.log(`\n开始抽奖\n`) - await getDayPrizeStatus(4, `${$.activeId}#1`, 3); - await getDayPrizeStatus(1, `${$.activeId}#2`, 3); - } else { - console.log(`京东服务器返回无数据!`) - } -} -function getHomePage() { - return new Promise(resolve => { - $.get(taskUrl('getHomePage'), async (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (data) { - $.homeData = JSON.parse(data); - } else { - console.log(`京东服务器返回空数据`) - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} -function doTask(type, id, status) { - return new Promise(async resolve => { - $.post(taskPostUrl(type, id, status), (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - console.log(`做任务结果:${data}`); - data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} - -function doSupport(shareId) { - return new Promise(async resolve => { - const options = { - "url": `${JD_API_HOST}/doSupport`, - "body": `starId=${$.activeId}&shareId=${shareId}`, - "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, - "Host": "urvsaggpt.m.jd.com", - "Referer": "https://urvsaggpt.m.jd.com/static/index.html", - "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 { - // console.log(`\n助力结果:${data}`); - // data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} -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 : "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(data); - } - }) - }) -} -function getDayPrizeStatus(prizeType, prizeId, status) { - return new Promise(async resolve => { - const options = { - "url": `${JD_API_HOST}/getDayPrizeStatus`, - "body": `starId=${$.activeId}&status=${status}&prizeType=${prizeType}&prizeId=${prizeId}`, - "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, - "Host": "urvsaggpt.m.jd.com", - "Referer": "https://urvsaggpt.m.jd.com/static/index.html", - "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 { - console.log(`抽奖结果:${data}`); - // data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} -function taskPostUrl(type, id, status) { - return { - url: `${JD_API_HOST}/doTask`, - body: `starId=${$.activeId}&type=${type}&id=${id}&status=${status}`, - 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, - "Host": "urvsaggpt.m.jd.com", - "Referer": "https://urvsaggpt.m.jd.com/static/index.html", - "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") - } - } -} -function jsonParse(str) { - if (typeof str == "string") { - try { - return JSON.parse(str); - } catch (e) { - console.log(e); - $.msg($.name, '', '不要在BoxJS手动复制粘贴修改cookie') - return []; - } - } -} -function taskUrl(function_id) { - return { - url: `${JD_API_HOST}/${function_id}?t=${Date.now()}&starId=${$.activeId}`, - headers: { - "Accept": "application/json,text/plain, */*", - "Accept-Encoding": "gzip, deflate, br", - "Accept-Language": "zh-cn", - "Connection": "keep-alive", - "Cookie": cookie, - "Host": "urvsaggpt.m.jd.com", - "Referer": "https://urvsaggpt.m.jd.com/static/index.html", - "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") - } - } -} -// 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,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("",`\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 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("@"),a={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,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),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=(()=>{})){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();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=(()=>{})){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){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="",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}}}};this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r)));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)}