diff --git a/jd_joy_joy_run.ts b/jd_joy_joy_run.ts new file mode 100644 index 0000000..b8bcfb7 --- /dev/null +++ b/jd_joy_joy_run.ts @@ -0,0 +1,242 @@ +/** +汪汪乐园-跑步+组队+提现 +默认翻倍到0.04红包结束,修改请设置变量 +export JD_JOY_PARK_RUN_ASSETS="0.08" +32 * * * * jd_joy_joy_run.ts +new Env('极速版汪汪赛跑') +Modify By Dylan from HW +**/ + +import {get, post, o2s, requireConfig, wait} from './TS_USER_AGENTS' +import {H5ST} from "./function/h5st" +import {existsSync, readFileSync} from "fs"; +import {getDate} from "date-fns"; + +let cookie: string = '', res: any = '', UserName: string = '', fp_448de: string = '' || process.env.FP_448DE, fp_b6ac3: string = '' || process.env.FP_B6AC3 +let assets: number = 0, captainId: string = '', h5stTool: H5ST = null + +!(async () => { + let cookiesArr: string[] = await requireConfig() + let account: { pt_pin: string, joy_park_run: number }[] = [] + console.log('每周日18点组队分红!!') + for (let [index, value] of cookiesArr.entries()) { + cookie = value + UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)![1]) + console.log(`\n开始【京东账号${index + 1}】${UserName}\n`) + + + + assets = parseFloat(process.env.JD_JOY_PARK_RUN_ASSETS || '0.04') + let rewardAmount: number = 0 + try { + h5stTool = new H5ST('448de', 'jdltapp;', fp_448de) + await h5stTool.__genAlgo() + res = await team('runningMyPrize', {"linkId": "L-sOanK_5RJCz7I314FpnQ", "pageSize": 20, "time": null, "ids": null}) + let sum: number = 0, success: number = 0 + /* + rewardAmount = res.data.rewardAmount + if (res.data.runningCashStatus.currentEndTime && res.data.runningCashStatus.status === 0) { + console.log('可提现', rewardAmount) + res = await api('runningPrizeDraw', {"linkId": "L-sOanK_5RJCz7I314FpnQ", "type": 2}) + await wait(2000) + if (res.success){ + console.log(res.data.message) + } else { + console.log('提现失败:', res.errMsg) + } + } + */ + for (let t of res?.data?.detailVos || []) { + if (t.amount > 0 && getDate(new Date(t.createTime)) === new Date().getDate()) { + sum = add(sum, t.amount) + success++ + } else { + break + } + } + console.log('今日成功', success, '次') + console.log('今日收益', sum.toFixed(2), '元') + + res = await team('runningTeamInfo', {"linkId": "L-sOanK_5RJCz7I314FpnQ"}) + if (!captainId) { + if (res.data.members.length === 0) { + console.log('成为队长') + captainId = res.data.captainId + } else if (res.data.members.length !== 6) { + console.log('队伍未满', res.data.members.length, '人') + console.log('战队收益', res.data.teamSumPrize, '元') + captainId = res.data.captainId + } else { + console.log('队伍已满', res.data.members.length, '人') + console.log('战队收益', res.data.teamSumPrize, '元') + } + } else if (captainId && res.data.members.length === 0) { + console.log('已有组队ID,未加入队伍') + res = await team('runningJoinTeam', {"linkId": "L-sOanK_5RJCz7I314FpnQ", "captainId": captainId}) + if (res.code === 0) { + console.log('组队成功') + for (let member of res.data.members) { + if (member.captain) { + console.log('队长', member.nickName) + break + } + } + if (res.data.members.length === 6) { + console.log('队伍已满') + captainId = '' + } + } else { + o2s(res, '组队失败') + } + } else { + console.log('已组队', res.data.members.length, '人') + console.log('战队收益', res.data.teamSumPrize, '元') + } + + + h5stTool = new H5ST('b6ac3', 'jdltapp;', fp_b6ac3) + await h5stTool.__genAlgo() + res = await runningPageHome() + console.log('🧧总金额', res.data.runningHomeInfo.prizeValue, '元') + + let energy: number = res.data.runningHomeInfo.energy + console.log('💊 X', res.data.runningHomeInfo.energy, '个能量棒') + await wait(2000) + if (res.data.runningHomeInfo.nextRunningTime){ + console.log('⏳体力恢复中,还有', secondsToMinutes(res.data.runningHomeInfo.nextRunningTime / 1000)) + if (res.data.runningHomeInfo.nextRunningTime / 1000 < 300) { + await wait(res.data.runningHomeInfo.nextRunningTime) + res = await runningPageHome() + console.log('体力恢复完成,开始跑步....') + await wait(1000) + } else { + console.log('⏳等体力恢复在跑吧!'); + continue; + } + } else { + console.log('体力已恢复,开始跑步....') + } + + await startRunning(res, assets) + for (let i = 0; i < energy; i++) { + console.log('💉消耗能量棒跑步....') + res = await api('runningUseEnergyBar', {"linkId": "L-sOanK_5RJCz7I314FpnQ"}) + //console.log(res.errMsg) + res = await runningPageHome() + await startRunning(res, assets) + await wait(1000) + } + res = await runningPageHome() + console.log('🧧总金额', res.data.runningHomeInfo.prizeValue, '元') + await wait(2000) + } catch (e) { + console.log('Error', e) + await wait(3000) + } + } +})() + +async function startRunning(res: any, assets: number) { + if (!res.data.runningHomeInfo.nextRunningTime) { + console.log('终点目标', assets) + for (let i = 0; i < 5; i++) { + res = await api('runningOpenBox', {"linkId": "L-sOanK_5RJCz7I314FpnQ"}) + if (parseFloat(res.data.assets) >= assets) { + let assets: number = parseFloat(res.data.assets) + res = await api('runningPreserveAssets', {"linkId": "L-sOanK_5RJCz7I314FpnQ"}) + console.log('领取成功', assets) + break + } else { + if (res.data.doubleSuccess) { + console.log('翻倍成功', parseFloat(res.data.assets)) + await wait(10000) + } else if (!res.data.doubleSuccess && !res.data.runningHomeInfo.runningFinish) { + console.log('开始跑步', parseFloat(res.data.assets)) + await wait(10000) + } else { + console.log('翻倍失败') + break + } + } + } + } + await wait(3000) +} + +async function api(fn: string, body: object) { + let timestamp: number = Date.now(), h5st: string = '' + if (fn === 'runningOpenBox') { + h5st = h5stTool.__genH5st({ + appid: "activities_platform", + body: JSON.stringify(body), + client: "ios", + clientVersion: "3.1.0", + functionId: "runningOpenBox", + t: timestamp.toString() + }) + } + let params: string = `functionId=${fn}&body=${JSON.stringify(body)}&t=${timestamp}&appid=activities_platform&client=ios&clientVersion=3.1.0&cthr=1` + h5st && (params += `&h5st=${h5st}`) + return await post('https://api.m.jd.com/', params, { + 'authority': 'api.m.jd.com', + 'content-type': 'application/x-www-form-urlencoded', + 'cookie': cookie, + 'origin': 'https://h5platform.jd.com', + 'referer': 'https://h5platform.jd.com/', + 'user-agent': 'jdltapp;' + }) +} + +async function runningPageHome() { + return get(`https://api.m.jd.com/?functionId=runningPageHome&body=%7B%22linkId%22:%22L-sOanK_5RJCz7I314FpnQ%22,%22isFromJoyPark%22:true,%22joyLinkId%22:%22LsQNxL7iWDlXUs6cFl-AAg%22%7D&t=${Date.now()}&appid=activities_platform&client=ios&clientVersion=3.1.0`, { + 'Host': 'api.m.jd.com', + 'Origin': 'https://h5platform.jd.com', + 'User-Agent': 'jdltapp;', + 'Referer': 'https://h5platform.jd.com/', + 'Cookie': cookie + }) +} + +async function team(fn: string, body: object) { + let timestamp: number = Date.now(), h5st: string + h5st = h5stTool.__genH5st({ + appid: "activities_platform", + body: JSON.stringify(body), + client: "ios", + clientVersion: "3.1.0", + functionId: fn, + t: timestamp.toString() + }) + return await get(`https://api.m.jd.com/?functionId=${fn}&body=${encodeURIComponent(JSON.stringify(body))}&t=${timestamp}&appid=activities_platform&client=ios&clientVersion=3.1.0&cthr=1&h5st=${h5st}`, { + 'Host': 'api.m.jd.com', + 'User-Agent': 'jdltapp;', + 'Origin': 'https://h5platform.jd.com', + 'X-Requested-With': 'com.jd.jdlite', + 'Referer': 'https://h5platform.jd.com/', + 'Cookie': cookie + }) +} + +// 秒转时分秒 +function secondsToMinutes(seconds: number) { + let minutes: number = Math.floor(seconds / 60) + let second: number = Math.floor(seconds % 60) + return `${minutes}分${second}秒` +} + +// 小数加法 +function add(num1: number, num2: number) { + let r1: number, r2: number + try { + r1 = num1.toString().split('.')[1].length + } catch (e) { + r1 = 0 + } + try { + r2 = num2.toString().split('.')[1].length + } catch (e) { + r2 = 0 + } + let m: number = Math.pow(10, Math.max(r1, r2)) + return (num1 * m + num2 * m) / m +} \ No newline at end of file