diff --git a/jd_joy.js b/jd_joy.js deleted file mode 100644 index 4e90e7f..0000000 --- a/jd_joy.js +++ /dev/null @@ -1,999 +0,0 @@ -/* -脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js -IOS用户支持京东双账号,NodeJs用户支持N个京东账号 -更新时间:2021-6-6 -活动入口:京东APP我的-更多工具-宠汪汪 -建议先凌晨0点运行jd_joy.js脚本获取狗粮后,再运行此脚本(jd_joy_steal.js)可偷好友积分,6点运行可偷好友狗粮 -feedCount:自定义 每次喂养数量; 等级只和喂养次数有关,与数量无关 -推荐每次投喂10个,积累狗粮,然后去玩聚宝盆赌 -Combine from Zero-S1/JD_tools(https://github.com/Zero-S1/JD_tools) -==========Quantumult X========== -[task_local] -#京东宠汪汪 -15 0-23/2 * * * https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy.js, tag=京东宠汪汪, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jdcww.png, enabled=true - -============Loon=========== -[Script] -cron "15 0-23/2 * * *" script-path=https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy.js,tag=京东宠汪汪 - -============Surge========== -[Script] -京东宠汪汪 = type=cron,cronexp="15 0-23/2 * * *",wake-system=1,timeout=3600,script-path=https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy.js - -===============小火箭========== -京东宠汪汪 = type=cron,script-path=https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy.js, cronexpr="15 0-23/2 * * *", timeout=3600, enable=true -*/ -const $ = new Env('宠汪汪'); -const zooFaker = require('./utils/JDJRValidator_Pure'); -$.get = zooFaker.injectToRequest2($.get.bind($)); -$.post = zooFaker.injectToRequest2($.post.bind($)); -const notify = $.isNode() ? require('./sendNotify') : ''; -//Node.js用户请在jdCookie.js处填写京东ck; -const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; -let allMessage = ''; -//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 { - cookiesArr = [$.getdata('CookieJD'), $.getdata('CookieJD2'), ...jsonParse($.getdata('CookiesJD') || "[]").map(item => item.cookie)].filter(item => !!item); -} -let message = '', subTitle = ''; -let FEED_NUM = ($.getdata('joyFeedCount') * 1) || 10; //每次喂养数量 [10,20,40,80] -let teamLevel = `2`;//参加多少人的赛跑比赛,默认是双人赛跑,可选2,10,50。其他不可选,其中2代表参加双人PK赛,10代表参加10人突围赛,50代表参加50人挑战赛,如若想设置不同账号参加不同类别的比赛则用&区分即可(如:`2&10&50`) -//是否参加宠汪汪双人赛跑(据目前观察,参加双人赛跑不消耗狗粮,如需参加其他多人赛跑,请关闭) -// 默认 'true' 参加双人赛跑,如需关闭 ,请改成 'false'; -let joyRunFlag = true; -let jdNotify = true;//是否开启静默运行,默认true开启 -let joyRunNotify = true;//宠汪汪赛跑获胜后是否推送通知,true推送,false不推送通知 -!(async () => { - if (!cookiesArr[0]) { - $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/bean/signIndex.action', {"open-url": "https://bean.m.jd.com/bean/signIndex.action"}); - 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 = ''; - await TotalBean(); - console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*******\n`); - if (!$.isLogin) { - $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/bean/signIndex.action`, {"open-url": "https://bean.m.jd.com/bean/signIndex.action"}); - - if ($.isNode()) { - await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); - } - continue - } - message = ''; - subTitle = ''; - $.validate = ''; - // const zooFaker = require('./utils/JDJRValidator_Pure'); - // $.validate = await zooFaker.injectToRequest() - await jdJoy(); - await showMsg(); - // await joinTwoPeopleRun(); - } - } - if ($.isNode() && joyRunNotify === 'true' && allMessage) await notify.sendNotify(`${$.name}`, `${allMessage}`) -})() - .catch((e) => { - $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') - }) - .finally(() => { - $.done(); - }) -async function jdJoy() { - try { - await getPetTaskConfig(); - if ($.getPetTaskConfigRes.success) { - if ($.isNode()) { - if (process.env.JOY_FEED_COUNT) { - if ([0, 10, 20, 40, 80].indexOf(process.env.JOY_FEED_COUNT * 1) > -1) { - FEED_NUM = process.env.JOY_FEED_COUNT ? process.env.JOY_FEED_COUNT * 1 : FEED_NUM; - } else { - console.log(`您输入的 JOY_FEED_COUNT 为非法数字,请重新输入`); - } - } - } - await feedPets(FEED_NUM);//喂食 - await Promise.all([ - petTask(), - appPetTask() - ]) - await deskGoodsTask();//限时货柜 - await enterRoom(); - await joinTwoPeopleRun()//参加双人赛跑 - } else { - message += `${$.getPetTaskConfigRes.errorMessage}`; - } - } catch (e) { - $.logErr(e) - } -} -//逛商品得100积分奖励任务 -async function deskGoodsTask() { - const deskGoodsRes = await getDeskGoodDetails(); - if (deskGoodsRes && deskGoodsRes.success) { - if (deskGoodsRes.data && deskGoodsRes.data.deskGoods) { - const { deskGoods, taskChance, followCount = 0 } = deskGoodsRes.data; - console.log(`浏览货柜商品 ${followCount ? followCount : 0}/${taskChance}`); - if (taskChance === followCount) return - for (let item of deskGoods) { - if (!item['status'] && item['sku']) { - await followScan(item['sku']) - } - } - } else { - console.log(`\n限时商品货架已下架`); - } - } -} -//参加双人赛跑 -async function joinTwoPeopleRun() { - joyRunFlag = $.getdata('joyRunFlag') ? $.getdata('joyRunFlag') : joyRunFlag; - if ($.isNode() && process.env.JOY_RUN_FLAG) { - joyRunFlag = process.env.JOY_RUN_FLAG; - } - if (`${joyRunFlag}` === 'true') { - let teamLevelTemp = []; - teamLevelTemp = $.isNode() ? (process.env.JOY_TEAM_LEVEL ? process.env.JOY_TEAM_LEVEL.split('&') : teamLevel.split('&')) : ($.getdata('JOY_TEAM_LEVEL') ? $.getdata('JOY_TEAM_LEVEL').split('&') : teamLevel.split('&')); - teamLevelTemp = teamLevelTemp[$.index - 1] ? teamLevelTemp[$.index - 1] : 2; - await getPetRace(); - console.log(`\n===以下是京东账号${$.index} ${$.nickName} ${$.petRaceResult.data.teamLimitCount || teamLevelTemp}人赛跑信息===\n`) - if ($.petRaceResult) { - let petRaceResult = $.petRaceResult.data.petRaceResult; - // let raceUsers = $.petRaceResult.data.raceUsers; - console.log(`赛跑状态:${petRaceResult}\n`); - if (petRaceResult === 'not_participate') { - console.log(`暂未参赛,现在为您参加${teamLevelTemp}人赛跑`); - await runMatch(teamLevelTemp * 1); - if ($.runMatchResult.success) { - await getWinCoin(); - console.log(`${$.getWinCoinRes.data.teamLimitCount || teamLevelTemp}人赛跑参加成功\n`); - message += `${$.getWinCoinRes.data.teamLimitCount || teamLevelTemp}人赛跑:成功参加\n`; - // if ($.getWinCoinRes.data['supplyOrder']) await energySupplyStation($.getWinCoinRes.data['supplyOrder']); - await energySupplyStation('2'); - // petRaceResult = $.petRaceResult.data.petRaceResult; - // await getRankList(); - console.log(`双人赛跑助力请自己手动去邀请好友,脚本不带赛跑助力功能\n`); - } - } - if (petRaceResult === 'unbegin') { - console.log('比赛还未开始,请九点再来'); - } - if (petRaceResult === 'time_over') { - console.log('今日参赛的比赛已经结束,请明天九点再来'); - } - if (petRaceResult === 'unreceive') { - console.log('今日参赛的比赛已经结束,现在领取奖励'); - await getWinCoin(); - let winCoin = 0; - if ($.getWinCoinRes && $.getWinCoinRes.success) { - winCoin = $.getWinCoinRes.data.winCoin; - } - await receiveJoyRunAward(); - console.log(`领取赛跑奖励结果:${JSON.stringify($.receiveJoyRunAwardRes)}`) - if ($.receiveJoyRunAwardRes.success) { - joyRunNotify = $.isNode() ? (process.env.JOY_RUN_NOTIFY ? process.env.JOY_RUN_NOTIFY : `${joyRunNotify}`) : ($.getdata('joyRunNotify') ? $.getdata('joyRunNotify') : `${joyRunNotify}`); - $.msg($.name, '', `【京东账号${$.index}】${$.nickName}\n太棒了,${$.name}赛跑取得获胜\n恭喜您已获得${winCoin}积分奖励`); - allMessage += `京东账号${$.index}${$.nickName}\n太棒了,${$.name}赛跑取得获胜\n恭喜您已获得${winCoin}积分奖励${$.index !== cookiesArr.length ? '\n\n' : ''}`; - // if ($.isNode() && joyRunNotify === 'true') await notify.sendNotify(`${$.name} - 京东账号${$.index} - ${$.nickName}`, `京东账号${$.index}${$.nickName}\n太棒了,${$.name}赛跑取得获胜\n恭喜您已获得${winCoin}积分奖励`) - } - } - if (petRaceResult === 'participate') { - // if ($.getWinCoinRes.data['supplyOrder']) await energySupplyStation($.getWinCoinRes.data['supplyOrder']); - await energySupplyStation('2'); - await getRankList(); - if($.raceUsers && $.raceUsers.length > 0) { - for (let index = 0; index < $.raceUsers.length; index++) { - if (index === 0) { - console.log(`您当前里程:${$.raceUsers[index].distance}KM\n当前排名:第${$.raceUsers[index].rank}名\n将获得积分:${$.raceUsers[index].coin}\n`); - // message += `您当前里程:${$.raceUsers[index].distance}km\n`; - } else { - console.log(`对手 ${$.raceUsers[index].nickName} 当前里程:${$.raceUsers[index].distance}KM`); - // message += `对手当前里程:${$.raceUsers[index].distance}km\n`; - } - } - } - console.log('\n今日已参赛,下面显示应援团信息'); - await getBackupInfo(); - if ($.getBackupInfoResult.success) { - const { currentNickName, totalMembers, totalDistance, backupList } = $.getBackupInfoResult.data; - console.log(`${currentNickName}的应援团信息如下\n团员:${totalMembers}个\n团员助力的里程数:${totalDistance}\n`); - if (backupList && backupList.length > 0) { - for (let item of backupList) { - console.log(`${item.nickName}为您助力${item.distance}km`); - } - } else { - console.log(`暂无好友为您助力赛跑,如需助力,请手动去邀请好友助力\n`); - } - } - } - } - } else { - console.log(`您设置的是不参加双人赛跑`) - } -} -//日常任务 -async function petTask() { - for (let item of $.getPetTaskConfigRes.datas || []) { - const joinedCount = item.joinedCount || 0; - if (item['receiveStatus'] === 'chance_full') { - console.log(`${item.taskName} 任务已完成`) - continue - } - //每日签到 - if (item['taskType'] === 'SignEveryDay') { - if (item['receiveStatus'] === 'chance_left') { - console.log('每日签到未完成,需要自己手动去微信小程序【来客有礼】签到,可获得京豆奖励') - } else if (item['receiveStatus'] === 'unreceive') { - //已签到,领取签到后的狗粮 - const res = await getFood('SignEveryDay'); - console.log(`领取每日签到狗粮结果:${res.data}`); - } - } - //每日赛跑 - if (item['taskType'] === 'race') { - if (item['receiveStatus'] === 'chance_left') { - console.log('每日赛跑未完成') - } else if (item['receiveStatus'] === 'unreceive') { - const res = await getFood('race'); - console.log(`领取每日赛跑狗粮结果:${res.data}`); - } - } - //每日兑换 - if (item['taskType'] === 'exchange') { - if (item['receiveStatus'] === 'chance_left') { - console.log('每日兑换未完成') - } else if (item['receiveStatus'] === 'unreceive') { - const res = await getFood('exchange'); - console.log(`领取每日兑换狗粮结果:${res.data}`); - } - } - //每日帮好友喂一次狗粮 - if (item['taskType'] === 'HelpFeed') { - if (item['receiveStatus'] === 'chance_left') { - console.log('每日帮好友喂一次狗粮未完成') - } else if (item['receiveStatus'] === 'unreceive') { - const res = await getFood('HelpFeed'); - console.log(`领取每日帮好友喂一次狗粮 狗粮结果:${res.data}`); - } - } - //每日喂狗粮 - if (item['taskType'] === 'FeedEveryDay') { - if (item['receiveStatus'] === 'chance_left') { - console.log(`\n${item['taskName']}任务进行中\n`) - } else if (item['receiveStatus'] === 'unreceive') { - const res = await getFood('FeedEveryDay'); - console.log(`领取每日喂狗粮 结果:${res.data}`); - } - } - // - //邀请用户助力,领狗粮.(需手动去做任务) - if (item['taskType'] === 'InviteUser') { - if (item['receiveStatus'] === 'chance_left') { - console.log('未完成,需要自己手动去邀请好友给你助力,可以获得狗粮') - } else if (item['receiveStatus'] === 'unreceive') { - const InviteUser = await getFood('InviteUser'); - console.log(`领取助力后的狗粮结果::${JSON.stringify(InviteUser)}`); - } - } - //每日三餐 - if (item['taskType'] === 'ThreeMeals') { - console.log('-----每日三餐-----'); - if (item['receiveStatus'] === 'unreceive') { - const ThreeMealsRes = await getFood('ThreeMeals'); - if (ThreeMealsRes.success) { - if (ThreeMealsRes.errorCode === 'received') { - console.log(`三餐结果领取成功`) - message += `【三餐】领取成功,获得${ThreeMealsRes.data}g狗粮\n`; - } - } - } - } - //关注店铺 - if (item['taskType'] === 'FollowShop') { - console.log('-----关注店铺-----'); - const followShops = item.followShops; - for (let shop of followShops) { - if (!shop.status) { - await dofollowShop(shop.shopId); - await $.wait(1000) - const followShopRes = await followShop(shop.shopId); - console.log(`关注店铺${shop.name}结果::${JSON.stringify(followShopRes)}`) - await $.wait(5000) - } - } - } - //逛会场 - if (item['taskType'] === 'ScanMarket') { - console.log('----逛会场----'); - const scanMarketList = item.scanMarketList; - for (let scanMarketItem of scanMarketList) { - if (!scanMarketItem.status) { - const body = { - "marketLink": `${scanMarketItem.marketLink || scanMarketItem.marketLinkH5}`, - "taskType": "ScanMarket" - }; - await doScanMarket('scan', encodeURI(body["marketLink"])); - await $.wait(1000) - const scanMarketRes = await scanMarket('scan', body); - console.log(`逛会场-${scanMarketItem.marketName}结果::${JSON.stringify(scanMarketRes)}`) - await $.wait(5000) - } - } - } - //浏览频道 - if (item['taskType'] === 'FollowChannel') { - console.log('----浏览频道----'); - const followChannelList = item.followChannelList; - for (let followChannelItem of followChannelList) { - if (!followChannelItem.status) { - const body = { - "channelId": followChannelItem.channelId, - "taskType": "FollowChannel" - }; - await doScanMarket('follow_channel', followChannelItem.channelId); - await $.wait(1000) - const scanMarketRes = await scanMarket('scan', body); - console.log(`浏览频道-${followChannelItem.channelName}结果::${JSON.stringify(scanMarketRes)}`) - await $.wait(5000); - } - } - } - //关注商品 - if (item['taskType'] === 'FollowGood') { - console.log('----关注商品----'); - const followGoodList = item.followGoodList; - for (let followGoodItem of followGoodList) { - if (!followGoodItem.status) { - const body = `sku=${followGoodItem.sku}`; - await doScanMarket('follow_good', followGoodItem.sku); - await $.wait(1000) - const scanMarketRes = await scanMarket('followGood', body); - // const scanMarketRes = await appScanMarket('followGood', `sku=${followGoodItem.sku}&reqSource=h5`, 'application/x-www-form-urlencoded'); - console.log(`关注商品-${followGoodItem.skuName}结果::${JSON.stringify(scanMarketRes)}`) - await $.wait(5000) - } - } - } - //看激励视频 - if (item['taskType'] === 'ViewVideo') { - console.log('----激励视频----'); - if (item.taskChance === joinedCount) { - console.log('今日激励视频已看完') - } else { - for (let i = 0; i < new Array(item.taskChance - joinedCount).fill('').length; i++) { - console.log(`开始第${i+1}次看激励视频`); - const body = {"taskType":"ViewVideo"} - let sanVideoRes = await scanMarket('scan', body); - console.log(`看视频激励结果--${JSON.stringify(sanVideoRes)}`); - } - } - } - } -} -async function appPetTask() { - await appGetPetTaskConfig(); - // console.log('$.appGetPetTaskConfigRes', $.appGetPetTaskConfigRes.success) - if ($.appGetPetTaskConfigRes.success) { - for (let item of $.appGetPetTaskConfigRes.datas || []) { - if (item['taskType'] === 'ScanMarket' && item['receiveStatus'] === 'chance_left') { - const scanMarketList = item.scanMarketList; - for (let scan of scanMarketList) { - if (!scan.status && scan.showDest === 'h5') { - const body = { marketLink: `${scan.marketLink || scan.marketLinkH5}`, taskType: 'ScanMarket'} - await appScanMarket('scan', body); - await $.wait(5000); - } - } - } - } - } -} -function getDeskGoodDetails() { - return new Promise(resolve => { - const url = "https://jdjoy.jd.com/common/pet/getDeskGoodDetails?invokeKey=q8DNJdpcfRQ69gIx" - $.get(taskUrl(url), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} getDeskGoodDetails API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -function followScan(sku) { - return new Promise(resolve => { - const body = { - "taskType": "ScanDeskGood", - sku - } - const url = `https://jdjoy.jd.com/common/pet/scan?invokeKey=q8DNJdpcfRQ69gIx` - $.post(taskPostUrl(url, body), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} followScan API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -//小程序逛会场,浏览频道,关注商品API -function scanMarket(type, body) { - return new Promise(resolve => { - const url = `https://draw.jdfcloud.com//common/pet/${type}?invokeKey=q8DNJdpcfRQ69gIx` - $.post(taskPostUrl(url, body), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} scanMarket API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -function doScanMarket(type, body) { - return new Promise(resolve => { - const url = `https://draw.jdfcloud.com//common/pet/icon/click?iconCode=${type}&linkAddr=${body}&invokeKey=q8DNJdpcfRQ69gIx` - $.get(taskUrl(url), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} doScanMarket API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} - -//app逛会场 -function appScanMarket(type, body) { - return new Promise(resolve => { - const url = `https://jdjoy.jd.com/common/pet/${type}?invokeKey=q8DNJdpcfRQ69gIx` - $.post(taskPostUrl(url, body), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} appScanMarket API请求失败,请检查网路重试`) - } else { - // data = JSON.parse(data); - console.log(`京东app逛会场结果::${data}`) - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} - -//领取狗粮API -function getFood(type) { - return new Promise(resolve => { - const url = `https://draw.jdfcloud.com//common/pet/getFood?taskType=${type}&invokeKey=q8DNJdpcfRQ69gIx` - $.get(taskUrl(url), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} getFood API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -//关注店铺api -function followShop(shopId) { - return new Promise(resolve => { - const body = `shopId=${shopId}`; - const url = `https://draw.jdfcloud.com//common/pet/followShop?invokeKey=q8DNJdpcfRQ69gIx` - $.post(taskPostUrl(url, body), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} followShop API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -function dofollowShop(shopId) { - return new Promise(resolve => { - const url = `https://draw.jdfcloud.com//common/pet/icon/click?iconCode=follow_shop&linkAddr=${shopId}&invokeKey=q8DNJdpcfRQ69gIx` - $.get(taskUrl(url), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} dofollowShop API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} - -function enterRoom() { - return new Promise(resolve => { - const url = `https://draw.jdfcloud.com//common/pet/enterRoom/h5?invitePin=&openId=&invokeKey=q8DNJdpcfRQ69gIx` - $.post(taskPostUrl(url, {}), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} enterRoom API请求失败,请检查网路重试`) - } else { - $.roomData = JSON.parse(data); - console.log(`现有狗粮: ${$.roomData.data.petFood}\n`) - subTitle = `【用户名】${$.roomData.data.pin}` - message = `现有积分: ${$.roomData.data.petCoin}\n现有狗粮: ${$.roomData.data.petFood}\n喂养次数: ${$.roomData.data.feedCount}\n宠物等级: ${$.roomData.data.petLevel}\n` - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(); - } - }) - }) -} -function appGetPetTaskConfig() { - return new Promise(resolve => { - const url = `https://jdjoy.jd.com/common/pet/getPetTaskConfig?invokeKey=q8DNJdpcfRQ69gIx` - $.get(taskUrl(url), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} appGetPetTaskConfig API请求失败,请检查网路重试`) - } else { - $.appGetPetTaskConfigRes = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(); - } - }) - }) -} -//喂食 -function feedPets(feedNum) { - return new Promise(resolve => { - console.log(`您设置的喂食数量:${FEED_NUM}g\n`); - if (FEED_NUM === 0) { console.log(`跳出喂食`);resolve();return } - console.log(`实际的喂食数量:${feedNum}g\n`); - const url = `https://draw.jdfcloud.com//common/pet/feed?feedCount=${feedNum}&invokeKey=q8DNJdpcfRQ69gIx` - $.get(taskUrl(url), async (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} feedPets API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - if (data.success) { - if (data.errorCode === 'feed_ok') { - console.log('喂食成功') - message += `【喂食成功】消耗${feedNum}g狗粮\n`; - } else if (data.errorCode === 'time_error') { - console.log('喂食失败:您的汪汪正在食用中,请稍后再喂食') - message += `【喂食失败】您的汪汪正在食用中,请稍后再喂食\n`; - } else if (data.errorCode === 'food_insufficient') { - console.log(`当前喂食${feedNum}g狗粮不够, 现为您降低一档次喂食\n`) - if ((feedNum) === 80) { - feedNum = 40; - } else if ((feedNum) === 40) { - feedNum = 20; - } else if ((feedNum) === 20) { - feedNum = 10; - } else if ((feedNum) === 10) { - feedNum = 0; - } - // 如果喂食设置的数量失败, 就降低一个档次喂食. - if ((feedNum) !== 0) { - await feedPets(feedNum); - } else { - console.log('您的狗粮已不足10g') - message += `【喂食失败】您的狗粮已不足10g\n`; - } - } else { - console.log(`其他状态${data.errorCode}`) - } - } - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(); - } - }) - }) -} -function getPetTaskConfig() { - return new Promise(resolve => { - const url = `https://draw.jdfcloud.com//common/pet/getPetTaskConfig?invokeKey=q8DNJdpcfRQ69gIx` - $.get(taskUrl(url), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} getPetTaskConfig API请求失败,请检查网路重试`) - } else { - $.getPetTaskConfigRes = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(); - } - }) - }) -} -//查询赛跑信息API -function getPetRace() { - return new Promise(resolve => { - const url = `https://jdjoy.jd.com/common/pet/combat/detail/v2?help=false&invokeKey=q8DNJdpcfRQ69gIx` - $.get(taskUrl(url), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} getPetRace API请求失败,请检查网路重试`) - } else { - $.petRaceResult = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(); - } - }) - }) -} -//查询赛跑排行榜 -function getRankList() { - return new Promise(resolve => { - $.raceUsers = []; - const url = `https://jdjoy.jd.com/common/pet/combat/getRankList?invokeKey=q8DNJdpcfRQ69gIx` - $.get(taskUrl(url), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} getRankList API请求失败,请检查网路重试`) - } else { - data = JSON.parse(data); - if (data.success) { - $.raceUsers = data.datas; - } - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(); - } - }) - }) -} -//参加赛跑API -function runMatch(teamLevel, timeout = 5000) { - if (teamLevel === 10 || teamLevel === 50) timeout = 60000; - console.log(`正在参赛中,请稍等${timeout / 1000}秒,以防多个账号匹配到统一赛场\n`) - return new Promise(async resolve => { - await $.wait(timeout); - const url = `https://jdjoy.jd.com/common/pet/combat/match?teamLevel=${teamLevel}&invokeKey=q8DNJdpcfRQ69gIx` - $.get(taskUrl(url), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} runMatch API请求失败,请检查网路重试`) - } else { - $.runMatchResult = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(); - } - }) - }) -} -//查询应援团信息API -function getBackupInfo() { - return new Promise(resolve => { - const url = `https://jdjoy.jd.com/common/pet/combat/getBackupInfo?invokeKey=q8DNJdpcfRQ69gIx` - $.get(taskUrl(url), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} getBackupInfo API请求失败,请检查网路重试`) - } else { - $.getBackupInfoResult = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(); - } - }) - }) -} -//查询赛跑获得多少积分 -function getWinCoin() { - return new Promise(resolve => { - const url = `https://draw.jdfcloud.com//common/pet/combat/detail/v2?help=false&invokeKey=q8DNJdpcfRQ69gIx` - $.get(taskUrl(url), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} getWinCoin API请求失败,请检查网路重试`) - } else { - if (data) { - $.getWinCoinRes = JSON.parse(data); - } - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(); - } - }) - }) -} -//领取赛跑奖励API -function receiveJoyRunAward() { - return new Promise(resolve => { - const url = `https://jdjoy.jd.com/common/pet/combat/receive?invokeKey=q8DNJdpcfRQ69gIx` - $.get(taskUrl(url), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} receiveJoyRunAward API请求失败,请检查网路重试`) - } else { - $.receiveJoyRunAwardRes = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(); - } - }) - }) -} -//能力补给站 -async function energySupplyStation(showOrder) { - let status; - await getSupplyInfo(showOrder); - if ($.getSupplyInfoRes && $.getSupplyInfoRes.success) { - if ($.getSupplyInfoRes.data) { - const { marketList } = $.getSupplyInfoRes.data; - for (let list of marketList) { - if (!list['status']) { - await scanMarket('combat/supply', { showOrder, 'supplyType': 'scan_market', 'taskInfo': list.marketLink || list['marketLinkH5'] }); - await getSupplyInfo(showOrder); - } else { - $.log(`能力补给站 ${$.getSupplyInfoRes.data.addDistance}km里程 已领取\n`); - status = list['status']; - } - } - if (!status) { - await energySupplyStation(showOrder); - } - } - } -} -function getSupplyInfo(showOrder) { - return new Promise(resolve => { - const url = `https://draw.jdfcloud.com//common/pet/combat/getSupplyInfo?showOrder=${showOrder}&invokeKey=q8DNJdpcfRQ69gIx` - $.get(taskUrl(url), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} getSupplyInfo API请求失败,请检查网路重试`) - } else { - if (data) { - $.getSupplyInfoRes = JSON.parse(data); - } - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(); - } - }) - }) -} -function showMsg() { - jdNotify = $.getdata('jdJoyNotify') ? $.getdata('jdJoyNotify') : jdNotify; - if (!jdNotify || jdNotify === 'false') { - $.msg($.name, subTitle, message); - } else { - $.log(`\n${message}\n`); - } -} -function TotalBean() { - return new Promise(resolve => { - const options = { - url: "https://me-api.jd.com/user_new/info/GetJDUserInfoUnion", - headers: { - "Host": "me-api.jd.com", - "Accept": "*/*", - "User-Agent": "ScriptableWidgetExtension/185 CFNetwork/1312 Darwin/21.0.0", - "Accept-Language": "zh-CN,zh-Hans;q=0.9", - "Accept-Encoding": "gzip, deflate, br", - "Cookie": cookie - } - } - $.get(options, (err, resp, data) => { - try { - if (err) { - $.logErr(err) - } else { - if (data) { - data = JSON.parse(data); - if (data['retcode'] === "1001") { - $.isLogin = false; //cookie过期 - return; - } - if (data['retcode'] === "0" && data.data && data.data.hasOwnProperty("userInfo")) { - $.nickName = data.data.userInfo.baseInfo.nickname; - } - } else { - console.log('京东服务器返回空数据'); - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve() - } - }) - }) -} -function taskUrl(url) { - let lkt = new Date().getTime() - let lks = $.md5('' + 'q8DNJdpcfRQ69gIx' + lkt).toString() - let Host = url.split('/')[2] - if (Host === "jdjoy.jd.com") { - url += "&reqSource=h5" - return { - url: url + $.validate, - headers: { - "Host": "jdjoy.jd.com", - "Accept": "*/*", - "Origin": "https://h5.m.jd.com", - "Accept-Language": "zh-CN,zh-Hans;q=0.9", - "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1"), - "Referer": "https://h5.m.jd.com/", - "Accept-Encoding": "gzip, deflate, br", - "Cookie": cookie, - "lkt": lkt, - "lks": lks - } - } - } else { - url += "&reqSource=weapp" - return { - url: url + $.validate, - headers: { - "Host": "draw.jdfcloud.com", - "Connection": "keep-alive", - "Content-Type": "application/json", - "Accept-Encoding": "gzip,compress,br,deflate", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.15(0x18000f25) NetType/WIFI Language/zh_CN", - "Referer": "https://servicewechat.com/wxccb5c536b0ecd1bf/760/page-frame.html", - "Cookie": cookie, - "lkt": lkt, - "lks": lks - } - } - } -} -function taskPostUrl(url, body) { - let lkt = new Date().getTime() - let lks = $.md5('' + 'q8DNJdpcfRQ69gIx' + lkt).toString() - let Host = url.split('/')[2] - let CT - if (url.indexOf('followShop') > -1 || url.indexOf('followGood') > -1) { - CT = `application/x-www-form-urlencoded` - } else { - CT = `application/json` - body = JSON.stringify(body) - } - if (Host === "jdjoy.jd.com") { - url += "&reqSource=h5" - return { - url: url + $.validate, - body, - headers: { - "Host": "jdjoy.jd.com", - "Content-Type": CT, - "Accept": "*/*", - "Accept-Language": "zh-CN,zh-Hans;q=0.9", - "Accept-Encoding": "gzip, deflate, br", - "Origin": "https://h5.m.jd.com", - "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1"), - "Referer": "https://h5.m.jd.com/", - "Cookie": cookie, - "lkt": lkt, - "lks": lks - } - } - } else { - url += "&reqSource=weapp" - return { - url: url + $.validate, - body, - headers: { - "Host": "draw.jdfcloud.com", - "Connection": "keep-alive", - "Content-Type": CT, - "Accept-Encoding": "gzip,compress,br,deflate", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.15(0x18000f25) NetType/WIFI Language/zh_CN", - "Referer": "https://servicewechat.com/wxccb5c536b0ecd1bf/760/page-frame.html", - "Cookie": cookie, - "lkt": lkt, - "lks": lks - } - } - } -} -function jsonParse(str) { - if (typeof str == "string") { - try { - return JSON.parse(str); - } catch (e) { - console.log(e); - $.msg($.name, '', '请勿随意在BoxJs输入框修改内容\n建议通过脚本去获取cookie') - return []; - } - } -} -// md5 -!function(n){function t(n,t){var r=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(r>>16)<<16|65535&r}function r(n,t){return n<>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<>>9<<4)]=r;var e,i,a,d,h,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e>5]>>>t%32&255)}return r}function d(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t>5]|=(255&n.charCodeAt(t/8))<16&&(o=i(o,8*n.length)),r=0;r<16;r+=1){u[r]=909522486^o[r],c[r]=1549556828^o[r]}return e=i(u.concat(d(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="";for(r=0;r>>4&15)+"0123456789abcdef".charAt(15&t)}return e}function v(n){return unescape(encodeURIComponent(n))}function m(n){return h(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}$.md5=A}(this); -// prettier-ignore -function Env(t,e){"undefined"!=typeof process&&JSON.stringify(process.env).indexOf("GITHUB")>-1&&process.exit(0);class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise((e,i)=>{s.call(this,t,(t,s,r)=>{t?i(t):e(s)})})}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`🔔${this.name}, 开始!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null){try{return JSON.stringify(t)}catch{return e}}getjson(t,e){let s=e;const i=this.getdata(t);if(i)try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise(e=>{this.get({url:t},(t,s,i)=>e(i))})}runScript(t,e){return new Promise(s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let r=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");r=r?1*r:20,r=e&&e.timeout?e.timeout:r;const[o,h]=i.split("@"),n={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,Accept:"*/*"}};this.post(n,(t,e,i)=>s(i))}).catch(t=>this.logErr(t))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),r=JSON.stringify(this.data);s?this.fs.writeFileSync(t,r):i?this.fs.writeFileSync(e,r):this.fs.writeFileSync(t,r)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(const t of i)if(r=Object(r)[t],void 0===r)return s;return r}lodash_set(t,e,s){return Object(t)!==t?t:(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{},t)[e[e.length-1]]=s,t)}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),r=s?this.getval(s):"";if(r)try{const t=JSON.parse(r);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,r]=/^@(.*?)\.(.*?)$/.exec(e),o=this.getval(i),h=i?"null"===o?null:o||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,r,t),s=this.setval(JSON.stringify(e),i)}catch(e){const o={};this.lodash_set(o,r,t),s=this.setval(JSON.stringify(o),i)}}else s=this.setval(t,e);return s}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,e){return this.isSurge()||this.isLoon()?$persistentStore.write(t,e):this.isQuanX()?$prefs.setValueForKey(t,e):this.isNode()?(this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0):this.data&&this.data[e]||null}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,e=(()=>{})){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,e=null){const s=e?new Date(e):new Date;let i={"M+":s.getMonth()+1,"d+":s.getDate(),"H+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(s.getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in i)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?i[e]:("00"+i[e]).substr((""+i[e]).length)));return t}msg(e=t,s="",i="",r){const o=t=>{if(!t)return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:this.isSurge()?{url:t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t.url||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.url||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}if(this.isSurge()){let e=t.url||t.openUrl||t["open-url"];return{url:e}}}};if(this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r))),!this.isMuteLog){let t=["","==============📣系统通知📣=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`❗️${this.name}, 错误!`,t.stack):this.log("",`❗️${this.name}, 错误!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`🔔${this.name}, 结束! 🕛 ${s} 秒`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,e)} diff --git a/jd_joy_feedPets.js b/jd_joy_feedPets.js deleted file mode 100644 index fefeeb3..0000000 --- a/jd_joy_feedPets.js +++ /dev/null @@ -1,256 +0,0 @@ -/* -宠汪汪喂食(如果喂食80g失败,降级一个档次喂食(40g),依次类推),三餐,建议一小时运行一次 -更新时间:2021-6-6 -活动入口:京东APP我的-更多工具-宠汪汪 -支持京东多个账号 -脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js -==============Quantumult X============== -[task_local] -#京东宠汪汪喂食 -15 0-23/1 * * * https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy_feedPets.js, tag=京东宠汪汪喂食, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jdcww.png, enabled=true - -==============Loon=============== -[Script] -cron "15 0-23/1 * * *" script-path=https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy_feedPets.js,tag=京东宠汪汪喂食 - -=========Surge============= -[Script] -京东宠汪汪喂食 = type=cron,cronexp="15 0-23/1 * * *",wake-system=1,timeout=3600,script-path=https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy_feedPets.js - -===============小火箭========== -京东宠汪汪喂食 = type=cron,script-path=https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy_feedPets.js, cronexpr="15 0-23/1 * * *", timeout=3600, enable=true -*/ -const $ = new Env('宠汪汪🐕喂食'); -const zooFaker = require('./JDJRValidator_Aaron'); -$.get = zooFaker.injectToRequest2($.get.bind($)); -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 { - cookiesArr = [$.getdata('CookieJD'), $.getdata('CookieJD2'), ...jsonParse($.getdata('CookiesJD') || "[]").map(item => item.cookie)].filter(item => !!item); -} -let jdNotify = true;//是否开启静默运行。默认true开启 -let message = '', subTitle = ''; -const JD_API_HOST = 'https://jdjoy.jd.com' -let FEED_NUM = ($.getdata('joyFeedCount') * 1) || 10; //喂食数量默认10g,可选 10,20,40,80 , 其他数字不可. -!(async () => { - if (!cookiesArr[0]) { - $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/bean/signIndex.action', {"open-url": "https://bean.m.jd.com/bean/signIndex.action"}); - 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 = ''; - await $.wait(100); - await TotalBean(); - console.log(`\n*****开始【京东账号${$.index}】${$.nickName || $.UserName}******\n`); - if (!$.isLogin) { - $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/bean/signIndex.action`, {"open-url": "https://bean.m.jd.com/bean/signIndex.action"}); - - if ($.isNode()) { - await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); - } - continue - } - message = ''; - subTitle = ''; - if ($.isNode()) { - if (process.env.JOY_FEED_COUNT) { - if ([0, 10, 20, 40, 80].indexOf(process.env.JOY_FEED_COUNT * 1) > -1) { - FEED_NUM = process.env.JOY_FEED_COUNT ? process.env.JOY_FEED_COUNT * 1 : FEED_NUM; - } else { - console.log(`您输入的 JOY_FEED_COUNT 为非法数字,请重新输入`); - } - } - } - $.validate = ''; - // const zooFaker = require('./JDJRValidator_Aaron'); - // $.validate = await zooFaker.injectToRequest() - await feedPets(FEED_NUM);//喂食 - await ThreeMeals();//三餐 - await showMsg(); - } - } -})() - .catch((e) => { - $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') - }) - .finally(() => { - $.done(); - }) -function showMsg() { - $.log(`\n${message}\n`); - jdNotify = $.getdata('jdJoyNotify') ? $.getdata('jdJoyNotify') : jdNotify; - if (!jdNotify || jdNotify === 'false') { - //$.msg($.name, subTitle, `【京东账号${$.index}】${$.UserName}\n` + message); - } -} -function feedPets(feedNum) { - return new Promise(async resolve => { - console.log(`您设置的喂食数量::${FEED_NUM}g\n`); - if (FEED_NUM === 0) { console.log(`跳出喂食`);resolve();return } - console.log(`实际的喂食数量::${feedNum}g\n`); - const url = `https://jdjoy.jd.com/common/pet/feed?feedCount=${feedNum}&reqSource=h5&invokeKey=q8DNJdpcfRQ69gIx` + $.validate; - let lkt = new Date().getTime() - let lks = $.md5('' + 'q8DNJdpcfRQ69gIx' + lkt).toString() - const options = { - url, - headers: { - "Host": "jdjoy.jd.com", - "Accept": "*/*", - "Origin": "https://h5.m.jd.com", - "Accept-Language": "zh-CN,zh-Hans;q=0.9", - "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1"), - "Referer": "https://h5.m.jd.com/", - "Accept-Encoding": "gzip, deflate, br", - "Cookie": cookie, - "lkt": lkt, - "lks": lks - } - } - $.get(options, async (err, resp, data) => { - try { - $.data = JSON.parse(data); - if ($.data.success) { - if ($.data.errorCode === 'feed_ok') { - console.log('喂食成功') - message += `【喂食成功】${feedNum}g\n`; - } else if ($.data.errorCode === 'time_error') { - console.log('喂食失败:正在食用') - message += `【喂食失败】您的汪汪正在食用\n`; - } else if ($.data.errorCode === 'food_insufficient') { - console.log(`当前喂食${feedNum}g狗粮不够, 现为您降低一档次喂食\n`) - if ((feedNum) === 80) { - feedNum = 40; - } else if ((feedNum) === 40) { - feedNum = 20; - } else if ((feedNum) === 20) { - feedNum = 10; - } else if ((feedNum) === 10) { - feedNum = 0; - } - // 如果喂食设置的数量失败, 就降低一个档次喂食. - if ((feedNum) !== 0) { - await feedPets(feedNum); - } else { - console.log('您的狗粮已不足10g') - message += `【喂食失败】您的狗粮已不足10g\n`; - } - } else { - console.log(`其他状态${$.data.errorCode}`) - } - } else { - console.log(`喂食失败:${JSON.stringify($.data)}\n`); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve($.data); - } - }) - }) -} - -//三餐 -function ThreeMeals() { - return new Promise(resolve => { - const url = `https://jdjoy.jd.com/common/pet/getFood?taskType=ThreeMeals&reqSource=h5&invokeKey=q8DNJdpcfRQ69gIx` + $.validate - let lkt = new Date().getTime() - let lks = $.md5('' + 'q8DNJdpcfRQ69gIx' + lkt).toString() - const options = { - url, - headers: { - "Host": "jdjoy.jd.com", - "Accept": "*/*", - "Origin": "https://h5.m.jd.com", - "Accept-Language": "zh-CN,zh-Hans;q=0.9", - "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1"), - "Referer": "https://h5.m.jd.com/", - "Accept-Encoding": "gzip, deflate, br", - "Cookie": cookie, - "lkt": lkt, - "lks": lks - } - } - $.get(options, async (err, resp, data) => { - try { - data = JSON.parse(data); - if (data.success) { - if (data.errorCode === 'received') { - console.log(`三餐结果领取成功`) - message += `【三餐】领取成功,获得${data.data}g狗粮\n`; - } - } - } catch (e) { - $.logErr(resp, e); - } finally { - resolve(data); - } - }) - }) -} -function jsonParse(str) { - if (typeof str == "string") { - try { - return JSON.parse(str); - } catch (e) { - console.log(e); - $.msg($.name, '', '请勿随意在BoxJs输入框修改内容\n建议通过脚本去获取cookie') - return []; - } - } -} -function TotalBean() { - return new Promise(resolve => { - const options = { - url: "https://me-api.jd.com/user_new/info/GetJDUserInfoUnion", - headers: { - "Host": "me-api.jd.com", - "Accept": "*/*", - "User-Agent": "ScriptableWidgetExtension/185 CFNetwork/1312 Darwin/21.0.0", - "Accept-Language": "zh-CN,zh-Hans;q=0.9", - "Accept-Encoding": "gzip, deflate, br", - "Cookie": cookie - } - } - $.get(options, (err, resp, data) => { - try { - if (err) { - $.logErr(err) - } else { - if (data) { - data = JSON.parse(data); - if (data['retcode'] === "1001") { - $.isLogin = false; //cookie过期 - return; - } - if (data['retcode'] === "0" && data.data && data.data.hasOwnProperty("userInfo")) { - $.nickName = data.data.userInfo.baseInfo.nickname; - } - } else { - console.log('京东服务器返回空数据'); - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve() - } - }) - }) -} -// md5 -!function(n){function t(n,t){var r=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(r>>16)<<16|65535&r}function r(n,t){return n<>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<>>9<<4)]=r;var e,i,a,d,h,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e>5]>>>t%32&255)}return r}function d(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t>5]|=(255&n.charCodeAt(t/8))<16&&(o=i(o,8*n.length)),r=0;r<16;r+=1){u[r]=909522486^o[r],c[r]=1549556828^o[r]}return e=i(u.concat(d(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="";for(r=0;r>>4&15)+"0123456789abcdef".charAt(15&t)}return e}function v(n){return unescape(encodeURIComponent(n))}function m(n){return h(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}$.md5=A}(this); -// prettier-ignore -function Env(t,e){"undefined"!=typeof process&&JSON.stringify(process.env).indexOf("GITHUB")>-1&&process.exit(0);class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise((e,i)=>{s.call(this,t,(t,s,r)=>{t?i(t):e(s)})})}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`🔔${this.name}, 开始!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null){try{return JSON.stringify(t)}catch{return e}}getjson(t,e){let s=e;const i=this.getdata(t);if(i)try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise(e=>{this.get({url:t},(t,s,i)=>e(i))})}runScript(t,e){return new Promise(s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let r=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");r=r?1*r:20,r=e&&e.timeout?e.timeout:r;const[o,h]=i.split("@"),n={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,Accept:"*/*"}};this.post(n,(t,e,i)=>s(i))}).catch(t=>this.logErr(t))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),r=JSON.stringify(this.data);s?this.fs.writeFileSync(t,r):i?this.fs.writeFileSync(e,r):this.fs.writeFileSync(t,r)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(const t of i)if(r=Object(r)[t],void 0===r)return s;return r}lodash_set(t,e,s){return Object(t)!==t?t:(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{},t)[e[e.length-1]]=s,t)}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),r=s?this.getval(s):"";if(r)try{const t=JSON.parse(r);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,r]=/^@(.*?)\.(.*?)$/.exec(e),o=this.getval(i),h=i?"null"===o?null:o||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,r,t),s=this.setval(JSON.stringify(e),i)}catch(e){const o={};this.lodash_set(o,r,t),s=this.setval(JSON.stringify(o),i)}}else s=this.setval(t,e);return s}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,e){return this.isSurge()||this.isLoon()?$persistentStore.write(t,e):this.isQuanX()?$prefs.setValueForKey(t,e):this.isNode()?(this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0):this.data&&this.data[e]||null}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,e=(()=>{})){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,e=null){const s=e?new Date(e):new Date;let i={"M+":s.getMonth()+1,"d+":s.getDate(),"H+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(s.getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in i)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?i[e]:("00"+i[e]).substr((""+i[e]).length)));return t}msg(e=t,s="",i="",r){const o=t=>{if(!t)return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:this.isSurge()?{url:t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t.url||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.url||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}if(this.isSurge()){let e=t.url||t.openUrl||t["open-url"];return{url:e}}}};if(this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r))),!this.isMuteLog){let t=["","==============📣系统通知📣=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`❗️${this.name}, 错误!`,t.stack):this.log("",`❗️${this.name}, 错误!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`🔔${this.name}, 结束! 🕛 ${s} 秒`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,e)} diff --git a/jd_joy_park_help.js b/jd_joy_park_help.js deleted file mode 100644 index 8785547..0000000 --- a/jd_joy_park_help.js +++ /dev/null @@ -1,533 +0,0 @@ -/* - -30 23 * * * jd_joy_park_help.js -*/ -const $ = Env("汪汪乐园每日助力") -const ua = `jdltapp;iPhone;3.1.0;${Math.ceil(Math.random()*4+10)}.${Math.ceil(Math.random()*4)};${randomString(40)}` -let cookiesArr = [] -let cookie = '' -let inviters = [] -let inviter = {}; - -!(async () => { - await requireConfig() - if (!cookiesArr[0]) { - $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/bean/signIndex.action', { - "open-url": "https://bean.m.jd.com/bean/signIndex.action" - }); - 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 = ''; - await TotalBean(); - console.log(`\n开始【京东账号${$.index}】${$.nickName || $.UserName}\n`); - if (!$.isLogin) { - $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/bean/signIndex.action`, { - "open-url": "https://bean.m.jd.com/bean/signIndex.action" - }); - if ($.isNode()) { - await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); - } - continue - } - inviter = inviters[0] ?? inviter - helpInfo = {} - bashInfo = await requestApi("joyBaseInfo",inviter ? { - taskId: "167" , - inviteType: '1', - inviterPin: inviter.pin, - } :{}) - if (!bashInfo?.data?.invitePin) continue - helpInfo.pin = bashInfo.data.invitePin - if (bashInfo?.data?.helpState == 1) { - console.log(`账号${i+1}助力账号${inviters[0].index+1}成功`) - inviters[0].taskDoTimes++ - cookie = cookiesArr[inviters[0].index] - for(;;){ - bonus = await requestApi("apTaskDrawAward",inviter ? { - taskId: "167" , - taskType: 'SHARE_INVITE', - } :{}) - if(bonus.success){ - console.log(`账号${inviters[0].index+1}领取${bonus.data[0].awardGivenNumber}工资`) - } else { - break - } - } - cookie = cookiesArr[i]; - if (inviters[0].taskDoTimes >= inviters[0].taskLimitTimes) { - inviters.shift(); - if (inviters.length == 0) { - break - } - } - } - tasks = await requestApi("apTaskList") - if (!tasks?.data)continue - tasks.data.forEach(function (task) { - if(task.taskType == "SHARE_INVITE"){ - if (task.taskDoTimes < task.taskLimitTimes) { - helpInfo.taskLimitTimes = task.taskLimitTimes - helpInfo.taskDoTimes = task.taskDoTimes - helpInfo.index = i - inviters.push(helpInfo) - } - } - }); - } - } -})() - -function requestApi(functionId, params) { - if (!params) { - params = {} - } - params.linkId = "LsQNxL7iWDlXUs6cFl-AAg" - - return new Promise(resolve => { - $.post({ - url: `https://api.m.jd.com/`, - headers: { - 'Host': 'api.m.jd.com', - 'accept': 'application/json, text/plain, */*', - 'content-type': 'application/x-www-form-urlencoded', - 'origin': 'hhttps://joypark.jd.com', - 'accept-language': 'zh-cn', - 'User-Agent': ua, - 'referer': 'https://joypark.jd.com/?activityId=LsQNxL7iWDlXUs6cFl-AAg&lng=110.309497&lat=25.244346&sid=0341d5b9d804d0b838ae6018c19088dw&un_area=20_1726_22885_51456', - 'cookie': cookie - }, - body: `functionId=${functionId}&body=${JSON.stringify(params)}&_t=${Date.now()}&appid=activities_platform`, - }, (err, resp, data) => { - try { - data = JSON.parse(data) - } catch (e) { - $.logErr('Error: ', e, resp) - } finally { - resolve(data) - } - }) - }) -} - -function requireConfig() { - return new Promise(resolve => { - notify = $.isNode() ? require('./sendNotify') : ''; - const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; - if ($.isNode()) { - Object.keys(jdCookieNode).forEach((item) => { - if (jdCookieNode[item]) { - cookiesArr.push(jdCookieNode[item]) - } - }) - if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {}; - } else { - cookiesArr = [$.getdata('CookieJD'), $.getdata('CookieJD2'), ...jsonParse($.getdata('CookiesJD') || "[]").map(item => item.cookie)].filter(item => !!item); - } - console.log(`共${cookiesArr.length}个京东账号\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": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1") - } - } - $.post(options, (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (data) { - data = JSON.parse(data); - if (data['retcode'] === 13) { - $.isLogin = false; //cookie过期 - return - } - if (data['retcode'] === 0) { - $.nickName = (data['base'] && data['base'].nickname) || $.UserName; - } else { - $.nickName = $.UserName - } - } else { - console.log(`京东服务器返回空数据`) - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} - -function randomString(e) { - e = e || 32; - let t = "abcdefhijkmnprstwxyz2345678", - a = t.length, - n = ""; - for (i = 0; i < e; i++) - n += t.charAt(Math.floor(Math.random() * a)); - return n -} - -function Env(t, e) { - "undefined" != typeof process && JSON.stringify(process.env).indexOf("GIT_HUB") > -1 && process.exit(0); - class s { - constructor(t) { - this.env = t - } - send(t, e = "GET") { - t = "string" == typeof t ? { - url: t - } : t; - let s = this.get; - return "POST" === e && (s = this.post), new Promise((e, i) => { - s.call(this, t, (t, s, r) => { - t ? i(t) : e(s) - }) - }) - } - get(t) { - return this.send.call(this.env, t) - } - post(t) { - return this.send.call(this.env, t, "POST") - } - } - return new class { - constructor(t, e) { - this.name = t, this.http = new s(this), this.data = null, this.dataFile = "box.dat", this.logs = [], this.isMute = !1, this.isNeedRewrite = !1, this.logSeparator = "\n", this.startTime = (new Date).getTime(), Object.assign(this, e), this.log("", `🔔${this.name}, 开始!`) - } - isNode() { - return "undefined" != typeof module && !!module.exports - } - isQuanX() { - return "undefined" != typeof $task - } - isSurge() { - return "undefined" != typeof $httpClient && "undefined" == typeof $loon - } - isLoon() { - return "undefined" != typeof $loon - } - toObj(t, e = null) { - try { - return JSON.parse(t) - } catch (e) { - return e - } - } - toStr(t, e = null) { - try { - return JSON.stringify(t) - } catch (e) { - return e - } - } - getjson(t, e) { - let s = e; - const i = this.getdata(t); - if (i) try { - s = JSON.parse(this.getdata(t)) - } catch {} - return s - } - setjson(t, e) { - try { - return this.setdata(JSON.stringify(t), e) - } catch { - return !1 - } - } - getScript(t) { - return new Promise(e => { - this.get({ - url: t - }, (t, s, i) => e(i)) - }) - } - runScript(t, e) { - return new Promise(s => { - let i = this.getdata("@chavy_boxjs_userCfgs.httpapi"); - i = i ? i.replace(/\n/g, "").trim() : i; - let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); - r = r ? 1 * r : 20, r = e && e.timeout ? e.timeout : r; - const [o, h] = i.split("@"), n = { - url: `http://${h}/v1/scripting/evaluate`, - body: { - script_text: t, - mock_type: "cron", - timeout: r - }, - headers: { - "X-Key": o, - Accept: "*/*" - } - }; - this.post(n, (t, e, i) => s(i)) - }).catch(t => this.logErr(t)) - } - loaddata() { - if (!this.isNode()) return {}; { - this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); - const t = this.path.resolve(this.dataFile), - e = this.path.resolve(process.cwd(), this.dataFile), - s = this.fs.existsSync(t), - i = !s && this.fs.existsSync(e); - if (!s && !i) return {}; { - const i = s ? t : e; - try { - return JSON.parse(this.fs.readFileSync(i)) - } catch (t) { - return {} - } - } - } - } - writedata() { - if (this.isNode()) { - this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); - const t = this.path.resolve(this.dataFile), - e = this.path.resolve(process.cwd(), this.dataFile), - s = this.fs.existsSync(t), - i = !s && this.fs.existsSync(e), - r = JSON.stringify(this.data); - s ? this.fs.writeFileSync(t, r) : i ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) - } - } - lodash_get(t, e, s) { - const i = e.replace(/\[(\d+)\]/g, ".$1").split("."); - let r = t; - for (const t of i) - if (r = Object(r)[t], void 0 === r) return s; - return r - } - lodash_set(t, e, s) { - return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), e.slice(0, -1).reduce((t, s, i) => Object(t[s]) === t[s] ? t[s] : t[s] = Math.abs(e[i + 1]) >> 0 == +e[i + 1] ? [] : {}, t)[e[e.length - 1]] = s, t) - } - getdata(t) { - let e = this.getval(t); - if (/^@/.test(t)) { - const [, s, i] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; - if (r) try { - const t = JSON.parse(r); - e = t ? this.lodash_get(t, i, "") : e - } catch (t) { - e = "" - } - } - return e - } - setdata(t, e) { - let s = !1; - if (/^@/.test(e)) { - const [, i, r] = /^@(.*?)\.(.*?)$/.exec(e), o = this.getval(i), h = i ? "null" === o ? null : o || "{}" : "{}"; - try { - const e = JSON.parse(h); - this.lodash_set(e, r, t), s = this.setval(JSON.stringify(e), i) - } catch (e) { - const o = {}; - this.lodash_set(o, r, t), s = this.setval(JSON.stringify(o), i) - } - } else s = this.setval(t, e); - return s - } - getval(t) { - return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? (this.data = this.loaddata(), this.data[t]) : this.data && this.data[t] || null - } - setval(t, e) { - return this.isSurge() || this.isLoon() ? $persistentStore.write(t, e) : this.isQuanX() ? $prefs.setValueForKey(t, e) : this.isNode() ? (this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0) : this.data && this.data[e] || null - } - initGotEnv(t) { - this.got = this.got ? this.got : require("got"), this.cktough = this.cktough ? this.cktough : require("tough-cookie"), this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar, t && (t.headers = t.headers ? t.headers : {}, void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) - } - get(t, e = (() => {})) { - 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, e = null) { - const s = e ? new Date(e) : new Date; - let i = { - "M+": s.getMonth() + 1, - "d+": s.getDate(), - "H+": s.getHours(), - "m+": s.getMinutes(), - "s+": s.getSeconds(), - "q+": Math.floor((s.getMonth() + 3) / 3), - S: s.getMilliseconds() - }; - /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); - for (let e in i) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? i[e] : ("00" + i[e]).substr(("" + i[e]).length))); - return t - } - msg(e = t, s = "", i = "", r) { - const o = t => { - if (!t) return t; - if ("string" == typeof t) return this.isLoon() ? t : this.isQuanX() ? { - "open-url": t - } : this.isSurge() ? { - url: t - } : void 0; - if ("object" == typeof t) { - if (this.isLoon()) { - let e = t.openUrl || t.url || t["open-url"], - s = t.mediaUrl || t["media-url"]; - return { - openUrl: e, - mediaUrl: s - } - } - if (this.isQuanX()) { - let e = t["open-url"] || t.url || t.openUrl, - s = t["media-url"] || t.mediaUrl; - return { - "open-url": e, - "media-url": s - } - } - if (this.isSurge()) { - let e = t.url || t.openUrl || t["open-url"]; - return { - url: e - } - } - } - }; - if (this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r))), !this.isMuteLog) { - let t = ["", "==============📣系统通知📣=============="]; - t.push(e), s && t.push(s), i && t.push(i), console.log(t.join("\n")), this.logs = this.logs.concat(t) - } - } - log(...t) { - t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) - } - logErr(t, e) { - const s = !this.isSurge() && !this.isQuanX() && !this.isLoon(); - s ? this.log("", `❗️${this.name}, 错误!`, t.stack) : this.log("", `❗️${this.name}, 错误!`, t) - } - wait(t) { - return new Promise(e => setTimeout(e, t)) - } - done(t = {}) { - const e = (new Date).getTime(), - s = (e - this.startTime) / 1e3; - this.log("", `🔔${this.name}, 结束! 🕛 ${s} 秒`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) - } - }(t, e) -} \ No newline at end of file diff --git a/jd_joy_reward_Mod.js b/jd_joy_reward_Mod.js deleted file mode 100644 index dfb7124..0000000 --- a/jd_joy_reward_Mod.js +++ /dev/null @@ -1,1119 +0,0 @@ -/* -cron "58 7,15,23 * * *" jd_joy_reward_Mod.js - */ -//Mod by ccwav,20211014 -// prettier-ignore -const $ = new Env('宠汪汪积分兑换有就换版'); -const zooFaker = require('./utils/JDJRValidator_Pure'); -// $.get = zooFaker.injectToRequest2($.get.bind($)); -// $.post = zooFaker.injectToRequest2($.post.bind($)); -let allMessage = ''; -//Node.js用户请在jdCookie.js处填写京东ck; -const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; -const notify = $.isNode() ? require('./sendNotify') : ''; -let jdNotify = false; //是否开启静默运行,默认false关闭(即:奖品兑换成功后会发出通知提示) -let Today = new Date(); -let strDisable20 = "false"; - -//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 { - cookiesArr = [$.getdata('CookieJD'), $.getdata('CookieJD2'), ...jsonParse($.getdata('CookiesJD') || "[]").map(item => item.cookie)].filter(item => !!item); -} -const JD_API_HOST = 'https://jdjoy.jd.com'; -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(), //秒 - "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; -} -!(async() => { - if (!cookiesArr[0]) { - $.msg('【京东账号一】宠汪汪积分兑换奖品失败', '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/bean/signIndex.action', { - "open-url": "https://bean.m.jd.com/bean/signIndex.action" - }); - } - 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 = '' || $.UserName; - - await TotalBean(); - console.log(`\n*****开始【京东账号${$.index}】${$.nickName || $.UserName}****\n`); - if (!$.isLogin) { - $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/bean/signIndex.action`, { - "open-url": "https://bean.m.jd.com/bean/signIndex.action" - }); - - if ($.isNode()) { - await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); - } - continue - } - - if ($.isNode() && process.env.JOY_GET20WHEN16) { - strDisable20 = process.env.JOY_GET20WHEN16; - if (strDisable20 != "false") { - console.log("设置16点时段才抢20京豆...."); - } - } - - // console.log(`本地时间与京东服务器时间差(毫秒):${await get_diff_time()}`); - $.validate = ''; - $.validate = await zooFaker.injectToRequest(); - console.log(`脚本开始请求时间 ${(new Date()).Format("yyyy-MM-dd hh:mm:ss | S")}`); - await joyReward(); - } - } - if ($.isNode() && allMessage && $.ctrTemp) { - await notify.sendNotify(`${$.name}`, `${allMessage}`) - } -})() -.catch((e) => { - $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') -}) -.finally(() => { - $.done(); -}) - -async function joyReward() { - try { - let starttime = process.env.JOY_STARTTIME ? process.env.JOY_STARTTIME : 60; - let nowtime = new Date().getSeconds(); - let sleeptime = 0; - let rewardNum = '', - saleInfoId = '', - giftValue = '', - extInfo = '', - salePrice = 0; - var llError = false; - let giftSaleInfos = 'beanConfigs0'; - let time = new Date().getHours(); - if (time >= 0 && time < 8) { - giftSaleInfos = 'beanConfigs0'; - if (time == 7 && new Date().getMinutes() > 50) { - giftSaleInfos = 'beanConfigs8'; - } - } - if (time >= 8 && time < 16) { - giftSaleInfos = 'beanConfigs8'; - if (time == 15 && new Date().getMinutes() > 50) { - giftSaleInfos = 'beanConfigs16'; - } - } - if (time >= 16 && time < 24) { - giftSaleInfos = 'beanConfigs16'; - if (time == 23 && new Date().getMinutes() > 50) { - giftSaleInfos = 'beanConfigs0'; - } - } - - if (new Date().getHours() >= 15 && new Date().getHours() < 23 && strDisable20 != "false") { - console.log("现在是15点后时段,执行先抢500京豆再抢20京豆..."); - strDisable20 = "false"; - } - - console.log(`debug场次:${giftSaleInfos}\n`) - - for (let intTimes = 0; intTimes <= 50; intTimes++) { - llError = false; - await getExchangeRewards(); - if ($.getExchangeRewardsRes && $.getExchangeRewardsRes.success) { - const data = $.getExchangeRewardsRes.data; - try { - for (let item of data[giftSaleInfos]) { - if (item.giftType === 'jd_bean') { - saleInfoId = item.id; - } - } - } catch (e) { - llError = true; - console.log('东哥搞事情,不给京豆ID,等待5秒后重新获取...'); - await $.wait(5000); - } - if (llError) { - continue; - } else { - console.log('成功获取场次信息...'); - break; - } - - } - } - if (llError) { - console.log('东哥说现在不给你兑换,死了这条心吧...'); - return; - } - - if (new Date().getMinutes() == 58) { - sleeptime = (60 - nowtime) * 1000; - console.log(`请等待时间到达59分` + `等待时间 ${sleeptime / 1000}`); - await $.wait(sleeptime); - } - - if (new Date().getMinutes() == 59) { - console.log(`脚本现在时间 ${(new Date()).Format("yyyy-MM-dd hh:mm:ss | S")}`); - nowtime = new Date().getSeconds(); - if (nowtime < 59) { - nowtime = new Date().getSeconds() + 1; - sleeptime = (starttime - nowtime) * 1000; - console.log(`等待时间 ${sleeptime / 1000}`); - await $.wait(sleeptime); - } - } - var llChange500 = true; - var llSuccess = false; - llError = false; - for (let j = 0; j <= 14; j++) { - if (llSuccess) { - console.log(`兑换成功,跳出循环...\n`); - break; - } - if (llError) { - console.log(`兑换失败,跳出循环...\n`); - break; - } - - console.log(`\n正在尝试第` + (j + 1) + `次执行:${(new Date()).Format("yyyy-MM-dd hh:mm:ss | S")} \n`); - const data = $.getExchangeRewardsRes.data; - if (llChange500) { - for (let item of data[giftSaleInfos]) { - if (item.giftType === 'jd_bean') { - saleInfoId = item.id; - salePrice = item.salePrice; - giftValue = item.giftValue; - rewardNum = giftValue; - if (salePrice && rewardNum == 500) { - if (!saleInfoId) - continue; - console.log(`开始兑换${rewardNum}京豆,时间 ${(new Date()).Format("yyyy-MM-dd hh:mm:ss | S")}`); - await exchange(saleInfoId, 'pet'); - console.log(`结束兑换API后时间 ${(new Date()).Format("yyyy-MM-dd hh:mm:ss | S")}`); - if ($.exchangeRes && $.exchangeRes.success) { - if ($.exchangeRes.errorCode === 'buy_success') { - console.log(`兑换${giftValue}成功,【消耗积分】${salePrice}个`) - llSuccess = true; - if ($.isNode() && process.env.JD_JOY_REWARD_NOTIFY) { - $.ctrTemp = `${process.env.JD_JOY_REWARD_NOTIFY}` === 'false'; - } else if ($.getdata('jdJoyRewardNotify')) { - $.ctrTemp = $.getdata('jdJoyRewardNotify') === 'false'; - } else { - $.ctrTemp = `${jdNotify}` === 'false'; - } - if ($.ctrTemp) { - $.msg($.name, ``, `【京东账号${$.index}】${$.nickName}\n【${giftValue}京豆】兑换成功🎉\n【积分详情】消耗积分 ${salePrice}`); - if ($.isNode()) { - allMessage += `【京东账号${$.index}】 ${$.nickName}\n【${giftValue}京豆】兑换成功🎉\n【积分详情】消耗积分 ${salePrice}${$.index !== cookiesArr.length ? '\n\n' : ''}` - } - break; - } - } else if ($.exchangeRes && $.exchangeRes.errorCode === 'buy_limit') { - console.log(`兑换${rewardNum}京豆失败,原因:兑换京豆已达上限,请把机会留给更多的小伙伴~`) - llError = true; - break; - } else if ($.exchangeRes && $.exchangeRes.errorCode === 'stock_empty') { - console.log(`兑换${rewardNum}京豆失败,原因:当前京豆库存为空`) - } else if ($.exchangeRes && $.exchangeRes.errorCode === 'insufficient') { - console.log(`兑换${rewardNum}京豆失败,原因:当前账号积分不足兑换${giftValue}京豆所需的${salePrice}积分`) - if (strDisable20 != "false") { - console.log(`关闭兑换500京豆,开启20京豆兑换...`) - strDisable20 = "false"; - } else { - console.log(`关闭兑换500京豆...`) - } - llChange500 = false; - - } else { - console.log(`兑奖失败:${JSON.stringify($.exchangeRes)}`) - } - } else { - console.log(`兑换京豆异常:${JSON.stringify($.exchangeRes)}`) - } - - } - } - } - } - if (strDisable20 == "false") { - for (let item of data[giftSaleInfos]) { - if (item.giftType === 'jd_bean') { - saleInfoId = item.id; - salePrice = item.salePrice; - giftValue = item.giftValue; - rewardNum = giftValue; - if (salePrice && rewardNum == 20) { - - if (!saleInfoId) - continue; - console.log(`开始兑换${rewardNum}京豆,时间 ${(new Date()).Format("yyyy-MM-dd hh:mm:ss | S")}`); - await exchange(saleInfoId, 'pet'); - console.log(`结束兑换API后时间 ${(new Date()).Format("yyyy-MM-dd hh:mm:ss | S")}`); - if ($.exchangeRes && $.exchangeRes.success) { - if ($.exchangeRes.errorCode === 'buy_success') { - console.log(`兑换${giftValue}成功,【消耗积分】${salePrice}个`) - llSuccess = true; - if ($.isNode() && process.env.JD_JOY_REWARD_NOTIFY) { - $.ctrTemp = `${process.env.JD_JOY_REWARD_NOTIFY}` === 'false'; - } else if ($.getdata('jdJoyRewardNotify')) { - $.ctrTemp = $.getdata('jdJoyRewardNotify') === 'false'; - } else { - $.ctrTemp = `${jdNotify}` === 'false'; - } - if ($.ctrTemp) { - $.msg($.name, ``, `【京东账号${$.index}】${$.nickName}\n【${giftValue}京豆】兑换成功🎉\n【积分详情】消耗积分 ${salePrice}`); - if ($.isNode()) { - allMessage += `【京东账号${$.index}】 ${$.nickName}\n【${giftValue}京豆】兑换成功🎉\n【积分详情】消耗积分 ${salePrice}${$.index !== cookiesArr.length ? '\n\n' : ''}` - } - break; - } - } else if ($.exchangeRes && $.exchangeRes.errorCode === 'buy_limit') { - console.log(`兑换${rewardNum}京豆失败,原因:兑换京豆已达上限,请把机会留给更多的小伙伴~`) - llError = true; - break; - } else if ($.exchangeRes && $.exchangeRes.errorCode === 'stock_empty') { - console.log(`兑换${rewardNum}京豆失败,原因:当前京豆库存为空`) - } else if ($.exchangeRes && $.exchangeRes.errorCode === 'insufficient') { - console.log(`兑换${rewardNum}京豆失败,原因:当前账号积分不足兑换${giftValue}京豆所需的${salePrice}积分`) - llError = true; - break; - } else { - console.log(`兑奖失败:${JSON.stringify($.exchangeRes)}`) - } - } else { - console.log(`兑换京豆异常:${JSON.stringify($.exchangeRes)}`) - } - - } - } - } - } - - await $.wait(300); - } - } catch (e) { - $.logErr(e) - } -} -function getExchangeRewards() { - return new Promise(resolve => { - let lkt = new Date().getTime() - let lks = $.md5('' + 'q8DNJdpcfRQ69gIx' + lkt).toString() - const option = { - url: `https://jdjoy.jd.com/common/gift/getBeanConfigs?reqSource=h5&invokeKey=q8DNJdpcfRQ69gIx` + $.validate, - headers: { - "Host": "jdjoy.jd.com", - "Accept": "*/*", - "Origin": "https://h5.m.jd.com", - "Accept-Language": "zh-CN,zh-Hans;q=0.9", - "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1"), - "Referer": "https://h5.m.jd.com/", - "Accept-Encoding": "gzip, deflate, br", - "Cookie": cookie, - "lkt": lkt, - "lks": lks - } - } - $.get(option, (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} getExchangeRewards API请求失败,请检查网路重试`) - } else { - $.getExchangeRewardsRes = {}; - if (safeGet(data)) { - $.getExchangeRewardsRes = JSON.parse(data); - } - } - } catch (e) { - $.logErr(e, resp) - } - finally { - resolve(); - } - }) - }) -} -function exchange(saleInfoId, orderSource) { - let body = { - "buyParam": { - "orderSource": orderSource, - "saleInfoId": saleInfoId - }, - "deviceInfo": {} - } - return new Promise(resolve => { - let lkt = new Date().getTime() - let lks = $.md5('' + 'q8DNJdpcfRQ69gIx' + lkt).toString() - const option = { - url: `https://jdjoy.jd.com/common/gift/new/exchange?reqSource=h5&invokeKey=q8DNJdpcfRQ69gIx` + $.validate, - body: JSON.stringify(body), - headers: { - "Host": "jdjoy.jd.com", - "Content-Type": "application/json", - "Accept": "*/*", - "Accept-Language": "zh-CN,zh-Hans;q=0.9", - "Accept-Encoding": "gzip, deflate, br", - "Origin": "https://h5.m.jd.com", - "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1"), - "Referer": "https://h5.m.jd.com/", - "Cookie": cookie, - "lkt": lkt, - "lks": lks - } - } - $.post(option, (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} exchange API请求失败,请检查网路重试`) - } else { - console.log(`兑换结果:${data}`) - $.exchangeRes = {}; - if (safeGet(data)) { - $.exchangeRes = 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 : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1") - } - } - $.post(options, (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (data) { - data = JSON.parse(data); - if (data['retcode'] === 13) { - $.isLogin = false; //cookie过期 - return - } - if (data['retcode'] === 0) { - $.nickName = (data['base'] && data['base'].nickname) || $.UserName; - } else { - $.nickName = $.UserName - } - } else { - console.log(`京东服务器返回空数据`) - } - } - } catch (e) { - $.logErr(e, resp) - } - finally { - resolve(); - } - }) - }) -} -function getJDServerTime() { - return new Promise(resolve => { - // console.log(Date.now()) - $.get({ - url: "https://a.jd.com//ajax/queryServerData.html", - headers: { - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/87.0.4280.88" - } - }, async(err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} 获取京东服务器时间失败,请检查网路重试`) - } else { - data = JSON.parse(data); - $.jdTime = data['serverTime']; - // console.log(data['serverTime']); - // console.log(data['serverTime'] - Date.now()) - } - } catch (e) { - $.logErr(e, resp) - } - finally { - resolve($.jdTime); - } - }) - }) -} -async function get_diff_time() { - // console.log(`本机时间戳 ${Date.now()}`) - // console.log(`京东服务器时间戳 ${await getJDServerTime()}`) - return Date.now() - await getJDServerTime(); -} -function jsonParse(str) { - if (typeof str == "string") { - try { - return JSON.parse(str); - } catch (e) { - console.log(e); - $.msg($.name, '', '请勿随意在BoxJs输入框修改内容\n建议通过脚本去获取cookie') - return []; - } - } -} -function safeGet(data) { - try { - if (typeof JSON.parse(data) == "object") { - return true; - } - } catch (e) { - console.log(e); - console.log(`京东服务器访问数据为空,请检查自身设备网络情况`); - return false; - } -} -function taroRequest(e) { - const a = $.isNode() ? require('crypto-js') : CryptoJS; - const i = "98c14c997fde50cc18bdefecfd48ceb7" - const o = a.enc.Utf8.parse(i) - const r = a.enc.Utf8.parse("ea653f4f3c5eda12"); - let _o = { - "AesEncrypt": function AesEncrypt(e) { - var n = a.enc.Utf8.parse(e); - return a.AES.encrypt(n, o, { - "iv": r, - "mode": a.mode.CBC, - "padding": a.pad.Pkcs7 - }).ciphertext.toString() - }, - "AesDecrypt": function AesDecrypt(e) { - var n = a.enc.Hex.parse(e), - t = a.enc.Base64.stringify(n); - return a.AES.decrypt(t, o, { - "iv": r, - "mode": a.mode.CBC, - "padding": a.pad.Pkcs7 - }).toString(a.enc.Utf8).toString() - }, - "Base64Encode": function Base64Encode(e) { - var n = a.enc.Utf8.parse(e); - return a.enc.Base64.stringify(n) - }, - "Base64Decode": function Base64Decode(e) { - return a.enc.Base64.parse(e).toString(a.enc.Utf8) - }, - "Md5encode": function Md5encode(e) { - return a.MD5(e).toString() - }, - "keyCode": "98c14c997fde50cc18bdefecfd48ceb7" - } - - const c = function sortByLetter(e, n) { - if (e instanceof Array) { - n = n || []; - for (var t = 0; t < e.length; t++) - n[t] = sortByLetter(e[t], n[t]) - } else - !(e instanceof Array) && e instanceof Object ? (n = n || {}, - Object.keys(e).sort().map(function (t) { - n[t] = sortByLetter(e[t], n[t]) - })) : n = e; - return n - } - const s = function isInWhiteAPI(e) { - for (var n = ["gift", "pet"], t = !1, a = 0; a < n.length; a++) { - var i = n[a]; - e.includes(i) && !t && (t = !0) - } - return t - } - - const d = function addQueryToPath(e, n) { - if (n && Object.keys(n).length > 0) { - var t = Object.keys(n).map(function (e) { - return e + "=" + n[e] - }).join("&"); - return e.indexOf("?") >= 0 ? e + "&" + t : e + "?" + t - } - return e - } - const l = function apiConvert(e) { - for (var n = r, t = 0; t < n.length; t++) { - var a = n[t]; - e.includes(a) && !e.includes("common/" + a) && (e = e.replace(a, "common/" + a)) - } - return e - } - - var n = e, - t = (n.header, - n.url); - t += (t.indexOf("?") > -1 ? "&" : "?") + "reqSource=h5"; - var _a = function getTimeSign(e) { - var n = e.url, - t = e.method, - a = void 0 === t ? "GET" : t, - i = e.data, - r = e.header, - m = void 0 === r ? {} - : r, - p = a.toLowerCase(), - g = _o.keyCode, - f = m["content-type"] || m["Content-Type"] || "", - h = "", - u = +new Date(); - return h = "get" !== p && - ("post" !== p || "application/x-www-form-urlencoded" !== f.toLowerCase() && i && Object.keys(i).length) ? - _o.Md5encode(_o.Base64Encode(_o.AesEncrypt("" + JSON.stringify(c(i)))) + "_" + g + "_" + u) : - _o.Md5encode("_" + g + "_" + u), - s(n) && (n = d(n, { - "lks": h, - "lkt": u - }), - n = l(n)), - Object.assign(e, { - "url": n - }) - } - (e = Object.assign(e, { - "url": t - })); - return _a -} -// md5 -!function (n) { - function t(n, t) { - var r = (65535 & n) + (65535 & t); - return (n >> 16) + (t >> 16) + (r >> 16) << 16 | 65535 & r - } - function r(n, t) { - return n << t | n >>> 32 - t - } - function e(n, e, o, u, c, f) { - return t(r(t(t(e, n), t(u, f)), c), o) - } - function o(n, t, r, o, u, c, f) { - return e(t & r | ~t & o, n, t, u, c, f) - } - function u(n, t, r, o, u, c, f) { - return e(t & o | r & ~o, n, t, u, c, f) - } - function c(n, t, r, o, u, c, f) { - return e(t ^ r ^ o, n, t, u, c, f) - } - function f(n, t, r, o, u, c, f) { - return e(r ^ (t | ~o), n, t, u, c, f) - } - function i(n, r) { - n[r >> 5] |= 128 << r % 32, - n[14 + (r + 64 >>> 9 << 4)] = r; - var e, - i, - a, - d, - h, - l = 1732584193, - g = -271733879, - v = -1732584194, - m = 271733878; - for (e = 0; e < n.length; e += 16) { - i = l, - a = g, - d = v, - h = m, - g = f(g = f(g = f(g = f(g = c(g = c(g = c(g = c(g = u(g = u(g = u(g = u(g = o(g = o(g = o(g = o(g, v = o(v, m = o(m, l = o(l, g, v, m, n[e], 7, -680876936), g, v, n[e + 1], 12, -389564586), l, g, n[e + 2], 17, 606105819), m, l, n[e + 3], 22, -1044525330), v = o(v, m = o(m, l = o(l, g, v, m, n[e + 4], 7, -176418897), g, v, n[e + 5], 12, 1200080426), l, g, n[e + 6], 17, -1473231341), m, l, n[e + 7], 22, -45705983), v = o(v, m = o(m, l = o(l, g, v, m, n[e + 8], 7, 1770035416), g, v, n[e + 9], 12, -1958414417), l, g, n[e + 10], 17, -42063), m, l, n[e + 11], 22, -1990404162), v = o(v, m = o(m, l = o(l, g, v, m, n[e + 12], 7, 1804603682), g, v, n[e + 13], 12, -40341101), l, g, n[e + 14], 17, -1502002290), m, l, n[e + 15], 22, 1236535329), v = u(v, m = u(m, l = u(l, g, v, m, n[e + 1], 5, -165796510), g, v, n[e + 6], 9, -1069501632), l, g, n[e + 11], 14, 643717713), m, l, n[e], 20, -373897302), v = u(v, m = u(m, l = u(l, g, v, m, n[e + 5], 5, -701558691), g, v, n[e + 10], 9, 38016083), l, g, n[e + 15], 14, -660478335), m, l, n[e + 4], 20, -405537848), v = u(v, m = u(m, l = u(l, g, v, m, n[e + 9], 5, 568446438), g, v, n[e + 14], 9, -1019803690), l, g, n[e + 3], 14, -187363961), m, l, n[e + 8], 20, 1163531501), v = u(v, m = u(m, l = u(l, g, v, m, n[e + 13], 5, -1444681467), g, v, n[e + 2], 9, -51403784), l, g, n[e + 7], 14, 1735328473), m, l, n[e + 12], 20, -1926607734), v = c(v, m = c(m, l = c(l, g, v, m, n[e + 5], 4, -378558), g, v, n[e + 8], 11, -2022574463), l, g, n[e + 11], 16, 1839030562), m, l, n[e + 14], 23, -35309556), v = c(v, m = c(m, l = c(l, g, v, m, n[e + 1], 4, -1530992060), g, v, n[e + 4], 11, 1272893353), l, g, n[e + 7], 16, -155497632), m, l, n[e + 10], 23, -1094730640), v = c(v, m = c(m, l = c(l, g, v, m, n[e + 13], 4, 681279174), g, v, n[e], 11, -358537222), l, g, n[e + 3], 16, -722521979), m, l, n[e + 6], 23, 76029189), v = c(v, m = c(m, l = c(l, g, v, m, n[e + 9], 4, -640364487), g, v, n[e + 12], 11, -421815835), l, g, n[e + 15], 16, 530742520), m, l, n[e + 2], 23, -995338651), v = f(v, m = f(m, l = f(l, g, v, m, n[e], 6, -198630844), g, v, n[e + 7], 10, 1126891415), l, g, n[e + 14], 15, -1416354905), m, l, n[e + 5], 21, -57434055), v = f(v, m = f(m, l = f(l, g, v, m, n[e + 12], 6, 1700485571), g, v, n[e + 3], 10, -1894986606), l, g, n[e + 10], 15, -1051523), m, l, n[e + 1], 21, -2054922799), v = f(v, m = f(m, l = f(l, g, v, m, n[e + 8], 6, 1873313359), g, v, n[e + 15], 10, -30611744), l, g, n[e + 6], 15, -1560198380), m, l, n[e + 13], 21, 1309151649), v = f(v, m = f(m, l = f(l, g, v, m, n[e + 4], 6, -145523070), g, v, n[e + 11], 10, -1120210379), l, g, n[e + 2], 15, 718787259), m, l, n[e + 9], 21, -343485551), - l = t(l, i), - g = t(g, a), - v = t(v, d), - m = t(m, h) - } - return [l, g, v, m] - } - function a(n) { - var t, - r = "", - e = 32 * n.length; - for (t = 0; t < e; t += 8) { - r += String.fromCharCode(n[t >> 5] >>> t % 32 & 255) - } - return r - } - function d(n) { - var t, - r = []; - for (r[(n.length >> 2) - 1] = void 0, t = 0; t < r.length; t += 1) { - r[t] = 0 - } - var e = 8 * n.length; - for (t = 0; t < e; t += 8) { - r[t >> 5] |= (255 & n.charCodeAt(t / 8)) << t % 32 - } - return r - } - function h(n) { - return a(i(d(n), 8 * n.length)) - } - function l(n, t) { - var r, - e, - o = d(n), - u = [], - c = []; - for (u[15] = c[15] = void 0, o.length > 16 && (o = i(o, 8 * n.length)), r = 0; r < 16; r += 1) { - u[r] = 909522486 ^ o[r], - c[r] = 1549556828 ^ o[r] - } - return e = i(u.concat(d(t)), 512 + 8 * t.length), - a(i(c.concat(e), 640)) - } - function g(n) { - var t, - r, - e = ""; - for (r = 0; r < n.length; r += 1) { - t = n.charCodeAt(r), - e += "0123456789abcdef".charAt(t >>> 4 & 15) + "0123456789abcdef".charAt(15 & t) - } - return e - } - function v(n) { - return unescape(encodeURIComponent(n)) - } - function m(n) { - return h(v(n)) - } - function p(n) { - return g(m(n)) - } - function s(n, t) { - return l(v(n), v(t)) - } - function C(n, t) { - return g(s(n, t)) - } - function A(n, t, r) { - return t ? r ? s(t, n) : C(t, n) : r ? m(n) : p(n) - } - $.md5 = A -} -(this); -// prettier-ignore -function Env(t, e) { - "undefined" != typeof process && JSON.stringify(process.env).indexOf("GITHUB") > -1 && process.exit(0); - class s { - constructor(t) { - this.env = t - } - send(t, e = "GET") { - t = "string" == typeof t ? { - url: t - } - : t; - let s = this.get; - return "POST" === e && (s = this.post), - new Promise((e, i) => { - s.call(this, t, (t, s, r) => { - t ? i(t) : e(s) - }) - }) - } - get(t) { - return this.send.call(this.env, t) - } - post(t) { - return this.send.call(this.env, t, "POST") - } - } - return new class { - constructor(t, e) { - this.name = t, - this.http = new s(this), - this.data = null, - this.dataFile = "box.dat", - this.logs = [], - this.isMute = !1, - this.isNeedRewrite = !1, - this.logSeparator = "\n", - this.startTime = (new Date).getTime(), - Object.assign(this, e), - this.log("", `🔔${this.name}, 开始!`) - } - isNode() { - return "undefined" != typeof module && !!module.exports - } - isQuanX() { - return "undefined" != typeof $task - } - isSurge() { - return "undefined" != typeof $httpClient && "undefined" == typeof $loon - } - isLoon() { - return "undefined" != typeof $loon - } - toObj(t, e = null) { - try { - return JSON.parse(t) - } catch { - return e - } - } - toStr(t, e = null) { - try { - return JSON.stringify(t) - } catch { - return e - } - } - getjson(t, e) { - let s = e; - const i = this.getdata(t); - if (i) - try { - s = JSON.parse(this.getdata(t)) - } catch {} - return s - } - setjson(t, e) { - try { - return this.setdata(JSON.stringify(t), e) - } catch { - return !1 - } - } - getScript(t) { - return new Promise(e => { - this.get({ - url: t - }, (t, s, i) => e(i)) - }) - } - runScript(t, e) { - return new Promise(s => { - let i = this.getdata("@chavy_boxjs_userCfgs.httpapi"); - i = i ? i.replace(/\n/g, "").trim() : i; - let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); - r = r ? 1 * r : 20, - r = e && e.timeout ? e.timeout : r; - const[o, h] = i.split("@"), - n = { - url: `http://${h}/v1/scripting/evaluate`, - body: { - script_text: t, - mock_type: "cron", - timeout: r - }, - headers: { - "X-Key": o, - Accept: "*/*" - } - }; - this.post(n, (t, e, i) => s(i)) - }).catch(t => this.logErr(t)) - } - loaddata() { - if (!this.isNode()) - return {}; { - this.fs = this.fs ? this.fs : require("fs"), - this.path = this.path ? this.path : require("path"); - const t = this.path.resolve(this.dataFile), - e = this.path.resolve(process.cwd(), this.dataFile), - s = this.fs.existsSync(t), - i = !s && this.fs.existsSync(e); - if (!s && !i) - return {}; { - const i = s ? t : e; - try { - return JSON.parse(this.fs.readFileSync(i)) - } catch (t) { - return {} - } - } - } - } - writedata() { - if (this.isNode()) { - this.fs = this.fs ? this.fs : require("fs"), - this.path = this.path ? this.path : require("path"); - const t = this.path.resolve(this.dataFile), - e = this.path.resolve(process.cwd(), this.dataFile), - s = this.fs.existsSync(t), - i = !s && this.fs.existsSync(e), - r = JSON.stringify(this.data); - s ? this.fs.writeFileSync(t, r) : i ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) - } - } - lodash_get(t, e, s) { - const i = e.replace(/\[(\d+)\]/g, ".$1").split("."); - let r = t; - for (const t of i) - if (r = Object(r)[t], void 0 === r) - return s; - return r - } - lodash_set(t, e, s) { - return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), e.slice(0, -1).reduce((t, s, i) => Object(t[s]) === t[s] ? t[s] : t[s] = Math.abs(e[i + 1]) >> 0 == +e[i + 1] ? [] : {}, t)[e[e.length - 1]] = s, t) - } - getdata(t) { - let e = this.getval(t); - if (/^@/.test(t)) { - const[, s, i] = /^@(.*?)\.(.*?)$/.exec(t), - r = s ? this.getval(s) : ""; - if (r) - try { - const t = JSON.parse(r); - e = t ? this.lodash_get(t, i, "") : e - } catch (t) { - e = "" - } - } - return e - } - setdata(t, e) { - let s = !1; - if (/^@/.test(e)) { - const[, i, r] = /^@(.*?)\.(.*?)$/.exec(e), - o = this.getval(i), - h = i ? "null" === o ? null : o || "{}" : "{}"; - try { - const e = JSON.parse(h); - this.lodash_set(e, r, t), - s = this.setval(JSON.stringify(e), i) - } catch (e) { - const o = {}; - this.lodash_set(o, r, t), - s = this.setval(JSON.stringify(o), i) - } - } else - s = this.setval(t, e); - return s - } - getval(t) { - return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? (this.data = this.loaddata(), this.data[t]) : this.data && this.data[t] || null - } - setval(t, e) { - return this.isSurge() || this.isLoon() ? $persistentStore.write(t, e) : this.isQuanX() ? $prefs.setValueForKey(t, e) : this.isNode() ? (this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0) : this.data && this.data[e] || null - } - initGotEnv(t) { - this.got = this.got ? this.got : require("got"), - this.cktough = this.cktough ? this.cktough : require("tough-cookie"), - this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar, - t && (t.headers = t.headers ? t.headers : {}, void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) - } - get(t, e = (() => {})) { - 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, e = null) { - const s = e ? new Date(e) : new Date; - let i = { - "M+": s.getMonth() + 1, - "d+": s.getDate(), - "H+": s.getHours(), - "m+": s.getMinutes(), - "s+": s.getSeconds(), - "q+": Math.floor((s.getMonth() + 3) / 3), - S: s.getMilliseconds() - }; - /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); - for (let e in i) - new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? i[e] : ("00" + i[e]).substr(("" + i[e]).length))); - return t - } - msg(e = t, s = "", i = "", r) { - const o = t => { - if (!t) - return t; - if ("string" == typeof t) - return this.isLoon() ? t : this.isQuanX() ? { - "open-url": t - } - : this.isSurge() ? { - url: t - } - : void 0; - if ("object" == typeof t) { - if (this.isLoon()) { - let e = t.openUrl || t.url || t["open-url"], - s = t.mediaUrl || t["media-url"]; - return { - openUrl: e, - mediaUrl: s - } - } - if (this.isQuanX()) { - let e = t["open-url"] || t.url || t.openUrl, - s = t["media-url"] || t.mediaUrl; - return { - "open-url": e, - "media-url": s - } - } - if (this.isSurge()) { - let e = t.url || t.openUrl || t["open-url"]; - return { - url: e - } - } - } - }; - if (this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r))), !this.isMuteLog) { - let t = ["", "==============📣系统通知📣=============="]; - t.push(e), - s && t.push(s), - i && t.push(i), - console.log(t.join("\n")), - this.logs = this.logs.concat(t) - } - } - log(...t) { - t.length > 0 && (this.logs = [...this.logs, ...t]), - console.log(t.join(this.logSeparator)) - } - logErr(t, e) { - const s = !this.isSurge() && !this.isQuanX() && !this.isLoon(); - s ? this.log("", `❗️${this.name}, 错误!`, t.stack) : this.log("", `❗️${this.name}, 错误!`, t) - } - wait(t) { - return new Promise(e => setTimeout(e, t)) - } - done(t = {}) { - const e = (new Date).getTime(), - s = (e - this.startTime) / 1e3; - this.log("", `🔔${this.name}, 结束! 🕛 ${s} 秒`), - this.log(), - (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) - } - } - (t, e) -} diff --git a/jd_joy_run.js b/jd_joy_run.js deleted file mode 100644 index 1576171..0000000 --- a/jd_joy_run.js +++ /dev/null @@ -1,573 +0,0 @@ -/* -Last Modified time: 2021-6-6 21:22:37 -宠汪汪邀请助力与赛跑助力脚本,感谢github@Zero-S1提供帮助 -活动入口:京东APP我的-更多工具-宠汪汪 -token时效很短,几个小时就失效了,闲麻烦的放弃就行 -每天拿到token后,可一次性运行完毕即可。 -互助码friendPin是京东用户名,不是昵称(可在京东APP->我的->设置 查看获得) -token获取途径: -1、微信搜索'来客有礼'小程序,登陆京东账号,点击底部的'我的'或者'发现'两处地方,即可获取Token,脚本运行提示token失效后,继续按此方法获取即可 -2、或者每天去'来客有礼'小程序->宠汪汪里面,领狗粮->签到领京豆 也可获取Token(此方法每天只能获取一次) -脚本里面有内置提供的friendPin,如果你没有修改脚本或者BoxJs处填写自己的互助码,会默认给脚本内置的助力。 - -docker 设置环境变量 JOY_RUN_HELP_MYSELF 为true,则开启账号内部互助.默认关闭(即给脚本作者内置的助力). - -[MITM] -hostname = draw.jdfcloud.com - -===========Surge================= -[Script] -宠汪汪邀请助力与赛跑助力 = type=cron,cronexp="15 10 * * *",wake-system=1,timeout=3600,script-path=https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy_run.js -宠汪汪助力更新Token = type=http-response,pattern=^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/addUser\?code=, requires-body=1, max-size=0, script-path=https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy_run.js -宠汪汪助力获取Token = type=http-request,pattern=^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/user\/detail\?openId=, max-size=0, script-path=https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy_run.js - -===================Quantumult X===================== -[task_local] -# 宠汪汪邀请助力与赛跑助力 -15 10 * * * https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy_run.js, tag=宠汪汪邀请助力与赛跑助力, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jdcww.png, enabled=true -[rewrite_local] -# 宠汪汪助力更新Token -^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/addUser\?code= url script-response-body https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy_run.js -# 宠汪汪助力获取Token -^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/user\/detail\?openId= url script-request-header https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy_run.js - -=====================Loon===================== -[Script] -cron "15 10 * * *" script-path=https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy_run.js, tag=宠汪汪邀请助力与赛跑助力 -http-response ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/addUser\?code= script-path=https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy_run.js, requires-body=true, timeout=10, tag=宠汪汪助力更新Token -http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/user\/detail\?openId= script-path=https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy_run.js, timeout=3600, tag=宠汪汪助力获取Token -*/ -const $ = new Env('宠汪汪赛跑'); -const zooFaker = require('./JDJRValidator_Aaron'); -$.get = zooFaker.injectToRequest2($.get.bind($)); -$.post = zooFaker.injectToRequest2($.post.bind($)); -//宠汪汪赛跑所需token,默认读取作者服务器的 -//需自行抓包,宠汪汪小程序获取token,点击`发现`或`我的`,寻找`^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/user\/detail\?openId=`获取token -let jdJoyRunToken = ''; - -const isRequest = typeof $request != "undefined" -const JD_BASE_API = `https://draw.jdfcloud.com//pet`; -//Node.js用户请在jdCookie.js处填写京东ck; -const jdCookieNode = $.isNode() ? require('./jdCookie.js') : {}; -//下面给出好友邀请助力的示例填写规则 -let invite_pins = ['zhaosen2580,jd_47ee22449e303,jd_6c5e39478ec3b,jd_4346918b58d6e,liuz9988,88489948,jd_61f1269fd3236,jaysherlock']; -//下面给出好友赛跑助力的示例填写规则 -let run_pins = ['zhaosen2580,jd_47ee22449e303,jd_6c5e39478ec3b,jd_4346918b58d6e,liuz9988,88489948,jd_61f1269fd3236,jaysherlock']; -//friendsArr内置太多会导致IOS端部分软件重启,可PR过来(此处目的:帮别人助力可得30g狗粮) -let friendsArr = ["zhaosen2580", "jd_47ee22449e303", "jd_6c5e39478ec3b", "jd_4346918b58d6e", "liuz9988", "88489948", "jd_61f1269fd3236", "jaysherlock"] - - -//IOS等用户直接用NobyDa的jd cookie -let cookiesArr = [], cookie = ''; -let nowTimes = new Date(new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000); -const headers = { - 'Connection' : 'keep-alive', - 'Accept-Encoding' : 'gzip, deflate, br', - 'App-Id' : '', - 'Lottery-Access-Signature' : '', - 'Content-Type' : 'application/json', - 'reqSource' : 'weapp', - // 'User-Agent' : $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1"), - 'User-Agent' : "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1", - 'Cookie' : '', - 'openId' : '', - 'Host' : 'draw.jdfcloud.com', - 'Referer' : 'https://servicewechat.com/wxccb5c536b0ecd1bf/633/page-frame.html', - 'Accept-Language' : 'zh-cn', - 'Accept' : '*/*', - 'LKYLToken' : '' -} -if ($.isNode()) { - Object.keys(jdCookieNode).forEach((item) => { - cookiesArr.push(jdCookieNode[item]) - }) -} else { - //支持 "京东多账号 Ck 管理"的cookie - cookiesArr = [$.getdata('CookieJD'), $.getdata('CookieJD2'), ...jsonParse($.getdata('CookiesJD') || "[]").map(item => item.cookie)].filter(item => !!item); - if ($.getdata('jd_joy_invite_pin')) { - invite_pins = []; - invite_pins.push($.getdata('jd_joy_invite_pin')); - } - if ($.getdata('jd2_joy_invite_pin')) { - if (invite_pins.length > 0) { - invite_pins.push($.getdata('jd2_joy_invite_pin')) - } else { - invite_pins = []; - invite_pins.push($.getdata('jd2_joy_invite_pin')); - } - } - if ($.getdata('jd_joy_run_pin')) { - run_pins = [] - run_pins.push($.getdata('jd_joy_run_pin')); - } - if ($.getdata('jd2_joy_run_pin')) { - if (run_pins.length > 0) { - run_pins.push($.getdata('jd2_joy_run_pin')) - } else { - run_pins = []; - run_pins.push($.getdata('jd2_joy_run_pin')); - } - } -} -async function main() { - if (!cookiesArr[0]) { - $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/bean/signIndex.action', {"open-url": "https://bean.m.jd.com/bean/signIndex.action"}); - return; - } - const readTokenRes = await readToken(); - if (readTokenRes && readTokenRes.code === 200) { - $.LKYLToken = readTokenRes.data[0] || ($.isNode() ? (process.env.JOY_RUN_TOKEN ? process.env.JOY_RUN_TOKEN : jdJoyRunToken) : ($.getdata('jdJoyRunToken') || jdJoyRunToken)); - } else { - $.LKYLToken = $.isNode() ? (process.env.JOY_RUN_TOKEN ? process.env.JOY_RUN_TOKEN : jdJoyRunToken) : ($.getdata('jdJoyRunToken') || jdJoyRunToken); - } - console.log(`打印token:${$.LKYLToken ? $.LKYLToken : '暂无token'}\n`) - if (!$.LKYLToken) { - $.msg($.name, '【提示】请先获取来客有礼宠汪汪token', "iOS用户微信搜索'来客有礼'小程序\n点击底部的'发现'Tab\n即可获取Token"); - // return; - } - await getFriendPins(); - for (let i = 0; i < cookiesArr.length; i++) { - if (cookiesArr[i]) { - $.validate = ''; - // const zooFaker = require('./JDJRValidator_Aaron'); - // $.validate = await zooFaker.injectToRequest() - if ($.isNode()) { - if (process.env.JOY_RUN_HELP_MYSELF) { - console.log(`\n赛跑会先给账号内部助力,如您当前账户有剩下助力机会则为lx0301作者助力\n`) - let my_run_pins = []; - Object.values(jdCookieNode).filter(item => item.match(/pt_pin=([^; ]+)(?=;?)/)).map(item => my_run_pins.push(decodeURIComponent(item.match(/pt_pin=([^; ]+)(?=;?)/)[1]))) - run_pins = [...new Set(my_run_pins), [...getRandomArrayElements([...run_pins[0].split(',')], [...run_pins[0].split(',')].length)]]; - run_pins = [[...run_pins].join(',')]; - invite_pins = run_pins; - } else { - console.log(`\n赛跑先给作者两个固定的pin进行助力,然后从账号内部与剩下的固定位置合并后随机抽取进行助力\n如需自己账号内部互助,设置环境变量 JOY_RUN_HELP_MYSELF 为true,则开启账号内部互助\n`) - run_pins = run_pins[0].split(',') - Object.values(jdCookieNode).filter(item => item.match(/pt_pin=([^; ]+)(?=;?)/)).map(item => run_pins.push(decodeURIComponent(item.match(/pt_pin=([^; ]+)(?=;?)/)[1]))) - run_pins = [...new Set(run_pins)]; - let fixPins = run_pins.splice(run_pins.indexOf('zhaosen2580'), 1); - fixPins.push(...run_pins.splice(run_pins.indexOf('jd_gYZtkBfPpRVv'), 1)); - fixPins.push(...run_pins.splice(run_pins.indexOf('jd_41df9b41af810'), 1)); - const randomPins = getRandomArrayElements(run_pins, run_pins.length); - run_pins = [[...fixPins, ...randomPins].join(',')]; - invite_pins = run_pins; - } - } - cookie = cookiesArr[i]; - UserName = decodeURIComponent(cookie.match(/pt_pin=([^; ]+)(?=;?)/) && cookie.match(/pt_pin=([^; ]+)(?=;?)/)[1]) - $.index = i + 1; - $.inviteReward = 0; - $.runReward = 0; - console.log(`\n开始【京东账号${$.index}】${UserName}\n`); - $.jdLogin = true; - $.LKYLLogin = true; - console.log(`=============【开始邀请助力】===============`) - const inviteIndex = $.index > invite_pins.length ? (invite_pins.length - 1) : ($.index - 1); - let new_invite_pins = invite_pins[inviteIndex].split(','); - new_invite_pins = [...new_invite_pins, ...getRandomArrayElements(friendsArr, friendsArr.length >= 18 ? 18 : friendsArr.length)]; - await invite(new_invite_pins); - if ($.jdLogin && $.LKYLLogin) { - if (nowTimes.getHours() >= 9 && nowTimes.getHours() < 21) { - console.log(`===========【开始助力好友赛跑】===========`) - const runIndex = $.index > run_pins.length ? (run_pins.length - 1) : ($.index - 1); - let new_run_pins = run_pins[runIndex].split(','); - await run(new_run_pins); - } else { - console.log(`非赛跑时间\n`) - } - } - await showMsg(); - } - } - $.done() -} -//获取来客有礼Token -let count = 0; -async function getToken() { - const url = $request.url; - $.log(`${$.name}url\n${url}\n`) - if (isURL(url, /^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/addUser\?code=/)) { - const body = JSON.parse($response.body); - const LKYLToken = body.data && body.data.token; - if (LKYLToken) { - $.log(`${$.name} token\n${LKYLToken}\n`); - $.msg($.name, '更新Token: 成功🎉', ``); - console.log(`\nToken,${LKYLToken}\n`) - $.http.post({ - url: `http://share.turinglabs.net/api/v3/create/sharecode/`, - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - "activity_name": "joy", - "share_code": LKYLToken, - }), - timeout: 30000 - }).then((resp) => { - if (resp.statusCode === 200) { - try { - let { body } = resp; - console.log(`Token提交结果:${body}\n`) - body = JSON.parse(body); - console.log(`${body.message}`) - } catch (e) { - console.log(`提交Token异常:${e}`) - } - } - }).catch((e) => console.log(`catch 宠汪汪TOKEN提交异常:${e}`)); - // count = $.getdata('countFlag') ? $.getdata('countFlag') * 1 : 0; - // count ++; - // console.log(`count: ${count}`) - // $.setdata(`${count}`, 'countFlag'); - // if ($.getdata('countFlag') * 1 === 2) { - // count = 0; - // $.setdata(`${count}`, 'countFlag'); - // $.msg($.name, '更新Token: 成功🎉', ``); - // console.log(`开始上传Token,${LKYLToken}\n`) - // await $.http.get({url: `http://jd.turinglabs.net/api/v2/jd/joy/create/${LKYLToken}/`}).then((resp) => { - // if (resp.statusCode === 200) { - // let { body } = resp; - // console.log(`Token提交结果:${body}\n`) - // body = JSON.parse(body); - // console.log(`${body.message}`) - // } - // }); - // } - $.setdata(LKYLToken, 'jdJoyRunToken'); - } - $.done({ body: JSON.stringify(body) }) - } else if (isURL(url, /^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/user\/detail\?openId=/)){ - if ($request && $request.method !== 'OPTIONS') { - const LKYLToken = $request.headers['LKYLToken']; - //if ($.getdata('jdJoyRunToken')) { - //if ($.getdata('jdJoyRunToken') !== LKYLToken) { - - //} - //$.msg($.name, '更新获取Token: 成功🎉', `\n${LKYLToken}\n`); - //} else { - //$.msg($.name, '获取Token: 成功🎉', `\n${LKYLToken}\n`); - //} - $.setdata(LKYLToken, 'jdJoyRunToken'); - - $.msg($.name, '获取Token: 成功🎉', ``); - - // $.done({ body: JSON.stringify(body) }) - $.done({ url: url }) - } - } else { - $.done() - } -} -function readToken() { - return new Promise(resolve => { - $.get({ - url: `https://cdn.nz.lu/gettoken`, - headers: { - 'Host': 'jdsign.cf', - 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/87.0.4280.88' - }, - timeout: 30 * 1000 - }, (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (data) { - // if ($.isNode() && !run_pins[0].includes("被折叠的记忆33")) resolve(null); - console.log(`\n\n搬运我脚本修改我内置互助码的,请不要盗取我服务器token\n\n\n`) - data = JSON.parse(data); - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(data); - } - }) - }) -} - -function showMsg() { - return new Promise(async resolve => { - if ($.inviteReward || $.runReward) { - let message = ''; - if ($.inviteReward > 0) { - message += `给${$.inviteReward / 30}人邀请助力成功,获得${$.inviteReward}积分\n`; - } - if ($.runReward > 0) { - message += `给${$.runReward / 5}人赛跑助力成功,获得狗粮${$.runReward}g`; - } - if (message) { - $.msg($.name, '', `京东账号${$.index} ${UserName}\n${message}`); - } - } - resolve(); - }) -} -//邀请助力 -async function invite(invite_pins) { - console.log(`账号${$.index} [${UserName}] 给下面名单的人进行邀请助力\n${invite_pins.map(item => item.trim())}\n`); - for (let item of invite_pins.map(item => item.trim())) { - console.log(`\n账号${$.index} [${UserName}] 开始给好友 [${item}] 进行邀请助力`) - if (UserName === item) { - console.log(`自己账号,跳过`); - continue - } - const data = await enterRoom(item); - if (data) { - if (data.success) { - const { helpStatus } = data.data; - console.log(`helpStatus ${helpStatus}`) - if (helpStatus=== 'help_full') { - console.log(`您的邀请助力机会已耗尽\n`) - break; - } else if (helpStatus=== 'cannot_help') { - console.log(`已给该好友 ${item} 助力过或者此friendPin是你自己\n`) - } else if (helpStatus=== 'invite_full') { - console.log(`助力失败,该好友 ${item} 已经满3人给他助力了,无需您再次助力\n`) - } else if (helpStatus=== 'can_help') { - console.log(`开始给好友 ${item} 助力\n`) - const LKYL_DATA = await helpInviteFriend(item); - if (LKYL_DATA.errorCode === 'L0001' && !LKYL_DATA.success) { - console.log('来客有礼宠汪汪token失效'); - $.setdata('', 'jdJoyRunToken'); - $.msg($.name, '【提示】来客有礼token失效,请重新获取', "iOS用户微信搜索'来客有礼'小程序\n点击底部的'发现'Tab\n即可获取Token") - $.LKYLLogin = false; - break - } else { - $.LKYLLogin = true; - } - } - $.jdLogin = true; - } else { - if (data.errorCode === 'B0001') { - console.log('京东Cookie失效'); - $.msg($.name, `【提示】京东cookie已失效`, `京东账号${$.index} ${UserName}\n请重新登录获取\nhttps://bean.m.jd.com/bean/signIndex.action`, {"open-url": "https://bean.m.jd.com/bean/signIndex.action"}); - $.jdLogin = false; - break - } - } - } - } - // if ($.inviteReward > 0) { - // $.msg($.name, ``, `账号${$.index} [${UserName}]\n给${$.inviteReward/5}人邀请助力成功\n获得${$.inviteReward}积分`) - // } -} -function enterRoom(invitePin) { - return new Promise(resolve => { - let lkt = new Date().getTime() - let lks = $.md5('' + 'q8DNJdpcfRQ69gIx' + lkt).toString() - headers['lkt'] = lkt; - headers['lks'] = lks; - headers.Cookie = cookie; - headers.LKYLToken = $.LKYLToken; - headers['Content-Type'] = "application/json"; - const url = `https://draw.jdfcloud.com//common/pet/enterRoom/h5?reqSource=weapp&invitePin=${encodeURIComponent(invitePin)}&inviteSource=task_invite&shareSource=weapp&inviteTimeStamp=${Date.now()}&invokeKey=q8DNJdpcfRQ69gIx` + $.validate; - const options = { - url, - body: JSON.stringify({}), - headers - } - $.post(options, (err, resp, data) => { - try { - if (err) { - $.log(`${$.name} API请求失败`) - $.log(JSON.stringify(err)) - } else { - // console.log('进入房间', data) - data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(data); - } - }); - }) -} -function helpInviteFriend(friendPin) { - return new Promise((resolve) => { - let lkt = new Date().getTime() - let lks = $.md5('' + 'q8DNJdpcfRQ69gIx' + lkt).toString() - headers['lkt'] = lkt; - headers['lks'] = lks; - headers.Cookie = cookie; - headers.LKYLToken = $.LKYLToken; - const url = `https://draw.jdfcloud.com//common/pet/helpFriend?friendPin=${encodeURIComponent(friendPin)}&reqSource=weapp&invokeKey=q8DNJdpcfRQ69gIx` + $.validate; - const options = { - url, - headers - } - $.get(options, (err, resp, data) => { - try { - if (err) { - $.log('API请求失败') - $.logErr(JSON.stringify(err)); - } else { - $.log(`邀请助力结果:${data}`); - data = JSON.parse(data); - // {"errorCode":"help_ok","errorMessage":null,"currentTime":1600254297789,"data":29466,"success":true} - if (data.success && data.errorCode === 'help_ok') { - $.inviteReward += 30; - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(data); - } - }); - }) -} -//赛跑助力 -async function run(run_pins) { - console.log(`账号${$.index} [${UserName}] 给下面名单的人进行赛跑助力\n${(run_pins.map(item => item.trim()))}\n`); - for (let item of run_pins.map(item => item.trim())) { - console.log(`\n账号${$.index} [${UserName}] 开始给好友 [${item}] 进行赛跑助力`) - if (UserName === item) { - console.log(`自己账号,跳过`); - continue - } - const combatDetailRes = await combatDetail(item); - const { petRaceResult } = combatDetailRes.data; - console.log(`petRaceResult ${petRaceResult}`); - if (petRaceResult === 'help_full') { - console.log('您的赛跑助力机会已耗尽'); - break; - } else if (petRaceResult === 'can_help') { - console.log(`开始赛跑助力好友 ${item}`) - const LKYL_DATA = await combatHelp(item); - if (LKYL_DATA.errorCode === 'L0001' && !LKYL_DATA.success) { - console.log('来客有礼宠汪汪token失效'); - $.setdata('', 'jdJoyRunToken'); - $.msg($.name, '【提示】来客有礼token失效,请重新获取', "iOS用户微信搜索'来客有礼'小程序\n点击底部的'发现'Tab\n即可获取Token") - $.LKYLLogin = false; - break - } else { - $.LKYLLogin = true; - } - } - } - // if ($.runReward > 0) { - // $.msg($.name, ``, `账号${$.index} [${UserName}]\n给${$.runReward/5}人赛跑助力成功\n获得狗粮${$.runReward}g`) - // } -} -function combatHelp(friendPin) { - return new Promise(resolve => { - let lkt = new Date().getTime() - let lks = $.md5('' + 'q8DNJdpcfRQ69gIx' + lkt).toString() - headers['lkt'] = lkt; - headers['lks'] = lks; - headers.Cookie = cookie; - headers.LKYLToken = $.LKYLToken; - const url = `https://draw.jdfcloud.com//common/pet/combat/help?friendPin=${encodeURIComponent(friendPin)}&reqSource=weapp&invokeKey=q8DNJdpcfRQ69gIx` + $.validate; - const options = { - url, - headers - } - $.get(options, (err, resp, data) => { - try { - if (err) { - $.log('API请求失败') - $.logErr(JSON.stringify(err)); - } else { - $.log(`赛跑助力结果${data}`); - data = JSON.parse(data); - // {"errorCode":"help_ok","errorMessage":null,"currentTime":1600479266133,"data":{"rewardNum":5,"helpStatus":"help_ok","newUser":false},"success":true} - if (data.errorCode === 'help_ok' && data.data.helpStatus === 'help_ok') { - console.log(`助力${friendPin}成功\n获得狗粮${data.data.rewardNum}g\n`); - $.runReward += data.data.rewardNum; - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(data); - } - }); - }) -} -function combatDetail(invitePin) { - return new Promise(resolve => { - let lkt = new Date().getTime() - let lks = $.md5('' + 'q8DNJdpcfRQ69gIx' + lkt).toString() - headers['lkt'] = lkt; - headers['lks'] = lks; - headers.Cookie = cookie; - headers.LKYLToken = $.LKYLToken; - const url = `https://draw.jdfcloud.com//common/pet/combat/detail/v2?help=true&inviterPin=${encodeURIComponent(invitePin)}&reqSource=weapp&invokeKey=q8DNJdpcfRQ69gIx` + $.validate; - const options = { - url, - headers - } - $.get(options, (err, resp, data) => { - try { - if (err) { - $.log('API请求失败') - $.logErr(JSON.stringify(err)); - } else { - data = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(data); - } - }); - }) -} -function isURL(domain, reg) { - // const name = reg; - return reg.test(domain); -} -function jsonParse(str) { - if (typeof str == "string") { - try { - return JSON.parse(str); - } catch (e) { - console.log(e); - $.msg($.name, '', '请勿随意在BoxJs输入框修改内容\n建议通过脚本去获取cookie') - return []; - } - } -} -function getRandomArrayElements(arr, count) { - let shuffled = arr.slice(0), i = arr.length, min = i - count, temp, index; - while (i-- > min) { - index = Math.floor((i + 1) * Math.random()); - temp = shuffled[index]; - shuffled[index] = shuffled[i]; - shuffled[i] = temp; - } - return shuffled.slice(min); -} -function getFriendPins() { - return new Promise(resolve => { - $.get({ - url: "https://cdn.jsdelivr.net/gh/Aaron-lv/updateTeam@master/friendPins.json", - headers:{ - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/87.0.4280.88" - }, - timeout: 100000}, async (err, resp, data) => { - try { - if (err) { - console.log(`getFriendPins::${JSON.stringify(err)}`); - } else { - $.friendPins = data && JSON.parse(data); - if ($.friendPins && $.friendPins['friendsArr']) { - friendsArr = $.friendPins['friendsArr']; - console.log(`\n共提供 ${friendsArr.length}个好友供来进行邀请助力\n`) - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} -isRequest ? getToken() : main(); - -// md5 -!function(n){function t(n,t){var r=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(r>>16)<<16|65535&r}function r(n,t){return n<>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<>>9<<4)]=r;var e,i,a,d,h,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e>5]>>>t%32&255)}return r}function d(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t>5]|=(255&n.charCodeAt(t/8))<16&&(o=i(o,8*n.length)),r=0;r<16;r+=1){u[r]=909522486^o[r],c[r]=1549556828^o[r]}return e=i(u.concat(d(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="";for(r=0;r>>4&15)+"0123456789abcdef".charAt(15&t)}return e}function v(n){return unescape(encodeURIComponent(n))}function m(n){return h(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}$.md5=A}(this); -// prettier-ignore -function Env(t,e){"undefined"!=typeof process&&JSON.stringify(process.env).indexOf("GITHUB")>-1&&process.exit(0);class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise((e,i)=>{s.call(this,t,(t,s,r)=>{t?i(t):e(s)})})}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`🔔${this.name}, 开始!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null){try{return JSON.stringify(t)}catch{return e}}getjson(t,e){let s=e;const i=this.getdata(t);if(i)try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise(e=>{this.get({url:t},(t,s,i)=>e(i))})}runScript(t,e){return new Promise(s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let r=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");r=r?1*r:20,r=e&&e.timeout?e.timeout:r;const[o,h]=i.split("@"),n={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,Accept:"*/*"}};this.post(n,(t,e,i)=>s(i))}).catch(t=>this.logErr(t))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),r=JSON.stringify(this.data);s?this.fs.writeFileSync(t,r):i?this.fs.writeFileSync(e,r):this.fs.writeFileSync(t,r)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(const t of i)if(r=Object(r)[t],void 0===r)return s;return r}lodash_set(t,e,s){return Object(t)!==t?t:(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{},t)[e[e.length-1]]=s,t)}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),r=s?this.getval(s):"";if(r)try{const t=JSON.parse(r);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,r]=/^@(.*?)\.(.*?)$/.exec(e),o=this.getval(i),h=i?"null"===o?null:o||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,r,t),s=this.setval(JSON.stringify(e),i)}catch(e){const o={};this.lodash_set(o,r,t),s=this.setval(JSON.stringify(o),i)}}else s=this.setval(t,e);return s}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,e){return this.isSurge()||this.isLoon()?$persistentStore.write(t,e):this.isQuanX()?$prefs.setValueForKey(t,e):this.isNode()?(this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0):this.data&&this.data[e]||null}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,e=(()=>{})){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,e=null){const s=e?new Date(e):new Date;let i={"M+":s.getMonth()+1,"d+":s.getDate(),"H+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(s.getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in i)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?i[e]:("00"+i[e]).substr((""+i[e]).length)));return t}msg(e=t,s="",i="",r){const o=t=>{if(!t)return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:this.isSurge()?{url:t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t.url||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.url||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}if(this.isSurge()){let e=t.url||t.openUrl||t["open-url"];return{url:e}}}};if(this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r))),!this.isMuteLog){let t=["","==============📣系统通知📣=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`❗️${this.name}, 错误!`,t.stack):this.log("",`❗️${this.name}, 错误!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`🔔${this.name}, 结束! 🕛 ${s} 秒`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,e)} diff --git a/jd_joy_steal.js b/jd_joy_steal.js deleted file mode 100644 index 6bb9341..0000000 --- a/jd_joy_steal.js +++ /dev/null @@ -1,659 +0,0 @@ -/* -Last Modified time: 2021-6-6 10:22:37 -活动入口:京东APP我的-更多工具-宠汪汪 -最近经常出现给偷好友积分与狗粮失败的情况,故建议cron设置为多次 -jd宠汪汪偷好友积分与狗粮,及给好友喂食 -偷好友积分上限是20个好友(即获得100积分),帮好友喂食上限是20个好友(即获得200积分),偷好友狗粮上限也是20个好友(最多获得120g狗粮) -IOS用户支持京东双账号,NodeJs用户支持N个京东账号 -脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js -如果开启了给好友喂食功能,建议先凌晨0点运行jd_joy.js脚本获取狗粮后,再运行此脚本(https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy_steal.js)可偷好友积分,6点运行可偷好友狗粮 -==========Quantumult X========== -[task_local] -#宠汪汪偷好友积分与狗粮 -10 0-21/3 * * * https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy_steal.js, tag=宠汪汪偷好友积分与狗粮, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jdcww.png, enabled=true - -=======Loon======== -[Script] -cron "10 0-21/3 * * *" script-path=https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy_steal.js,tag=宠汪汪偷好友积分与狗粮 - -========Surge========== -宠汪汪偷好友积分与狗粮 = type=cron,cronexp="10 0-21/3 * * *",wake-system=1,timeout=3600,script-path=https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy_steal.js - -=======小火箭===== -宠汪汪偷好友积分与狗粮 = type=cron,script-path=https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_joy_steal.js, cronexpr="10 0-21/3 * * *", timeout=3600, enable=true -*/ -const $ = new Env('宠汪汪偷好友积分与狗粮'); -const zooFaker = require('./utils/JDJRValidator_Pure'); -$.get = zooFaker.injectToRequest2($.get.bind($)); -$.post = zooFaker.injectToRequest2($.post.bind($)); -const notify = $.isNode() ? require('./sendNotify') : ''; -//Node.js用户请在jdCookie.js处填写京东ck; -const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; -let nowTimes = new Date(new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000); -//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 { - cookiesArr = [$.getdata('CookieJD'), $.getdata('CookieJD2'), ...jsonParse($.getdata('CookiesJD') || "[]").map(item => item.cookie)].filter(item => !!item); -} -let message = '', subTitle = ''; -let jdNotify = false;//是否开启静默运行,false关闭静默运行(即通知),true打开静默运行(即不通知) -let jdJoyHelpFeed = true;//是否给好友喂食,false为不给喂食,true为给好友喂食,默认给好友喂食 -let jdJoyStealCoin = true;//是否偷好友积分与狗粮,false为否,true为是,默认是偷 -const JD_API_HOST = 'https://jdjoy.jd.com/pet'; -//是否给好友喂食 -let ctrTemp; -if ($.isNode() && process.env.JOY_HELP_FEED) { - ctrTemp = `${process.env.JOY_HELP_FEED}` === 'true'; -} else if ($.getdata('jdJoyHelpFeed')) { - ctrTemp = $.getdata('jdJoyHelpFeed') === 'true'; -} else { - ctrTemp = `${jdJoyHelpFeed}` === 'true'; -} -//是否偷好友狗粮 -let jdJoyStealCoinTemp; -if ($.isNode() && process.env.jdJoyStealCoin) { - jdJoyStealCoinTemp = `${process.env.jdJoyStealCoin}` === 'true'; -} else if ($.getdata('jdJoyStealCoin')) { - jdJoyStealCoinTemp = $.getdata('jdJoyStealCoin') === 'true'; -} else { - jdJoyStealCoinTemp = `${jdJoyStealCoin}` === 'true'; -} -!(async () => { - if (!cookiesArr[0]) { - $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/bean/signIndex.action', {"open-url": "https://bean.m.jd.com/bean/signIndex.action"}); - 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 = ''; - $.HelpFeedFlag = ctrTemp; - if (!ctrTemp) $.HelpFeedFlag = true - await TotalBean(); - console.log(`\n开始【京东账号${$.index}】${$.nickName || $.UserName}\n`); - if (!$.isLogin) { - $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/bean/signIndex.action`, {"open-url": "https://bean.m.jd.com/bean/signIndex.action"}); - - if ($.isNode()) { - await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); - } - continue - } - message = ''; - subTitle = ''; - $.validate = ''; - // const zooFaker = require('./utils/JDJRValidator_Pure'); - // $.validate = await zooFaker.injectToRequest() - await jdJoySteal(); - await showMsg(); - } - } -})() - .catch((e) => { - $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') - }) - .finally(() => { - $.done(); - }) -async function jdJoySteal() { - try { - $.helpFood = 0; - $.stealFriendCoin = 0; - $.stealFood = 0; - $.stealStatus = null; - $.helpFeedStatus = null; - message += `【京东账号${$.index}】${$.nickName}\n`; - await enterRoom() - await $.wait(2000) - await getFriends();//查询是否有好友 - await $.wait(2000) - await getCoinChanges();//查询喂食好友和偷好友积分是否已达上限 - if ($.getFriendsData && $.getFriendsData.success) { - if (!$.getFriendsData.datas) { - console.log(`\n京东返回宠汪汪好友列表数据为空\n`) - return - } - if ($.getFriendsData && $.getFriendsData.datas && $.getFriendsData.datas.length > 0) { - const { lastPage } = $.getFriendsData.page; - // console.log('lastPage', lastPage) - console.log(`\n共 ${lastPage * 20 - 1} 个好友\n`); - $.allFriends = []; - for (let i = 1; i <= new Array(lastPage).fill('').length; i++) { - if ($.visit_friend >= 100 || $.stealFriendCoin * 1 >= 100) { - console.log('偷好友积分已达上限(已获得100积分) 跳出\n') - $.stealFriendCoin = `已达上限(已获得100积分)`; - break - } - console.log(`偷好友积分 开始查询第${i}页好友\n`); - await getFriends(i); - $.allFriends = $.getFriendsData.datas; - if ($.allFriends) await stealFriendCoinFun(); - } - for (let i = 1; i <= new Array(lastPage).fill('').length; i++) { - if ($.stealStatus === 'chance_full') { - console.log('偷好友狗粮已达上限 跳出\n') - if (!$.stealFood) { - $.stealFood = `已达上限`; - } - break - } - if (nowTimes.getHours() < 6 && nowTimes.getHours() >= 0) { - $.log('未到早餐时间, 暂不能偷好友狗粮\n') - break - } - if (nowTimes.getHours() === 10 ? (nowTimes.getMinutes() > 30) : (nowTimes.getHours() === 11 && nowTimes.getMinutes() < 30)) { - $.log('未到中餐时间, 暂不能偷好友狗粮\n') - break - } - if ((nowTimes.getHours() >= 15 && nowTimes.getMinutes() > 0) && (nowTimes.getHours() < 17 && nowTimes.getMinutes() <= 59)) { - $.log('未到晚餐时间, 暂不能偷好友狗粮\n') - break - } - if (nowTimes.getHours() >= 21 && nowTimes.getMinutes() > 0 && nowTimes.getHours() <= 23 && nowTimes.getMinutes() <= 59) { - $.log('已过晚餐时间, 暂不能偷好友狗粮\n') - break - } - console.log(`偷好友狗粮 开始查询第${i}页好友\n`); - await getFriends(i); - $.allFriends = $.getFriendsData.datas; - if ($.allFriends) await stealFriendsFood(); - } - for (let i = 1; i <= new Array(lastPage).fill('').length; i++) { - if ($.help_feed >= 200 || ($.helpFeedStatus && $.helpFeedStatus === 'chance_full')) { - console.log('帮好友喂食已达上限(已帮喂20个好友获得200积分) 跳出\n'); - $.helpFood = '已达上限(已帮喂20个好友获得200积分)' - break - } - if ($.helpFeedStatus && $.helpFeedStatus === 'food_insufficient') { - console.log('帮好友喂食失败,狗粮不足10g 跳出\n'); - break - } - if ($.help_feed >= 10) $.HelpFeedFlag = ctrTemp;//修复每次运行都会给好友喂食一次的bug - if (!$.HelpFeedFlag) { - console.log('您已设置不为好友喂食,现在跳过喂食,如需为好友喂食请在BoxJs打开喂食开关或者更改脚本 jdJoyHelpFeed 处'); - break - } - console.log(`帮好友喂食 开始查询第${i}页好友\n`); - await getFriends(i); - $.allFriends = $.getFriendsData.datas; - if ($.allFriends) await helpFriendsFeed(); - } - } - } else { - message += `${$.getFriendsData && $.getFriendsData.errorMessage}\n`; - } - } catch (e) { - $.logErr(e) - } -} -async function stealFriendsFood() { - console.log(`开始偷好友狗粮`); - for (let friends of $.allFriends) { - const { friendPin, status, stealStatus } = friends; - $.stealStatus = stealStatus; - console.log(`stealFriendsFood---好友【${friendPin}】--偷食状态:${stealStatus}\n`); - // console.log(`stealFriendsFood---好友【${friendPin}】--喂食状态:${status}\n`); - if (stealStatus === 'can_steal') { - //可偷狗粮 - //偷好友狗粮 - console.log(`发现好友【${friendPin}】可偷狗粮\n`) - await enterFriendRoom(friendPin); - await doubleRandomFood(friendPin); - const getRandomFoodRes = await getRandomFood(friendPin); - console.log(`偷好友狗粮结果:${JSON.stringify(getRandomFoodRes)}`) - if (getRandomFoodRes && getRandomFoodRes.success) { - if (getRandomFoodRes.errorCode === 'steal_ok') { - $.stealFood += getRandomFoodRes.data; - } else if (getRandomFoodRes.errorCode === 'chance_full') { - console.log('偷好友狗粮已达上限,跳出循环'); - break; - } - } - } else if (stealStatus === 'chance_full') { - console.log('偷好友狗粮已达上限,跳出循环'); - break; - } - } -} -//偷好友积分 -async function stealFriendCoinFun() { - if (jdJoyStealCoinTemp) { - if ($.visit_friend !== 100) { - console.log('开始偷好友积分') - for (let friends of $.allFriends) { - const { friendPin } = friends; - if (friendPin === $.UserName) continue - await stealFriendCoin(friendPin);//领好友积分 - if ($.stealFriendCoin * 1 === 100) { - console.log(`偷好友积分已达上限${$.stealFriendCoin}个,现跳出循环`) - break - } - } - } else { - console.log('偷好友积分已达上限(已获得100积分)') - $.stealFriendCoin = `已达上限(已获得100积分)` - } - } -} -//给好友喂食 -async function helpFriendsFeed() { - if ($.help_feed !== 200) { - if ($.HelpFeedFlag) { - console.log(`\n开始给好友喂食`); - for (let friends of $.allFriends) { - const { friendPin, status, stealStatus } = friends; - console.log(`\nhelpFriendsFeed---好友【${friendPin}】--喂食状态:${status}`); - if (status === 'not_feed') { - const helpFeedRes = await helpFeed(friendPin); - // console.log(`帮忙喂食结果--${JSON.stringify(helpFeedRes)}`) - $.helpFeedStatus = helpFeedRes.errorCode; - if (helpFeedRes && helpFeedRes.errorCode === 'help_ok' && helpFeedRes.success) { - console.log(`帮好友[${friendPin}]喂食10g狗粮成功,你获得10积分\n`); - if (!ctrTemp) { - $.log('为完成为好友单独喂食一次的任务,故此处进行喂食一次') - $.HelpFeedFlag = false; - break - } - $.helpFood += 10; - } else if (helpFeedRes && helpFeedRes.errorCode === 'chance_full') { - console.log('喂食已达上限,不再喂食\n') - break - } else if (helpFeedRes && helpFeedRes.errorCode === 'food_insufficient') { - console.log('帮好友喂食失败,您的狗粮不足10g\n') - break - } else { - console.log(JSON.stringify(helpFeedRes)) - } - } else if (status === 'time_error') { - console.log(`帮好友喂食失败,好友[${friendPin}]的汪汪正在食用\n`) - } - } - } else { - console.log('您已设置不为好友喂食,现在跳过喂食,如需为好友喂食请在BoxJs打开喂食开关或者更改脚本 jdJoyHelpFeed 处') - } - } else { - console.log('帮好友喂食已达上限(已帮喂20个好友获得200积分)') - $.helpFood = '已达上限(已帮喂20个好友获得200积分)' - } -} -function enterRoom() { - return new Promise(resolve => { - const url = `https://draw.jdfcloud.com//common/pet/enterRoom/h5?invitePin=&openId=&reqSource=weapp&invokeKey=q8DNJdpcfRQ69gIx` + $.validate; - const body = {} - let lkt = new Date().getTime() - let lks = $.md5('' + 'q8DNJdpcfRQ69gIx' + lkt).toString() - const options = { - url, - body: JSON.stringify(body), - headers: { - "Host": "draw.jdfcloud.com", - "Connection": "keep-alive", - "Content-Type": "application/json", - "Accept-Encoding": "gzip,compress,br,deflate", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.15(0x18000f25) NetType/WIFI Language/zh_CN", - "Referer": "https://servicewechat.com/wxccb5c536b0ecd1bf/760/page-frame.html", - "Cookie": cookie, - "lkt": lkt, - "lks": lks - } - } - $.post(options, (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} enterRoom API请求失败,请检查网路重试`) - } else { - // data = JSON.parse(data) - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(); - } - }) - }) -} -function getFriends(currentPage = '1') { - return new Promise(resolve => { - const url = `https://draw.jdfcloud.com//common/pet/api/getFriends?itemsPerPage=20¤tPage=${currentPage * 1}&reqSource=weapp&invokeKey=q8DNJdpcfRQ69gIx` + $.validate; - let lkt = new Date().getTime() - let lks = $.md5('' + 'q8DNJdpcfRQ69gIx' + lkt).toString() - const options = { - url, - headers: { - "Host": "draw.jdfcloud.com", - "Connection": "keep-alive", - "Content-Type": "application/json", - "Accept-Encoding": "gzip,compress,br,deflate", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.15(0x18000f25) NetType/WIFI Language/zh_CN", - "Referer": "https://servicewechat.com/wxccb5c536b0ecd1bf/760/page-frame.html", - "Cookie": cookie, - "lkt": lkt, - "lks": lks - }, - timeout: 10000 - } - $.get(options, (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} getFriends API请求失败,请检查网路重试`) - } else { - if (data) { - $.getFriendsData = JSON.parse(data); - } else { - console.log(`京豆api返回数据为空,请检查自身原因`) - } - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(); - } - }) - }) -} - -async function stealFriendCoin(friendPin) { - // console.log(`进入好友 ${friendPin}的房间`) - const enterFriendRoomRes = await enterFriendRoom(friendPin); - if (enterFriendRoomRes) { - const { friendHomeCoin } = enterFriendRoomRes.data; - if (friendHomeCoin > 0) { - //领取好友积分 - console.log(`好友 ${friendPin}的房间可领取积分${friendHomeCoin}个\n`) - const getFriendCoinRes = await getFriendCoin(friendPin); - console.log(`偷好友积分结果:${JSON.stringify(getFriendCoinRes)}\n`) - if (getFriendCoinRes && getFriendCoinRes.errorCode === 'coin_took_ok') { - $.stealFriendCoin += getFriendCoinRes.data; - } - } else { - console.log(`好友 ${friendPin}的房间暂无可领取积分\n`) - } - } -} -//进入好友房间 -function enterFriendRoom(friendPin) { - console.log(`\nfriendPin:: ${friendPin}\n`); - return new Promise(async resolve => { - $.get(taskUrl('enterFriendRoom', (friendPin)), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} enterFriendRoom API请求失败,请检查网路重试`) - } else { - // console.log('进入好友房间', JSON.parse(data)) - if (data) { - data = JSON.parse(data); - console.log(`可偷狗粮:${data.data.stealFood}`) - console.log(`可偷积分:${data.data.friendHomeCoin}`) - } else { - console.log(`京豆api返回数据为空,请检查自身原因`) - } - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -//收集好友金币 -function getFriendCoin(friendPin) { - return new Promise(resolve => { - $.get(taskUrl('getFriendCoin', friendPin), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} getFriendCoin API请求失败,请检查网路重试`) - } else { - if (data) { - data = JSON.parse(data); - } else { - console.log(`京豆api返回数据为空,请检查自身原因`) - } - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -//帮好友喂食 -function helpFeed(friendPin) { - return new Promise(resolve => { - $.get(taskUrl('helpFeed', friendPin), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} helpFeed API请求失败,请检查网路重试`) - } else { - if (data) { - data = JSON.parse(data); - } else { - console.log(`京豆api返回数据为空,请检查自身原因`) - } - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -//收集好友狗粮,已实现分享可得双倍狗粮功能 -//①分享 -function doubleRandomFood(friendPin) { - return new Promise(resolve => { - $.get(taskUrl('doubleRandomFood', friendPin), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} doubleRandomFood API请求失败,请检查网路重试`) - } else { - // console.log('分享', JSON.parse(data)) - // $.appGetPetTaskConfigRes = JSON.parse(data); - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(); - } - }) - }) -} -//②领取双倍狗粮 -function getRandomFood(friendPin) { - return new Promise(resolve => { - $.get(taskUrl('getRandomFood', friendPin), (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} getRandomFood API请求失败,请检查网路重试`) - } else { - if (data) { - console.log(`领取双倍狗粮结果--${data}`) - data = JSON.parse(data); - } else { - console.log(`京豆api返回数据为空,请检查自身原因`) - } - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - }) -} -function getCoinChanges() { - return new Promise(resolve => { - const url = `https://jdjoy.jd.com/common/pet/getCoinChanges?changeDate=${Date.now()}&reqSource=h5&invokeKey=q8DNJdpcfRQ69gIx` + $.validate; - let lkt = new Date().getTime() - let lks = $.md5('' + 'q8DNJdpcfRQ69gIx' + lkt).toString() - const options = { - url, - headers: { - "Host": "jdjoy.jd.com", - "Accept": "*/*", - "Origin": "https://h5.m.jd.com", - "Accept-Language": "zh-CN,zh-Hans;q=0.9", - "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1"), - "Referer": "https://h5.m.jd.com/", - "Accept-Encoding": "gzip, deflate, br", - "Cookie": cookie, - "lkt": lkt, - "lks": lks - } - } - $.get(options, (err, resp, data) => { - try { - if (err) { - console.log(JSON.stringify(err)) - console.log(`${$.name} getCoinChanges API请求失败,请检查网路重试`) - } else { - if (data) { - data = JSON.parse(data); - if (data.datas && data.datas.length > 0) { - $.help_feed = 0; - $.visit_friend = 0; - for (let item of data.datas) { - if ($.time('yyyy-MM-dd') === timeFormat(item.createdDate) && item.changeEvent === 'help_feed'){ - $.help_feed = item.changeCoin; - } - if ($.time('yyyy-MM-dd') === timeFormat(item.createdDate) && item.changeEvent === 'visit_friend') { - $.visit_friend = item.changeCoin; - } - } - console.log(`$.help_feed给好友喂食获得积分:${$.help_feed}`); - console.log(`$.visit_friend领取好友积分:${$.visit_friend}`); - } - } else { - console.log(`京豆api返回数据为空,请检查自身原因`) - } - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(); - } - }) - }) -} -function showMsg() { - return new Promise(resolve => { - $.stealFood = $.stealFood >= 0 ? `【偷好友狗粮】获取${$.stealFood}g狗粮\n` : `【偷好友狗粮】${$.stealFood}\n`; - $.stealFriendCoin = $.stealFriendCoin >= 0 ? `【领取好友积分】获得${$.stealFriendCoin}个\n` : `【领取好友积分】${$.stealFriendCoin}\n`; - $.helpFood = $.helpFood >= 0 ? `【给好友喂食】消耗${$.helpFood}g狗粮,获得积分${$.helpFood}个\n` : `【给好友喂食】${$.helpFood}\n`; - message += $.stealFriendCoin; - message += $.stealFood; - message += $.helpFood; - let flag; - if ($.getdata('jdJoyStealNotify')) { - flag = `${$.getdata('jdJoyStealNotify')}` === 'false'; - } else { - flag = `${jdNotify}` === 'false'; - } - if (flag) { - $.msg($.name, '', message); - } else { - $.log(`\n${message}\n`); - } - resolve() - }) -} -function TotalBean() { - return new Promise(resolve => { - const options = { - url: "https://me-api.jd.com/user_new/info/GetJDUserInfoUnion", - headers: { - "Host": "me-api.jd.com", - "Accept": "*/*", - "User-Agent": "ScriptableWidgetExtension/185 CFNetwork/1312 Darwin/21.0.0", - "Accept-Language": "zh-CN,zh-Hans;q=0.9", - "Accept-Encoding": "gzip, deflate, br", - "Cookie": cookie - } - } - $.get(options, (err, resp, data) => { - try { - if (err) { - $.logErr(err) - } else { - if (data) { - data = JSON.parse(data); - if (data['retcode'] === "1001") { - $.isLogin = false; //cookie过期 - return; - } - if (data['retcode'] === "0" && data.data && data.data.hasOwnProperty("userInfo")) { - $.nickName = data.data.userInfo.baseInfo.nickname; - } - } else { - console.log('京东服务器返回空数据'); - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve() - } - }) - }) -} -function taskUrl(functionId, friendPin) { - const url = `https://jdjoy.jd.com/common/pet/${functionId}?friendPin=${encodeURIComponent(friendPin)}&reqSource=h5&invokeKey=q8DNJdpcfRQ69gIx` + $.validate; - let lkt = new Date().getTime() - let lks = $.md5('' + 'q8DNJdpcfRQ69gIx' + lkt).toString() - return { - url, - headers: { - "Host": "jdjoy.jd.com", - "Accept": "*/*", - "Origin": "https://h5.m.jd.com", - "Accept-Language": "zh-CN,zh-Hans;q=0.9", - "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1"), - "Referer": "https://h5.m.jd.com/", - "Accept-Encoding": "gzip, deflate, br", - "Cookie": cookie, - "lkt": lkt, - "lks": lks - } - } -} -function timeFormat(time) { - let date; - if (time) { - date = new Date(time) - } else { - date = new Date(); - } - return date.getFullYear() + '-' + ((date.getMonth() + 1) >= 10 ? (date.getMonth() + 1) : '0' + (date.getMonth() + 1)) + '-' + (date.getDate() >= 10 ? date.getDate() : '0' + date.getDate()); -} -function jsonParse(str) { - if (typeof str == "string") { - try { - return JSON.parse(str); - } catch (e) { - console.log(e); - $.msg($.name, '', '请勿随意在BoxJs输入框修改内容\n建议通过脚本去获取cookie') - return []; - } - } -} -// md5 -!function(n){function t(n,t){var r=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(r>>16)<<16|65535&r}function r(n,t){return n<>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<>>9<<4)]=r;var e,i,a,d,h,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e>5]>>>t%32&255)}return r}function d(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t>5]|=(255&n.charCodeAt(t/8))<16&&(o=i(o,8*n.length)),r=0;r<16;r+=1){u[r]=909522486^o[r],c[r]=1549556828^o[r]}return e=i(u.concat(d(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="";for(r=0;r>>4&15)+"0123456789abcdef".charAt(15&t)}return e}function v(n){return unescape(encodeURIComponent(n))}function m(n){return h(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}$.md5=A}(this); -// prettier-ignore -function Env(t,e){"undefined"!=typeof process&&JSON.stringify(process.env).indexOf("GITHUB")>-1&&process.exit(0);class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise((e,i)=>{s.call(this,t,(t,s,r)=>{t?i(t):e(s)})})}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`🔔${this.name}, 开始!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null){try{return JSON.stringify(t)}catch{return e}}getjson(t,e){let s=e;const i=this.getdata(t);if(i)try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise(e=>{this.get({url:t},(t,s,i)=>e(i))})}runScript(t,e){return new Promise(s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let r=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");r=r?1*r:20,r=e&&e.timeout?e.timeout:r;const[o,h]=i.split("@"),n={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,Accept:"*/*"}};this.post(n,(t,e,i)=>s(i))}).catch(t=>this.logErr(t))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),r=JSON.stringify(this.data);s?this.fs.writeFileSync(t,r):i?this.fs.writeFileSync(e,r):this.fs.writeFileSync(t,r)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(const t of i)if(r=Object(r)[t],void 0===r)return s;return r}lodash_set(t,e,s){return Object(t)!==t?t:(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{},t)[e[e.length-1]]=s,t)}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),r=s?this.getval(s):"";if(r)try{const t=JSON.parse(r);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,r]=/^@(.*?)\.(.*?)$/.exec(e),o=this.getval(i),h=i?"null"===o?null:o||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,r,t),s=this.setval(JSON.stringify(e),i)}catch(e){const o={};this.lodash_set(o,r,t),s=this.setval(JSON.stringify(o),i)}}else s=this.setval(t,e);return s}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,e){return this.isSurge()||this.isLoon()?$persistentStore.write(t,e):this.isQuanX()?$prefs.setValueForKey(t,e):this.isNode()?(this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0):this.data&&this.data[e]||null}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,e=(()=>{})){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,e=null){const s=e?new Date(e):new Date;let i={"M+":s.getMonth()+1,"d+":s.getDate(),"H+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(s.getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in i)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?i[e]:("00"+i[e]).substr((""+i[e]).length)));return t}msg(e=t,s="",i="",r){const o=t=>{if(!t)return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:this.isSurge()?{url:t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t.url||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.url||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}if(this.isSurge()){let e=t.url||t.openUrl||t["open-url"];return{url:e}}}};if(this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r))),!this.isMuteLog){let t=["","==============📣系统通知📣=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`❗️${this.name}, 错误!`,t.stack):this.log("",`❗️${this.name}, 错误!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`🔔${this.name}, 结束! 🕛 ${s} 秒`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,e)}