代码拉取完成,页面将自动刷新
/**
* cron 10 11 * * *
* 依赖 crypto-js & jsencrypt
* 得物APP 探索中的玩一玩 所有游戏的入口都在那里 请跑任务之前手动玩一次
* --------------------------------------------------
* 变量名:dewuCK
* 变量值:抓app.dewu.com 请求头Headers中的x-auth-token 去掉Bearer # 连接cookie中dutoken得值 可以直接搜dutoken # 连接SK
*/
let ckName = "dewuCK";//CK变量名字
const version = "testV1"
const isPromiseAll = process.env["isPromiseAll"] ? process.env["isPromiseAll"] : "true";//是否开启并发
let UAdefult = "Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.99 Mobile Safari/537.36/duapp/5.39.1(android;10)"
let UA = process.env["UAdefult_dewu"] ? process.env["UAdefult_dewu"] : UAdefult
let SK = process.env["SKdefult_dewu"] ? process.env["SKdefult_dewu"] : ""
const $ = new Env("得物农场");
const notify = $.isNode() ? require('./sendNotify') : '';
let envSplitor = ["&", "\n"]; //多账号分隔符
let strSplitor = "#"; //多变量分隔符
let userIdx = 0;
let userList = [];
let authShareCodeList = []
let stationShareCodesList = []
let zeroLotteryShareCodesModeGetList = []
let helpCode = ""
const CryptoJS = require("crypto-js");
async function main() {
$.log(`并发状态:${isPromiseAll == "true" ? "[true]" : "[false]"}`)
// let { body: shareCode } = await $.httpRequest({ timeout: 10000, method: "get", url: "https://gitee.com/smallfawn/Note/raw/main/updateTeam/dwnc.json", headers: { "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148/duapp/5.38.6" } })
// $.log(`当前版本:${version} 最新版本${shareCode.v}`)
// if (version != shareCode.v) {
// $.log(`当前版本和最新版本不一致`)
// return
// }
// $.log(`[${shareCode.notice}]`);
authShareCodeList = ['🌹🙊🙊👨🌾👴']
// stationShareCodesList = shareCode.stationShareCodesList
// zeroLotteryShareCodesModeGetList = shareCode.zeroLotteryShareCodesModeGetList
let taskall = [];
$.log(`======= 🌳初始化邀请码 =======`)
for (let user in userList) {
if (userList[user].ckStatus) {
//如果user处于数组第一 那么则await 否则则promiseAll
if (user == 0) {
await userList[0].UserInit();
} else {
if (isPromiseAll == "true") {
taskall.push(userList[user].UserInit());
} else {
taskall.push(await userList[user].UserInit());
}
}
}
}
await Promise.all(taskall);
$.log(`======= 🌳果园 =======`)
for (let user of userList) {
if (user.ckStatus) {
if (isPromiseAll == "true") {
taskall.push(user.tree());
} else { taskall.push(await user.tree()); }
}
}
await Promise.all(taskall);
taskall = [];
$.log(`======= 🐟鱼厂 =======`)
for (let user of userList) {
if (user.ckStatus) {
if (isPromiseAll == "true") {
taskall.push(user.fish());
} else {
taskall.push(await user.fish());
}
}
}
await Promise.all(taskall);
taskall = [];
$.log(`======= 上上签💴 =======`)
for (let user of userList) {
if (user.ckStatus) {
if (isPromiseAll == "true") {
taskall.push(user.station());
} else {
taskall.push(await user.station());
}
}
}
await Promise.all(taskall);
taskall = [];
$.log(`======= 0元抽💴 =======`)
for (let user of userList) {
if (user.ckStatus) {
if (isPromiseAll == "true") {
taskall.push(user.zeroLottery());
} else {
taskall.push(await user.zeroLottery());
}
}
}
await Promise.all(taskall);
taskall = [];
$.log(`======= 抽盲盒 =======`)
for (let user of userList) {
if (user.ckStatus) {
if (isPromiseAll == "true") {
taskall.push(user.buZhou());
} else {
taskall.push(await user.buZhou());
}
}
}
await Promise.all(taskall);
$.log(`======= 潮金币 =======`)
taskall = [];
for (let user of userList) {
if (user.ckStatus) {
if (isPromiseAll == "true") {
taskall.push(user.point());
} else {
taskall.push(await user.point());
}
}
}
await Promise.all(taskall);
}
class Task {
constructor(str) {
this.index = ++userIdx;
this.ck = str.split(strSplitor)[0]; //单账号多变量分隔符
this.ckStatus = true;
this.taskListTree = []
this.doWaterStatus = true
this.taskListFish = []
this.fishFeedStatus = true
this.fishId = ""
this.fishType = ""
this.stationList = [];
this.duToken = str.split(strSplitor)[1];
this.sk = str.split(strSplitor)[2];
this.prizeLocations = []
this.BuZhouRefreshStatus = false
this.chanceCount = 0
this.waitPrizeLocations = []
this.ua = UA
//this.sk = SK
}
async tree() {
await this.Dowater()
await $.wait(2500)
await this.TreeInviteReward()
await $.wait(1500)
await this.Get_Tree_Info()
await $.wait(1500)
await this.TreeInfo()
await $.wait(1500)
await this.SignListTree()
await $.wait(1500)
await this.TaskListTree();
await $.wait(1500)
await this.Droplet_Get_Generate_Droplet()
await $.wait(1500)
await this.Droplet_ExtraInfo()
}
async fish() {
await this.SignListFish()
await $.wait(2500)
await this.TaskListFish()
await $.wait(2500)
await this.UserFinshInfo()
}
async station() {
for (let i of stationShareCodesList) {
await $.wait(1500)
let shareKey = await this.ShareCodesGet(i)
if (shareKey != '') {
let id = shareKey.split("id=")[1].split("&")[0]
let userId = shareKey.split("shareUserId=")[1].split("&")[0]
let status = await this.StationAssist(id, userId)
if (status) {
break;
}
} else {
}
}
await this.StationList()
for (let j of this.stationList) {
await $.wait(2000)
await this.StationEgnageIn(j.id)
}
}
async zeroLottery() {
await this.zeroLotteryWinList()
await this.zeroLotteryList()
for (let j of zeroLotteryShareCodesModeGetList) {
await $.wait(1500)
let shareKey = await this.ShareCodesGet(j)
if (shareKey != '') {
shareKey = decodeURIComponent(shareKey.split("shareKey=")[1].split("&")[0])
let status = await this.zeroLotteryShare(shareKey)
if (status) {
break;
}
} else {
}
}
}
async buZhou() {
await this.BuZhouTaskList()
await $.wait(2000)
await this.BuZhouInfo()
await $.wait(2000)
await this.BuZhouInfo()
}
async point() {
await this.PonitSignIn()
await this.PointTaskList()
}
async DoTask(body) {
try {
let taskStatusResult = {};
let commitBody = {};
let preStatus = false
if (body.taskType == 50) {
taskStatusResult = await this.taskRequest_task("get", `https://app.dewu.com/hacking-task/v1/task/status?taskId=${body.taskId}&taskType=50&sign=94fd23c93d62ae0f75108f94c093b198`)
if (taskStatusResult.code == 200) {
if (taskStatusResult.data.status == 1) {
//$.log(`账号[${this.index}] 开始任务成功🎉`)
commitBody = { "taskId": body.taskId, "taskType": String(body.taskType), "btd": 0, spuId: 0 }
preStatus = true
}
}
}
if (body.taskType == 1) {
if ("classify" in body) {
if (body.classify == 2) {
taskStatusResult = await this.taskRequest_task("post", `https://app.dewu.com/hacking-task/v1/task/pre_commit?sign=b7382f4d908e04356f9646688afe096c`, { taskId: body.taskId, taskType: body.taskType, btn: 0 })
//console.log(taskStatusResult);
if (taskStatusResult.code == 200) {
if (taskStatusResult.data.isOk == true) {
//$.log(`账号[${this.index}] 开始任务成功🎉`)
$.log(`延迟${body.countdownTime + 1}秒浏览${body.taskName}`)
await $.wait((body.countdownTime + 1) * 1000)
commitBody = { "taskId": body.taskId, "taskType": String(body.taskType), "activityType": null, "activityId": null, "taskSetId": null, "venueCode": null, "venueUnitStyle": null, "taskScene": null, "btd": 0 }
preStatus = true
}
} else {
$.log(`❌账号[${this.index}] 开始任务失败[${taskStatusResult.msg}]`);
}
}
} else {
/*taskStatusResult = await this.taskRequest_task("post", `https://app.dewu.com/hacking-task/v1/task/pre_commit?sign=b7382f4d908e04356f9646688afe096c`, { taskId: body.taskId, taskType: body.taskType, btn: 0 })
if (taskStatusResult.code == 200) {
if (taskStatusResult.data.isOk == true) {
//$.log(`账号[${this.index}] 开始任务成功🎉`)
await $.wait(16000)
commitBody = { "taskId": body.taskId, "taskType": body.taskType, "activityType": null, "activityId": null, "taskSetId": null, "venueCode": null, "venueUnitStyle": null, "taskScene": null, "btd": 0 }
preStatus = true
}
} else {
$.log(`❌账号[${this.index}] 开始任务失败[${taskStatusResult.msg}]`);
}*/
}
}
if (body.taskType == 123 || body.taskType == 124) {
commitBody = { "taskType": String(body.taskType) }
preStatus = true
}
//console.log(taskStatusResult)
if (preStatus == true) {
let commitResult = await this.taskRequest_task("post", `https://app.dewu.com/hacking-task/v1/task/commit?sign=826988b593cd8cd75162b6d3b7dade15`, commitBody)
//console.log(commitResult)
if (commitResult.code == 200) {
if (commitResult.data.status == 2) {
$.log(`账号[${this.index}] [${body.taskName}]任务成功🎉`)
return true
} else {
$.log(`账号[${this.index}] [${body.taskName}]任务失败🎉`)
}
} else {
$.log(`账号[${this.index}] [${body.taskName}]任务失败🎉`)
}
} else {
return false
}
} catch (e) {
console.log(e);
}
}
async StationAssist(id, shareUserId) {
let body = { "id": id, "shareUserId": shareUserId }
try {
let result = await this.taskRequest("post", `https://app.dewu.com/api/v1/h5/delicate-sell-interfaces/dsell/station/assist?sign=${this.calculateSign(body)}`, body)
if (result.code == 200) {
//$.log(`账号[${this.index}] 助力参与作者组队上上签成功🎉`)
return true
} else {
//$.log(`❌账号[${this.index}] 助力参与作者组队上上签失败[${result.msg}]`);
return false
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async zeroLotteryEgnageIn(id) {
let body = { "id": id, "source": "wotab" }
try {
let result = await this.taskRequest_task("post", `https://app.dewu.com/hacking-zero-lottery/v1/activity/engage-in?sign=${this.calculateSign(body)}`, body)
if (result.code == 200) {
$.log(`账号[${this.index}] 0元抽签参与成功[${result.data.title}]🎉`)
} else {
$.log(`❌账号[${this.index}] 0元抽签0参与失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async ShareCodesGet(key) {
try {
let result = await this.taskRequest_task("get", `https://app.dewu.com/hacking-keyword/v1/common/keyword/share-info?keyword=${key}`)
if (result.code == 200) {
if (result.data !== null) {
return result.data.activityInfo.enterUrl
} else {
return ''
}
} else {
$.log(`❌账号[${this.index}] 助力参与0元购失败[${result.msg}]🎉`)
return ''
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async zeroLotteryShare(key) {
let body = { "shareKey": key }
try {
let result = await this.taskRequest_task("post", `https://app.dewu.com/hacking-zero-lottery/v1/activity/report-keyword?sign=${this.calculateSign(body)}`, body)
if (result.code == 200) {
//$.log(`账号[${this.index}] 助力参与0元购成功🎉`)
return true
} else {
//$.log(`❌账号[${this.index}] 助力参与0元购失败[${result.msg}]🎉`)
return false
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async zeroLotteryWinList() {
let body = { "limit": 10, "lastId": 0 }
try {
let result = await this.taskRequest_task("post", `https://app.dewu.com/hacking-zero-lottery/v1/activity/engage-in-list`, body)
if (result.code == 200) {
if (result.data?.list) {
for (let i of result.data.list) {
// ...
if (i.win == true) {
$.log(`账号[${this.index}] 恭喜中签[${i.name}]🎉🎉🎉🎉🎉🎉🎉🎉`)
}
}
}
} else {
$.log(`❌账号[${this.index}] 获取0元购列表失败[${result.msg}]🎉`)
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async zeroLotteryList() {
let body = { "source": "wotab" }
try {
let result = await this.taskRequest_task("post", `https://app.dewu.com/api/v1/h5/zero-lottery-interfaces/zl/activity/query-today?sign=${this.calculateSign(body)}`, body)
if (result.code == 200) {
for (let i of result.data.activityList) {
let taskStatus = false
if (i.status == 0) {
if ("taskVo" in i) {
await this.DoTask(i.taskVo)
} else {
await this.zeroLotteryEgnageIn(i.id)
}
}
}
} else {
$.log(`❌账号[${this.index}] 获取0元购列表失败[${result.msg}]🎉`)
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async StationEgnageIn(id) {
let body = { "id": id }
try {
let result = await this.taskRequest_task("post", `https://app.dewu.com/api/v1/h5/delicate-sell-interfaces/dsell/station/egnage-in?sign=${this.calculateSign(body)}`, body)
if (result.code == 200) {
$.log(`账号[${this.index}] 参与上上签成功🎉`)
} else {
$.log(`❌账号[${this.index}] 参与上上签失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async StationList() {
let body = { "student": false, "source": "" }
try {
let result = await this.taskRequest_task("post", `https://app.dewu.com/api/v1/h5/delicate-sell-interfaces/dsell/query/ongoing-list?sign=${this.calculateSign(body)}`, body)
if (result.code == 200) {
for (let i of result.data.records) {
if (i.userPartakeStatus == 10) {
this.stationList.push(i)
}
}
} else {
$.log(`❌账号[${this.index}] 获取上上签列表失败[${result.msg}]🎉`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async BuZhouInfo() {
let body = { "benefitId": 1, "additionPresent": 0, "source": "gamecentertask" }
try {
let result = await this.taskRequest_task("post", `https://app.dewu.com/api/v1/h5/mount-buzhou-interfaces/gk/index?sign=${this.calculateSign(body)}`, body)
if (result.code == 200) {
//console.log(result.data);
$.log(`账号[${this.index}] 盲盒赛季[${result.data.seasonName}] 当前抽奖机会[${result.data.chanceCount}] 🎉`)
if ("prizeLocations" in result.data) {
$.log(`已开盲盒位置[${result.data.prizeLocations}]`)
this.prizeLocations = result.data.prizeLocations
} else {
this.prizeLocations = []
}
this.chanceCount = result.data.chanceCount
//console.log(result.data.hasDraw);
if (this.chanceCount != 0) {
this.waitPrizeLocations = this.findMissingNumbers(this.prizeLocations)
//加一个条件 如果waitPriz...... 小于 chence 则 刷新
if (this.waitPrizeLocations.length == 0 && this.chanceCount > 0) {
await $.wait(2500)
await this.BuZhouRefresh(result.data.seasonId)
}
this.waitPrizeLocations = this.findMissingNumbers(this.prizeLocations)
//如果长度大于等于chence 则不刷新
let max = this.waitPrizeLocations.length >= this.chanceCount ? this.chanceCount : this.waitPrizeLocations.length
for (let i = 0; i < max; i++) {
let prizeLocation = this.waitPrizeLocations[i]
$.log("开始第" + (i + 1) + "次抽奖")
await $.wait(2500)
await this.BuZhouLottery(result.data.seasonId, prizeLocation)
}
await $.wait(2500)
await this.BuZhouRefresh(result.data.seasonId)
}
} else {
$.log(`❌账号[${this.index}] 盲盒获取失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async BuZhouLottery(seasonId, prizeLocation) {
let body = { "benefitId": 1, "seasonId": seasonId, "prizeLocation": prizeLocation, "source": "gamecentertask" }
try {
let result = await this.taskRequest_task("post", `https://app.dewu.com/api/v1/h5/mount-buzhou-interfaces/gk/lottery?sign=${this.calculateSign(body)}`, body)
if (result.code == 200) {
$.log(`账号[${this.index}] 盲盒抽取[${result.data.gkLotteryVo.gkName}]碎片`);
} else {
$.log(`❌账号[${this.index}] 盲盒抽取失败[${result.msg}]`);
//console.log(seasonId, prizeLocation);
}
} catch (e) {
console.log(e);
}
}
async BuZhouRefresh(seasonId) {
let body = { "seasonId": seasonId }
try {
let result = await this.taskRequest_task("post", `https://app.dewu.com/api/v1/h5/mount-buzhou-interfaces/gk/refresh?sign=${this.calculateSign(body)}`, body)
if (result.code == 200) {
$.log(`账号[${this.index}] 刷新盲盒成功`);
this.BuZhouRefreshStatus = true;
this.prizeLocations = []
} else {
$.log(`❌账号[${this.index}] 刷新盲盒失败[${result.msg}]`);
//console.log(result);
this.BuZhouRefreshStatus = false;
}
} catch (e) {
console.log(e);
}
}
async BuZhouTaskList() {
let body = { "source": "gamecentertask" }
try {
let result = await this.taskRequest_task("get", `https://app.dewu.com/api/v1/h5/mount-buzhou-interfaces/gk/task-list?source=gamecentertask&sign=${this.calculateSign(body)}`)
if (result.code == 200) {
for (let i of result.data.taskVoList) {
let taskStatus = false
if (i.isComplete == false) {
if (i.taskType == 1) {
if (i.classify == 2) {
//浏览
taskStatus = await this.DoTask(i)
}
}
if (i.taskType == 50) {
await $.wait(2500)
taskStatus = await this.DoTask(i)
//收藏
}
} else if (i.isComplete == true && i.isReceiveReward == false) {
await $.wait(2500)
await this.TaskReceiveBuZhou(i)
}
if (taskStatus == true) {
await $.wait(2500)
await this.TaskReceiveBuZhou(i)
}
}
} else {
$.log(`❌账号[${this.index}] 盲盒任务获取失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async TaskReceivePoint(body) {
try {
let RequestBody = { taskId: body.taskId, taskType: body.taskType }
let result = await this.taskRequest("post", `https://app.dewu.com/hacking-game-center/v1/sign/task_receive?sign=${this.calculateSign(RequestBody)}`, RequestBody)
//console.log(JSON.stringify(result));
if (result.code == 200) {
$.log(`账号[${this.index}] 领取任务奖励[${result.msg}] --- [${result.data.amount}]金币🎉`)
} else {
//console.log(body.taskId);
$.log(`❌账号[${this.index}] 领取任务奖励失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async TaskReceiveBuZhou(body) {
try {
let RequestBody = { taskId: body.taskId, classify: body.classify }
let result = await this.taskRequest("post", `https://app.dewu.com/api/v1/h5/mount-buzhou-interfaces/gk/task-receive?sign=${this.calculateSign(RequestBody)}`, RequestBody)
//console.log(JSON.stringify(result));
if (result.code == 200) {
$.log(`账号[${this.index}] 领取任务奖励[${result.msg}] --- [${result.data.count}]次数🎉`)
} else {
//console.log(body.taskId);
$.log(`❌账号[${this.index}] 领取任务奖励失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async FishFeed() {
let body = { "feedTimes": 1, "fishId": this.fishId, "fishType": this.fishType }
try {
let result = await this.taskRequest("post", `https://app.dewu.com/hacking-fish/v1/fish/feed?sign=63a26f09f6d985b73299f92506f6e986`, body)
if (result.code == 200) {
$.log(`账号[${this.index}] 喂食🐟成功🎉`)
this.fishFeedStatus = true
} else {
this.fishFeedStatus = false
$.log(`❌账号[${this.index}] 喂食🐟失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async Dowater() {
if (this.droplet > 0) {
$.log(`账号[${this.index}] 可浇水${parseInt(this.droplet / 100)}次,开始浇水`);
if (this.treeMode == 0) {
for (let i = 0; i < parseInt(this.droplet / 100); i++) {
if (this.doWaterStatus) {
await this.DoWaterApi()
//随机延迟random
await $.wait(this.randomNumber(1000, 2000))
}
}
} else if (this.treeMode == 1) {
$.log(`账号[${this.index}] 组队浇水 =>`)
for (let i = 0; i < parseInt(this.droplet / 100); i++) {
if (this.doWaterStatus) {
await this.DoWaterTeamApi(this.treeId)
//随机延迟random
await $.wait(this.randomNumber(1000, 2000))
}
}
await this.TeamInfo()
}
}
}
async DoWaterApi() {
let body = {}
try {
let result = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/tree/watering?sign=fe26befc49444d362c8f17463630bdba`, body)
if (result.code == 200) {
$.log(`账号[${this.index}] 浇水成功🎉`)
this.doWaterStatus = true
} else {
this.doWaterStatus = false
$.log(`❌账号[${this.index}] 浇水失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async DoWaterTeamApi(teamTreeId) {
let body = { "teamTreeId": teamTreeId }
try {
let result = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/team/tree/watering?sign=b5ee2c7e8d1aaf214886c438c4f25cd9`, body)
if (result.code == 200) {
$.log(`账号[${this.index}] 浇水成功🎉`)
if (result.data.coupons !== null) {
$.log(`账号[${this.index}] 浇水成功获得${result.data.coupons[0].limitDesc}🎉`)
}
this.doWaterStatus = true
} else {
this.doWaterStatus = false
$.log(`❌账号[${this.index}] 浇水失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async TreeInfo() {
try {
let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/user/target/info`)
//console.log(result);
if (result.code == 200) {
$.log(`账号[${this.index}] [${result.data.name}] Lv[${result.data.level}]🎉`)
} else {
$.log(`❌账号[${this.index}] 获取🌳信息失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async TaskListTree() {
try {
let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/task/list`)
//console.log(result);
if (result.code == 200) {
$.log(`账号[${this.index}] 获取任务列表成功 采集/领取 集到[${result.data.taskList.length}]条任务🎉`)
for (let i of result.data.taskList) {
this.taskListTree.push(i)
}
for (let i of this.taskListTree) {
let taskStatus = false
if (i.isComplete == false) {
await $.wait(2500)
if (i.taskType == 1) {
if (i.classify == 2) {
//浏览
taskStatus = await this.DoTask(i)
}
if (i.classify == 1) {
//完成固定次数浇灌 默认5次
}
}
if (i.taskType == 10) {
//固定时间段领取 40g
}
if (i.taskType == 123) {
taskStatus = await this.DoTask(i)
//从桌面组件访问
}
if (i.taskType == 50) {
taskStatus = await this.DoTask(i)
//收藏
}
if (i.taskType == 201) {
//逛95分
}
if (i.taskType == 4) {
//收集一次水滴生产
}
} else if (i.isComplete == true && i.isReceiveReward == false) {
await $.wait(2500)
await this.TaskReceiveTree(i)
}
if (taskStatus) {
await $.wait(2500)
await this.TaskReceiveTree(i)
}
}
} else {
$.log(`❌账号[${this.index}] 获取任务列表成功🎉失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async SignListTree() {
try {
let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/sign/list`)
//console.log(JSON.stringify(result));
if (result.code == 200) {
$.log(`账号[${this.index}] 今日${result.data.status == 1 ? "未签到" : "已签到"}🎉`)
if (result.data.status == 1) {
let SignInResult = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/sign/sign_in`, {})
if (SignInResult.code == 200) {
$.log(`账号[${this.index}] 签到领取水滴[${SignInResult.msg}] --- [${SignInResult.data.Num}]🎉`)
} else {
$.log(`账号[${this.index}] 签到领取水滴[${SignInResult.msg}]`)
}
}
} else {
$.log(`❌账号[${this.index}] 获取签到列表失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async SignListFish() {
try {
let result = await this.taskRequest_task("get", `https://app.dewu.com/hacking-fish/v1/daily_sign/list`)
//console.log(JSON.stringify(result));
if (result.code == 200) {
$.log(`账号[${this.index}] 今日${result.data.status == 1 ? "未签到" : "已签到"}🎉`)
if (result.data.status == 1) {
let SignInResult = await this.taskRequest("post", `https://app.dewu.com/hacking-fish/v1/daily_sign/receive`, {})
if (SignInResult.code == 200) {
$.log(`账号[${this.index}] 签到领取鱼食[${SignInResult.msg}] --- [${SignInResult.data.Num}]🎉`)
} else {
$.log(`账号[${this.index}] 签到领取鱼食[${SignInResult.msg}]`)
}
}
} else {
$.log(`❌账号[${this.index}] 获取签到列表失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async PointInfo() {
try {
let result = await this.taskRequest_task("get", `https://app.dewu.com/hacking-game-center/v1/gold/balance`)
//console.log(JSON.stringify(result));
if (result.code == 200) {
$.log(`账号[${this.index}] 潮金币[${result.data.coinDetailList[0].value}]`);
} else {
$.log(`❌账号[${this.index}] 获取潮金币信息失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async PointTaskList() {
try {
let result = await this.taskRequest_task("get", `https://app.dewu.com/hacking-game-center/v1/sign/task_list`)
//console.log(JSON.stringify(result));
if (result.code == 200) {
for (let i of result.data.list) {
let taskStatus = false
if (i.isComplete == false) {
if (i.taskType == 1) {
i.classify = 2
taskStatus = await this.DoTask(i)
}
if (i.taskType == 50) {
await $.wait(2500)
taskStatus = await this.DoTask(i)
//收藏
}
} else if (i.isComplete == true && i.isReceiveReward == false) {
await $.wait(2500)
await this.TaskReceivePoint(i)
}
if (taskStatus == true) {
await $.wait(2500)
await this.TaskReceivePoint(i)
}
}
} else {
$.log(`❌账号[${this.index}] 获取潮金币任务列表失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async PonitSignIn() {
try {
let result = await this.taskRequest("post", `https://app.dewu.com/hacking-game-center/v1/sign/sign`, {})
//console.log(JSON.stringify(result));
if (result.code == 200) {
$.log(`账号[${this.index}] 外部活动潮币签到成功 获得[${result.data.coins}g💧]🎉`)
} else {
$.log(`❌账号[${this.index}] 外部活动潮币签到失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async Droplet_ExtraInfo() {
try {
let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/droplet-extra/info`)
//console.log(JSON.stringify(result));
if (result.code == 200) {
$.log(`账号[${this.index}] 气泡水滴 可领取 --- 💧🎉`)
let receiveResult = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/droplet-extra/receive`, {})
//console.log(JSON.stringify(result));
if (receiveResult.code == 200) {
$.log(`账号[${this.index}] 领取气泡水滴[${receiveResult.msg}] --- [${receiveResult.data.totalDroplet}g]💧🎉`)
} else {
$.log(`❌账号[${this.index}] 领取气泡失败[${receiveResult.msg}]`);
//console.log(result);
}
} else {
$.log(`❌账号[${this.index}] 气泡水滴获取失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async Droplet_Get_Generate_Droplet() {
try {
let result = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/droplet/get_generate_droplet`, {})
//console.log(JSON.stringify(result));
if (result.code == 200) {
$.log(`账号[${this.index}] 领取小木桶积攒水滴[${result.msg}] --- [${result.data.droplet}g]💧🎉`)
} else {
$.log(`❌账号[${this.index}] 领取小木桶积攒水滴失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async TaskReceiveFish(body) {
try {
let result = await this.taskRequest("post", `https://app.dewu.com/hacking-fish/v1/task/receive?sign=ee632e4b8e24d2526737bca0b7c0c678`, { taskId: body.taskId, classify: body.classify })
//console.log(JSON.stringify(result));
if (result.code == 200) {
$.log(`账号[${this.index}] 领取任务奖励[${result.msg}] --- [${result.data.num}g]💧🎉`)
} else {
$.log(`❌账号[${this.index}] 领取任务奖励失败[${result.msg}]`);
//console.log(body.taskId);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async TaskReceiveTree(body) {
try {
let result = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/task/receive?sign=15c051cc7af50c30318c05b539e434e7`, { taskId: body.taskId, classify: body.classify })
//console.log(JSON.stringify(result));
if (result.code == 200) {
$.log(`账号[${this.index}] 领取任务奖励[${result.msg}] --- [${result.data.num}g]💧🎉`)
} else {
//console.log(body.taskId);
$.log(`❌账号[${this.index}] 领取任务奖励失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async Get_Tree_Info() {
try {
let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/tree/get_tree_info`)
//console.log(JSON.stringify(result));
if (result.code == 200) {
$.log(`账号[${this.index}] [${result.data.treeId}] 成熟进度 --- [${result.data.userWateringDroplet}/${result.data.currentLevelNeedWateringDroplet}g]💧🎉`)
} else {
$.log(`❌账号[${this.index}] 获取🌳成长信息失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async TaskListFish() {
try {
let result = await this.taskRequest("get", `https://app.dewu.com/hacking-fish/v1/task/list`)
//console.log(JSON.stringify(result));
if (result.code == 200) {
$.log(`账号[${this.index}] 获取任务列表成功 采集/领取 [${result.data.taskList.length}]条任务🎉`)
for (let i of result.data.taskList) {
this.taskListFish.push(i)
}
for (let i of this.taskListFish) {
let taskStatus = false
if (i.isComplete == false) {
await $.wait(2500)
if (i.taskType == 1) {
if (i.classify == 2) {
//浏览
taskStatus = await this.DoTask(i)
}
if (i.classify == 1) {
//完成固定次数浇灌 默认5次
}
}
if (i.taskType == 100001) {
//喂养5次
}
if (i.taskType == 124) {
taskStatus = await this.DoTask(i)
//从桌面组件访问
}
if (i.taskType == 50) {
taskStatus = await this.DoTask(i)
//收藏
}
if (i.taskType == 201) {
//逛95分
}
if (i.taskType == 100002) {
//30g鱼食 每日9点/13点/17点/21点各领一次
}
} else if (i.isComplete == true && i.isReceiveReward == false) {
await $.wait(3000)
await this.TaskReceiveFish(i)
}
if (taskStatus) {
await $.wait(3000)
await this.TaskReceiveFish(i)
}
}
} else {
$.log(`❌账号[${this.index}] 获取任务🐟失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async UserInit() {
let result = {
code: 0,
msg: "获取🌳信息失败",
}
try {
let authHelpCode = "";
if (this.index == 1) {
for (let j of authShareCodeList) {
authHelpCode = j
result = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/user/init?sign=d25c30ebdf1adeb29ca10ccb825bbf66`, { "keyword": "", "source": "wotab04", "koc": 0, "ffOfflineFlag": "", "keywordType": 0 })
if (result.code == 200) {
if ("inviteRes" in result.data) {
if (result.data.inviteRes.indexOf("成功") != -1) {
$.log(`首账号助力作者成功`)
break
}
}
}
}
let helpCodeResult = await this.taskRequest("post", "https://app.dewu.com/hacking-tree/v1/keyword/gen?sign=fe26befc49444d362c8f17463630bdba", {})
if (helpCodeResult.code == 200) {
let kw = helpCodeResult.data.keyword
helpCode = kw.split("œ")[1]
$.log(`首账号助力码[${helpCode}]`)
}
} else {
result = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/user/init?sign=d25c30ebdf1adeb29ca10ccb825bbf66`, { "keyword": "", "source": "wotab04", "koc": 0, "ffOfflineFlag": "", "keywordType": 0 })
}
if (result.code == 200) {
$.log(`账号[${this.index}] [${result.msg}] 剩余水滴[${result.data.droplet}g] 助力[${this.index == 1 ? "作者:" + authHelpCode : helpCode}][${"inviteRes" in result.data ? result.data.inviteRes : "未成功"}]🎉`)
this.treeId = result.data.treeId
this.droplet = result.data.droplet
this.treeMode = result.data.mode
} else {
$.log(`❌账号[${this.index}] 获取🌳信息失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async TreeInviteReward() {
try {
let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/invite/list`, `sign=fe26befc49444d362c8f17463630bdba`)
if (result.code == 200) {
if (result.data?.list) {
for (let i of result.data.list) {
if (i.status == 0) {
let body = { "inviteeUserId": i.inviteeUserId }
let rewardResult = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/invite/reward`, body)
if (rewardResult.code == 200) {
$.log(`账号[${this.index}] 领取邀请奖励成功 获取[${rewardResult.data.droplet}]g`);
}
}
}
}
}
} catch (e) {
console.log(e);
}
}
async TeamInfo() {
try {
let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/team/info`)
//console.log(result);
if (result.code == 200) {
for (let i of result.data.member) {
if (i.isCaptain == true) {
$.log(`账号[${this.index}] 组队队长[${i.name}] 今日是否上线[${i.status == 1 ? '是' : '否'}]`)
} else {
$.log(`账号[${this.index}] 组员[${i.name}] 今日是否上线[${i.status == 1 ? '是' : '否'}]`)
}
}
} else {
$.log(`❌账号[${this.index}] 获取队伍🌳🎉失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
async UserFinshInfo() {
try {
let result = await this.taskRequest_task("get", `https://app.dewu.com/hacking-fish/v1/user/home?userSelectFishId=0&sign=5d75086e825f0fcea4b2cbdf5e6d940f`)
//console.log(result);
let fishName = ""
let lv = ""
let progress = ""
if (result.code == 200) {
this.fishId = result.data.selectFishId
for (let j of result.data.fishList) {
if (this.fishId == j.fishId) {
this.fishType = j.type
fishName = j.typeData.name
lv = j.level
progress = j.progress
break;
}
}
$.log(`账号[${this.index}] [${fishName}]等级[${lv}] [${progress}/1000000] 剩余※鱼食🐟[${result.data.balance}g]🎉`)
if (result.data.balance > 0) {
$.log(`账号[${this.index}] 喂食🐟${parseInt(result.data.balance / 10)}次,开始喂食`);
for (let i = 0; i < parseInt(result.data.balance / 10); i++) {
if (this.fishFeedStatus) {
await this.FishFeed()
//随机延迟random
await $.wait(this.randomNumber(1000, 2000))
}
}
}
} else {
$.log(`❌账号[${this.index}] 获取用户信息成功🎉失败[${result.msg}]`);
//console.log(result);
}
} catch (e) {
console.log(e);
}
}
findMissingNumbers(arr) {
const nums = [0, 1, 2, 3, 4, 5, 6, 7, 8];
const missing = [];
for (const num of nums) {
if (!arr.includes(num)) {
missing.push(num);
}
}
return missing;
}
//randominit
randomNumber(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
async taskRequest(method, url, body = {}) {
//
let headers = {
"Host":"app.dewu.com",
"isRoot":"0",
"emu":"0",
"User-Agent":UA,
"deviceTrait":"iPhone",
"cookieToken":""+this.duToken,
"appid":"h5",
"isProxy":"1",
"Cookie":"duToken="+this.duToken+"; x-auth-token=Bearer "+this.ck+"; dw_edge_er_cookie=4418978a-72fd-a6d1-d701-e3ca50cd70c7",
"Referer":"https",
"imei":"",
"channel":"App Store",
"appVersion":"5.38.6",
"ua":"Mozilla/5.0 (iPhone; CPU iPhone OS 15_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148/duapp/5.38.6",
"Origin":"https",
"x-auth-token":"Bearer eyJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE3MjI4MTg2MjUsImV4cCI6MTc1NDM1NDYyNSwiaXNzIjoiRjIwMjA4NTEtRUQwMi00MDEzLUIxRUUtODZGMDU5QUEwOEUwIiwic3ViIjoiRjIwMjA4NTEtRUQwMi00MDEzLUIxRUUtODZGMDU5QUEwOEUwIiwidXVpZCI6IkYyMDIwODUxLUVEMDItNDAxMy1CMUVFLTg2RjA1OUFBMDhFMCIsInVzZXJJZCI6MTA3MTM5MzU4LCJ1c2VyTmFtZSI6IuW-l-eJqWVyLVQ2QjVVNlQyIiwiaXNHdWVzdCI6ZmFsc2V9.C_C8zHRwGvYI9gtglQvN0btsWlnwqwhOjNuNdLWFCa-Tzjd_MNoRlOoySXvcWH50uqcrY9zF_reSfpNXsImdyFEyqE6WlosXOxudP1RTkfZ13FVlKMx9J6r6PfUTbNkOU_BATTg38hmemGv1bPC_Kkev8vIQGv3lwf6KPGBHtia5feoHLTQ4a1X-vR-st3Tfkac3OgrMDXLgVFj_J74g2IijKOqfZdK7FI79MsTSmCUjpWhcd_5VPJ-DDo6pqbpCKi083uKnumdsIGzv_FNo-yhyXvHThoTp-TGLR6sOWr7LlOerM2T-NqiCSt36393AHfekUdQpudojvpNs_md5ng",
"platform":"h5",
"Connection":"keep-alive",
"Accept-Language":"zh-CN,zh-Hans;q=0.9",
"SK":this.sk,
"Accept":"*/*",
"traceparent":this.generateIds(),
"duToken":""+this.duToken,
"Accept-Encoding":"gzip, deflate, br"
}
const reqeuestOptions = {
url: url,
method: method,
headers: headers
}
//console.log(body);
let { enData, n } = this.createEncryptedBody(JSON.stringify(body))
reqeuestOptions.headers["a"] = n
//console.log(enData);
method == "get" ? (reqeuestOptions.url.split("?")[1] != undefined ? reqeuestOptions.url += "&data=" + encodeURIComponent(enData.data) : reqeuestOptions.url += "?data=" + encodeURIComponent(enData.data)) : Object.assign(reqeuestOptions, { body: JSON.stringify({ data: enData.data }) })
//console.log(reqeuestOptions)
try {
let { body: result } = await $.httpRequest(reqeuestOptions)
if (!$.isJson(result)) {
result = JSON.parse(this.decryptResponseBody(result, n))
}
//console.log(result);
return result
} catch (error) {
//console.log(error);
// $.log(`接口请求失败 `)
return { code: 0, msg: "接口请求失败" }
}
}
generateIds() {
var Uo = Array(32);
var oe = "0000000000000000";
function Ho(e) {
for (var t = 0; t < 2 * e; t++)
Uo[t] = Math.floor(16 * Math.random()) + 48,
Uo[t] >= 58 && (Uo[t] += 39);
return String.fromCharCode.apply(null, Uo.slice(0, 2 * e));
}
var Mo = "00000000000000000000000000000000"; // Assuming Mo is defined somewhere else in your code
var generateSpanId = function () {
return function (e) {
var t = e(8);
if (t === oe)
return Mo;
return t;
}(Ho);
};
var generateTraceId = function () {
return function (e) {
var t = Math.floor(Date.now() / 1e3).toString(16),
n = e(8),
r = e(3);
return "f5" + r + t + n;
}(Ho);
};
return "00-" + generateTraceId() + "-" + generateSpanId() + "-01"
};
async taskRequest_task(method, url, body = "") {
let headers = {
"Host": "app.dewu.com",
"Connection": "keep-alive",
//"Content-Length": "62",
//"ua": "duapp/5.37.0(android;10)",
//"Origin": "https://cdn-m.dewu.com",
//"appid": "h5",
"SK": this.sk,
/*"shumeiId": "20240229101108a9d7deaedd9e5e305209da327c58c8fc21a0fe159c45b78d",*/
/*"deviceTrait": "MI+8+Lite",*/
"x-auth-token": "Bearer " + this.ck,
/*"Sec-Fetch-Dest": "empty",
"channel": "xiaomi",
"duToken": "d41d8cd9|1630362958|1711360875|4bf085e789d085b0",
"appVersion": "5.37.0",
"emu": "0",*/
//"cookieToken": "d41d8cd9|1630362958|1711360875|4bf085e789d085b0",
"traceparent": this.generateIds(),
/*"dudeliveryid": "79F073E7555D2BD9490AF2270549ADBABDFE24914A4EEF24D4D5C25559243BDD",*/
"User-Agent": this.ua,
//"duproductid": "0BC86B71CB9BA08726EDD70256925177BDFE24914A4EEF24D4D5C25559243BDD",
"Content-Type": "application/json",
/*"isRoot": "0",
"imei": "",
"duid": "0BC86B71CB9BA08726EDD70256925177BDFE24914A4EEF24D4D5C25559243BDD",
"platform": "h5",
"isProxy": "0",
*/
/*"X-Requested-With": "com.shizhuang.duapp",
"Sec-Fetch-Site": "same-site",
"Sec-Fetch-Mode": "cors",
"Referer": "https://cdn-m.dewu.com/h5-growth/game-task?gameTaskFlag=true&taskId=Nr52k&taskType=50&countdownIcon=%7B%22countdownIcon%22%3A%22https%3A%2F%2Fcdn.poizon.com%2Fnode-common%2F28c7b3d4060e086551dcc84eca7bfbeb.png%22%2C%22hideCountdownIcon%22%3A%22https%3A%2F%2Fcdn.poizon.com%2Fnode-common%2Fa8b472c7622a53454d82745345cefa71.png%22%2C%22coordinate%22%3A%2212%2C600%22%7D&scrollbarColor=%2301C1C2&fontColor=%23FFFFFF&btd=83500&goodsCollect=goodsDetail&popId=0",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",*/
"Cookie": `duToken=${this.duToken};`
}
const reqeuestOptions = {
url: url,
method: method,
headers: headers
}
body == "" ? "" : Object.assign(reqeuestOptions, { body: JSON.stringify(body) })
//console.log(reqeuestOptions)
try {
let { body: result } = await $.httpRequest(reqeuestOptions)
return result
} catch (error) {
// $.log(`接口请求失败 `)
return { code: 0, msg: "接口请求失败" }
}
//
}
createEncryptedBody(data) {
const key2 = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANMGZPlLobHYWoZyMvHD0a6emIjEmtf5Z6Q++VIBRulxsUfYvcczjB0fMVvAnd1douKmOX4G690q9NZ6Q7z/TV8CAwEAAQ==";
const publicKeyPem = '-----BEGIN PUBLIC KEY-----\n' +
key2 +
'-----END PUBLIC KEY-----';
global["window"] = {}
const jsencrypt = require("jsencrypt")
const crypt = new jsencrypt()
crypt.setKey(publicKeyPem)
const n = this.randomStr(48, 16);
const encrypted = crypt.encrypt(n)
const enBody = CryptoJS.enc.Utf8.parse(data);
const enResult = CryptoJS.AES.encrypt(enBody, CryptoJS.enc.Utf8.parse(n.substr(10, 16)), {
iv: CryptoJS.enc.Utf8.parse(n.substr(20, 16)),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
});
//console.log(encrypted);
//console.log(hexToBase64(encrypted));
const newBody = {
data: encrypted + "" + enResult.ciphertext.toString().toUpperCase(),
};
newBody.sign = this.calculateSign(newBody);
return { enData: newBody, n };
function hexToBase64(hexString) {
const buffer = Buffer.from(hexString, 'hex');
const base64String = buffer.toString('base64');
return base64String;
}
}
randomStr(length, charset) { var tmp1, tmp2, data = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), result = []; if (((charset = charset || data["length"]), length)) for (tmp1 = 0; tmp1 < length; tmp1++)result[tmp1] = data[0 | (Math.random() * charset)]; else for (result[8] = result[13] = result[18] = result[23] = "-", result[14] = "4", tmp1 = 0; tmp1 < 36; tmp1++)result[tmp1] || ((tmp2 = 0 | (16 * Math["random"]())), (result[tmp1] = data[19 === tmp1 ? (3 & tmp2) | 8 : tmp2])); return result["join"]("") }
decryptResponseBody(result, n) {
try {
const de1 = CryptoJS.enc.Hex.parse(result),
de2 = CryptoJS.enc.Base64.stringify(de1);
const decrypted = CryptoJS.AES.decrypt(de2, CryptoJS.enc.Utf8.parse(n.substr(10, 16)), {
iv: CryptoJS.enc.Utf8.parse(n.substr(20, 16)),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
}).toString(CryptoJS.enc.Utf8);
return decrypted;
} catch (error) {
n = "987654321012345678901234567890123456789012345678"
const de1 = CryptoJS.enc.Hex.parse(result),
de2 = CryptoJS.enc.Base64.stringify(de1);
const decrypted = CryptoJS.AES.decrypt(de2, CryptoJS.enc.Utf8.parse(n.substr(10, 16)), {
iv: CryptoJS.enc.Utf8.parse(n.substr(20, 16)),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
}).toString(CryptoJS.enc.Utf8);
return decrypted;
}
}
//修复自 修改处理后 空值删除得情况 改为不删除
calculateSign(requestBody) { const sortedKeys = Object.keys(requestBody).sort(); let signContent = sortedKeys.reduce((acc, key) => { const value = requestBody[key]; if (value === null) { return acc } if (typeof value === 'object' && !Array.isArray(value)) { return acc.concat(key).concat(JSON.stringify(value)) } if (Array.isArray(value)) { if (value.length > 0) { let typeOfFirstItem = typeof value[0]; if (typeOfFirstItem === 'object') { let arrayStr = ''; value.forEach((item, index) => { arrayStr += JSON.stringify(item) + (index !== value.length - 1 ? ',' : '') }); return acc.concat(key).concat(arrayStr) } } return acc.concat(key).concat(value.toString()) } return acc.concat(key).concat(value.toString()) }, ''); const secretKey = "048a9c4943398714b356a696503d2d36"; const hashedContent = CryptoJS.MD5(signContent.concat(secretKey)).toString(); return hashedContent }
getRandomUA() {
// 生成 iOS 版本号
const iOSVersion = (Math.floor(Math.random() * (161 - 120) + 120) / 10).toFixed(1);
// 生成 AppleWebKit 版本号
const AppleWebKitVersion = `${Math.floor(Math.random() * (605 - 500) + 500)}.${Math.floor(Math.random() * 10)}.${Math.floor(Math.random() * 20)}`;
// 生成 Mobile 版本号
const mobileVersion = `${Math.floor(Math.random() * 10)}${String.fromCharCode(65 + Math.floor(Math.random() * 26))}${Math.floor(Math.random() * 10)}`;
// 生成 User-Agent 字符串
const userAgent = `Mozilla/5.0 (iPhone; CPU iPhone OS ${iOSVersion} like Mac OS X) AppleWebKit/${AppleWebKitVersion} (KHTML, like Gecko) Mobile/${mobileVersion}/duapp/5.38.6`;
return userAgent;
}
}
!(async () => {
if (!(await checkEnv())) return;
if (userList.length > 0) {
await main()
}
await $.sendMsg($.logs.join("\n"))
})()
.catch((e) => console.log(e))
.finally(() => $.done());
//********************************************************
/**
* @returns
*/
async function checkEnv() {
let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "";
if (userCookie) {
let e = envSplitor[0];
for (let o of envSplitor) {
if (userCookie.indexOf(o) > -1) {
e = o;
break;
}
}
for (let n of userCookie.split(e)) {
n && userList.push(new Task(n));
}
} else {
console.log(`未找到CK变量名【${ckName}】`);
return;
}
return console.log(`共找到${userList.length}个账号`), true; //true == !0
}
//Env Api =============================
/*
* @modifyAuthor @smallfawn
* @modifyTime 2024-03-25
* @modifyInfo 重写请求函数 在got环境或axios环境都可以请求 删除不必要的函数
*/
function Env(t, s) {
return new (class {
constructor(t, s) {
this.name = t;
this.data = null;
this.dataFile = "box.dat";
this.logs = [];
this.logSeparator = "\n";
this.startTime = new Date().getTime();
Object.assign(this, s);
this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`);
}
isNode() {
return "undefined" != typeof module && !!module.exports;
}
isQuanX() {
return "undefined" != typeof $task;
}
isSurge() {
return "undefined" != typeof $httpClient && "undefined" == typeof $loon;
}
isLoon() {
return "undefined" != typeof $loon;
}
async loaddata() {
if (!this.isNode()) return {};
this.fs = this.fs ? this.fs : require("fs");
this.path = this.path ? this.path : require("path");
const t = this.path.resolve(this.dataFile),
s = this.path.resolve(process.cwd(), this.dataFile),
e = this.fs.existsSync(t),
i = !e && this.fs.existsSync(s);
if (!e && !i) this.writeFile(this.dataFile, JSON.stringify([]));
const pt = e ? t : s;
let r = await this.readFile(pt);
return r
}
async writedata() {
if (!this.isNode()) return;
this.fs = this.fs ? this.fs : require("fs");
this.path = this.path ? this.path : require("path");
const t = this.path.resolve(this.dataFile),
s = this.path.resolve(process.cwd(), this.dataFile),
e = this.fs.existsSync(t),
i = !e && this.fs.existsSync(s);
const o = JSON.stringify(this.data, null, 2);
const pt = e ? t : i ? s : t;
await writeFile(pt, o)
}
readFile(pt) {
this.fs = this.fs ? this.fs : require("fs");
return new Promise((resolve, reject) => {
this.fs.readFile(pt, "utf8", (r, o) => {
if (r) reject({});
else o = this.isJSONString(o) ? JSON.parse(o) : o;
resolve(o);
});
});
}
writeFile(pt, o) {
this.fs = this.fs ? this.fs : require("fs");
return new Promise((resolve, reject) => {
this.fs.writeFile(pt, o, (r) => {
if (r) reject(r);
else resolve();
});
});
}
async getval(t) {
if (this.isSurge() || this.isLoon()) {
return $persistentStore.read(t);
} else if (this.isQuanX()) {
return $prefs.valueForKey(t);
} else if (this.isNode()) {
this.data = await this.loaddata();
return await this.data[t];
} else {
return (this.data && this.data[t]) || null;
}
}
async setval(t, s) {
if (this.isSurge() || this.isLoon()) {
return $persistentStore.write(t, s);
} else if (this.isQuanX()) {
return $prefs.setValueForKey(t, s);
} else if (this.isNode()) {
this.data = await this.loaddata();
this.data[s] = t;
await this.writedata();
return true;
} else {
return (this.data && this.data[s]) || null;
}
}
initRequestEnv(t) {
try {
require.resolve("got") &&
((this.requset = require("got")), (this.requestModule = "got"));
} catch (e) { }
try {
require.resolve("axios") &&
((this.requset = require("axios")), (this.requestModule = "axios"));
} catch (e) { }
this.cktough = this.cktough ? this.cktough : require("tough-cookie");
this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar();
if (t) {
t.headers = t.headers ? t.headers : {};
if (
typeof t.headers.Cookie === "undefined" &&
typeof t.cookieJar === "undefined"
) {
t.cookieJar = this.ckjar;
}
}
}
queryStr(options) {
return Object.entries(options)
.map(
([key, value]) =>
`${key}=${typeof value === "object" ? JSON.stringify(value) : value
}`
)
.join("&");
}
getURLParams(url) {
const params = {};
const queryString = url.split("?")[1];
if (queryString) {
const paramPairs = queryString.split("&");
paramPairs.forEach((pair) => {
const [key, value] = pair.split("=");
params[key] = value;
});
}
return params;
}
isJSONString(str) {
try {
return JSON.parse(str) && typeof JSON.parse(str) === "object";
} catch (e) {
return false;
}
}
isJson(obj) {
var isjson =
typeof obj == "object" &&
Object.prototype.toString.call(obj).toLowerCase() ==
"[object object]" &&
!obj.length;
return isjson;
}
async sendMsg(message) {
if (!message) return;
if ($.isNode()) {
await notify.sendNotify($.name, message);
} else {
$.msg($.name, "", message);
}
}
async httpRequest(options) {
let t = { ...options };
t.headers = t.headers || {};
if (t.params) {
t.url += "?" + this.queryStr(t.params);
}
t.method = t.method.toLowerCase();
if (t.method === "get") {
delete t.headers["Content-Type"];
delete t.headers["Content-Length"];
delete t.headers["content-type"];
delete t.headers["content-length"];
delete t.body;
} else if (t.method === "post") {
let ContentType;
if (!t.body) {
t.body = "";
} else if (typeof t.body === "string") {
ContentType = this.isJSONString(t.body)
? "application/json"
: "application/x-www-form-urlencoded";
} else if (this.isJson(t.body)) {
t.body = JSON.stringify(t.body);
ContentType = "application/json";
}
if (!t.headers["Content-Type"] && !t.headers["content-type"]) {
t.headers["Content-Type"] = ContentType;
}
}
if (this.isNode()) {
this.initRequestEnv(t);
if (this.requestModule === "axios" && t.method === "post") {
t.data = t.body;
delete t.body;
}
let httpResult;
if (this.requestModule === "got") {
httpResult = await this.requset(t);
if (this.isJSONString(httpResult.body)) {
httpResult.body = JSON.parse(httpResult.body);
}
} else if (this.requestModule === "axios") {
httpResult = await this.requset(t);
httpResult.body = httpResult.data;
}
return httpResult;
}
if (this.isQuanX()) {
t.method = t.method.toUpperCase();
return new Promise((resolve, reject) => {
$task.fetch(t).then((response) => {
if (this.isJSONString(response.body)) {
response.body = JSON.parse(response.body);
}
resolve(response);
});
});
}
}
randomNumber(length) {
const characters = "0123456789";
return Array.from(
{ length },
() => characters[Math.floor(Math.random() * characters.length)]
).join("");
}
randomString(length) {
const characters = "abcdefghijklmnopqrstuvwxyz0123456789";
return Array.from(
{ length },
() => characters[Math.floor(Math.random() * characters.length)]
).join("");
}
timeStamp() {
return new Date().getTime();
}
uuid() {
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(
/[xy]/g,
function (c) {
var r = (Math.random() * 16) | 0,
v = c == "x" ? r : (r & 0x3) | 0x8;
return v.toString(16);
}
);
}
time(t) {
let s = {
"M+": new Date().getMonth() + 1,
"d+": new Date().getDate(),
"H+": new Date().getHours(),
"m+": new Date().getMinutes(),
"s+": new Date().getSeconds(),
"q+": Math.floor((new Date().getMonth() + 3) / 3),
S: new Date().getMilliseconds(),
};
/(y+)/.test(t) &&
(t = t.replace(
RegExp.$1,
(new Date().getFullYear() + "").substr(4 - RegExp.$1.length)
));
for (let e in s)
new RegExp("(" + e + ")").test(t) &&
(t = t.replace(
RegExp.$1,
1 == RegExp.$1.length
? s[e]
: ("00" + s[e]).substr(("" + s[e]).length)
));
return t;
}
msg(s = t, e = "", i = "", o) {
const h = (t) =>
!t || (!this.isLoon() && this.isSurge())
? t
: "string" == typeof t
? this.isLoon()
? t
: this.isQuanX()
? { "open-url": t }
: void 0
: "object" == typeof t && (t["open-url"] || t["media-url"])
? this.isLoon()
? t["open-url"]
: this.isQuanX()
? t
: void 0
: void 0;
this.isMute ||
(this.isSurge() || this.isLoon()
? $notification.post(s, e, i, h(o))
: this.isQuanX() && $notify(s, e, i, h(o)));
let logs = ["", "==============📣系统通知📣=============="];
logs.push(t);
e ? logs.push(e) : "";
i ? logs.push(i) : "";
console.log(logs.join("\n"));
this.logs = this.logs.concat(logs);
}
log(...t) {
t.length > 0 && (this.logs = [...this.logs, ...t]),
console.log(t.join(this.logSeparator));
}
logErr(t, s) {
const e = !this.isSurge() && !this.isQuanX() && !this.isLoon();
e
? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack)
: this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t);
}
wait(t) {
return new Promise((s) => setTimeout(s, t));
}
done(t = {}) {
const s = new Date().getTime(),
e = (s - this.startTime) / 1e3;
this.log(
"",
`\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`
);
this.log();
if (this.isNode()) {
process.exit(1);
}
if (this.isQuanX()) {
$done(t);
}
}
})(t, s);
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。