Files
smallfawn-QLScriptPublic/kww/kww.js
2022-12-04 14:29:05 +08:00

5382 lines
188 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
微信小程序-口味王
功能:所有功能
依赖:依赖需要:@babel/parser xpath xmldom jsdom node-jsencrypt axios@v0.27.2
依赖安装方式: 高级青龙面包可以直接添加,
低级的在Linux里安装 例如docker exec -it QL bash -c "npm install xmldom"
抓包开着抓包软件打开小程序抓包链接里面的memberId https://member.kwwblcj.com/member/api/info/?userKeys=v1.0&pageName=member-info-index-search&formName=searchForm&kwwMember.memberId=xxxx
变量格式export KWW_COOKIE='xxxx&xxxx2' 多个账号用 @ 或 & 或者 换行 分割
定时:一天一次
群文件有抓取口味王ck工具
不会用加群212796668、681030097、743744614
脚本兼容: QuantumultX, Surge,Loon, JSBox, Node.js
=================================Quantumultx=========================
[task_local]
#微信小程序-口味王
0 40 0 * * * https://github.com/JDWXX/jd_job.git, tag=微信小程序-口味王, img-url=https://raw.githubusercontent.com/Orz-3/mini/master/Color/jd.png, enabled=true
=================================Loon===================================
[Script]
cron "0 40 0 * * *" script-path=https://github.com/JDWXX/jd_job.git,tag=微信小程序-口味王
===================================Surge================================
微信小程序-口味王 = type=cron,cronexp="0 40 0 * * *",wake-system=1,timeout=3600,script-path=https://github.com/JDWXX/jd_job.git
====================================小火箭=============================
微信小程序-口味王 = type=cron,script-path=https://github.com/JDWXX/jd_job.git, cronexpr="0 40 0 * * *", timeout=3600, enable=true
*/
const $ = new Env('微信小程序-口味王');
global.window = {};
global.navigator = {appName: 'nodejs'};
const JSEncrypt = require('node-jsencrypt');
const axios = require('axios');
const parser = require("@babel/parser");
const fs = require('fs');
const path = require('path');
const xpath = require('xpath')
, XmldomParser = require('xmldom').DOMParser;
const domParser = new XmldomParser({
errorHandler: {}
})
const {JSDOM} = require('jsdom');
let request = require("request");
request = request.defaults({jar: true});
const {log} = console;
const Notify = 1; //0为关闭通知1为打开通知,默认为1
const debug = 0; //0为关闭调试1为打开调试,默认为0
//////////////////////
let scriptVersion = "高级版";
//此处填写口味王账号cookie。
let kwwUid = ""
let kwwUidArr = []
// 判断环境变量里面是否有口味王ck
if (process.env.KWW_COOKIE) {
if (process.env.KWW_COOKIE.indexOf('&') > -1) {
kwwUidArr = process.env.KWW_COOKIE.split('&');
} else if (process.env.KWW_COOKIE.indexOf('@') > -1) {
kwwUidArr = process.env.KWW_COOKIE.split('@');
} else if (process.env.KWW_COOKIE.indexOf('\n') > -1) {
kwwUidArr = process.env.KWW_COOKIE.split('\n');
} else {
kwwUidArr = [process.env.KWW_COOKIE];
}
}
let data = '';
let msg = '';
let isSign = false;
let signCateId = '';
let signRulesName = '';
let signParamNo = '';
let signOrderNo = '';
let userKeys = 'v1.0';
let memberUnionid = '1';
let userCname = '';
let formName = 'searchForm';
let userAgent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.29(0x18001d36) NetType/WIFI Language/zh_CN';
let qgyUrl = 'https://89420.activity-20.m.duiba.com.cn/projectx/p85657820/index.html?appID=89420';
let mrDtUrl = 'https://89420.activity-20.m.duiba.com.cn/projectx/p244f2bb2/index.html?appID=89420&from=login&spm=89420.1.1.1';
let tjUrl = '';
let tjHtml = '';
let hdUrl = '';
let hdHtml = '';
let hdStartId = '';
let hdOrderNum = '';
let hdSubmitFlag = false;
let hdDrawFlag = false;
let yjjUrl = '';
let yjjHtml = '';
let yjjOrderId = '';
let yjjLimit = true;
let mrYdUrl = 'https://89420.activity-20.m.duiba.com.cn/projectx/p85657820/index.html?appID=89420';
let qhbUrl = 'https://89420.activity-20.m.duiba.com.cn/projectx/p725daef0/index.html?appID=89420';
let exchangeOneCodeConsumeFlag = false;
let exchangeOneCodeConsumeCredits = 880;
let qhbOrderId = '';
let qhbOrderData = '';
let gameCookie = '';
let loginUrl = '';
let qgyTaskData = [];
let qgySignFlag = false;
let isTravelling = false;
let leftEnergyBall = 0;
let qgyProcess = '';
let answerState = false;
let answerStartId = '';
let totalQuestions = 5;
let currQuestions = 1;
let questionId = '';
let answerType = 1;
let answerLists = [];
let answerListData = [];
let tokenStr = '';
let tokenKeyStr = '';
let qgyToken = '';
let isArticleReadFlag = false;
let articleReadList = [];
let taskBeforeScore = 0;
let remainingLimitTimes = 0
let remainJoinTimes = 0
let tjRecordId = ''
!(async () => {
if (typeof $request !== "undefined") {
await GetRewrite();
} else {
log(`\n\n============================================= \n脚本执行 - 北京时间(UTC+8)${new Date(
new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 +
8 * 60 * 60 * 1000).toLocaleString()} \n=============================================\n`);
log(`\n============ 当前版本:${scriptVersion} ============`)
log(`\n=================== 共找到 ${kwwUidArr.length} 个账号 ===================`)
if (debug) {
log(`【debug】 这是你的全部账号数组:\n ${kwwUidArr}`);
}
for (let index = 0; index < kwwUidArr.length; index++) {
let num = index + 1
addNotifyStr(`\n==== 开始【第 ${num} 个账号】====\n`, true)
kwwUid = kwwUidArr[index];
log(`\n==== 基本信息 ====\n`)
taskBeforeScore = 0;
await getBaseInfo();
log(`\n==== 每日签到 ====\n`)
await getSignInfo(2 * 1000);
await $.wait(2000);
await dbInterface(2 * 1000);
await $.wait(2000);
if (isSign) {
log(`账号【${num}】已经签到了`)
} else {
await signIn();
await $.wait(2000);
}
log(`\n==== 点击青果====\n`)
await activeTaskFlag(2 * 1000)
log(`\n==== 每日阅读 ====\n`)
await readInfo();
await $.wait(2000);
if (isArticleReadFlag) {
log(`账号【${num}】已经阅读了`)
} else {
await readSubmit();
await $.wait(2000);
}
log(`\n==== 竞猜足球 ====\n`);
await finishJc(num)
log(`\n==== 每日答题 ====\n`);
await finishDt(num);
await $.wait(3000)
log(`\n==== 疯狂摇奖机 ====\n`)
await finishYjj(num);
await $.wait(3000)
log(`\n==== 海岛游乐场 ====\n`)
await finishHd(num);
await $.wait(3000)
log(`\n==== 天降好礼 ====\n`)
await finishTj(num);
await $.wait(3000)
log(`\n==== 青果园 ====\n`);
await finishQgy(num);
await $.wait(3000)
log(`\n==== 抢兑红包 ====\n`);
await finishQhd(num);
await $.wait(3000)
log(`\n==== 积分查询 ====\n`)
await getMemberScore();
// await $.wait(2000);
}
}
})()
.catch((e) => log(e))
.finally(() => $.done())
/**
* 获取基础信息
* @returns {Promise<boolean>}
*/
async function getBaseInfo() {
await getMemberInfo(2 * 1000);
await $.wait(2000);
await getMemberScore();
await $.wait(2000);
await getQgyUrl();
await $.wait(2000);
await getMrYdUrl();
await $.wait(2000);
await getOtherUrl();
await $.wait(2000);
await getQhbUrl();
await $.wait(2000);
await xxsBanner();
await $.wait(2000);
await getAnswerLists();
await $.wait(2000);
await selectTaskList();
await $.wait(2000);
return true;
}
/**
* 查询会员信息
* @param timeout
* @returns {Promise<unknown>}
*/
async function getMemberInfo(timeout = 2000) {
let options = {
url: `https://member.kwwblcj.com/member/api/info/?userKeys=${userKeys}&pageName=member-info-index-search&formName=${formName}&kwwMember.memberId=${kwwUid}&kwwMember.unionid=${memberUnionid}&memberId=${kwwUid}`,
headers: {
Host: 'member.kwwblcj.com',
Connection: 'keep-alive',
'content-type': 'application/json',
'User-Agent': userAgent,
Referer: 'https://servicewechat.com/wxfb0905b0787971ad/33/page-frame.html'
},
};
if (debug) {
log(`\n【debug】=============== 这是 查询会员信息 请求 url ===============`);
log(JSON.stringify(options));
}
return new Promise((resolve) => {
$.get(options, async (error, response, data) => {
try {
if (debug) {
log(`\n\n【debug】===============这是 查询会员信息 返回data==============`);
log(data)
}
let result = JSON.parse(data);
if (result.hasOwnProperty('flag') && result.flag == "T") {
userCname = result.result.memberInfo.userCname
memberUnionid = result.result.memberInfo.unionid
log(`${userCname}】获取会员信息成功`)
} else {
log(`查询会员信息失败,原因是:${data}`)
}
} catch (e) {
log(`查询会员信息异常:${data},原因:${e}`)
} finally {
resolve();
}
}, timeout)
})
}
/**
* 获取会员积分
* @returns {Promise<unknown>}
*/
async function getMemberScore() {
return new Promise((resolve) => {
var options = {
method: 'GET',
url: 'https://member.kwwblcj.com/member/api/list/',
params: {
userKeys: userKeys,
pageName: 'select-member-score',
formName: formName,
memberId: kwwUid
},
headers: {
Host: 'member.kwwblcj.com',
Connection: 'keep-alive',
'content-type': 'application/json',
'User-Agent': userAgent,
Referer: 'https://servicewechat.com/wxfb0905b0787971ad/33/page-frame.html'
}
};
if (debug) {
log(`\n【debug】=============== 这是 请求积分 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 请求积分 返回data==============`);
log(data)
}
if (data.hasOwnProperty('flag') && data.flag == "T") {
if (taskBeforeScore == 0) {
taskBeforeScore = data.rows;
addNotifyStr(`${userCname}】当前积分:${data.rows}`, true)
} else {
var calScore = parseInt(data.rows) - parseInt(taskBeforeScore);
addNotifyStr(`${userCname}】当前积分:${data.rows},本次任务获取积分:${calScore}`, true)
}
} else {
addNotifyStr(`查询积分失败,原因是:${data.msg}`, true)
}
} catch (e) {
log(`查询积分失败异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(1, error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 获取青果地址
* @returns {Promise<unknown>}
*/
async function getQgyUrl() {
return new Promise((resolve) => {
var options = {
method: 'GET',
url: 'https://cms.kwwblcj.com/data/c00.json',
params: {T: timestampMs(), memberId: kwwUid},
headers: {
Host: 'cms.kwwblcj.com',
Connection: 'keep-alive',
'content-type': 'application/json',
'User-Agent': userAgent,
Referer: 'https://servicewechat.com/wxfb0905b0787971ad/33/page-frame.html'
}
};
if (debug) {
log(`\n【debug】=============== 这是 获取青果地址 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 获取青果地址 返回data==============`);
log(data)
}
for (var i in data.rows) {
var url = data.rows[i]["url"];
var manuscriptId = data.rows[i]["manuscriptId"];
if (url.indexOf('https') >= 0) {
qgyUrl = url;
log(`获取青果地址成功`)
return;
}
}
} catch (e) {
log(`查询青果地址异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 获取每日阅读地址
* @returns {Promise<unknown>}
*/
async function getMrYdUrl() {
return new Promise((resolve) => {
var options = {
method: 'GET',
url: 'https://cms.kwwblcj.com/data/c02.json',
params: {T: timestampMs(), memberId: kwwUid},
headers: {
Host: 'cms.kwwblcj.com',
Connection: 'keep-alive',
'content-type': 'application/json',
'User-Agent': userAgent,
Referer: 'https://servicewechat.com/wxfb0905b0787971ad/33/page-frame.html'
}
};
if (debug) {
log(`\n【debug】=============== 这是 获取每日阅读 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 获取每日阅读 返回data==============`);
log(data)
}
for (var i in data.rows) {
var url = data.rows[i]["url"];
var title = data.rows[i]["title"];
if (url.indexOf('https') >= 0 && title.indexOf('每日阅读') >= 0) {
mrYdUrl = url;
log(`获取${title}地址成功`);
return
}
}
} catch (e) {
log(`获取每日阅读异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 获取其他地址
* @returns {Promise<unknown>}
*/
async function getOtherUrl() {
return new Promise((resolve) => {
var options = {
method: 'GET',
url: 'https://cms.kwwblcj.com/data/c05.json',
params: {T: timestampMs(), memberId: kwwUid},
headers: {
Host: 'cms.kwwblcj.com',
Connection: 'keep-alive',
'content-type': 'application/json',
'User-Agent': userAgent,
Referer: 'https://servicewechat.com/wxfb0905b0787971ad/33/page-frame.html'
}
};
if (debug) {
log(`\n【debug】=============== 这是 获取其他地址 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 获取其他地址 返回data==============`);
log(data)
}
for (var i in data.rows) {
var url = data.rows[i]["url"];
var title = data.rows[i]["title"];
var manuscriptId = data.rows[i]["manuscriptId"];
if (title.indexOf('每日答题') >= 0 && url.indexOf('https') >= 0) {
mrDtUrl = url+"&from=login&spm=89420.1.1.1";
log(`获取${title}地址成功`)
} else if (title.indexOf('天降好礼') >= 0 && url.indexOf('https') >= 0) {
tjUrl = url;
log(`获取${title}地址成功`)
} else if (title.indexOf('海岛游乐场') >= 0 && url.indexOf('https') >= 0) {
hdUrl = url;
log(`获取${title}地址成功`)
} else if (title.indexOf('疯狂摇奖机') >= 0 && url.indexOf('https') >= 0) {
yjjUrl = url;
log(`获取${title}地址成功`)
}
}
} catch (e) {
log(`查询其他地址异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 获取天天抢红包地址
* @returns {Promise<unknown>}
*/
async function getQhbUrl() {
return new Promise((resolve) => {
var options = {
method: 'GET',
url: 'https://cms.kwwblcj.com/data/gdbanner.json',
params: {T: timestampMs(), memberId: kwwUid},
headers: {
Host: 'cms.kwwblcj.com',
Connection: 'keep-alive',
'content-type': 'application/json',
'User-Agent': userAgent,
Referer: 'https://servicewechat.com/wxfb0905b0787971ad/33/page-frame.html'
}
};
if (debug) {
log(`\n【debug】=============== 这是 获取天天抢红包 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 获取天天抢红包 返回data==============`);
log(data)
}
for (var i in data.rows) {
var url = data.rows[i]["url"];
var title = data.rows[i]["title"];
if (title.indexOf('天天抢红包') >= 0 && url.indexOf('https') >= 0) {
qhbUrl = url;
log(`获取${title}地址成功`)
return;
}
}
} catch (e) {
log(`获取天天抢红包异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 获取资讯
* @returns {Promise<unknown>}
*/
async function xxsBanner() {
return new Promise((resolve) => {
var options = {
method: 'GET',
url: 'https://cms.kwwblcj.com/data/xxsbanner2.json',
params: {T: timestampMs(), memberId: kwwUid},
headers: {
Host: 'cms.kwwblcj.com',
Connection: 'keep-alive',
'User-Agent': userAgent,
'content-type': 'application/json',
Referer: 'https://servicewechat.com/wxfb0905b0787971ad/34/page-frame.html',
}
};
if (debug) {
log(`\n【debug】=============== 这是 获取资讯信息 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 获取资讯信息 返回data==============`);
log(data)
}
articleReadList = data.rows;
log(`获取到${articleReadList.length}条资讯`)
} catch (e) {
log(`获取资讯信息异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 获取
* @returns {Promise<boolean>}
*/
async function getAnswerLists() {
answerLists = JSON.parse('{"1":1,"2":1,"3":1,"4":1,"5":4,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":2,"14":1,"15":2,"16":1,"17":2,"18":2,"19":1,"20":1,"21":4,"22":1,"23":4,"24":1,"25":3,"26":1,"27":4,"28":1,"29":4,"30":4,"31":1,"32":4,"33":1,"34":1,"35":1,"36":1,"37":4,"38":1,"39":3,"40":4,"41":2,"42":1,"43":2,"44":4,"45":4,"46":2,"47":1,"48":1,"49":1,"50":2,"51":4,"52":4,"53":1,"54":3,"55":3,"56":4,"57":4,"58":4,"59":1,"60":4,"61":1,"62":1,"63":1,"64":2,"65":1,"66":3,"67":1,"68":1,"69":4,"70":4,"71":4,"72":1,"73":4,"74":2,"75":4,"76":4,"77":4,"78":1,"79":2,"80":1,"81":2,"82":3,"83":3,"84":4,"85":1,"86":2,"87":3,"88":2,"89":4,"90":2,"91":4,"92":3,"93":4,"94":2,"95":3,"96":2,"97":3,"98":2,"99":4,"100":4,"101":4,"102":3,"103":4,"104":4,"105":4,"106":4}');
return true;
}
/**
* 查询任务列表
* @returns {Promise<unknown>}
*/
async function selectTaskList() {
return new Promise((resolve) => {
var options = {
method: 'GET',
url: 'https://member.kwwblcj.com/member/api/list/',
params: {
userKeys: userKeys,
pageName: 'select-task-list',
formName: formName,
memberId: kwwUid
},
headers: {
Host: 'member.kwwblcj.com',
Connection: 'keep-alive',
'content-type': 'application/json',
'User-Agent': userAgent,
Referer: 'https://servicewechat.com/wxfb0905b0787971ad/33/page-frame.html'
}
};
if (debug) {
log(`\n【debug】=============== 这是 查询任务列表 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 查询任务列表 返回data==============`);
log(data)
}
if (data.hasOwnProperty('flag') && data.flag == "T") {
for (var i in data.rows) {
var infoId = data.rows[i]['infoId'];
var ruleType = data.rows[i]['ruleType'];
var complete = data.rows[i]['complete'];
if (ruleType == "articleRead") {
isArticleReadFlag = (complete == 1) ? true : false;
}
}
log(`查询任务列表成功`)
} else {
log(`查询任务列表,原因是:${data.msg}`)
}
} catch (e) {
log(`查询任务列表异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(1, error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 获取签到信息
* @param timeout
* @returns {Promise<unknown>}
*/
async function getSignInfo(timeout = 2000) {
signCateId = '';
isSign = false;
let options = {
url: `https://member.kwwblcj.com/member/api/list/?userKeys=${userKeys}&pageName=selectSignInfo&formName=searchForm&memberId=${kwwUid}`,
headers: {
Host: 'member.kwwblcj.com',
Connection: 'keep-alive',
'content-type': 'application/json',
'User-Agent': userAgent,
Referer: 'https://servicewechat.com/wxfb0905b0787971ad/33/page-frame.html'
},
};
if (debug) {
log(`\n【debug】=============== 这是 查询签到信息 请求 url ===============`);
log(JSON.stringify(options));
}
return new Promise((resolve) => {
$.get(options, async (error, response, data) => {
try {
if (debug) {
log(`\n\n【debug】===============这是 查询签到信息 返回data==============`);
log(data)
}
let result = JSON.parse(data);
if (result.hasOwnProperty('flag') && result.flag == "T") {
var nowDate = time("yyyy-MM-dd");
for (var i in result.rows.data) {
var actionDate = result.rows.data[i]["actionDate"];
var cateId = result.rows.data[i]["cateId"];
var flag = result.rows.data[i]["flag"];
if (actionDate == nowDate) {
signCateId = cateId;
signRulesName = result.rows.data[i]["rulesName"];
signParamNo = result.rows.data[i]["paramNo"];
signOrderNo = result.rows.data[i]["orderNo"];
if (flag == 1) {
isSign = true;
} else {
isSign = false;
}
}
}
log(`查询签到信息成功`)
} else {
log(`查询签到信息失败,原因是:${data}`)
}
} catch (e) {
log(`查询签到信息异常:${data},原因:${e}`)
} finally {
resolve();
}
}, timeout)
})
}
async function activeTaskFlag(timeout = 2000) {
let options = {
url: `https://member.kwwblcj.com/member/api/list/?userKeys=${userKeys}&pageName=activeTaskFlag&formName=editForm&memberId=${kwwUid}&userCname=%7F%7F`,
headers: {
Host: 'member.kwwblcj.com',
Connection: 'keep-alive',
'content-type': 'application/json',
'User-Agent': userAgent,
Referer: 'https://servicewechat.com/wxfb0905b0787971ad/33/page-frame.html'
},
};
if (debug) {
log(`\n【debug】=============== 这是 点击青果 请求 url ===============`);
log(JSON.stringify(options));
}
return new Promise((resolve) => {
$.get(options, async (error, response, data) => {
try {
if (debug) {
log(`\n\n【debug】===============这是 点击青果 返回data==============`);
log(data)
}
let result = JSON.parse(data);
if (result.hasOwnProperty('flag') && result.flag == "T") {
log(`点击青果 ${result.rows}`)
} else {
log(`点击青果 失败,原因是:${data}`)
}
} catch (e) {
log(`点击青果 异常:${data},原因:${e}`)
} finally {
resolve();
}
}, timeout)
})
}
/**
* 查询接口
* @param timeout
* @returns {Promise<unknown>}
*/
async function dbInterface(timeout = 2000) {
let options = {
url: `https://member.kwwblcj.com/member/api/info/?userKeys=${userKeys}&pageName=dbInterface&formName=treeStatus&uid=${kwwUid}`,
headers: {
Host: 'member.kwwblcj.com',
Connection: 'keep-alive',
'content-type': 'application/json',
'User-Agent': userAgent,
Referer: 'https://servicewechat.com/wxfb0905b0787971ad/33/page-frame.html'
},
};
if (debug) {
log(`\n【debug】=============== 这是 查询接口 请求 url ===============`);
log(JSON.stringify(options));
}
return new Promise((resolve) => {
$.get(options, async (error, response, data) => {
try {
if (debug) {
log(`\n\n【debug】===============这是 查询接口 返回data==============`);
log(data)
}
let result = JSON.parse(data);
if (result.hasOwnProperty('flag') && result.flag == "T") {
log(`接口${result.msg}`)
} else {
log(`查询接口失败,原因是:${data}`)
}
} catch (e) {
log(`查询接口异常:${data},原因:${e}`)
} finally {
resolve();
}
}, timeout)
})
}
/**
* 签到
* @returns {Promise<unknown>}
*/
async function signIn() {
return new Promise((resolve) => {
var options = {
method: 'POST',
url: 'https://member.kwwblcj.com/member/api/submit/',
params: {userKeys: userKeys},
headers: {
Host: 'member.kwwblcj.com',
Connection: 'keep-alive',
'content-type': 'application/json',
'User-Agent': userAgent,
Referer: 'https://servicewechat.com/wxfb0905b0787971ad/33/page-frame.html'
},
data: {
pageName: 'AddSignSvmInfo',
formName: 'addForm',
orderNo: signOrderNo,
paramNo: signParamNo,
cateId: signCateId,
memberId: kwwUid,
memberName: userCname
}
};
if (debug) {
log(`\n【debug】=============== 这是 签到请求 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 签到请求 返回data==============`);
log(data)
}
if (data.hasOwnProperty('flag') && data.flag == "T") {
addNotifyStr(`${data.msg}${signRulesName},积分+${signParamNo}`, true)
} else {
addNotifyStr(`签到失败,原因是:${data.msg}`, true)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 阅读信息
* @returns {Promise<unknown>}
*/
async function readInfo() {
return new Promise((resolve) => {
var options = {
method: 'GET',
url: 'https://qrcode.kwwblcj.com/qrc/api/info/' + memberUnionid + '/',
params: {T: timestampMs(), memberId: kwwUid},
headers: {
Host: 'qrcode.kwwblcj.com',
Connection: 'keep-alive',
'User-Agent': userAgent,
'content-type': 'application/json',
Referer: 'https://servicewechat.com/wxfb0905b0787971ad/34/page-frame.html',
}
};
if (debug) {
log(`\n【debug】=============== 这是 阅读信息 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 阅读信息 返回data==============`);
log(data)
}
if (data.hasOwnProperty('flag') && data.flag == "T") {
log(`查询阅读信息成功`)
} else {
log(`查询阅读信息失败,原因是:${data.msg}`)
}
} catch (e) {
log(`查询阅读信息异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 提交阅读
* @returns {Promise<unknown>}
*/
async function readSubmit() {
var max = articleReadList.length - 1;
var articleTitle = articleReadList[randomInt(0, max)]['title'];
return new Promise((resolve) => {
var options = {
method: 'GET',
url: 'https://member.kwwblcj.com/member/api/list/',
params: {
userKeys: userKeys,
pageName: 'setNewsReadTaskFlag',
formName: 'addForm',
memberId: kwwUid,
userCname: userCname,
articleTitle: articleTitle
},
headers: {
Host: 'member.kwwblcj.com',
Connection: 'keep-alive',
'User-Agent': userAgent,
'content-type': 'application/json',
Referer: 'https://servicewechat.com/wxfb0905b0787971ad/34/page-frame.html',
}
};
if (debug) {
log(`\n【debug】=============== 这是 阅读提交 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 阅读提交 返回data==============`);
log(data)
}
if (data.hasOwnProperty('flag') && data.flag == "T") {
log(`${data.rows}阅读信息成功`)
addNotifyStr(`每日阅读任务完成`)
} else {
log(`阅读信息失败,原因是:${data.msg}`)
}
} catch (e) {
log(`阅读信息异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 登入
* @param redirect
* @returns {Promise<unknown>}
*/
async function loginFreePlugin(redirect) {
return new Promise((resolve) => {
var options = {
method: 'GET',
url: 'https://member.kwwblcj.com/member/api/info/',
params: {
userKeys: userKeys,
pageName: 'loginFreePlugin',
formName: 'searchForm',
uid: kwwUid,
levelCode: '1',
redirect: redirect
},
headers: {
Host: 'member.kwwblcj.com',
Connection: 'keep-alive',
'content-type': 'application/json',
'User-Agent': userAgent,
Referer: 'https://servicewechat.com/wxfb0905b0787971ad/33/page-frame.html'
}
};
axios.request(options).then(function (response) {
try {
var data = response.data;
if (data.hasOwnProperty('flag') && data.flag == 'T') {
loginUrl = data.result;
log(`登录成功,${data.msg}`)
} else {
log(`登录失败【${data.msg}`)
}
} catch (e) {
log(`登入异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 设置cookie
* @returns {Promise<unknown>}
*/
async function setCookies() {
return new Promise((resolve) => {
var host = (loginUrl.split('//')[1]).split('/')[0];
try {
request(
{
url: loginUrl,
method: "GET",
headers: {
'Host': host,
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1',
'User-Agent': userAgent,
"Accept": 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
"Sec-Fetch-Site": "none",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-User": "?1",
"Sec-Fetch-Dest": "document",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "en-us,en",
},
}, function (err, res, body) {
gameCookie = res.request.headers.cookie;
log(`转换Cookie成功`)
})
} catch (e) {
log(e)
} finally {
resolve();
}
})
}
/**
* 完成疯狂摇奖机
* @param num
* @returns {Promise<boolean>}
*/
async function finishYjj(num) {
await loginFreePlugin(yjjUrl);
await $.wait(3000)
if (loginUrl == "") {
log(`账号【${num}】登录异常,自动跳过疯狂摇奖机任务!`);
return false;
}
await setCookies();
await $.wait(3000);
if (gameCookie == "") {
log(`账号【${num}】cookies异常自动跳过疯狂摇奖机任务`);
return false;
}
var urlMatch = yjjUrl.match('([^/]+)/?$');
var baseUrl = yjjUrl.replace(urlMatch[0], '');
var activityId = getQueryString(yjjUrl, "id");
await getAjaxElement(baseUrl, activityId);
await $.wait(2000);
if (!yjjLimit) {
await getYjjHtml();
await $.wait(2000);
try {
var result = ParseYjjHtml(yjjHtml);
await getYjjToken(baseUrl, activityId, result.cid);
await $.wait(2000);
var token = yjgettoken(yjjHtml, tokenStr);
await $.wait(2000);
await doYjjJoin(baseUrl, activityId, result.cid, token);
await $.wait(3000);
if (yjjOrderId != '') {
await getYjjOrderStatus(baseUrl);
}
} catch (e) {
log(`账号【${num}】解码异常,自动跳过疯狂摇奖机任务!${e}`);
return false;
}
} else {
log(`账号【${num}】疯狂摇奖机免费次数为0自动跳过`);
return false;
}
return true;
}
/**
* 次数
* @param baseUrl
* @param activityId
* @returns {Promise<unknown>}
*/
async function getAjaxElement(baseUrl, activityId) {
return new Promise((resolve) => {
var url = baseUrl + 'ajaxElement';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'POST',
url: url,
params: {_: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
Accept: 'application/json',
'X-Requested-With': 'XMLHttpRequest',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
'Content-Type': 'application/x-www-form-urlencoded',
Origin: 'https://89420.activity-20.m.duiba.com.cn',
'User-Agent': userAgent,
Connection: 'keep-alive',
Referer: yjjUrl + '&from=login&spm=89420.1.1.1',
},
data: {
hdType: 'dev',
hdToolId: '',
preview: 'false',
actId: activityId,
adslotId: ''
}
};
if (debug) {
log(`\n【debug】=============== 这是 获取疯狂摇奖机次数 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 获取疯狂摇奖机次数 返回data==============`);
log(JSON.stringify(data))
}
if (data.hasOwnProperty('success') && data.success) {
yjjLimit = data.element.freeEmpty;
log(`获取摇奖机免费次数成功`)
} else {
log(`获取摇奖机免费次数失败【${JSON.stringify(data)}`)
}
} catch (e) {
log(`获取摇奖机免费次数异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 获取摇奖机页面
* @returns {Promise<unknown>}
*/
async function getYjjHtml() {
return new Promise((resolve) => {
let url = yjjUrl + '&from=login&spm=89420.1.1.1';
let host = (yjjUrl.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
headers: {
cookie: gameCookie,
Host: host,
Accept: '*/*',
Connection: 'keep-alive',
'User-Agent': userAgent,
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
'Accept-Encoding': 'gzip, deflate, br'
}
};
if (debug) {
log(`\n【debug】=============== 这是 疯狂摇奖机 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
if (debug) {
log(`\n【debug】=============== 这是 疯狂摇奖机 返回 data ===============`);
log(response);
}
yjjHtml = response.data;
}).catch(function (error) {
console.error(error);
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 获取token
* @param activityId
* @param consumerId
* @returns {Promise<unknown>}
*/
async function getYjjToken(baseUrl, activityId, consumerId) {
return new Promise((resolve) => {
var url = baseUrl + 'ctoken/getTokenNew';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'POST',
url: url,
headers: {
cookie: gameCookie,
Host: host,
Accept: 'application/json',
'X-Requested-With': 'XMLHttpRequest',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
'Content-Type': 'application/x-www-form-urlencoded',
Origin: 'https://89420.activity-20.m.duiba.com.cn',
'User-Agent': userAgent,
Connection: 'keep-alive',
Referer: yjjUrl + '&from=login&spm=89420.1.1.1',
},
data: {
timestamp: timestampMs(),
activityId: activityId,
activityType: 'hdtool',
consumerId: consumerId
}
};
if (debug) {
log(`\n【debug】=============== 这是 获取疯狂摇奖机token 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
tokenStr = response.data.token;
if (debug) {
log(`\n\n【debug】===============这是 获取疯狂摇奖机token 返回data==============`);
log(JSON.stringify(data))
}
log(`获取token成功`)
} catch (e) {
log(`获取token失败${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 摇奖
* @param baseUrl
* @param activityId
* @param consumerId
* @param token
* @returns {Promise<unknown>}
*/
async function doYjjJoin(baseUrl, activityId, consumerId, token) {
return new Promise((resolve) => {
var url = baseUrl + 'doJoin';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'POST',
url: url,
params: {dpm: '89420.3.1.0', activityId: activityId, _: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
Accept: 'application/json',
'X-Requested-With': 'XMLHttpRequest',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
'Content-Type': 'application/x-www-form-urlencoded',
Origin: 'https://89420.activity-20.m.duiba.com.cn',
'User-Agent': userAgent,
Connection: 'keep-alive',
Referer: yjjUrl + '&from=login&spm=89420.1.1.1',
},
data: {
actId: activityId,
oaId: activityId,
activityType: 'hdtool',
consumerId: consumerId,
token: token
}
};
if (debug) {
log(`\n【debug】=============== 这是 摇奖 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 摇奖 返回data==============`);
log(JSON.stringify(data))
}
if (data.hasOwnProperty('success') && data.success) {
yjjOrderId = data.orderId;
var needCredits = data.needCredits;
log(`摇奖成功,订单:${yjjOrderId},需要积分:${needCredits}`)
} else {
log(`摇奖失败【${JSON.stringify(data)}`)
}
} catch (e) {
log(`摇奖异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 获取顶顶那状态
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function getYjjOrderStatus(baseUrl) {
return new Promise((resolve) => {
var url = baseUrl + 'getOrderStatus';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'POST',
url: url,
params: {_: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
Accept: 'application/json',
'X-Requested-With': 'XMLHttpRequest',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
'Content-Type': 'application/x-www-form-urlencoded',
Origin: 'https://89420.activity-20.m.duiba.com.cn',
'User-Agent': userAgent,
Connection: 'keep-alive',
Referer: yjjUrl + '&from=login&spm=89420.1.1.1',
},
data: {orderId: yjjOrderId, adslotId: ''}
};
if (debug) {
log(`\n【debug】=============== 这是 摇奖状态 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 摇奖状态 返回data==============`);
log(JSON.stringify(data))
}
if (data.hasOwnProperty('success') && data.success) {
var type = data.lottery.type;
log(`摇奖成功,${type},当前积分:${data.element.myCredits},剩余次数:${data.element.freeLimit}`)
} else {
log(`摇奖失败【${JSON.stringify(data)}`)
}
} catch (e) {
log(`摇奖异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 完成海岛游乐场
* @param num
* @returns {Promise<boolean>}
*/
async function finishHd(num) {
await loginFreePlugin(hdUrl);
await $.wait(3000)
if (loginUrl == "") {
log(`账号【${num}】登录异常,自动跳过海岛游乐场任务!`);
return false;
}
await setCookies();
await $.wait(3000);
if (gameCookie == "") {
log(`账号【${num}】cookies异常自动跳过海岛游乐场任务`);
return false;
}
var urlMatch = hdUrl.match('([^/]+)/?$');
var baseUrl = hdUrl.replace(urlMatch[0], '');
var opId = getQueryString(hdUrl, "opId");
await getHdInfo(baseUrl, opId);
if (remainingLimitTimes == 0) {
log(`账号【${num}】海岛游乐场次数为0不执行`);
return false
} else {
await getHdHtml();
await $.wait(2000);
try {
var result = ParseHtmlGame(hdHtml);
var hdKey = result.key;
for (var i = 1; i <= remainingLimitTimes; i++) {
log(`开始第${i}次海岛游戏!`);
hdSubmitFlag = false;
hdDrawFlag = false;
await startHdGame(baseUrl, opId);
if (hdStartId != '') {
await getHdOrderStatus(baseUrl, opId);
await $.wait(2000);
await startHdRound(baseUrl, opId,hdStartId,"1");
await $.wait(30000);
await hdtj('1','5',hdStartId,'5',hdKey)
await $.wait(2000);
if (hdSubmitFlag) {
await hdDraw(baseUrl, opId,hdStartId,"1");
}
if (hdDrawFlag && hdSubmitFlag) {
await startHdRound(baseUrl, opId,hdStartId,"2");
await $.wait(30000);
await hdtj('2','10',hdStartId,'15',hdKey)
if (hdSubmitFlag) {
await hdDraw(baseUrl, opId,hdStartId,"2");
}
}
await $.wait(1000);
if (hdDrawFlag && hdSubmitFlag) {
await startHdRound(baseUrl, opId,hdStartId,"3");
await $.wait(30000);
await hdtj('3','15',hdStartId,'30',hdKey)
await $.wait(2000);
if (hdSubmitFlag) {
await hdDraw(baseUrl, opId,hdStartId,"3");
}
}
}
}
} catch (e) {
log(`账号【${num}】解码异常,自动跳过海岛游乐场任务!${e}`);
return false;
}
}
return true;
}
/**
* 获取海岛页面
* @returns {Promise<unknown>}
*/
async function getHdHtml() {
return new Promise((resolve) => {
let url = hdUrl + '&from=login&spm=89420.1.1.1';
let host = (hdUrl.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
headers: {
cookie: gameCookie,
Host: host,
Accept: '*/*',
Connection: 'keep-alive',
'User-Agent': userAgent,
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
'Accept-Encoding': 'gzip, deflate, br'
}
};
axios.request(options).then(function (response) {
hdHtml = response.data;
}).catch(function (error) {
console.error(error);
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 海岛游戏信息
* @param baseUrl
* @param opId
* @returns {Promise<unknown>}
*/
async function getHdInfo(baseUrl, opId) {
return new Promise((resolve) => {
let url = baseUrl + 'getInfo';
let host = (baseUrl.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {__ts__: timestampMs(), opId: opId},
headers: {
cookie: gameCookie,
Host: host,
Connection: 'keep-alive',
'User-Agent': userAgent,
'Content-Type': 'application/x-www-form-urlencoded',
Accept: '*/*',
Referer: 'https://89420.activity-20.m.duiba.com.cn/aaw/underseaGame/index?opId=202214587511596&dbnewopen&from=login&spm=89420.1.1.1',
'Accept-Language': 'en-us,en'
},
data: {}
};
if (debug) {
log(`\n【debug】=============== 这是 海岛游戏信息 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 海岛游戏信息 返回data==============`);
log(JSON.stringify(data))
}
if (data.hasOwnProperty('success') && data.success) {
remainingLimitTimes = data.data.remainingLimitTimes;
// remainingLimitTimes = data.data.remainingFreeTimes;
log(`获取海岛游戏信息成功`)
} else {
log(`获取海岛游戏信息失败【${data}`)
}
} catch (e) {
log(`海岛游戏信息异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 开始海岛游戏
* @param baseUrl
* @param opId
* @returns {Promise<unknown>}
*/
async function startHdGame(baseUrl, opId) {
return new Promise((resolve) => {
let url = baseUrl + 'start';
let host = (baseUrl.split('//')[1]).split('/')[0];
var options = {
method: 'POST',
url: url,
params: {__ts__: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
Connection: 'keep-alive',
'User-Agent': userAgent,
'Content-Type': 'application/x-www-form-urlencoded',
Accept: '*/*',
Referer: hdUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'en-us,en'
},
data: {opId: opId}
};
if (debug) {
log(`\n【debug】=============== 这是 开始海岛游戏 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 开始海岛游戏 返回data==============`);
log(JSON.stringify(data))
}
if (data.hasOwnProperty('success') && data.success) {
hdStartId = data.data.startId;
hdOrderNum = data.data.orderNum;
log(`开始海岛游戏成功,订单:${hdOrderNum}`)
} else {
log(`开始海岛游戏失败【${JSON.stringify(data)}`)
}
} catch (e) {
log(`开始海岛游戏异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 获取海岛订单
* @param baseUrl
* @param opId
* @returns {Promise<unknown>}
*/
async function getHdOrderStatus(baseUrl, opId) {
return new Promise((resolve) => {
let url = baseUrl + 'getOrderStatus';
let host = (baseUrl.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {
__ts__: timestampMs(),
opId: opId,
startId: hdStartId,
orderNum: hdOrderNum,
type: '1'
},
headers: {
cookie: gameCookie,
Host: host,
Connection: 'keep-alive',
'User-Agent': userAgent,
'Content-Type': 'application/x-www-form-urlencoded',
Accept: '*/*',
Referer: hdUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'en-us,en'
},
data: {}
};
if (debug) {
log(`\n【debug】=============== 这是 获取海岛订单状态 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 获取海岛订单状态 返回data==============`);
log(JSON.stringify(data))
}
if (data.hasOwnProperty('success') && data.success) {
log(`获取海岛订单状态成功,${data.data}`)
} else {
log(`获取海岛订单状态失败【${JSON.stringify(data)}`)
}
} catch (e) {
log(`获取海岛订单状态异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 开始
* @param baseUrl
* @param opId
* @param hdRoundIndex
* @returns {Promise<unknown>}
*/
async function startHdRound(baseUrl, opId,hdStartId,hdRoundIndex) {
return new Promise((resolve) => {
let url = baseUrl + 'startRound';
let host = (baseUrl.split('//')[1]).split('/')[0];
var options = {
method: 'POST',
url: url,
params: {__ts__: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
Connection: 'keep-alive',
'User-Agent': userAgent,
'Content-Type': 'application/x-www-form-urlencoded',
Accept: '*/*',
Referer: hdUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'en-us,en'
},
data: {opId: opId, startId: hdStartId, roundIndex: hdRoundIndex}
};
if (debug) {
log(`\n【debug】=============== 这是 开始海岛关口 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 开始海岛关口 返回data==============`);
log(JSON.stringify(data))
}
if (data.hasOwnProperty('success') && data.success) {
log(`开始第${hdRoundIndex}关成功`)
} else {
log(`开始海岛关口失败【${JSON.stringify(data)}`)
}
} catch (e) {
log(`开始海岛关口异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 海岛提交
* @param baseUrl
* @param opId
* @param hdKey
* @param hdScore
* @param hdTotalScore
* @param hdRoundIndex
* @returns {Promise<unknown>}
*/
async function hdtj(hdRoundIndex,hdScore,hdStartId,hdTotalScore,hdKey) {
hdDrawFlag = false;
return new Promise((resolve) => {
let url ='https://89420.activity-20.m.duiba.com.cn/aaw/underseaGame/submit';
let sign = md5('opId=202214587511596&roundIndex=' + hdRoundIndex + '&score=' + hdScore + '&startId=' + hdStartId + '&totalScore=' + hdTotalScore + '&key=' + hdKey)
var options = {
method: 'POST',
url: url,
data:'opId=202214587511596&startId='+ hdStartId +'&score='+hdScore+'&totalScore='+hdTotalScore+'&roundIndex='+hdRoundIndex+'&sign='+sign,
headers: {
cookie: gameCookie,
'Cache-Control': 'no-cache',
'Connection': 'Keep-Alive',
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json',
'Accept-Language': 'en-us,en',
'Host': '89420.activity-20.m.duiba.com.cn',
'Referer': 'https://89420.activity-20.m.duiba.com.cn/aaw/superSurprise/index?id=85&dbnewopen&from=login&spm=89420.1.1.1',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 MicroMessenger/7.0.4.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF',
'Accept-Encoding': 'gzip, deflate',
},
};
if (debug) {
log(`\n【debug】=============== 这是 海岛提交 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 海岛提交 返回data==============`);
log(JSON.stringify(data))}
if (data.hasOwnProperty('success') && data.success) {
log(`海岛提交成功,${data.data.rewardToolType}`)
hdSubmitFlag = true;
} else {
log(`海岛提交失败【${JSON.stringify(data)}`)
}
} catch (e) {
log(`海岛提交异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
async function hdSubmit(baseUrl, opId, hdKey,hdScore,hdTotalScore,hdRoundIndex) {
hdSubmitFlag = false;
return new Promise((resolve) => {
let url = 'https://89420.activity-20.m.duiba.com.cn/aaw/underseaGame/submit';
let host = (baseUrl.split('//')[1]).split('/')[0];
//opId=202214587511596&roundIndex={rdinx}&score={score}&startId={hdstartid}&totalScore={totalScore}&key={key}
var sign = "opId=" + opId + "&roundIndex=" + hdRoundIndex + "&score=" + hdScore + "&startId=" + hdStartId + "&totalScore=" + hdTotalScore + "&key=&" + hdKey;
sign = md5(hdKey);
var body = {
opId: opId,
startId: hdStartId,
score: hdScore,
totalScore: hdTotalScore,
roundIndex: hdRoundIndex,
};
var n = Object.keys(body);
n.sort();
for (var o = [], a = 0, r = n; a < r.length; a++) {
var i = r[a];
o.push(i + "=" + body[i])
}
o.push("key=" + hdKey);
hdKey = o.join("&");
log(sign)
sign = md5(hdKey);
log(sign)
var params = `opId=${opId}&startId=${hdStartId}&score=${hdScore}&totalScore=${hdTotalScore}&roundIndex=${hdRoundIndex}&sign=${sign}`;
log(params)
if (debug) {
log(`\n【debug】=============== 这是 海岛提交签名 ===============`);
log(sign);
}
var options = {
method: 'POST',
url: url,
//params: {__ts__: timestampMs()},
data:`opId=${opId}&startId=${hdStartId}&score=${hdScore}&totalScore=${hdTotalScore}&roundIndex=${hdRoundIndex}&sign=${sign}`,
headers: {
cookie: gameCookie,
Host: host,
Connection: 'keep-alive',
'User-Agent': userAgent,
'Content-Type': 'application/x-www-form-urlencoded',
Accept: '*/*',
'Content-Length': '108',
Referer: hdUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'en-us,en'
},
};
// if (debug) {
log(`\n【debug】=============== 这是 海岛提交 请求 url ===============`);
log(JSON.stringify(options));
// }
axios.request(options).then(function (response) {
try {
var data = response.data;
//if (debug) {
log(`\n\n【debug】===============这是 海岛提交 返回data==============`);
log(JSON.stringify(data))
//}
if (data.hasOwnProperty('success') && data.success) {
log(`海岛提交成功,${data.data.rewardToolType}`)
hdSubmitFlag = true;
} else {
log(`海岛提交失败【${JSON.stringify(data)}`)
}
} catch (e) {
log(`海岛提交异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 海岛抽奖
* @param baseUrl
* @param opId
* @param hdRoundIndex
* @returns {Promise<unknown>}
*/
async function hdDraw(baseUrl, opId,hdStartId,hdRoundIndex) {
hdDrawFlag = false;
return new Promise((resolve) => {
let url = baseUrl + 'draw';
let host = (baseUrl.split('//')[1]).split('/')[0];
var options = {
method: 'POST',
url: url,
params: {__ts__: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Origin: 'https://89420.activity-20.m.duiba.com.cn',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
'Content-Length': '49',
Referer: hdUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9'
},
data: {opId: opId, startId: hdStartId, roundIndex: hdRoundIndex}
};
if (debug) {
log(`\n【debug】=============== 这是 海岛抽奖 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 海岛抽奖 返回data==============`);
log(JSON.stringify(data))
}
if (data.hasOwnProperty('success') && data.success) {
log(`海岛抽奖成功,获得${data.data.name}`)
hdDrawFlag = true
} else {
log(`海岛抽奖失败【${JSON.stringify(data)}`)
}
} catch (e) {
log(`海岛抽奖异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 完成天降好礼
* @param num
* @returns {Promise<boolean>}
*/
async function finishTj(num) {
await loginFreePlugin(tjUrl);
await $.wait(3000)
if (loginUrl == "") {
log(`账号【${num}】登录异常,自动跳过天降好礼任务!`);
return false;
}
await setCookies();
await $.wait(3000);
if (gameCookie == "") {
log(`账号【${num}】cookies异常自动跳过天降好礼任务`);
return false;
}
var urlMatch = tjUrl.match('([^/]+)/?$');
var baseUrl = tjUrl.replace(urlMatch[0], '');
var activityId = getQueryString(tjUrl, "id");
await getTjInfo(baseUrl, activityId);
if (remainJoinTimes == 0) {
log(`账号【${num}】天降好礼免费次数为0不执行`);
return false;
} else {
await getTjHtml(activityId);
await $.wait(2000);
for (var i = 1; i <= remainJoinTimes; i++) {
log(`开始第${i}次天降好礼游戏!`);
await doTjJoin(baseUrl, activityId);
if (tjRecordId == '') {
log(`${i}次天降好礼游戏失败!`);
} else {
await $.wait(40000);
await tjSubmit(baseUrl, activityId);
await $.wait(3000);
await tjOrderStatus(baseUrl);
}
}
}
return true;
}
/**
* 获取天降好礼html
* @param activityId
* @returns {Promise<unknown>}
*/
async function getTjHtml(activityId) {
return new Promise((resolve) => {
let url = tjUrl + '&from=login&spm=89420.1.1.1';
let host = (tjUrl.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {_: timestampMs(), id: activityId},
headers: {
cookie: gameCookie,
Host: host,
Accept: '*/*',
Connection: 'keep-alive',
'User-Agent': userAgent,
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
'Accept-Encoding': 'gzip, deflate, br'
}
};
axios.request(options).then(function (response) {
tjHtml = response.data;
}).catch(function (error) {
console.error(error);
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 获取天降好礼信息
* @param baseUrl
* @param activityId
* @returns {Promise<unknown>}
*/
async function getTjInfo(baseUrl, activityId) {
return new Promise((resolve) => {
let url = baseUrl + 'getActivityInfo';
let host = (baseUrl.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {_: timestampMs(), id: activityId},
headers: {
cookie: gameCookie,
Host: host,
Accept: '*/*',
Connection: 'keep-alive',
'User-Agent': userAgent,
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
Referer: tjUrl + '&from=login&spm=89420.1.1.1',
}
};
if (debug) {
log(`\n【debug】=============== 这是 查询天降好礼信息 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 查询天降好礼信息 返回data==============`);
log(JSON.stringify(data))
}
if (data.hasOwnProperty('data') && data.data.hasOwnProperty('remainJoinTimes')) {
remainJoinTimes = data.data.remainFreeJoinTimes;//免费次数
// remainJoinTimes = data.data.remainJoinTimes;
log(`查询天降好礼信息成功`)
} else {
log(`查询天降好礼信息失败:${JSON.stringify(data)}`)
}
} catch (e) {
log(`查询天降好礼信息异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 开始天降好礼
* @param baseUrl
* @param activityId
* @returns {Promise<unknown>}
*/
async function doTjJoin(baseUrl, activityId) {
tjRecordId = '';
return new Promise((resolve) => {
let url = baseUrl + 'doJoin';
let host = (baseUrl.split('//')[1]).split('/')[0];
var options = {
method: 'POST',
url: url,
params: {_: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Origin: 'https://89420.activity-20.m.duiba.com.cn',
Connection: 'keep-alive',
Accept: 'application/json',
'User-Agent': userAgent,
Referer: tjUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'en-us,en'
},
data: "id=" + activityId
};
if (debug) {
log(`\n【debug】=============== 这是 开始天降好礼游戏 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 开始天降好礼游戏 返回data==============`);
log(data)
}
if (data.hasOwnProperty('data') && data.data.hasOwnProperty('recordId')) {
tjRecordId = data.data.recordId;
log(`开始天降好礼游戏成功${data.desc}`)
} else {
log(`开始天降好礼游戏失败:${JSON.stringify(data)}`)
}
} catch (e) {
log(`开始天降好礼游戏异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 天降提交
* @param baseUrl
* @param activityId
* @returns {Promise<unknown>}
*/
async function tjSubmit(baseUrl, activityId) {
const jsencrypt = new JSEncrypt();
return new Promise((resolve) => {
let url = baseUrl + 'submit';
let host = (baseUrl.split('//')[1]).split('/')[0];
var timestamp = timestampMs();
var score = randomInt(20, 25) + "";
var sign = md5("".concat(score).concat(timestamp).concat(timestamp.toString(16)));
var key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1JdBGmK6g6yj3w5YDNCvDL2SjnJMSUExcfYY9fOd2ZOTyzh6suMfR5vBAyBGsolKUmUqh6blqOeNApSKJhkEWMhxG3eERZZYwmtUCRkH1WDQkA/dSuBOnFHQ4sjoMdTuv80j5TNVMtV7qDVEp0XF+muYLuA3tXGgrYVQu8iLAH0kqr9T2u/a6We8qhgvE6ddKxMLyEz3sRnWShioTl/FmjaqCiU3NHNPL8DztEnpsGreq66vp4wPG8Q6UfGHdDiDx+/xJrYDkfnoX0u/OpSxqL8sCHvrmj8fHlptnwy2sgwhREyChWH1JZLV2RWJhOJ63PfnlH7BvqLke2qWLM9YAwIDAQAB";
jsencrypt.setPublicKey(key);
var result_encrypt = jsencrypt.encrypt(score);
var options = {
method: 'POST',
url: url,
params: {_: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/json',
Origin: 'https://89420.activity-20.m.duiba.com.cn',
Connection: 'keep-alive',
Accept: 'application/json',
'User-Agent': userAgent,
Referer: tjUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9'
},
data: {
activityId: activityId,
recordId: tjRecordId,
score: result_encrypt,
timestamp: timestamp,
sign: sign
}
};
if (debug) {
log(`\n【debug】=============== 这是 提交天降好礼游戏 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 提交天降好礼游戏 返回data==============`);
log(JSON.stringify(data))
}
if (data.hasOwnProperty('data') && data.data.hasOwnProperty('recordId')) {
log(`提交天降好礼游戏${data.desc},当前积分:${data.data.currentScore}`)
} else {
log(`提交天降好礼游戏失败:${JSON.stringify(data)}`)
}
} catch (e) {
log(`提交天降好礼游戏异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 天降好礼奖励
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function tjOrderStatus(baseUrl) {
return new Promise((resolve) => {
let url = baseUrl + 'joinRecordStatus';
let host = (baseUrl.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {_: timestampMs(), id: tjRecordId},
headers: {
cookie: gameCookie,
Host: host,
Accept: '*/*',
Connection: 'keep-alive',
'User-Agent': userAgent,
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
Referer: tjUrl + '&from=login&spm=89420.1.1.1',
}
};
if (debug) {
log(`\n【debug】=============== 这是 查询天降好礼奖励 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 查询天降好礼奖励 返回data==============`);
log(JSON.stringify(data))
}
if (data.hasOwnProperty('data') && data.data.hasOwnProperty('exchangeStatus')) {
if (data.data.exchangeStatus == 3) {
log(`本次游戏奖励${data.data.prizeInfo.prizeName}`)
}
} else {
log(`查询天降好礼奖励失败:${JSON.stringify(data)}`)
}
} catch (e) {
log(`查询天降好礼奖励异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 完成青果园
* @param num
* @returns {Promise<boolean>}
*/
async function finishQgy(num) {
await loginFreePlugin(qgyUrl);
await $.wait(3000)
if (loginUrl == "") {
log(`账号【${num}】登录青果园异常,自动跳过任务!`);
return false;
}
await setCookies();
await $.wait(3000);
if (gameCookie == "") {
log(`账号【${num}】cookies异常自动跳过任务`);
return false;
}
var urlMatch = qgyUrl.match('([^/]+)/?$');
var baseUrl = qgyUrl.replace(urlMatch[0], '');
await getTokenKeyStr(baseUrl);
await $.wait(2000);
await getQgyInfo(baseUrl);
await getTokenStr(baseUrl);
await $.wait(2000);
await qgyCheckQuery(baseUrl);
await $.wait(2000);
if (qgySignFlag) {
log(`账号【${num}】青果园已经签到了!`);
} else {
try {
await getTokenStr(baseUrl);
await $.wait(2000);
qgyToken = dealToken(tokenStr, tokenKeyStr);
await $.wait(2000);
await qgyCreateItem(baseUrl, qgyToken)
await delay();
await getTokenStr(baseUrl);
await $.wait(2000);
qgyToken = dealToken(tokenStr, tokenKeyStr);
await qgySign(baseUrl, qgyToken);
await getTokenStr(baseUrl);
await $.wait(2000);
qgyToken = dealToken(tokenStr, tokenKeyStr);
if(currentStatusHaveMillis == currentStatusNeedMillis){
await collectCoconut(baseUrl, qgyToken)
}
} catch (e) {
log(`账号【${num}】青果园签到异常!${e}`);
}
}
await queryQgyTask(baseUrl);
if (qgyTaskData.length == 0) {
log(`账号【${num}】获取青果园任务异常!`);
} else {
for (var i in qgyTaskData) {
var id = qgyTaskData[i]["id"];
var taskCode = qgyTaskData[i]["code"];
var title = qgyTaskData[i]["title"];
var taskStatus = parseInt(qgyTaskData[i]["taskStatus"]);
if (taskStatus == 2) {
log(`任务【${title}】已经完成了!`);
} else {
switch (id) {
case 'y1z0wktv':
//出门旅行
if (!isTravelling) {
try {
log(`准备去完成【${title}`);
await getTokenStr(baseUrl);
await $.wait(2000);
qgyToken = dealToken(tokenStr, tokenKeyStr);
await $.wait(2000);
await startTravel(baseUrl, qgyToken);
await $.wait(2000);
} catch (e) {
log(`账号【${num}】青果园旅行异常!${e}`);
}
} else {
log(`正在旅行中....`);
}
break;
case '9pc7awxr':
case 'fn473yer':
case '494cc96q':
case 'qyksf6pq':
case 'ozzl0eqx':
case 'dnv1dbct':
case 'yaavhjoi':
//完成任务
log(`准备去完成【${title}`);
try {
await getTokenStr(baseUrl);
await $.wait(2000);
qgyToken = dealToken(tokenStr, tokenKeyStr);
await $.wait(2000);
await finishBrowseInfoTask(baseUrl, qgyToken, taskCode, title);
await $.wait(2000);
await newRewardInfo(baseUrl);
} catch (e) {
log(`账号【${num}】青果园${title}异常!${e}`);
}
break;
default:
log(`${title}】不支持自动完成!`)
break;
}
}
}
}
if (qgyProcess !== 'NaN%') {
log('====能量加速====')
if (leftEnergyBall > 0) {
for (var i = 1; i <= leftEnergyBall; i++) {
log(`开始第${i}次能量加速!`);
try {
await getTokenStr(baseUrl);
await $.wait(2000);
qgyToken = dealToken(tokenStr, tokenKeyStr);
await useEnergyBall(baseUrl, qgyToken)
} catch (e) {
log(`账号【${num}】青果园能量加速异常!${e}`);
}
}
} else {
log('能量不足,跳过加速')
}
} else {
log('先去种植把!')
}
return true;
}
/**
* 能力加速
* @param baseUrl
* @param token
* @returns {Promise<unknown>}
*/
async function useEnergyBall(baseUrl, token) {
return new Promise((resolve) => {
var url = baseUrl + 'game/useEnergyBall.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'POST',
url: url,
params: {_t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Origin: 'https://89420.activity-20.m.duiba.com.cn',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: qgyUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9'
},
data: {
token: token,
user_type: '1',
is_from_share: '1',
_t: timestampMs()
}
};
if (debug) {
log(`\n【debug】=============== 这是 能量加速 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 能量加速 返回data==============`);
log(JSON.stringify(data))
}
log(`能量加速:${data.success}`)
} catch (e) {
log(`能量加速失败,原因:${data.message}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
async function collectCoconut(baseUrl, token) {
return new Promise((resolve) => {
var url = baseUrl + 'game/collectCoconut.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'POST',
url: url,
params: {_t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Origin: 'https://89420.activity-20.m.duiba.com.cn',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: qgyUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9'
},
data: {
token: token,
user_type: '1',
is_from_share: '1',
_t: timestampMs()
}
};
if (debug) {
log(`\n【debug】=============== 这是 果园收取 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 果园收取 返回data==============`);
log(JSON.stringify(data))
}
log(`果园收取:${data.data.quantity}`)
} catch (e) {
log(`果园收取失败,原因:${data.message}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 获取信息
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function getQgyInfo(baseUrl) {
return new Promise(async(resolve) => {
var url = baseUrl + 'game/index.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {user_type: '1', is_from_share: '1', _t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: qgyUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9'
},
data: {}
};
if (debug) {
log(`\n【debug】=============== 这是 查询青果园信息 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(async function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 查询青果园信息 返回data==============`);
log(JSON.stringify(data))
}
if (data.hasOwnProperty('data') && data.data.hasOwnProperty('treeInfo')) {
currentStatusHaveMillis = data.data.treeInfo.currentStatusHaveMillis;
currentStatusNeedMillis = data.data.treeInfo.currentStatusNeedMillis;
isTravelling = data.data.isTravelling;
leftEnergyBall = data.data.leftEnergyBall
qgyProcess = ((currentStatusHaveMillis / currentStatusNeedMillis) * 100).toFixed(2) + "%"
log(`查询青果园信息成功,当前进度:${qgyProcess},能量:${leftEnergyBall}`)
} else {
log(`查询青果园信息失败:${JSON.stringify(data)}`)
}
} catch (e) {
log(`查询青果园信息异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 青果园签到检查
* @returns {Promise<unknown>}
*/
async function qgyCheckQuery(baseUrl) {
qgySignFlag = false;
return new Promise((resolve) => {
var url = baseUrl + 'checkin_1/query.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {intervalType: '0', user_type: '1', is_from_share: '1', _t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: qgyUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
},
data: {}
};
if (debug) {
log(`\n【debug】=============== 这是 查询青果园签到状态 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 查询青果园签到状态 返回data==============`);
log(JSON.stringify(data))
}
qgySignFlag = data.data.todaySign;
log(`查询青果园签到状态成功`)
} catch (e) {
log(`查询青果园签到状态异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 创建
* @param baseUrl
* @param token
* @returns {Promise<unknown>}
*/
async function qgyCreateItem(baseUrl, token) {
return new Promise((resolve) => {
var url = baseUrl + 'inviteJoinTask/createItem.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'POST',
url: url,
params: {_t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Origin: 'https://89420.activity-20.m.duiba.com.cn',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: qgyUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9'
},
data: {token: token, user_type: '1', is_from_share: '1', _t: timestampMs()}
};
if (debug) {
log(`\n【debug】=============== 这是 青果园首次进入 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 青果园首次进入 返回data==============`);
log(JSON.stringify(data))
}
var assistItemId = data.data.assistItemId;
log(`青果园首次进入成功,${assistItemId}`)
} catch (e) {
log(`青果园首次进入异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 青果园签到
* @param baseUrl
* @param token
* @returns {Promise<unknown>}
*/
async function qgySign(baseUrl, token) {
return new Promise((resolve) => {
var url = baseUrl + 'checkin_1/doSign.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'POST',
url: url,
params: {_t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
Connection: 'keep-alive',
'User-Agent': userAgent,
'Content-Type': 'application/x-www-form-urlencoded',
Accept: '*/*',
Referer: qgyUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'en-us,en'
},
data: {token: token, user_type: '0', is_from_share: '1', _t: timestampMs()}
};
if (debug) {
log(`\n【debug】=============== 这是 青果园签到 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 青果园签到 返回data==============`);
log(JSON.stringify(data))
}
if (data.hasOwnProperty('data') && data.data.hasOwnProperty('options')) {
qgySignFlag = true;
log(`青果园签到成功,${data.data.options[0].optionName}`)
} else {
log(`青果园签到失败:${JSON.stringify(data)},原因:${e}`)
}
} catch (e) {
log(`青果园签到异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 查询青果园任务
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function queryQgyTask(baseUrl) {
qgyTaskData = [];
var url = baseUrl + 'customTask1/queryTasks.do';
var host = (url.split('//')[1]).split('/')[0];
return new Promise((resolve) => {
var options = {
method: 'GET',
url: url,
params: {user_type: '1', is_from_share: '1', _t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: qgyUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
'Accept-Encoding': 'gzip, deflate, br'
},
data: {}
};
if (debug) {
log(`\n【debug】=============== 这是 获取请果园任务 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 获取请果园任务 返回data==============`);
log(JSON.stringify(data))
}
log(`获取请果园任务:${data.success}`)
qgyTaskData = data.data.item;
} catch (e) {
log(`获取请果园任务异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 完成青果园任务
* @param baseUrl
* @param token
* @param taskCode
* @param taskTitle
* @returns {Promise<unknown>}
*/
async function finishBrowseInfoTask(baseUrl, token, taskCode, taskTitle) {
return new Promise((resolve) => {
var url = baseUrl + 'customTask1/finishBrowseInfoTask.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'POST',
url: url,
params: {_t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Origin: 'https://89420.activity-20.m.duiba.com.cn',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: qgyUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9'
},
data: {
taskCode: taskCode,
token: token,
user_type: '1',
is_from_share: '1',
_t: timestampMs()
}
};
if (debug) {
log(`\n【debug】=============== 这是 完成青果园任务 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 完成青果园任务 返回data==============`);
log(JSON.stringify(data))
}
if (data.hasOwnProperty('success') && data.success) {
log(`完成${taskTitle}任务:${data.success},${data.data.reward}`)
} else {
log(`完成${taskTitle}任务失败:${data.message}`)
}
} catch (e) {
log(`完成任务异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 领取奖励信息
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function newRewardInfo(baseUrl) {
return new Promise((resolve) => {
var url = baseUrl + 'customTask1/newRewardInfo.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {user_type: '1', is_from_share: '1', _t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: qgyUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
},
data: {}
};
if (debug) {
log(`\n【debug】=============== 这是 领取奖励信息 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 领取奖励信息 返回data==============`);
log(JSON.stringify(data))
}
log(`领取奖励信息:${data.success}`)
} catch (e) {
log(`领取奖励信息:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 获取tokenKey
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function getTokenKeyStr(baseUrl) {
return new Promise((resolve) => {
var url = baseUrl + 'getTokenKey';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {_t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
Accept: '*/*',
Connection: 'keep-alive',
'User-Agent': userAgent,
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
Referer: baseUrl + 'index.html?appID=89420&from=login&spm=89420.1.1.1',
}
};
if (debug) {
log(`\n【debug】=============== 这是 获取tokenKey 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
tokenKeyStr = response.data;
if (debug) {
log(`\n\n【debug】===============这是 获取tokenKey 返回data==============`);
log(JSON.stringify(data))
}
log(`获取tokenKey成功`)
} catch (e) {
log(`获取tokenKey失败${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 获取token
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function getTokenStr(baseUrl) {
return new Promise((resolve) => {
var url = baseUrl + 'getToken';
var host = (url.split('//')[1]).split('/')[0];
const options = {
method: 'GET',
url: url,
params: {_t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: baseUrl + '/index.html?appID=89420&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
'Accept-Encoding': 'gzip, deflate, br'
},
data: {}
};
if (debug) {
log(`\n【debug】=============== 这是 获取token 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
tokenStr = response.data.data;
if (debug) {
log(`\n\n【debug】===============这是 获取token 返回data==============`);
log(JSON.stringify(response.data))
}
log(`获取token成功`)
} catch (e) {
log(`获取token失败${JSON.stringify(response.data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 开始旅行
* @param baseUrl
* @param token
* @returns {Promise<unknown>}
*/
async function startTravel(baseUrl, token) {
return new Promise((resolve) => {
var url = baseUrl + 'customTask1/startTravel.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'POST',
url: url,
params: {_t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Origin: 'https://89420.activity-20.m.duiba.com.cn',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: qgyUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9'
},
data: {token: token, user_type: '1', is_from_share: '1', _t: timestampMs()}
};
if (debug) {
log(`\n【debug】=============== 这是 开始旅行 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 开始旅行 返回data==============`);
log(JSON.stringify(data))
}
log(`开始旅行:${data.success}`)
} catch (e) {
log(`开始旅行失败:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 完成抢兑
* @param num
* @returns {Promise<boolean>}
*/
async function finishQhd(num) {
await loginFreePlugin(qhbUrl);
await $.wait(3000)
if (loginUrl == "") {
log(`账号【${num}】登录抢红包异常,自动跳过任务!`);
return false;
}
await setCookies();
await $.wait(3000);
if (gameCookie == "") {
log(`账号【${num}】cookies异常自动跳过任务`);
return false;
}
var urlMatch = qhbUrl.match('([^/]+)/?$');
var baseUrl = qhbUrl.replace(urlMatch[0], '');
await qhbHistory(baseUrl);
await $.wait(2000);
await qhbIndex(baseUrl);
await $.wait(2000);
await exchangeInfo(baseUrl);
await $.wait(2000);
if (!exchangeOneCodeConsumeFlag) {
log(`账号【${num}】当期已经兑换或积分不足不再执行兑换!`);
return false;
}
await getQhbTokenKey(baseUrl);
await $.wait(1000);
await getQhbToken(baseUrl);
await $.wait(1000);
try {
var qhbToken = dealToken(tokenStr, tokenKeyStr);
await $.wait(2000);
await qhbExchange(baseUrl, qhbToken)
if (qhbOrderId == '') {
log(`账号【${num}】抢红包兑换订单失败!`);
return false;
}
await $.wait(2000);
await qhbCreditsCost(baseUrl);
await $.wait(4000);
if (qhbOrderData != '') {
await qhbOrderStatus(baseUrl);
await $.wait(2000);
await getQhbToken(baseUrl);
await $.wait(1000);
var qhbToken = dealToken(tokenStr, tokenKeyStr);
await $.wait(2000);
await qhbCode(baseUrl, qhbToken);
}
} catch (e) {
log(`账号【${num}】解码失败,不进行兑换!${e}`);
return false;
}
return true;
}
/**
* 抢红包记录
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function qhbHistory(baseUrl) {
return new Promise((resolve) => {
var url = baseUrl + 'game/moneyLogList.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {
pageNo: '1',
pageSize: '10',
user_type: '1',
is_from_share: '1',
_t: timestampMs()
},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: qhbUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
},
data: {}
};
if (debug) {
log(`\n【debug】=============== 这是 抢红包记录 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 抢红包记录 返回data==============`);
log(JSON.stringify(data))
}
if (data.hasOwnProperty('success') && data.success) {
var myTotalMoney = (data.data.myTotalMoney / 100).toFixed(2);
var message = `获得总金额:${myTotalMoney}`
if (data.data.hasOwnProperty('list') && data.data.list.length > 0) {
var cycle = data['data']['list'][0]['cycle']
var yesDate = getYestoday();
if (cycle == yesDate) {
var codeList = data['data']['list'][0]['codeList'][0]
var money = codeList.money / 100
message += `${cycle}${codeList.level}等奖,红包:${money.toFixed(2)}`
} else {
message += `昨日未参与`;
}
addNotifyStr(message, true);
}
} else {
log(`抢红包记录失败:${data.message}`)
}
} catch (e) {
log(`抢红包记录异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 抢红包首页
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function qhbIndex(baseUrl) {
return new Promise((resolve) => {
var url = baseUrl + 'game/index.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {
kww_user_source: '4',
kww_user_type: '0',
user_type: '1',
is_from_share: '1',
_t: timestampMs()
},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: qhbUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
},
data: {}
};
if (debug) {
log(`\n【debug】=============== 这是 抢红包首页 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 抢红包首页 返回data==============`);
log(JSON.stringify(data))
}
if (data.hasOwnProperty('success') && data.success) {
var cycleStartExchangeTime = data.data.cycleStartExchangeTime
var cycleEndExchangeTime = data.data.cycleEndExchangeTime
var cycle = data.data.currentCycleInfo.cycle
var startOpenTimestamp = getLocalTime(data.data.currentCycleInfo.startOpenTimestamp)
var totalAmount = data.data.currentCycleInfo.totalAmount / 100
var codeCount = data.data.currentCycleInfo.totalCodeCountLimit - data.data.currentCycleInfo.totalCodeCount
log(`当期抢红包时间范围:${cycleStartExchangeTime}${cycleEndExchangeTime}`)
log(`${cycle}期,奖池金额:${totalAmount},剩余红包码:${codeCount},开奖时间:${startOpenTimestamp}`)
} else {
log(`抢红包首页失败:${data.message}`)
}
} catch (e) {
log(`抢红包首页异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
function getLocalTime(str) {
return new Date(parseInt(str)).toLocaleString().replace(/:d{1,2}$/, ' ');
}
/**
* 抢兑红包信息
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function exchangeInfo(baseUrl) {
exchangeOneCodeConsumeFlag = false;
return new Promise((resolve) => {
var url = baseUrl + 'game/exchangeInfo.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {user_type: '1', is_from_share: '1', _t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: qhbUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
},
data: {}
};
if (debug) {
log(`\n【debug】=============== 这是 抢红包活动信息 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 抢红包活动信息 返回data==============`);
log(JSON.stringify(data))
}
if (data.hasOwnProperty('success') && data.success) {
exchangeOneCodeConsumeCredits = data.data.exchangeOneCodeConsumeCredits
var leftCredits = data.data.leftCredits
var haveExchangeCodeCount = data.data.haveExchangeCodeCount
if (leftCredits >= exchangeOneCodeConsumeCredits && haveExchangeCodeCount == 0) {
exchangeOneCodeConsumeFlag = true
}
} else {
log(`抢红包活动信息失败:${data.message}`)
}
} catch (e) {
log(`抢红包活动信息异常:${JSON.stringify(data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
async function getjcTokenKey() {
return new Promise((resolve) => {
var url = 'https://89420.activity-20.m.duiba.com.cn/projectx/p15fbb34c/getTokenKey?';
var options = {
method: 'GET',
url: url,
params: {_t: timestampMs()},
headers: {
cookie: gameCookie,
Host: '89420.activity-20.m.duiba.com.cn',
Accept: '*/*',
Connection: 'keep-alive',
'User-Agent': userAgent,
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
}
};
if (debug) {
log(`\n【debug】=============== 这是 竞猜tokenKey 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
tokenKeyStr = response.data;
if (debug) {
log(`\n【debug】===============这是 竞猜tokenKey 返回data==============`);
log(tokenKeyStr)
}
log(`获取竞猜tokenKey成功`)
} catch (e) {
log(`获取竞猜tokenKey失败${tokenKeyStr},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 获取抢红包token
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function getjcToken(baseUrl) {
return new Promise((resolve) => {
var url = 'https://89420.activity-20.m.duiba.com.cn/projectx/p15fbb34c/getToken';
var options = {
method: 'GET',
url: url,
params: {_t: timestampMs()},
headers: {
cookie: gameCookie,
Host: '89420.activity-20.m.duiba.com.cn',
'Content-Type': 'application/x-www-form-urlencoded',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: qhbUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
},
data: {}
};
if (debug) {
log(`\n【debug】=============== 这是 竞猜token 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
tokenStr = response.data.data;
if (debug) {
log(`\n【debug】===============这是 竞猜token 返回data==============`);
log(response.data)
}
log(`获取竞猜token成功`)
} catch (e) {
log(`获取竞猜token失败${JSON.stringify(response.data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 获取抢红包tokenkey
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function getQhbTokenKey(baseUrl) {
return new Promise((resolve) => {
var url = baseUrl + 'getTokenKey';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {_t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
Accept: '*/*',
Connection: 'keep-alive',
'User-Agent': userAgent,
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
Referer: qhbUrl + '&from=login&spm=89420.1.1.1',
}
};
if (debug) {
log(`\n【debug】=============== 这是 获取抢红包tokenKey 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
tokenKeyStr = response.data;
if (debug) {
log(`\n【debug】===============这是 获取抢红包tokenKey 返回data==============`);
log(tokenKeyStr)
}
log(`获取抢红包tokenKey成功`)
} catch (e) {
log(`获取抢红包tokenKey失败${tokenKeyStr},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 获取抢红包token
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function getQhbToken(baseUrl) {
return new Promise((resolve) => {
var url = baseUrl + 'getToken';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {_t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: qhbUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
},
data: {}
};
if (debug) {
log(`\n【debug】=============== 这是 获取抢红包token 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
tokenStr = response.data.data;
if (debug) {
log(`\n【debug】===============这是 获取抢红包token 返回data==============`);
log(response.data)
}
log(`获取抢红包token成功`)
} catch (e) {
log(`获取抢红包token失败${JSON.stringify(response.data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 抢红包提交
* @param baseUrl
* @param token
* @returns {Promise<unknown>}
*/
async function qhbExchange(baseUrl, token) {
return new Promise((resolve) => {
var url = baseUrl + 'game/getExchangeOrderId.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'POST',
url: url,
params: {_t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Origin: 'https://89420.activity-20.m.duiba.com.cn',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: qhbUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9'
},
data: {
exchangeOneCodeConsumeCredits: exchangeOneCodeConsumeCredits,
exchangeCodeCount: '1',
token: token,
user_type: '1',
is_from_share: '1',
_t: timestampMs()
}
};
if (debug) {
log(`\n【debug】=============== 这是 抢红包提交 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n【debug】===============这是 抢红包提交 返回data==============`);
log(response.data)
}
if (data.hasOwnProperty('success') && data.success) {
qhbOrderId = data.data.orderId
log(`抢红包活动提交成功:${qhbOrderId}`)
} else {
log(`抢红包活动提交失败:${JSON.stringify(response.data)}`)
}
} catch (e) {
log(`抢红包活动提交异常:${JSON.stringify(response.data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 抢红包扣积分
* @returns {Promise<unknown>}
*/
async function qhbCreditsCost(baseUrl) {
return new Promise((resolve) => {
var url = baseUrl + 'credits/creditsCost.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'POST',
url: url,
params: {_t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Origin: 'https://89420.activity-20.m.duiba.com.cn',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: qhbUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9'
},
data: {
toPlaywayId: 'game',
toActionId: 'exchange',
desc: 'exchange_consume_credits_desc',
credits: exchangeOneCodeConsumeCredits,
orderId: qhbOrderId,
user_type: '1',
is_from_share: '1',
_t: timestampMs()
}
};
if (debug) {
log(`\n【debug】=============== 这是 抢红包扣积分 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n【debug】===============这是 抢红包扣积分 返回data==============`);
log(response.data)
}
if (data.hasOwnProperty('success') && data.success) {
qhbOrderData = data.data
log(`抢红包扣积分成功:${qhbOrderData}`)
} else {
log(`抢红包扣积分失败:${JSON.stringify(response.data)}`)
}
} catch (e) {
log(`抢红包扣积分异常:${JSON.stringify(response.data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 状态
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function qhbOrderStatus(baseUrl) {
return new Promise((resolve) => {
var url = baseUrl + 'credits/queryStatus.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {
ticketNum: qhbOrderData,
user_type: '1',
is_from_share: '1',
_t: timestampMs()
},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: 'https://89420.activity-20.m.duiba.com.cn/projectx/p725daef0/index.html?appID=89420&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
},
data: {}
};
if (debug) {
log(`\n【debug】=============== 这是 抢红包订单状态 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n【debug】===============这是 抢红包订单状态 返回data==============`);
log(response.data)
}
if (data.hasOwnProperty('success') && data.success) {
if (data.data == 1) {
log(`抢红包订单状态正常`)
} else {
log(`抢红包订单状态异常`)
}
} else {
log(`抢红包订单状态失败:${JSON.stringify(response.data)}`)
}
} catch (e) {
log(`抢红包订单状态异常:${JSON.stringify(response.data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 查询兑换码
* @param baseUrl
* @param token
* @returns {Promise<unknown>}
*/
async function qhbCode(baseUrl, token) {
return new Promise((resolve) => {
var url = baseUrl + 'game/exchange.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'POST',
url: url,
params: {_t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Origin: 'https://89420.activity-20.m.duiba.com.cn',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: 'https://89420.activity-20.m.duiba.com.cn/projectx/p725daef0/index.html?appID=89420&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9'
},
data: {
ticket: qhbOrderData,
exchangeCodeCount: '1',
exchangeOneCodeConsumeCredits: exchangeOneCodeConsumeCredits,
token: token,
user_type: '1',
is_from_share: '1',
_t: timestampMs()
}
};
if (debug) {
log(`\n【debug】=============== 这是 红包码查询 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n【debug】===============这是 红包码查询 返回data==============`);
log(response.data)
}
if (data.hasOwnProperty('success') && data.success) {
addNotifyStr(`抢红包兑换成功,兑换码:${data.data.myNewCodeList[0]['code']}`, true)
} else {
log(`红包码查询失败:${JSON.stringify(response.data)}`)
}
} catch (e) {
log(`红包码查询异常:${JSON.stringify(response.data)},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 完成答题
* @param num
* @returns {Promise<boolean>}
*/
async function finishDt(num) {
await loginFreePlugin(mrDtUrl);
await $.wait(3000)
if (loginUrl == "") {
log(`账号【${num}】登录异常,自动跳过答题!`);
return false;
}
await setCookies();
await $.wait(3000);
if (gameCookie == "") {
log(`账号【${num}】cookies异常自动跳过答题`);
return false;
}
var urlMatch = mrDtUrl.match('([^/]+)/?$');
var baseUrl = mrDtUrl.replace(urlMatch[0], '');
await answerInfo(baseUrl);
await $.wait(3000);
if (answerState) {
log(`账号【${num}】答题已经完成了!`)
} else {
await answerStart(baseUrl);
await $.wait(3000);
if (answerStartId == '') {
log(`账号【${num}${answerStartId}答题开始失败,自动跳过!`)
return false;
} else {
await getQuestion(baseUrl);
await $.wait(2000);
await answerSubmit(baseUrl);
await $.wait(3000);
for (var i = currQuestions; i <= totalQuestions; i++) {
log(`开始第${currQuestions}次答题`);
await getQuestion(baseUrl);
await $.wait(2000);
await answerSubmit(baseUrl);
await $.wait(3000);
}
await complete(baseUrl);
await $.wait(3000);
await answerPage(baseUrl);
await $.wait(3000);
}
}
return true;
}
/**
* 答题信息
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function answerInfo(baseUrl) {
var url = baseUrl + 'kwwmrdt/index.do';
var host = (url.split('//')[1]).split('/')[0];
return new Promise((resolve) => {
const options = {
method: 'GET',
url: url,
qs: {user_type: '0', is_from_share: '1', _t: `${timestampMs()}`},
headers: {
Host: host,
Connection: 'keep-alive',
'User-Agent': userAgent,
'Content-Type': 'application/x-www-form-urlencoded',
Accept: '*/*',
Referer: mrDtUrl + '&from=login&spm=89420.1.1.1',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-us,en',
'Cookie': gameCookie
},
};
try {
request(options, function (error, response, body) {
if (error) throw new Error(error);
let result = JSON.parse(body);
if (result.hasOwnProperty('success') && result.success) {
var answerCount = result.data.answerCount;
answerState = (result.data.answerState == 3) ? true : false;
var currentDay = result.data.currentDay;
var score = '';
for (var i in result.data.weekCalendar) {
var day = result.data.weekCalendar[i]['day'];
if (day == currentDay) {
score = result.data.weekCalendar[i]['score'];
}
}
log(`本周答题第${currentDay}天,答题数量:${answerCount},今日答题奖励积分:${score}`)
} else {
log(`查询答题信息失败:${result.message}`)
}
});
} catch (e) {
log(e)
} finally {
resolve();
}
})
}
/**
* 开始答题
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function answerStart(baseUrl) {
answerStartId = '';
return new Promise((resolve) => {
var url = baseUrl + 'answer/start.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {user_type: '1', is_from_share: '1', _t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: mrDtUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
},
data: {}
};
if (debug) {
log(`\n【debug】=============== 这是 开始答题 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 开始答题 返回data==============`);
log(data)
}
if (data.hasOwnProperty('success') && data.success) {
answerStartId = data.data;
log(`开始答题请求成功开始答题ID${answerStartId}`)
} else {
log(`开始答题失败,原因:${data.message}`)
}
} catch (e) {
log(`开始答题异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 获取问题
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function getQuestion(baseUrl) {
return new Promise((resolve) => {
var url = baseUrl + 'answer/getQuestion.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {startId: answerStartId, user_type: '1', is_from_share: '1', _t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: mrDtUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
},
data: {}
};
if (debug) {
log(`\n【debug】=============== 这是 获取问题 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 获取问题 返回data==============`);
log(data)
}
if (data.hasOwnProperty('success') && data.success) {
currQuestions = parseInt(data.data.currentIndex);
totalQuestions = parseInt(data.data.totalIndex);
questionId = data.data.id;
var answerList = data.data.answerList;
log(`今日可答题次数:${totalQuestions},当前开始答题第${currQuestions}`)
if (answerLists.hasOwnProperty(questionId)) {
answerType = answerLists[questionId]
log(`获取问题成功,ID:${questionId},答案;${answerType}`)
} else {
answerType = randomInt(1, answerList.length)
log(`ID:${questionId},答案不存在,建议联系作者添加,随机:${answerType}`)
}
} else {
log(`获取问题失败,原因:${data.message}`)
}
} catch (e) {
log(`获取问题异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 答题提交
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function answerSubmit(baseUrl) {
return new Promise((resolve) => {
var url = baseUrl + 'answer/submit.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {
answer: answerType,
startId: answerStartId,
user_type: '1',
is_from_share: '1',
_t: timestampMs()
},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: mrDtUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
},
data: {}
};
if (debug) {
log(`\n【debug】=============== 这是 提交答题 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 提交答题 返回data==============`);
log(data)
}
if (data.hasOwnProperty('success') && data.success) {
currQuestions += 1;
var id = data.data.id;
var correct = data.data.correct;
var correctAnswer = data.data.correctAnswer;
var title = correct ? `` : ``;
log(`提交问题成功,ID:${id},答案:【${correctAnswer}】回答:【${title}`)
if (!correct) {
addNotifyStr(`ID${id}回答问题错了哦,答案:【${correctAnswer}】,建议提交作者更新`, true)
}
if (!answerLists.hasOwnProperty(id)) {
var str = id + "=" + correctAnswer;
answerListData.push(str);
}
} else {
log(`提交答题失败,原因:${data.message}`)
}
} catch (e) {
log(`提交答题异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 答题完成
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function complete(baseUrl) {
return new Promise((resolve) => {
var url = baseUrl + 'answer/complete.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {startId: answerStartId, user_type: '1', is_from_share: '1', _t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: mrDtUrl + '&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
},
data: {}
};
if (debug) {
log(`\n【debug】=============== 这是 完成答题 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 完成答题 返回data==============`);
log(data)
}
if (data.hasOwnProperty('success') && data.success) {
currQuestions = 1;
totalQuestions = 5;
log(`当日答题已经全部完成`)
} else {
log(`完成答题失败,原因:${data.message}`)
}
} catch (e) {
log(`完成答题异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
/**
* 答题页面
* @param baseUrl
* @returns {Promise<unknown>}
*/
async function answerPage(baseUrl) {
return new Promise((resolve) => {
var url = baseUrl + 'answer/answerPage.do';
var host = (url.split('//')[1]).split('/')[0];
var options = {
method: 'GET',
url: url,
params: {user_type: '1', is_from_share: '1', _t: timestampMs()},
headers: {
cookie: gameCookie,
Host: host,
'Content-Type': 'application/x-www-form-urlencoded',
Connection: 'keep-alive',
Accept: '*/*',
'User-Agent': userAgent,
Referer: 'https://89420.activity-20.m.duiba.com.cn/projectx/p129446ea/index.html?appID=89420&from=login&spm=89420.1.1.1',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
},
data: {}
};
if (debug) {
log(`\n【debug】=============== 这是 答题页面 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 答题页面 返回data==============`);
log(data)
}
if (data.hasOwnProperty('success') && data.success) {
var todayCompleteResult = data.data.todayCompleteResult;
addNotifyStr(`今日积分奖励:${todayCompleteResult.baseCredits},答对题目:${todayCompleteResult.correctCount}`, true)
} else {
log(`查看答题页面失败,原因:${data.message}`)
}
} catch (e) {
log(`查看答题页面异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
//======================竞猜=====================
async function jcinfo() {
return new Promise(async(resolve) => {
var options = {
method: 'GET',
url: 'https://89420.activity-20.m.duiba.com.cn/projectx/p15fbb34c/home/index.do',
params: {user_type: '0', is_from_share: '1', _t: '1668919193539'},
headers: {
Host: '89420.activity-20.m.duiba.com.cn',
Connection: 'keep-alive',
'Upgrade-Insecure-Requests': '1',
'User-Agent': userAgent,
Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Sec-Fetch-Site': 'none',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-User': '?1',
'Sec-Fetch-Dest': 'document',
'Accept-Language': 'en-us,en',
Cookie: gameCookie,
'Accept-Encoding': 'gzip, deflate'
}
};
if (debug) {
log(`\n【debug】=============== 这是 竞猜页面 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(async function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 竞猜页面 返回data==============`);
log(data)
}
if (data.success) {
myWinMatch = data.data.myWinMatch;
nextMatchInfoTime = data.data.nextMatchInfoTime
addNotifyStr(`竞猜猜对数:${myWinMatch}`, true)
} else {
log(`竞猜页面失败,原因:${data.message}`)
}
} catch (e) {
log(`竞猜异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
async function jcquery(nextMatchInfoTime) {
return new Promise(async(resolve) => {
var options = {
method: 'GET',
url: 'https://89420.activity-20.m.duiba.com.cn/projectx/p15fbb34c/home/query.do',
params: {
queryTime: nextMatchInfoTime,
user_type: '0',
is_from_share: '1',
_t: '1668919193789'
},
headers: {
Host: '89420.activity-20.m.duiba.com.cn',
Connection: 'keep-alive',
'Upgrade-Insecure-Requests': '1',
'User-Agent': userAgent,
Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Sec-Fetch-Site': 'none',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-User': '?1',
'Sec-Fetch-Dest': 'document',
'Accept-Language': 'en-us,en',
Cookie: gameCookie,
'Accept-Encoding': 'gzip, deflate'
}
};
if (debug) {
log(`\n【debug】=============== 这是 竞猜页面 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(async function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 竞猜页面 返回data==============`);
log(data)
}
if (data.success) {
queryinfo = data.data
} else {
log(`竞猜页面失败,原因:${data.message}`)
}
} catch (e) {
log(`竞猜异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
async function jccreditsCost() {
return new Promise(async(resolve) => {
var options = {
method: 'POST',
url: 'https://89420.activity-20.m.duiba.com.cn/projectx/p15fbb34c/credits/creditsCost.do',
params: {_t: '1668919309582'},
headers: {
Host: '89420.activity-20.m.duiba.com.cn',
Connection: 'keep-alive',
'User-Agent': userAgent,
'Content-Type': 'application/x-www-form-urlencoded',
Accept: '*/*',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
Referer: 'https://89420.activity-20.m.duiba.com.cn/projectx/p15fbb34c/index.html?appID=89420',
'Accept-Language': 'en-us,en',
Cookie: gameCookie
},
data: 'toPlaywayId=home&toActionId=betting&credits=18&desc=credits_desc&user_type=0&is_from_share=1&_t=1668919309582'
};
if (debug) {
log(`\n【debug】=============== 这是 竞猜页面 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(async function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 竞猜页面 返回data==============`);
log(data)
}
if (data.success) {
jcticketNum = data.data
log(`获取竞猜订单:` + jcticketNum)
} else {
log(`竞猜页面失败,原因:${data.message}`)
}
} catch (e) {
log(`竞猜异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
async function jcqueryStatus() {
return new Promise((resolve) => {
var options = {
method: 'GET',
url: 'https://89420.activity-20.m.duiba.com.cn/projectx/p15fbb34c/credits/queryStatus.do',
params: {
ticketNum: jcticketNum,
user_type: '0',
is_from_share: '1',
_t: '1668919310283'
},
headers: {
Host: '89420.activity-20.m.duiba.com.cn',
Connection: 'keep-alive',
'Upgrade-Insecure-Requests': '1',
'User-Agent': userAgent,
Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Sec-Fetch-Site': 'none',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-User': '?1',
'Sec-Fetch-Dest': 'document',
'Accept-Language': 'en-us,en',
Cookie: gameCookie,
'Accept-Encoding': 'gzip, deflate'
}
};
if (debug) {
log(`\n【debug】=============== 这是 竞猜页面 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 竞猜页面 返回data==============`);
log(data)
}
if (data.success) {
log("竞猜订单创建" + data.success)
} else {
log(`竞猜页面失败,原因:${data.message}`)
}
} catch (e) {
log(`竞猜异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
async function jcbetting(ticket,optionId,matchId,token) {
return new Promise((resolve) => {
var options = {
method: 'GET',
url: 'https://89420.activity-20.m.duiba.com.cn/projectx/p15fbb34c/home/betting.do',
params: {
ticket: ticket,
credits: '18',
optionId: optionId,
matchId: matchId,
token: token,
user_type: '0',
is_from_share: '1',
_t: '1668919310505'
},
headers: {
Host: '89420.activity-20.m.duiba.com.cn',
Connection: 'keep-alive',
'Upgrade-Insecure-Requests': '1',
'User-Agent': userAgent,
Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Sec-Fetch-Site': 'none',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-User': '?1',
'Sec-Fetch-Dest': 'document',
'Accept-Language': 'en-us,en',
Cookie: gameCookie,
'Accept-Encoding': 'gzip, deflate'
}
};
if (debug) {
log(`\n【debug】=============== 这是 竞猜页面 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 竞猜页面 返回data==============`);
log(data)
}
if (data.success) {
jcjg = data.success
log("竞猜结果:" + data.success)
} else {
log(`竞猜结果,原因:${data.message}`)
jcjg = data.success
}
} catch (e) {
log(`竞猜结果异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
async function jcrecord() {
return new Promise((resolve) => {
var options = {
method: 'GET',
url: 'https://89420.activity-20.m.duiba.com.cn/projectx/p15fbb34c/home/record.do',
params: {user_type: '0', is_from_share: '1', _t: '1668919193539'},
headers: {
Host: '89420.activity-20.m.duiba.com.cn',
Connection: 'keep-alive',
'Upgrade-Insecure-Requests': '1',
'User-Agent': userAgent,
Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Sec-Fetch-Site': 'none',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-User': '?1',
'Sec-Fetch-Dest': 'document',
'Accept-Language': 'en-us,en',
Cookie: gameCookie,
'Accept-Encoding': 'gzip, deflate'
}
};
if (debug) {
log(`\n【debug】=============== 这是 竞猜页面 请求 url ===============`);
log(JSON.stringify(options));
}
axios.request(options).then(function (response) {
try {
var data = response.data;
if (debug) {
log(`\n\n【debug】===============这是 竞猜页面 返回data==============`);
log(data)
}
if (data.success) {
recordinfo = data.data.bettingInfoArray;
for(let i = 0; i < recordinfo.length; i++){
homeName = recordinfo[i].homeName
awayName = recordinfo[i].awayName
joinNum = recordinfo[i].joinNum
matchId = recordinfo[i].matchId
option1 = recordinfo[i].option1
option2 = recordinfo[i].option2
option3 = recordinfo[i].option3
log('竞猜第' + i + "场")
if (recordinfo.select == 1 ){
log("叼毛选择:" + homeName + "赢")
}
if (recordinfo.select == 0 ){
log("叼毛选择:平局")
}
if (recordinfo.select == 3 ){
log("叼毛选择:" + awayName + "赢")
}
}
log('投注次数:' + data.data.bettingNum)
log('累计积分收益:' + data.data.credits)
} else {
log(`竞猜页面失败,原因:${data.message}`)
}
} catch (e) {
log(`竞猜异常:${data},原因:${e}`)
}
}).catch(function (error) {
console.error(error);
}).then(res => {
//这里处理正确返回
resolve();
});
})
}
async function finishJc(num) {
await loginFreePlugin(qhbUrl);
await $.wait(3000)
if (loginUrl == "") {
log(`账号【${num}】登录竞猜异常,自动跳过任务!`);
return false;
}
await setCookies();
await $.wait(3000);
if (gameCookie == "") {
log(`账号【${num}】cookies异常自动跳过`);
return false;
}
try {
await jcinfo();
await jcquery(nextMatchInfoTime);
for(let i = 0; i < queryinfo.length; i++){
homeName = queryinfo[i].homeName
awayName = queryinfo[i].awayName
joinNum = queryinfo[i].joinNum
matchId = queryinfo[i].matchId
option1 = queryinfo[i].option1
option2 = queryinfo[i].option2
option3 = queryinfo[i].option3
select = queryinfo[i].select
matchTime =queryinfo[i].matchTime
if(option1 > option3){optionId = 1}
else optionId = 3
log('竞猜第' + i + "场")
log(homeName + " VS " + awayName)
log("参与人数:" + joinNum)
log(homeName + "支持率:" + option1)
log("平局" + "支持率:" + option2)
log(awayName + "支持率:" + option3)
if(select !== null && 3){
log('已经参加竞猜了 跳过')
}else
if(select == null){
if(matchTime > nextMatchInfoTime){
log('没有参加过竞猜 去竞猜')
await jccreditsCost()
await $.wait(3000);
await jcqueryStatus()
await getjcTokenKey();
await $.wait(1000);
await getjcToken();
await $.wait(1000);
var qhbToken = dealToken(tokenStr, tokenKeyStr);
await jcbetting(jcticketNum,optionId,matchId,qhbToken)
if (jcjg == false){
if(matchTime > nextMatchInfoTime){
await jccreditsCost()
await $.wait(3000);
await jcqueryStatus()
await getjcTokenKey();
await $.wait(1000);
await getjcToken();
await $.wait(1000);
var qhbToken = dealToken(tokenStr, tokenKeyStr);
await jcbetting(jcticketNum,optionId,matchId,qhbToken)}
}
}
}
}
await jcrecord()
await $.wait(2000);
} catch (e) {
log(`账号【${num}】解码失败!${e}`);
return false;
}
return true;
}
// ============================================重写============================================ \\
async function GetRewrite() {
if ($request.url.indexOf("member/api/info/?userKeys=v1.0&pageName=member-info-index-search&formName=searchForm&kwwMember.memberId") > -1) {
let ck = '';
let theRequest = new Object();
if ($request.url.indexOf("?") != -1) {
let info = $request.url.split('?');
let strs = info[1].split("&");
for (var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
}
ck = theRequest.memberId;
}
if (kwwUid) {
if (kwwUid.indexOf(ck) == -1) {
kwwUid = kwwUid + "@" + ck;
$.setdata(kwwUid, "kwwUid");
List = kwwUid.split("@");
$.msg(`${$.name}` + ` 获取第${kwwUid.length}个 ck 成功: ${ck} ,不用请自行关闭重写!`);
}
} else {
$.setdata(ck, "kwwUid");
$.msg(`${$.name}` + ` 获取第1个 ck 成功: ${ck} ,不用请自行关闭重写!`);
}
}
}
function getYestoday() {
var date = new Date();
var y = date.getFullYear();
var m = date.getMonth() + 1;
var d = date.getDate() - 1;
if (d == "0") {
m = m - 1;
var temp = new Date(y, m, d);
d = temp.getDate();
}
var Yesterday = [y, m, d];
Yesterday = Yesterday.join("");
return Yesterday;
}
function getQueryString(url, name) {
let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = url.split('?')[1].match(reg);
if (r != null) {
return unescape(r[2]);
}
return null;
}
function DealScriptStr(str) {
str = str.replace(/\/\*.*?\*\//g, ' ');
str = str.replace(/\b0(\d+)/g, '0o$1');
return str;
}
function dealToken(tokenStr, tokenKeyStr) {
let scriptToken, scriptKey;
scriptToken = DealScriptStr(tokenStr);
scriptKey = DealScriptStr(tokenKeyStr);
let tdom = new JSDOM(
`<script>${scriptToken}</script><script>${scriptKey}</script>`,
{
runScripts: 'dangerously'
}
)
let str = scriptKey;
var babelStr;
str = str.replaceAll(/eval/g, 'var babelStr=');
str = str.replaceAll(/\\u0065\\u0076\\u0061\\u006c/g, 'var babelStr=')
eval(str);
eval(babelStr);
let ast = parser.parse(babelStr);
let funcStr = ast.program.body[0].id.name;
let res = tdom.window[funcStr]();
tdom.window.close();
//console.log(window['pf8b6b']);
return res;
}
function dealToken2(tokenStr, tokenKey) {
let scriptToken;
scriptToken = DealScriptStr(tokenStr);
let tdom = new JSDOM(
`<script>${scriptToken}</script>`,
{
runScripts: 'dangerously'
}
)
let res = tdom.window[tokenKey];
tdom.window.close();
//console.log(window['pf8b6b']);
return res;
}
function ParseHtml(html) {
let doc = domParser.parseFromString(html);
let nodes = xpath.select('//script', doc);
let node = nodes[4].childNodes[0];
let babelStr;
let tdom = new JSDOM(`<script>${DealScriptStr(node.data)}</script>`, {
runScripts: 'dangerously'
})
babelStr = tdom.window.getDuibaToken.toString();
let tokenKey = babelStr.match(/var key = '(.*)?';/)[1];
let defaultToken = babelStr.match(/data.token = '(.*)?';/)[1];
tdom.window.close();
return {
cid: tdom.window.CFG.consumerId,
tokenKey,
defaultToken
};
}
function ParseYjjHtml(html) {
let doc = domParser.parseFromString(html);
let nodes = xpath.select('//script', doc);
let node = nodes[5].childNodes[0];
let babelStr;
let tdom = new JSDOM(`<script>${DealScriptStr(node.data)}</script>`, {
runScripts: 'dangerously'
})
babelStr = tdom.window.getDuibaToken.toString();
let tokenKey = babelStr.match(/var key = '(.*)?';/)[1];
let defaultToken = babelStr.match(/data.token = '(.*)?';/)[1];
tdom.window.close();
return {
cid: tdom.window.CFG.consumerId,
tokenKey,
defaultToken
};
}
function yjgetkey(tokenStr) {
let scriptToken;
scriptToken = DealScriptStr(tokenStr);
let tdom = new JSDOM(
`<script>${scriptToken}</script>`,
{
runScripts: 'dangerously'
}
)
let str = tokenStr;
var babelStr;
eval(tokenStr)
str = str.replaceAll(/eval/g, 'var babelStr=');
str = str.replaceAll(/\\u0065\\u0076\\u0061\\u006c/g, 'var babelStr=')
eval(str);
eval(babelStr);
let key = babelStr.match(/key = '(.*?)'/)[1];
tdom.window.close();
return key;
}
function yjParseHtmlGame(html) {
let doc = domParser.parseFromString(html);
let nodes = xpath.select('//script', doc);
let node = nodes[5].childNodes[0];
let tdom = new JSDOM(`<script>${node.data}</script>`, {
runScripts: 'dangerously'
})
tdom.window.close();
return yjgetkey(node.data)
}
function yjgettoken(html, tokenStr) {
let scriptToken;
scriptToken = DealScriptStr(tokenStr);
let tdom = new JSDOM(
`<script>${scriptToken}</script>`,
{
runScripts: 'dangerously'
}
)
let str = scriptToken;
window = tdom.window
var babelStr;
str = str.replaceAll(/eval/g, 'var babelStr=');
str = str.replaceAll(/\\u0065\\u0076\\u0061\\u006c/g, 'var babelStr=')
eval(str);
eval(babelStr);
var keys = yjParseHtmlGame(html)
let res = tdom.window[keys];
tdom.window.close();
return res;
}
function ParseHtmlGame(html) {
let doc = domParser.parseFromString(html);
let nodes = xpath.select('//script', doc);
let node = nodes[2].childNodes[0];
let tdom = new JSDOM(`<script>${node.data}</script>`, {
runScripts: 'dangerously'
})
tdom.window.close();
return {
key: tdom.window.CFG.key
};
}
/**
* 加密
* @param inputString
* @returns {*}
*/
function md5(inputString) {
var hc = "0123456789abcdef";
function rh(n) {
var j, s = "";
for (j = 0; j <= 3; j++) s += hc.charAt((n >> (j * 8 + 4)) & 0x0F) + hc.charAt((n >> (j * 8)) & 0x0F);
return s;
}
function ad(x, y) {
var l = (x & 0xFFFF) + (y & 0xFFFF);
var m = (x >> 16) + (y >> 16) + (l >> 16);
return (m << 16) | (l & 0xFFFF);
}
function rl(n, c) {
return (n << c) | (n >>> (32 - c));
}
function cm(q, a, b, x, s, t) {
return ad(rl(ad(ad(a, q), ad(x, t)), s), b);
}
function ff(a, b, c, d, x, s, t) {
return cm((b & c) | ((~b) & d), a, b, x, s, t);
}
function gg(a, b, c, d, x, s, t) {
return cm((b & d) | (c & (~d)), a, b, x, s, t);
}
function hh(a, b, c, d, x, s, t) {
return cm(b ^ c ^ d, a, b, x, s, t);
}
function ii(a, b, c, d, x, s, t) {
return cm(c ^ (b | (~d)), a, b, x, s, t);
}
function sb(x) {
var i;
var nblk = ((x.length + 8) >> 6) + 1;
var blks = new Array(nblk * 16);
for (i = 0; i < nblk * 16; i++) blks[i] = 0;
for (i = 0; i < x.length; i++) blks[i >> 2] |= x.charCodeAt(i) << ((i % 4) * 8);
blks[i >> 2] |= 0x80 << ((i % 4) * 8);
blks[nblk * 16 - 2] = x.length * 8;
return blks;
}
var i, x = sb(inputString), a = 1732584193, b = -271733879, c = -1732584194, d = 271733878, olda, oldb, oldc, oldd;
for (i = 0; i < x.length; i += 16) {
olda = a;
oldb = b;
oldc = c;
oldd = d;
a = ff(a, b, c, d, x[i + 0], 7, -680876936);
d = ff(d, a, b, c, x[i + 1], 12, -389564586);
c = ff(c, d, a, b, x[i + 2], 17, 606105819);
b = ff(b, c, d, a, x[i + 3], 22, -1044525330);
a = ff(a, b, c, d, x[i + 4], 7, -176418897);
d = ff(d, a, b, c, x[i + 5], 12, 1200080426);
c = ff(c, d, a, b, x[i + 6], 17, -1473231341);
b = ff(b, c, d, a, x[i + 7], 22, -45705983);
a = ff(a, b, c, d, x[i + 8], 7, 1770035416);
d = ff(d, a, b, c, x[i + 9], 12, -1958414417);
c = ff(c, d, a, b, x[i + 10], 17, -42063);
b = ff(b, c, d, a, x[i + 11], 22, -1990404162);
a = ff(a, b, c, d, x[i + 12], 7, 1804603682);
d = ff(d, a, b, c, x[i + 13], 12, -40341101);
c = ff(c, d, a, b, x[i + 14], 17, -1502002290);
b = ff(b, c, d, a, x[i + 15], 22, 1236535329);
a = gg(a, b, c, d, x[i + 1], 5, -165796510);
d = gg(d, a, b, c, x[i + 6], 9, -1069501632);
c = gg(c, d, a, b, x[i + 11], 14, 643717713);
b = gg(b, c, d, a, x[i + 0], 20, -373897302);
a = gg(a, b, c, d, x[i + 5], 5, -701558691);
d = gg(d, a, b, c, x[i + 10], 9, 38016083);
c = gg(c, d, a, b, x[i + 15], 14, -660478335);
b = gg(b, c, d, a, x[i + 4], 20, -405537848);
a = gg(a, b, c, d, x[i + 9], 5, 568446438);
d = gg(d, a, b, c, x[i + 14], 9, -1019803690);
c = gg(c, d, a, b, x[i + 3], 14, -187363961);
b = gg(b, c, d, a, x[i + 8], 20, 1163531501);
a = gg(a, b, c, d, x[i + 13], 5, -1444681467);
d = gg(d, a, b, c, x[i + 2], 9, -51403784);
c = gg(c, d, a, b, x[i + 7], 14, 1735328473);
b = gg(b, c, d, a, x[i + 12], 20, -1926607734);
a = hh(a, b, c, d, x[i + 5], 4, -378558);
d = hh(d, a, b, c, x[i + 8], 11, -2022574463);
c = hh(c, d, a, b, x[i + 11], 16, 1839030562);
b = hh(b, c, d, a, x[i + 14], 23, -35309556);
a = hh(a, b, c, d, x[i + 1], 4, -1530992060);
d = hh(d, a, b, c, x[i + 4], 11, 1272893353);
c = hh(c, d, a, b, x[i + 7], 16, -155497632);
b = hh(b, c, d, a, x[i + 10], 23, -1094730640);
a = hh(a, b, c, d, x[i + 13], 4, 681279174);
d = hh(d, a, b, c, x[i + 0], 11, -358537222);
c = hh(c, d, a, b, x[i + 3], 16, -722521979);
b = hh(b, c, d, a, x[i + 6], 23, 76029189);
a = hh(a, b, c, d, x[i + 9], 4, -640364487);
d = hh(d, a, b, c, x[i + 12], 11, -421815835);
c = hh(c, d, a, b, x[i + 15], 16, 530742520);
b = hh(b, c, d, a, x[i + 2], 23, -995338651);
a = ii(a, b, c, d, x[i + 0], 6, -198630844);
d = ii(d, a, b, c, x[i + 7], 10, 1126891415);
c = ii(c, d, a, b, x[i + 14], 15, -1416354905);
b = ii(b, c, d, a, x[i + 5], 21, -57434055);
a = ii(a, b, c, d, x[i + 12], 6, 1700485571);
d = ii(d, a, b, c, x[i + 3], 10, -1894986606);
c = ii(c, d, a, b, x[i + 10], 15, -1051523);
b = ii(b, c, d, a, x[i + 1], 21, -2054922799);
a = ii(a, b, c, d, x[i + 8], 6, 1873313359);
d = ii(d, a, b, c, x[i + 15], 10, -30611744);
c = ii(c, d, a, b, x[i + 6], 15, -1560198380);
b = ii(b, c, d, a, x[i + 13], 21, 1309151649);
a = ii(a, b, c, d, x[i + 4], 6, -145523070);
d = ii(d, a, b, c, x[i + 11], 10, -1120210379);
c = ii(c, d, a, b, x[i + 2], 15, 718787259);
b = ii(b, c, d, a, x[i + 9], 21, -343485551);
a = ad(a, olda);
b = ad(b, oldb);
c = ad(c, oldc);
d = ad(d, oldd);
}
return rh(a) + rh(b) + rh(c) + rh(d);
}
/**
* 添加消息
* @param str
* @param is_log
*/
function addNotifyStr(str, is_log = true) {
if (is_log) {
log(`${str}\n`)
}
msg += `${str}\n`
}
// ============================================发送消息============================================ \\
async function SendMsg(message) {
if (!message)
return;
if (Notify > 0) {
if ($.isNode()) {
var notify = require('./sendNotify');
await notify.sendNotify($.name, message);
} else {
$.msg(message);
}
} else {
log(message);
}
}
/**
* 随机延时1-30s避免大家运行时间一样
* @returns {*|number}
*/
function delay() {
let time = parseInt(Math.random() * 100000);
if (time > 30000) {// 大于30s重新生成
return delay();
} else {
console.log('随机延时:', `${time}ms, 避免大家运行时间一样`)
return time;// 小于30s返回
}
}
/**
* 随机数生成
*/
function randomString(e) {
e = e || 32;
var t = "QWERTYUIOPASDFGHJKLZXCVBNM1234567890",
a = t.length,
n = "";
for (i = 0; i < e; i++)
n += t.charAt(Math.floor(Math.random() * a));
return n
}
/**
* 随机整数生成
*/
function randomInt(min, max) {
return Math.round(Math.random() * (max - min) + min)
}
/**
* 获取毫秒时间戳
*/
function timestampMs() {
return new Date().getTime();
}
/**
* 获取秒时间戳
*/
function timestampS() {
return Date.parse(new Date()) / 1000;
}
/**
*
* 示例:$.time('yyyy-MM-dd qq HH:mm:ss.S')
* :$.time('yyyyMMddHHmmssS')
* y:年 M:月 d:日 q:季 H:时 m:分 s:秒 S:毫秒
* 其中y可选0-4位占位符、S可选0-1位占位符其余可选0-2位占位符
* @param {string} fmt 格式化参数
* @param {number} 可选: 根据指定时间戳返回格式化日期
*
*/
function time(fmt, ts = null) {
const date = ts ? new Date(ts) : new Date();
let o = {
'M+': date.getMonth() + 1,
'd+': date.getDate(),
'H+': date.getHours(),
'm+': date.getMinutes(),
's+': date.getSeconds(),
'q+': Math.floor((date.getMonth() + 3) / 3),
S: date.getMilliseconds(),
};
if (/(y+)/.test(fmt))
fmt = fmt.replace(
RegExp.$1,
(date.getFullYear() + '').substr(4 - RegExp.$1.length)
);
for (let k in o)
if (new RegExp('(' + k + ')').test(fmt))
fmt = fmt.replace(
RegExp.$1,
RegExp.$1.length == 1
? o[k]
: ('00' + o[k]).substr(('' + o[k]).length)
);
return fmt;
}
/**
* 修改配置文件
*/
function modify() {
fs.readFile('/ql/data/config/config.sh', 'utf8', function (err, dataStr) {
if (err) {
return log('读取文件失败!' + err)
} else {
var result = dataStr.replace(/regular/g, string);
fs.writeFile('/ql/data/config/config.sh', result, 'utf8', function (err) {
if (err) {
return log(err);
}
});
}
})
}
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)
}