yydspure/jd_joy_park_run.ts

231 lines
8.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/**
汪汪乐园-跑步+组队
默认翻倍到0.04红包结束,修改请设置变量
export JD_JOY_PARK_RUN_ASSETS="0.04"
cron:30 0 * * * *
30 0 * * * * jd_joy_park_run.ts
new Env('极速版汪汪赛跑');
**/
import {get, post, o2s, requireConfig, wait} from './function/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 }[] = []
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
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
}