/* 腾讯自选股APP & 微信微证券公众号 只适配了IOS,测试了青龙和V2P,其他平台请自行测试,安卓请自行测试 多用户用#隔开 脚本只会在10点到13点之间进行猜涨跌,请务必在这段时间内跑一次脚本 上证和个股猜涨跌开奖时间为15:15和16:30,建议16:30后再跑一次领奖 有些任务会提示任务完成发奖失败 -- 可以忽略 或者任务完成前置条件不符合 -- 一般为需要分享,会在完成日常任务后尝试做互助 内置了多用户相互做分享任务,用户数多于一个才能用 测试了做分享任务的情况下,一天收益大概在15000金币 默认自动提现5元,做分享任务,不做新手任务 新手任务可能需要跑几次才能做完,不过每天跑的话总会做完的 提现条件设置:自己新建一个TxStockCash环境变量,0代表不提现,1代表提现1元,5代表提现5元 新手任务设置:新建一个TxStockNewbie环境变量,0代表不做新手任务,1代表做新手任务 分享任务设置:新建一个TxStockHelp环境变量,0代表不做分享互助,1代表做分享互助 互助顺序设置:新建一个TxStockHelpOrder环境变量,按顺序填入要帮助的用户,0代表不帮助其他用户,每个用户之间用@或者#隔开 青龙: APP和微信都捉 https://wzq.tenpay.com/cgi-bin/activity_task_daily.fcgi? 开头的包,点击获取金币,看到任务应该就能捉到 APP捉包把整个URL放进去TxStockAppUrl,header转成JSON字符串之后放进去TxStockAppHeader 微信微证券公众号捉包后header转成JSON字符串之后放进去TxStockWxHeader export TxStockAppUrl='https://wzq.ten....#https://wzq.ten....#https://wzq.ten....' export TxStockAppHeader='{"Host":"...","Accept":"...",...}#{"Host":"...","Accept":"...",...}#{"Host":"...","Accept":"...",...}' export TxStockWxHeader='{"Host":"...","Accept":"...",...}#{"Host":"...","Accept":"...",...}#{"Host":"...","Accept":"...",...}' 重写食用 TxStockAppUrl与TxStockAppHeader:打开APP,点击头像->右上角金币->获取金币 TxStockWxHeader:打开 腾讯自选股微信版|微证券 公众号,右下角好福利->福利中心 V2P: 重写: https://wzq.tenpay.com/cgi-bin/activity_task_daily.fcgi? https://raw.githubusercontent.com/leafxcy/JavaScript/main/txstock.js MITM: wzq.tenpay.com 圈X: [task_local] #腾讯自选股 35 11,16 * * * https://raw.githubusercontent.com/leafxcy/JavaScript/main/txstock.js, tag=腾讯自选股, enabled=true [rewrite_local] #获取APP和微信微证券的URL和header https://wzq.tenpay.com/cgi-bin/activity_task_daily.fcgi? url script-request-header https://raw.githubusercontent.com/leafxcy/JavaScript/main/txstock.js [MITM] hostname = wzq.tenpay.com */ const jsname = '腾讯自选股' const $ = Env(jsname) const notifyFlag = 1; //0为关闭通知,1为打开通知,默认为1 const notify = $.isNode() ? require('./sendNotify') : ''; let sessionTime = Math.round(new Date().getTime()) let rndtime = "" //毫秒 let todayDate = formatDateTime(new Date()); var cash = ($.isNode() ? (process.env.TxStockCash) : ($.getval('TxStockCash'))) || 5; //0为不自动提现,1为自动提现1元,5为自动提现5元 var help = ($.isNode() ? (process.env.TxStockHelp) : ($.getval('TxStockHelp'))) || 1; //0为不做分享助力任务,1为多用户互相分享助力 var newbie = ($.isNode() ? (process.env.TxStockNewbie) : ($.getval('TxStockNewbie'))) || 0; //0为不做新手任务,1为自动做新手任务 var helpOrder = ($.isNode() ? (process.env.TxStockHelpOrder) : ($.getval('TxStockHelpOrder'))) || ""; const appUrlArr = []; let appUrlArrVal = ""; const appHeaderArr = []; let appHeaderArrVal = ""; const wxHeaderArr = []; let wxHeaderArrVal = ""; let rewardCoin = 0 let coinStart = [] let coinEnd = [] let coinInfo = "" let notifyStr = "" let numUser = 0 let totalUser = 0 let shareFlag = 0 //用户数多于1且打开助力开关,才会做助力任务 let helpUser = 0 let scanList = [] let nickname = [] let bullStatusFlag = 0 let guessOption = 0 let guessStockFlag = 0 let stockName = '' let stockList = [] let marketCode = {'sz':0, 'sh':1, 'hk':2, } let appShareFlag = 1 let wxShareFlag = 1 let appTaskFlag = 1 let wxTaskFlag = 1 let bullishFlag = 1 let bullHelpFlag = 0 //多用户情况下,可以控制每个用户帮助第几个用户,默认帮助上一个 let helpOrderArr = [] let logDebug = 0 let TEST_PRINT = 0 let userAppShareTaskList = { "daily": ["news_share", "task_50_1111", "task_51_1111"/*, "task_72_1113", "task_74_1113"*/, ], "newbie": [], } let userAppShareCodeArr = { "daily": {}, "newbie": {}, "bull_invite": [], "bull_help": [], "guess_invite": [], "guess_ticket": [], "guess_time": [], } let userWxShareTaskList = { "daily": ["task_50_1100", "task_51_1100", "task_66_1110", "task_50_1110", "task_51_1110", "task_51_1112", "task_51_1113", ], "newbie": ["task_50_1032", "task_51_1032"], } let userWxShareCodeArr = { "daily": {}, "newbie": {}, } //APP任务 let appActidArray = { "daily": [1101, 1103, 1104, 1105, 1109, 1111, 1112, 1113], "newbie": [1023, 1033, ], } let appTaskArray = { "daily": [], "newbie": [], } //微信小程序任务 let wxActidArray = { "daily": [1100, 1110, ], "newbie": [1032, ], } let wxTaskArray = { "daily": [], "newbie": [], } //APP长牛任务 let bullTaskArray = { "rock_bullish":{"taskName":"戳牛任务", "action":"rock_bullish", "actid":1105}, "open_box":{"taskName":"开宝箱", "action":"open_box", "actid":1105}, "open_blindbox":{"taskName":"开盲盒", "action":"open_blindbox", "actid":1105}, "query_blindbox":{"taskName":"查询皮肤数量", "action":"query_blindbox", "actid":1105}, "sell_skin":{"taskName":"卖皮肤", "action":"sell_skin", "actid":1105}, "feed":{"taskName":"喂长牛", "action":"feed", "actid":1105}, } var TxStockAppUrl var TxStockAppHeader var TxStockWxHeader /////////////////////////////////////////////////////////////////// !(async () => { if(typeof $request !== "undefined") { await getRewrite() } else { //检查环境变量 if(!(await checkEnv())){ return } //初始化任务列表 await initTaskList() //获取用户信息 await initAccountInfo() //测试用,勿打开 if(0) { await getEnvParam(0) await testFunction() } //新手任务 await newbieTask() for (numUser = 0; numUser < totalUser; numUser++) { await getEnvParam(numUser) $.log(`\n======= 开始腾讯自选股用户${numUser+1} ${nickname[numUser]} 日常任务 =======\n`) await signStatus(2002,0); //签到 await $.wait(1000) await appGuessStatus(); //猜涨跌和获取互助码 await $.wait(1000) await dailyTask() //日常任务 await $.wait(1000) await queryShareCode() //获取日常任务互助码 await $.wait(1000) await bullTask() //长牛任务和获取互助码 await $.wait(1000) $.log(`\n======= 结束腾讯自选股用户${numUser+1} ${nickname[numUser]} 日常任务 =======\n`) } await shareTask() //助力任务 await todayIncome()//收益查询,提现 await showmsg() } })() .catch((e) => $.logErr(e)) .finally(() => $.done()) //测试用 async function testFunction() { //扫描可查询的任务列表, await scanAppTaskList(0,3000,"task_daily","routine") //await scanWxTaskList(1000,1400,"task_daily","routine") //每个大概花费86ms } //通知 async function showmsg() { notifyBody = jsname + "运行通知\n\n" + notifyStr if (notifyFlag != 1) { console.log(notifyBody); } if (notifyFlag == 1) { $.msg(notifyBody); if ($.isNode()){await notify.sendNotify($.name, notifyBody );} } } async function getRewrite() { if($request.url.indexOf("activity_task_daily.fcgi?") > -1 || $request.url.indexOf("activity_task_continue.fcgi?") > -1) { if($request.url.indexOf("openid=") > -1) { //APP包 let msgStr = '' $.setdata($request.url,'TxStockAppUrl') $.log(`获取TxStockAppUrl成功: ${$request.url}\n`) msgStr += `获取TxStockAppUrl成功: ${$request.url}\n` $.setdata(JSON.stringify($request.headers),'TxStockAppHeader') $.log(`获取TxStockAppHeader成功: ${JSON.stringify($request.headers)}\n`) msgStr += `获取TxStockAppHeader成功: ${JSON.stringify($request.headers)}\n` $.msg(msgStr) } else { //微信包 $.setdata(JSON.stringify($request.headers),'TxStockWxHeader') $.log(`获取TxStockWxHeader成功: ${JSON.stringify($request.headers)}\n`) $.msg(`获取TxStockAppHeader成功: ${JSON.stringify($request.headers)}\n`) } } } async function checkEnv() { // process.env.TxStockAppUrl='https://wzq.tenpay.com/cgi-bin/activity_task.fcgi?action=taskstatus&_=1638772763440&openid=oA0GbjuZaU_LX2xXzdHovriFQvOs&fskey=v0ba829662561adaf9119e0ab8cf2fe1&channel=1&access_token=51_y9d9c4WgEkqfSRclFcfdI31DQjsslR1PreRFs1ar4ePvUx2zLrornwTnfe9tFDFXIZ0ho3U4hwtORqCgE96uj2es7SqeqfQMLReWa50T6Yk&_appName=android&_appver=9.5.1&_osVer=7.0&_devId=4ffdccc70dae4d5a493095d4ee7b50651cb6bb6b' // process.env.TxStockAppHeader='{"Host":"wzq.tenpay.com","sec-fetch-mode":"cors","user-agent":"Mozilla/5.0 (Linux; Android 7.0; FRD-AL10 Build/HUAWEIFRD-AL10; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045738 Mobile Safari/537.36 qqstock/9.5.1","accept":"*/*","x-requested-with":"com.tencent.portfolio","sec-fetch-site":"same-origin","referer":"https://wzq.tenpay.com/activity/page/welwareCenter/","accept-encoding":"gzip, deflate, br","accept-language":"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7","cookie":"ts_uid=8208898770","q-ua2":"QV=3&PL=ADR&PR=TRD&PP=com.tencent.portfolio&PPVN=9.5.1&TBSVC=44085&CO=BK&COVC=045738&PB=GE&VE=GA&DE=PHONE&CHID=0&LCID=9422&MO= FRD-AL10 &RL=1080*1794&OS=7.0&API=24","q-guid":"cf382f1a1962ad106173180213b788cb","q-qimei":"","q-auth":"31045b957cf33acf31e40be2f3e71c5217597676a9729f1b"}' // process.env.TxStockWxHeader='{"Host":"wzq.tenpay.com","user-agent":"Mozilla/5.0 (Linux; Android 7.0; FRD-AL10 Build/HUAWEIFRD-AL10; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045810 Mobile Safari/537.36 MMWEBID/2292 MicroMessenger/8.0.15.2020(0x28000F3C) Process/tools WeChat/arm32 Weixin NetType/WIFI Language/zh_CN ABI/arm64","accept":"*/*","sec-fetch-site":"same-origin","sec-fetch-mode":"cors","sec-fetch-dest":"empty","referer":"https://wzq.tenpay.com/activity/page/welwareCenter/","accept-encoding":"gzip, deflate, br","accept-language":"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7","cookie":"ts_sid=640332288","q-ua2":"QV=3&PL=ADR&PR=WX&PP=com.tencent.mm&PPVN=8.0.15&TBSVC=44085&CO=BK&COVC=045810&PB=GE&VE=GA&DE=PHONE&CHID=0&LCID=9422&MO= FRD-AL10 &RL=1080*1794&OS=7.0&API=24","q-guid":"d830eeee63cc461a0ae0f67813b788cb","q-qimei":"","q-auth":"31045b957cf33acf31e40be2f3e71c5217597676a9729f1b"}' if($.isNode()) { TxStockAppUrl = process.env.TxStockAppUrl TxStockAppHeader = process.env.TxStockAppHeader TxStockWxHeader = process.env.TxStockWxHeader } else { TxStockAppUrl = $.getdata('TxStockAppUrl') TxStockAppHeader = $.getdata('TxStockAppHeader') TxStockWxHeader = $.getdata('TxStockWxHeader') } if(!TxStockAppUrl || !TxStockAppHeader || !TxStockWxHeader) { str1 = TxStockAppUrl ? "" : "TxStockAppUrl" str2 = TxStockAppHeader ? "" : "TxStockAppHeader" str3 = TxStockWxHeader ? "" : "TxStockWxHeader" $.log(`未找到环境变量: ${str1} ${str2} ${str3}\n`) return false } if (TxStockAppUrl.indexOf('#') > -1) { appUrlArrs = TxStockAppUrl.split('#'); console.log(`您选择的是用"#"隔开TxStockAppUrl\n`) } else if (TxStockAppUrl.indexOf('\n') > -1) { appUrlArrs = TxStockAppUrl.split('\n'); console.log(`您选择的是用"\\n"隔开TxStockAppUrl\n`) } else { appUrlArrs = [TxStockAppUrl] }; Object.keys(appUrlArrs).forEach((item) => { if (appUrlArrs[item]) { appUrlArr.push(appUrlArrs[item]) } }) if (TxStockAppHeader.indexOf('#') > -1) { appHeaderArrs = TxStockAppHeader.split('#'); console.log(`您选择的是用"#"隔开TxStockAppHeader\n`) } else if (TxStockAppHeader.indexOf('\n') > -1) { appHeaderArrs = TxStockAppHeader.split('\n'); console.log(`您选择的是用"\\n"隔开TxStockAppHeader\n`) } else { appHeaderArrs = [TxStockAppHeader] }; Object.keys(appHeaderArrs).forEach((item) => { if (appHeaderArrs[item]) { appHeaderArr.push(appHeaderArrs[item]) } }) if (TxStockWxHeader.indexOf('#') > -1) { wxHeaderArrs = TxStockWxHeader.split('#'); console.log(`您选择的是用"#"隔开TxStockWxHeader\n`) } else if (TxStockWxHeader.indexOf('\n') > -1) { wxHeaderArrs = TxStockWxHeader.split('\n'); console.log(`您选择的是用"\\n"隔开TxStockWxHeader\n`) } else { wxHeaderArrs = [TxStockWxHeader] }; Object.keys(wxHeaderArrs).forEach((item) => { if (wxHeaderArrs[item]) { wxHeaderArr.push(wxHeaderArrs[item]) } }) if(helpOrder) { if (helpOrder.indexOf('#') > -1) { helpOrderArrs = helpOrder.split('#'); console.log(`您选择的是用"#"隔开TxStockHelpOrder\n`) } else if (helpOrder.indexOf('@') > -1) { helpOrderArrs = helpOrder.split('@'); console.log(`您选择的是用"@"隔开TxStockHelpOrder\n`) } else { helpOrderArrs = [helpOrder] }; Object.keys(helpOrderArrs).forEach((item) => { if (helpOrderArrs[item]) { helpOrderArr.push(helpOrderArrs[item]) } }) } totalUser = appUrlArr.length shareFlag = (help && totalUser > 1) $.log(`共找到${totalUser}个用户\n`) return true } async function getEnvParam(userNum) { appUrlArrVal = appUrlArr[userNum]; appHeaderArrVal = JSON.parse(appHeaderArr[userNum]); wxHeaderArrVal = JSON.parse(wxHeaderArr[userNum]); app_openid = appUrlArrVal.match(/&openid=([\w-]+)/)[1] app_fskey = appUrlArrVal.match(/&fskey=([\w-]+)/)[1] //app_token = appUrlArrVal.match(/&access_token=([\w-]+)/)[1] app_token = "" app_appName = appUrlArrVal.match(/&_appName=([\w\.,-]+)/)[1] app_appver = appUrlArrVal.match(/&_appver=([\w\.,-]+)/)[1] app_osVer = appUrlArrVal.match(/&_osVer=([\w\.,-]+)/)[1] app_devId = appUrlArrVal.match(/&_devId=([\w-]+)/)[1] app_ck = "" app_UA = "" Object.keys(appHeaderArrVal).forEach((item) => { if(item.toLowerCase() == "cookie") { //app_ck = appHeaderArrVal[item] cookie = appHeaderArrVal[item] //pgv_info_ssid = cookie.match(/pgv_info=ssid=([\w]+)/)[1] pgv_pvid = cookie.match(/pgv_pvid=([\w]+)/)[1] ts_sid ="";// cookie.match(/ts_sid=([\w]+)/)[1] ts_uid ="";// cookie.match(/ts_uid=([\w]+)/)[1] } else if(item.toLowerCase() == "user-agent") { app_UA = appHeaderArrVal[item] } }) // app_ck = `pgv_pvid=${pgv_pvid}; ts_sid=${ts_sid}; ts_uid=${ts_uid}` app_ck = `pgv_pvid=${pgv_pvid}` wx_ck_tmp = "" wx_UA = "" Object.keys(wxHeaderArrVal).forEach((item) => { if(item.toLowerCase() == "cookie") { wx_ck_tmp = wxHeaderArrVal[item] } else if(item.toLowerCase() == "user-agent") { wx_UA = wxHeaderArrVal[item] } }) pgv_info = wx_ck_tmp.match(/pgv_info=([\w=]+)/)[1] pgv_pvid = wx_ck_tmp.match(/pgv_pvid=([\w]+)/)[1] //ts_last = wx_ck_tmp.match(/ts_last=([\w\/]+)/)[1] //ts_refer = wx_ck_tmp.match(/ts_refer=([\w\/\.]+)/)[1] //ts_sid = wx_ck_tmp.match(/ts_sid=([\w]+)/)[1] //ts_uid = wx_ck_tmp.match(/ts_uid=([\w]+)/)[1] qlappid = wx_ck_tmp.match(/qlappid=([\w]+)/)[1] qlskey = wx_ck_tmp.match(/qlskey=([\w]+)/)[1] qluin = wx_ck_tmp.match(/qluin=([\w@\.]+)/)[1] //qq_logtype = wx_ck_tmp.match(/qq_logtype=([\w]+)/)[1] wzq_qlappid = wx_ck_tmp.match(/wzq_qlappid=([\w]+)/)[1] wzq_qlskey = wx_ck_tmp.match(/wzq_qlskey=([\w]+)/)[1] wzq_qluin = wx_ck_tmp.match(/wzq_qluin=([\w-]+)/)[1] zxg_openid = wx_ck_tmp.match(/zxg_openid=([\w-]+)/)[1] //wx_ck = `pgv_info=${pgv_info}; pgv_pvid=${pgv_pvid}; ts_last=${ts_last}; ts_refer=${ts_refer}; ts_sid=${ts_sid}; ts_uid=${ts_uid}; qlappid=${qlappid}; qlskey=${qlskey}; qluin=${qluin}; qq_logtype=${qq_logtype}; wx_session_time=${sessionTime}; wzq_qlappid=${wzq_qlappid}; wzq_qlskey=${wzq_qlskey}; wzq_qluin=${wzq_qluin}; zxg_openid=${zxg_openid}` wx_ck = `pgv_info=${pgv_info}; pgv_pvid=${pgv_pvid}; qlappid=${qlappid}; qlskey=${qlskey}; qluin=${qluin}; wzq_qlappid=${wzq_qlappid}; wzq_qlskey=${wzq_qlskey}; wzq_qluin=${wzq_qluin}; zxg_openid=${zxg_openid}` } async function initAccountInfo() { for (numUser = 0; numUser < totalUser; numUser++) { await getEnvParam(numUser) coinInfo = "" await orderQuery(1,1,0,0); //获取用户名 coinStart.push(coinInfo) await $.wait(500) } } async function initTaskList() { $.log(`开始初始化任务列表\n`) let taskItem = {} for(let i=0; i= 0) { $.log(`\n======= 用户${numUser+1} ${nickname[numUser]} 开始帮助 用户${helpUser+1} ${nickname[helpUser]} =======\n`) //长牛互助,同一用户只能相互助力3次,默认不跑 if(bullHelpFlag == 1) { if(userAppShareCodeArr["bull_invite"][helpUser]&& userAppShareCodeArr["bull_help"][helpUser]) { await bullInvite(userAppShareCodeArr["bull_invite"][helpUser],userAppShareCodeArr["bull_help"][helpUser]) } } //猜涨跌分享 if(userAppShareCodeArr["guess_invite"][helpUser] && userAppShareCodeArr["guess_ticket"][helpUser] && userAppShareCodeArr["guess_time"][helpUser]) { await wxGuessHelp(userAppShareCodeArr["guess_invite"][helpUser],userAppShareCodeArr["guess_ticket"][helpUser],userAppShareCodeArr["guess_time"][helpUser]); } //APP助力任务 if(appShareFlag == 1) { for(let j=0; j { let signurl = { url: `https://wzq.tenpay.com/cgi-bin/activity_sign_task.fcgi?actid=${actid}&channel=1&type=welfare_sign&action=home&_=${rndtime}&openid=${app_openid}&fskey=${app_fskey}&access_token=${app_token}&_appName=${app_appName}&_appver=${app_appver}&_osVer=${app_osVer}&_devId=${app_devId}`, headers: { 'Cookie': app_ck, 'Accept': `application/json, text/plain, */*`, 'Connection': `keep-alive`, 'Referer': `https://wzq.tenpay.com/activity/page/welwareCenter/`, 'Accept-Encoding': `gzip, deflate, br`, 'Host': `wzq.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-cn` }, }; $.get(signurl, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if(logDebug) console.log(result); if (result.retcode == 0) { if(!result.forbidden_code) { if(signType == 0){ for(let i=0; i { let signurl = { url: `https://wzq.tenpay.com/cgi-bin/activity_sign_task.fcgi?actid=${actid}&channel=1&action=signdone&date=${todayDate}&_=${rndtime}&openid=${app_openid}&fskey=${app_fskey}&access_token=${app_token}&_appName=${app_appName}&_appver=${app_appver}&_osVer=${app_osVer}&_devId=${app_devId}`, headers: { 'Cookie': app_ck, 'Accept': `application/json, text/plain, */*`, 'Connection': `keep-alive`, 'Referer': `https://wzq.tenpay.com/activity/page/welwareCenter/`, 'Accept-Encoding': `gzip, deflate, br`, 'Host': `wzq.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-cn` }, }; $.get(signurl, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if (result.retcode == 0) { $.log(`签到获得 ${result.reward_desc}\n`); $.log(`签到时间:${time(rndtime)}\n`); await $.wait(5000); //等待5秒 } else { $.log(`签到失败:${result.retmsg}`) } await signStatus(actid,1) } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }); }); } //连续签到奖励 async function sign7daysAward(actid,lotto_ticket) { rndtime = Math.round(new Date().getTime()) return new Promise((resolve) => { let signurl = { url: `https://wzq.tenpay.com/cgi-bin/activity_sign_task.fcgi?actid=${actid}&action=award&reward_ticket=${lotto_ticket}&_=${rndtime}&openid=${app_openid}&fskey=${app_fskey}&channel=1&access_token=${app_token}&_appName=${app_appName}&_appver=${app_appver}&_osVer=${app_osVer}&_devId=${app_devId}`, headers: { 'Cookie': app_ck, 'Accept': `application/json, text/plain, */*`, 'Connection': `keep-alive`, 'Referer': `https://wzq.tenpay.com/activity/page/welwareCenter/`, 'Accept-Encoding': `gzip, deflate, br`, 'Host': `wzq.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-cn` }, }; $.get(signurl, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if (result.retcode == 0) { $.log(`获得连续签到奖励: ${result.reward_desc}\n`); } else { $.log(`领取连续签到奖励失败:${result.retmsg}`) } await $.wait(1000); } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }); }); } //新手任务奖励 async function appNewbieAward(actid,ticket) { return new Promise((resolve, reject) => { let testurl = { url: `https://wzq.tenpay.com/cgi-bin/activity_task.fcgi?action=award&channel=1&actid=${actid}&reward_ticket=${ticket}&openid=${app_openid}&fskey=${app_fskey}&channel=1&access_token=${app_token}&_appName=${app_appName}&_appver=${app_appver}&_osVer=${app_osVer}&_devId=${app_devId}`, headers: { 'Cookie': app_ck, 'Accept': `*/*`, 'Connection': `keep-alive`, 'Referer': `http://zixuanguapp.finance.qq.com`, 'Accept-Encoding': `gzip,deflate`, 'Host': `wzq.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-Hans-CN;q=1, en-CN;q=0.9` }, } $.get(testurl, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data) if(logDebug) console.log(result) if(result.retcode == 0){ $.log(`获得新手任务[actid:${actid}]阶段奖励: ${result.reward_desc}\n`); await $.wait(1000); //等待10秒 } else { $.log(`新手任务[actid:${actid}]阶段未完成:${result.retmsg}\n`); await $.wait(100); } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }) }) } //APP任务列表查询 async function appTaskListQuery(taskItem) { rndtime = Math.round(new Date().getTime()) return new Promise((resolve) => { let url = { url: `https://wzq.tenpay.com/cgi-bin/activity_${taskItem.activity}.fcgi?action=home&type=${taskItem.type}&actid=${taskItem.actid}&channel=1&invite_code=&_=${rndtime}&openid=${app_openid}&fskey=${app_fskey}&channel=1&access_token=${app_token}&_appName=${app_appName}&_appver=${app_appver}&_osVer=${app_osVer}&_devId=${app_devId}`, headers: { 'Cookie': app_ck, 'Accept': `application/json, text/plain, */*`, 'Connection': `keep-alive`, 'Referer': `https://wzq.tenpay.com/activity/page/welwareCenter/`, 'Accept-Encoding': `gzip, deflate, br`, 'Host': `wzq.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-cn` }, }; $.get(url, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if (result.retcode == 0) { if(result.task_pkg && result.task_pkg.length > 0){ scanList.push(taskItem.actid) if(TEST_PRINT == 1) { if(logDebug) console.log(result) console.log(`===================== actid=${taskItem.actid} start ======================`) for(let i=0; i { let url = { url: `https://wzq.tenpay.com/cgi-bin/activity_${taskItem.activity}.fcgi?action=home&type=${taskItem.type}&actid=${taskItem.actid}&invite_code=&_=${rndtime}&openid=${app_openid}&fskey=${app_fskey}&channel=1&access_token=${app_token}&_appName=${app_appName}&_appver=${app_appver}&_osVer=${app_osVer}&_devId=${app_devId}`, headers: { 'Cookie': app_ck, 'Accept': `application/json, text/plain, */*`, 'Connection': `keep-alive`, 'Referer': `https://wzq.tenpay.com/activity/page/welwareCenter/`, 'Accept-Encoding': `gzip, deflate, br`, 'Host': `wzq.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-cn` }, }; $.get(url, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if(logDebug) console.log(result) if (result.retcode == 0) { if(result.task_pkg != null){ let numPkg = result.task_pkg.length for(let i=0; i 0) { //已领取过新手奖励 continue } if(result.task_pkg[i].tasks && result.task_pkg[i].tasks[0]) { let numTask = result.task_pkg[i].tasks.length for(let j=0; j { let testurl = { url: `https://wzq.tenpay.com/cgi-bin/activity_task.fcgi?id=${task_id}&tid=${task_tid}&actid=${taskItem.actid}&channel=1&action=taskstatus&_rndtime=${rndtime}&openid=${app_openid}&fskey=${app_fskey}&channel=1&access_token=${app_token}&_appName=${app_appName}&_appver=${app_appver}&_osVer=${app_osVer}&_devId=${app_devId}`, headers: { 'Cookie': app_ck, 'Accept': `*/*`, 'Connection': `keep-alive`, 'Referer': `http://zixuanguapp.finance.qq.com`, 'Accept-Encoding': `gzip,deflate`, 'Host': `wzq.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-Hans-CN;q=1, en-CN;q=0.9` }, } $.get(testurl, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data) if(logDebug) console.log(result) await $.wait(100); if(result.retcode == 0){ if(result.done == 0) { await appTaskticket(taskItem,task_id,task_tid); } else { $.log(`${taskItem.taskName}[actid:${taskItem.actid},id:${task_id},tid:${task_tid}]已完成\n`); } } else { $.log(`${taskItem.taskName}状态查询失败:${result.retmsg}\n`); } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }) }) } //APP票据申请 async function appTaskticket(taskItem,task_id,task_tid) { rndtime = Math.round(new Date().getTime()) return new Promise((resolve, reject) => { let testurl = { url: `https://wzq.tenpay.com/cgi-bin/activity_task.fcgi?action=taskticket&channel=1&actid=${taskItem.actid}&_rndtime=${rndtime}&openid=${app_openid}&fskey=${app_fskey}&channel=1&access_token=${app_token}&_appName=${app_appName}&_appver=${app_appver}&_osVer=${app_osVer}&_devId=${app_devId}`, headers: { 'Cookie': app_ck, 'Accept': `*/*`, 'Connection': `keep-alive`, 'Referer': `http://zixuanguapp.finance.qq.com`, 'Accept-Encoding': `gzip,deflate`, 'Host': `wzq.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-Hans-CN;q=1, en-CN;q=0.9` }, } $.get(testurl, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data) if(logDebug) console.log(result) await $.wait(100); if(result.retcode == 0 && result.task_ticket){ await appTaskDone(taskItem,result.task_ticket,task_id,task_tid); } else { $.log(`${taskItem.taskName}申请票据失败:${result.retmsg}\n`); } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }) }) } //做APP任务 async function appTaskDone(taskItem,ticket,task_id,task_tid) { return new Promise((resolve, reject) => { let testurl = { url: `https://wzq.tenpay.com/cgi-bin/activity_task.fcgi?action=taskdone&channel=1&actid=${taskItem.actid}&id=${task_id}&tid=${task_tid}&task_ticket=${ticket}&openid=${app_openid}&fskey=${app_fskey}&channel=1&access_token=${app_token}&_appName=${app_appName}&_appver=${app_appver}&_osVer=${app_osVer}&_devId=${app_devId}`, headers: { 'Cookie': app_ck, 'Accept': `*/*`, 'Connection': `keep-alive`, 'Referer': `http://zixuanguapp.finance.qq.com`, 'Accept-Encoding': `gzip,deflate`, 'Host': `wzq.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-Hans-CN;q=1, en-CN;q=0.9` }, } $.get(testurl, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data) if(logDebug) console.log(result) await $.wait(100); if(result.retcode == 0){ $.log(`完成${taskItem.taskName}[actid:${taskItem.actid},id:${task_id},tid:${task_tid}]:获得 ${result.reward_desc}\n`); await $.wait(10000); //等待10秒 } else { $.log(`${taskItem.taskName}[actid:${taskItem.actid},id:${task_id},tid:${task_tid}]未完成:${result.retmsg}\n`); } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }) }) } //微信任务列表查询 async function wxTaskListQuery(taskItem) { rndtime = Math.round(new Date().getTime()) return new Promise((resolve) => { let url = { url: `https://wzq.tenpay.com/cgi-bin/activity_${taskItem.activity}.fcgi?action=home&type=${taskItem.type}&actid=${taskItem.actid}&invite_code=&_=${rndtime}`, headers: { 'Cookie': wx_ck, 'Accept': `application/json, text/plain, */*`, 'Connection': `keep-alive`, 'Referer': `https://wzq.tenpay.com/activity/page/welwareCenter/`, 'Accept-Encoding': `gzip, deflate, br`, 'Host': `wzq.tenpay.com`, 'User-Agent': wx_UA, 'Accept-Language': `zh-cn` }, }; $.get(url, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if (result.retcode == 0) { if(result.task_pkg && result.task_pkg.length > 0){ scanList.push(taskItem.actid) if(TEST_PRINT == 1) { if(logDebug) console.log(result) console.log(`===================== actid=${taskItem.actid} start ======================`) for(let i=0; i { let url = { url: `https://wzq.tenpay.com/cgi-bin/activity_${taskItem.activity}.fcgi?action=home&type=${taskItem.type}&actid=${taskItem.actid}&invite_code=&_=${rndtime}`, headers: { 'Cookie': wx_ck, 'Accept': `application/json, text/plain, */*`, 'Connection': `keep-alive`, 'Referer': `https://wzq.tenpay.com/activity/page/welwareCenter/`, 'Accept-Encoding': `gzip, deflate, br`, 'Host': `wzq.tenpay.com`, 'User-Agent': wx_UA, 'Accept-Language': `zh-cn` }, }; $.get(url, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if(logDebug) console.log(result) if (result.retcode == 0) { if(result.task_pkg && result.task_pkg[0]){ let numPkg = result.task_pkg.length for(let i=0; i { let url = { url: `https://wzq.tenpay.com/cgi-bin/activity_task.fcgi?t=${rndtime}`, body: `_h5ver=2.0.1&actid=${taskItem.actid}&id=${task_id}&tid=${task_tid}&action=taskstatus`, headers: { 'Accept': `application/json, text/plain, */*`, 'Origin': `https://wzq.tenpay.com`, 'Accept-Encoding': `gzip, deflate, br`, 'Cookie': wx_ck, 'Content-Type': `application/x-www-form-urlencoded`, 'Host': `wzq.tenpay.com`, 'Connection': `keep-alive`, 'User-Agent': wx_UA, 'Referer': `https://wzq.tenpay.com/mp/v2/index.html`, 'Accept-Language': `zh-cn` }, }; $.post(url, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data) if(logDebug) console.log(result) await $.wait(100); if(result.retcode == 0){ if(result.done == 0) { await wxTaskticket(taskItem,task_id,task_tid); } else { $.log(`${taskItem.taskName}[actid:${taskItem.actid},id:${task_id},tid:${task_tid}]已完成\n`); } } else { $.log(`${taskItem.taskName}状态查询失败:${result.retmsg}\n`); } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }) }) } //WX票据申请 async function wxTaskticket(taskItem,task_id,task_tid) { rndtime = Math.round(new Date().getTime()) return new Promise((resolve) => { let url = { url: `https://wzq.tenpay.com/cgi-bin/activity_task.fcgi?t=${rndtime}`, body: `_h5ver=2.0.1&actid=${taskItem.actid}&action=taskticket`, headers: { 'Accept': `application/json, text/plain, */*`, 'Origin': `https://wzq.tenpay.com`, 'Accept-Encoding': `gzip, deflate, br`, 'Cookie': wx_ck, 'Content-Type': `application/x-www-form-urlencoded`, 'Host': `wzq.tenpay.com`, 'Connection': `keep-alive`, 'User-Agent': wx_UA, 'Referer': `https://wzq.tenpay.com/mp/v2/index.html`, 'Accept-Language': `zh-cn` }, }; $.post(url, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if(logDebug) console.log(result) await $.wait(100); if(result.retcode == 0 && result.task_ticket){ await wxTaskDone(taskItem,result.task_ticket,task_id,task_tid); } else { $.log(`${taskItem.taskName}申请票据失败:${result.retmsg}\n`); } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }); }); } //做WX任务 async function wxTaskDone(taskItem,wxticket,task_id,task_tid) { rndtime = Math.round(new Date().getTime()) return new Promise((resolve, reject) => { let url = { url: `https://wzq.tenpay.com/cgi-bin/activity_task.fcgi?t=${rndtime}`, body: `_h5ver=2.0.1&actid=${taskItem.actid}&tid=${task_tid}&id=${task_id}&task_ticket=${wxticket}&action=taskdone`, headers: { 'Accept': `application/json, text/plain, */*`, 'Origin': `https://wzq.tenpay.com`, 'Accept-Encoding': `gzip, deflate, br`, 'Cookie': wx_ck, 'Content-Type': `application/x-www-form-urlencoded`, 'Host': `wzq.tenpay.com`, 'Connection': `keep-alive`, 'User-Agent': wx_UA, 'Referer': `https://wzq.tenpay.com/mp/v2/index.html`, 'Accept-Language': `zh-cn` }, }; $.post(url, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data) if(logDebug) console.log(result) await $.wait(100); if(result.retcode == 0){ $.log(`完成${taskItem.taskName}[actid:${taskItem.actid},id:${task_id},tid:${task_tid}]:获得 ${result.reward_desc}\n`); await $.wait(10000); //等待10秒 } else { $.log(`${taskItem.taskName}[actid:${taskItem.actid},id:${task_id},tid:${task_tid}]未完成:${result.retmsg}\n`); } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }) }) } //提现查询 async function orderQuery(getName,getCoinNum,isWithdraw,logCoin) { rndtime = Math.round(new Date().getTime()) return new Promise((resolve, reject) => { let testurl = { url: `https://zqact03.tenpay.com/cgi-bin/shop.fcgi?action=home_v2&type=2&_=${rndtime}&openid=${app_openid}&fskey=${app_fskey}&channel=1&access_token=${app_token}&_appName=${app_appName}&_appver=${app_appver}&_osVer=${app_osVer}&_devId=${app_devId}`, headers: { 'Cookie': app_ck, 'Accept': `*/*`, 'Connection': `keep-alive`, 'Referer': `https://zqact03.tenpay.com/activity/page/exchangeRights/`, 'Accept-Encoding': `gzip, deflate, br`, 'Host': `zqact03.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-CN,zh-Hans;q=0.9` }, } $.get(testurl, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data) if(logDebug) console.log(result) if(result.retcode == 0){ if(getName == 1) { $.log(`获取用户${numUser+1}昵称成功:${result.shop_asset.nickname}\n`); nickname.push(result.shop_asset.nickname) } if(getCoinNum == 1) { coinInfo = result.shop_asset.amount } $.log(`用户 ${nickname[numUser]} 金币余额: ${result.shop_asset.amount}\n`); if(logCoin) { notifyStr += `用户 ${nickname[numUser]} 金币余额: ${result.shop_asset.amount}\n` } if(cash != 0 && isWithdraw == 1) { if(result.cash != null && result.cash.length > 0){ let cashStr = `${cash}元现金` for(let k=0; k= 0){ $.log(`用户 ${nickname[numUser]} 金币余额多于${cashItem.coins},开始提现${cashStr}\n`); notifyStr += `用户 ${nickname[numUser]} 金币余额多于${cashItem.coins},开始提现${cashStr}\n` await cashTicket(cashItem.item_id) } else { $.log(`用户 ${nickname[numUser]} 金币余额不足,不进行提现\n`); } } } } } } else { $.log(`提现列表获取失败:${task.retmsg}\n`); } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }) }) } //提现票据 async function cashTicket(item_id) { rndtime = Math.round(new Date().getTime()) return new Promise((resolve) => { let url = { url: `https://zqact03.tenpay.com/cgi-bin/shop.fcgi?action=order_ticket&type=2&_=${rndtime}&openid=${app_openid}&fskey=${app_fskey}&channel=1&access_token=${app_token}&_appName=${app_appName}&_appver=${app_appver}&_osVer=${app_osVer}&_devId=${app_devId}`, headers: { 'Cookie': app_ck, 'Accept': `*/*`, 'Connection': `keep-alive`, 'Referer': `https://zqact03.tenpay.com/activity/page/exchangeRights/`, 'Accept-Encoding': `gzip, deflate, br`, 'Host': `zqact03.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-CN,zh-Hans;q=0.9` }, }; $.get(url, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if(result.retcode == 0){ await getcash(result.ticket,item_id) } else { $.log(`提现票据申请失败:${task.retmsg}\n`); } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }); }); } //提现请求 async function getcash(cashticketFb,item_id) { rndtime = Math.round(new Date().getTime()) return new Promise((resolve) => { let url = { url: `https://zqact03.tenpay.com/cgi-bin/shop.fcgi?action=order&type=2&ticket=${cashticketFb}&item_id=${item_id}&_=${rndtime}&openid=${app_openid}&fskey=${app_fskey}&channel=1&access_token=${app_token}&_appName=${app_appName}&_appver=${app_appver}&_osVer=${app_osVer}&_devId=${app_devId}`, headers: { 'Cookie': app_ck, 'Accept': `*/*`, 'Connection': `keep-alive`, 'Referer': `https://zqact03.tenpay.com/activity/page/exchangeRights/`, 'Accept-Encoding': `gzip, deflate, br`, 'Host': `zqact03.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-CN,zh-Hans;q=0.9` }, }; $.get(url, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if(logDebug) console.log(result) if(result.retcode == 0){ $.log(`提现结果:${result.retmsg}`); notifyStr += `提现结果:${result.retmsg}\n` $.log(`查询剩余金额:\n`); await orderQuery(0,0,0,1) } else { $.log(`提现失败:${result.retmsg}\n`) notifyStr += `提现失败:${result.retmsg}\n` } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }); }); } //APP长牛任务 async function bullTaskDone(taskItem, extra="") { rndtime = Math.round(new Date().getTime()) return new Promise((resolve) => { let signurl = { url: `https://zqact03.tenpay.com/cgi-bin/activity_year_party.fcgi?type=bullish&action=${taskItem.action}&actid=${taskItem.actid}${extra}&_=${rndtime}&openid=${app_openid}&fskey=${app_fskey}&channel=1&access_token=${app_token}&_appName=${app_appName}&_appver=${app_appver}&_osVer=${app_osVer}&_devId=${app_devId}`, headers: { 'Cookie': app_ck, 'Accept': `*/*`, 'Connection': `keep-alive`, 'Referer': `https://zqact03.tenpay.com/activity/page/raisebull/`, 'Host': `zqact03.tenpay.com`, 'User-Agent': app_UA, 'Accept-Encoding': `gzip, deflate, br`, 'Accept-Language': `zh-CN,zh-Hans;q=0.9` }, }; $.get(signurl, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if(logDebug) console.log(result) if(result.retcode == 0) { if(result.forbidden_code > 0) { $.log(`结束${taskItem.taskName}:${result.forbidden_reason}\n`); if(logDebug) console.log(result) } else if(result.reward_info) { $.log(`${taskItem.taskName}获得: ${result.reward_info[0].reward_desc}\n`); await $.wait(Math.random()*2000+7000) await bullTaskDone(taskItem) } else if(result.award_desc) { $.log(`${taskItem.taskName}获得: ${result.award_desc}\n`); await $.wait(Math.random()*1000+2000) await bullTaskDone(taskItem,extra) } else if(result.skin_info) { $.log(`${taskItem.taskName}获得: ${result.skin_info.skin_desc}\n`); await $.wait(Math.random()*2000+3000) await bullTaskDone(taskItem) } else if(result.skin_list && result.skin_list[0]) { let numItem = result.skin_list.length for(let j=0; j 1) { await bullTaskDone(bullTaskArray["sell_skin"],`&skin_type=${skinItem.skin_type}`) } } } else if(result.feed_reward_info) { $.log(`${taskItem.taskName}获得: ${result.feed_reward_info.reward_desc}\n`); if(result.level_up_status == 1) { $.log(`长牛升级到等级${result.update_new_level},获得: ${result.level_reward_info.reward_desc}\n`); } await $.wait(Math.random()*3000+6000) await bullTaskDone(taskItem) } else { console.log(result) } } else { $.log(`${taskItem.taskName}失败:${result.retmsg}\n`); } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }); }); } //APP长牛状态+获取互助码 async function bullStatus() { bullStatusFlag = 0 rndtime = Math.round(new Date().getTime()) return new Promise((resolve) => { let signurl = { url: `https://zqact03.tenpay.com/cgi-bin/activity_year_party.fcgi?invite_code=&help_code=&share_date=&type=bullish&action=home&actid=1105&_=${rndtime}&openid=${app_openid}&fskey=${app_fskey}&channel=1&access_token=${app_token}&_appName=${app_appName}&_appver=${app_appver}&_osVer=${app_osVer}&_devId=${app_devId}`, headers: { 'Cookie': app_ck, 'Accept': `*/*`, 'Connection': `keep-alive`, 'Referer': `https://zqact03.tenpay.com/activity/page/raisebull/`, 'Host': `zqact03.tenpay.com`, 'User-Agent': app_UA, 'Accept-Encoding': `gzip, deflate, br`, 'Accept-Language': `zh-CN,zh-Hans;q=0.9` }, }; $.get(signurl, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if(logDebug) console.log(result) if(result.retcode == 0) { if(result.forbidden_code) { $.log(`用户 ${nickname[numUser]} 可能已黑号:${result.forbidden_reason}\n`); } else { if(bullHelpFlag == 1 && shareFlag == 1) { userAppShareCodeArr["bull_invite"].push(result.invite_code) userAppShareCodeArr["bull_help"].push(result.help_code) $.log(`获取用户 ${nickname[numUser]} 的长牛互助码: invite_code=${result.invite_code}, help_code=${result.help_code}\n`); } else { userAppShareCodeArr["bull_invite"].push("") userAppShareCodeArr["bull_help"].push("") } bullStatusFlag = 1 $.log(`长牛状态:\n`) $.log(`等级: ${result.bullish_info.level}\n`) $.log(`下一级需要经验: ${result.bullish_info.next_level_exp}\n`) $.log(`现有经验: ${result.bullish_info.exp_value}\n`) $.log(`现有牛气: ${result.bullish_info.bullish_value}\n`) } } else { $.log(`查询长牛状态失败:${result.retmsg}\n`); } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }); }); } //长牛互助邀请 async function bullInvite(inviteCode="",helpCode="") { rndtime = Math.round(new Date().getTime()) return new Promise((resolve, reject) => { let url = { url: `https://zqact03.tenpay.com/cgi-bin/activity_year_party.fcgi?invite_code=${inviteCode}&help_code=${helpCode}&share_date=${todayDate}&type=bullish&action=home&actid=1105&_=${rndtime}`, headers: { 'Accept': `application/json, text/plain, */*`, 'Accept-Encoding': `gzip, deflate, br`, 'Cookie': wx_ck, 'Content-Type': `application/x-www-form-urlencoded`, 'Host': `zqact03.tenpay.com`, 'Connection': `keep-alive`, 'User-Agent': wx_UA, 'Referer': `https://zqact03.tenpay.com/activity/page/raisebull/?inviteCode=${inviteCode}&helpCode=${helpCode}&date=${todayDate}`, 'Accept-Language': `zh-cn` }, }; $.get(url, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data) if(logDebug) console.log(result) if(result.retcode == 0){ await bullHelpReward(inviteCode,helpCode) await $.wait(1000) } else { $.log(`长牛互助邀请失败:${result.retmsg}\n`); } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }) }) } //长牛互助奖励 async function bullHelpReward(inviteCode="",helpCode="") { rndtime = Math.round(new Date().getTime()) return new Promise((resolve, reject) => { let url = { url: `https://zqact03.tenpay.com/cgi-bin/activity_year_party.fcgi?type=bullish&action=help&actid=1105&help_code=${helpCode}&share_date=${todayDate}&_=${rndtime}`, headers: { 'Accept': `application/json, text/plain, */*`, 'Accept-Encoding': `gzip, deflate, br`, 'Cookie': wx_ck, 'Content-Type': `application/x-www-form-urlencoded`, 'Host': `zqact03.tenpay.com`, 'Connection': `keep-alive`, 'User-Agent': wx_UA, 'Referer': `https://zqact03.tenpay.com/activity/page/raisebull/?inviteCode=${inviteCode}&helpCode=${helpCode}&date=${todayDate}&_=${rndtime}`, 'Accept-Language': `zh-cn` }, }; $.get(url, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data) if(logDebug) console.log(result) if(result.retcode == 0){ if(result.forbidden_code > 0){ $.log(`长牛互助获取奖励失败:${result.forbidden_reason}\n`); } else { $.log(`长牛互助获得:${result.reward_info.reward_desc}\n`); } } else { $.log(`长牛互助获取奖励失败:${result.retmsg}\n`); } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }) }) } //分享任务-APP端发起 async function appShareTaskReq(share_type,task_type) { rndtime = Math.round(new Date().getTime()) return new Promise((resolve) => { let url = { url: `https://wzq.tenpay.com/cgi-bin/activity/activity_share.fcgi?channel=1&action=query_share_code&share_type=${share_type}&_rndtime=${rndtime}&_appName=${app_appName}&_dev=iPhone13,2&_devId=${app_devId}&_appver=${app_appver}&_ifChId=&_isChId=1&_osVer=${app_osVer}&openid=${app_openid}&fskey=${app_fskey}&access_token=${app_token}&buildType=store&check=11&_idfa=&lang=zh_CN`, headers: { 'Cookie': app_ck, 'Accept': `application/json, text/plain, */*`, 'Connection': `keep-alive`, 'Referer': `https://wzq.tenpay.com/activity/page/welwareCenter/`, 'Accept-Encoding': `gzip, deflate, br`, 'Host': `wzq.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-cn` }, }; $.get(url, async (err, resp, data) => { try { if(!userAppShareCodeArr[task_type][share_type]) { userAppShareCodeArr[task_type][share_type] = [] } if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if(logDebug) console.log(result) if(result.retcode == 0) { userAppShareCodeArr[task_type][share_type].push(result.share_code) $.log(`获取用户 ${nickname[numUser]} 的APP的${share_type}互助码: ${result.share_code}\n`); } else { $.log(`获取用户 ${nickname[numUser]} 的APP的${share_type}互助码失败:${result.retmsg}\n`); userAppShareCodeArr[task_type][share_type].push("") } await $.wait(1000) } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }); }); } //分享任务-微信端发起 async function wxShareTaskReq(share_type,task_type) { rndtime = Math.round(new Date().getTime()) return new Promise((resolve, reject) => { let url = { url: `https://wzq.tenpay.com/cgi-bin/activity_share.fcgi?t=${rndtime}`, body: `_h5ver=2.0.1&action=query_share_code&share_type=${share_type}`, headers: { 'Accept': `application/json, text/plain, */*`, 'Origin': `https://wzq.tenpay.com`, 'Accept-Encoding': `gzip, deflate, br`, 'Cookie': wx_ck, 'Content-Type': `application/x-www-form-urlencoded`, 'Host': `wzq.tenpay.com`, 'Connection': `keep-alive`, 'User-Agent': wx_UA, 'Referer': `https://wzq.tenpay.com/mp/v2/index.html`, 'Accept-Language': `zh-cn` }, }; $.post(url, async (err, resp, data) => { try { if(!userWxShareCodeArr[task_type][share_type]) { userWxShareCodeArr[task_type][share_type] = [] } if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); //console.log(data) if(result.retcode == 0) { userWxShareCodeArr[task_type][share_type].push(result.share_code) $.log(`获取用户 ${nickname[numUser]} 的微信的${share_type}互助码: ${result.share_code}\n`); } else { $.log(`获取用户 ${nickname[numUser]} 的微信的${share_type}互助码失败:${result.retmsg}\n`); userWxShareCodeArr[task_type][share_type].push("") } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }) }) } //分享任务-微信端完成 async function wxShareTaskDone(share_type,share_code) { rndtime = Math.round(new Date().getTime()) return new Promise((resolve, reject) => { let url = { url: `https://wzq.tenpay.com/cgi-bin/activity_share.fcgi?t=${rndtime}`, body: `_h5ver=2.0.1&action=share_code_info&share_type=${share_type}&share_code=${share_code}`, headers: { 'Accept': `application/json, text/plain, */*`, 'Origin': `https://wzq.tenpay.com`, 'Accept-Encoding': `gzip, deflate, br`, 'Cookie': wx_ck, 'Content-Type': `application/x-www-form-urlencoded`, 'Host': `wzq.tenpay.com`, 'Connection': `keep-alive`, 'User-Agent': wx_UA, 'Referer': `https://wzq.tenpay.com/mp/v2/index.html?__share_flag__=1`, 'Accept-Language': `zh-cn` }, }; $.post(url, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); //console.log(data) if(result.retcode == 0) { if(result.share_code_info && result.share_code_info.status == 1) { $.log(`${share_type}互助成功:对方昵称 ${result.share_code_info.nickname}\n`); } else if(result.retmsg == "OK") { $.log(`${share_type}已经互助过了\n`); } else { console.log(result) } await $.wait(1000) } else { $.log(`${share_type}互助失败:${result.retmsg}\n`); } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }) }) } //猜涨跌互助 async function wxGuessHelp(invite_code="",invite_ticket="",invite_time="") { let guessTicket = encodeURI(invite_ticket) rndtime = Math.round(new Date().getTime()) return new Promise((resolve, reject) => { let url = { url: `https://zqact.tenpay.com/cgi-bin/guess_home.fcgi?channel=0&source=2&new_version=2&invite_code=${invite_code}&invite_time=${invite_time}&invite_ticket=${guessTicket}&_=${rndtime}`, headers: { 'Accept': `*/*`, 'Accept-Encoding': `gzip, deflate, br`, 'Cookie': wx_ck, 'Content-Type': `application/x-www-form-urlencoded`, 'Host': `zqact.tenpay.com`, 'Connection': `keep-alive`, 'User-Agent': wx_UA, 'Referer': `https://zqact.tenpay.com/activity/page/guessRiseFall/`, 'Accept-Language': `zh-cn` }, }; $.get(url, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); //console.log(data) if(result.retcode == 0) { $.log(`猜涨跌互助成功\n`); } else { $.log(`猜涨跌互助失败:${result.retmsg}\n`); } await $.wait(1000) } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }) }) } //猜涨跌状态,获取互助码 async function appGuessStatus() { curTime = new Date() rndtime = Math.round(curTime.getTime()) currentHour = curTime.getHours() currentDay = curTime.getDay() let isGuessTime = ((currentHour < 13) && (currentHour > 9) && (currentDay < 6) && (currentDay > 0)) ? 1 : 0 return new Promise((resolve) => { let url = { url: `https://zqact.tenpay.com/cgi-bin/guess_home.fcgi?channel=1&source=2&new_version=3&_=${rndtime}&openid=${app_openid}&fskey=${app_fskey}&access_token=${app_token}&_appName=${app_appName}&_appver=${app_appver}&_osVer=${app_osVer}&_devId=${app_devId}`, headers: { 'Cookie': app_ck, 'Accept': `application/json, text/plain, */*`, 'Connection': `keep-alive`, 'Referer': `https://zqact.tenpay.com/activity/page/guessRiseFall/`, 'Accept-Encoding': `gzip, deflate, br`, 'Host': `zqact.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-cn` }, }; $.get(url, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if(logDebug) console.log(result) if(result.retcode == 0) { await $.wait(1000) if(result.notice_info && result.notice_info[0]) { if(logDebug) console.log(result) if(result.notice_info[0].answer_status == 1) { $.log(`上期猜上证指数涨跌回答正确,正在取得奖励\n`); await appGuessAward(result.notice_info[0].date) } else { $.log(`上期猜上证指数涨跌回答错误\n`); } await $.wait(1000) } if(result.stock_notice_info && result.stock_notice_info[0]) { if(logDebug) console.log(result) if(result.stock_notice_info[0].guess_correct == 1) { $.log(`上期猜个股涨跌回答正确,正在取得奖励\n`); await appGuessStockAward(result.stock_notice_info[0].date) } else { $.log(`上期猜个股涨跌回答错误\n`); } await $.wait(1000) } if(isGuessTime) { if((result.T_info && result.T_info[0] && result.T_info[0].user_answer == 0) || (result.T1_info && result.T1_info[0] && result.T1_info[0].user_answer == 0)) { if(result.date_list) { for(let i=0; i 0) { await $.wait(100) await appGuessRiseFall(guessOption,guessItem.date) } else { $.log(`获取猜涨跌错误:guessOption=${guessOption}\n`); } } } } } else { $.log(`已竞猜当期上证指数涨跌\n`); } if(result.recommend && Array.isArray(result.recommend)) { recList = result.recommend stockList = recList.sort(function(a,b){return Math.abs(b["zdf"])-Math.abs(a["zdf"])}); guessStockFlag = 1 for(let k=0; k { let url = { url: `https://zqact.tenpay.com/cgi-bin/open_stockinfo.fcgi?scode=${scode}&markets=${markets}&needfive=0&needquote=1&needfollow=0&type=0&channel=1&_=${rndtime}&openid=${app_openid}&fskey=${app_fskey}&access_token=${app_token}&_appName=${app_appName}&_appver=${app_appver}&_osVer=${app_osVer}&_devId=${app_devId}`, headers: { 'Cookie': app_ck, 'Accept': `*/*`, 'Connection': `keep-alive`, 'Referer': `https://zqact.tenpay.com/activity/page/guessRiseFall/`, 'Accept-Encoding': `gzip, deflate, br`, 'Host': `zqact.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-cn`, }, }; $.get(url, async (err, resp, data) => { try { data = data.replace(/\\x/g,'') if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if(logDebug) console.log(result) if(result.retcode == 0) { stockName = result.secu_info.secu_name || '' if(stockName) { let dqj = result.secu_quote.dqj || 0 let zsj = result.secu_quote.zsj || 0 let raise = dqj - zsj let ratio = raise/zsj*100 let guessStr = (raise < 0) ? '跌' : '涨' guessOption = (raise < 0) ? 2 : 1 $.log(`${stockName}:当前价格${dqj},前天收市价${zsj},涨幅${Math.floor(ratio*100)/100}% (${Math.floor(raise*100)/100}),猜${guessStr}`); } } else { $.log(`获取个股信息失败:${result.retmsg}`); } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }); }); } //猜上证指数涨跌奖励 async function appGuessAward(guessDate) { rndtime = Math.round(curTime.getTime()) return new Promise((resolve) => { let url = { url: `https://zqact.tenpay.com/cgi-bin/activity.fcgi?channel=1&activity=guess_new&guess_act_id=3&guess_date=${guessDate}&guess_reward_type=1&_=${rndtime}&openid=${app_openid}&fskey=${app_fskey}&access_token=${app_token}&_appName=${app_appName}&_appver=${app_appver}&_osVer=${app_osVer}&_devId=${app_devId}`, headers: { 'Cookie': app_ck, 'Accept': `application/json, text/plain, */*`, 'Connection': `keep-alive`, 'Referer': `https://zqact.tenpay.com/activity/page/guessRiseFall/`, 'Accept-Encoding': `gzip, deflate, br`, 'Host': `zqact.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-cn` }, }; $.get(url, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if(logDebug) console.log(result) if(result.retcode == 0) { $.log(`获得上证指数猜涨跌奖励:${result.reward_memo} ${result.reward_value}金币\n`); } else { $.log(`获得上证指数猜涨跌奖励失败:${result.retmsg}\n`); } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }); }); } //猜个股涨跌奖励 async function appGuessStockAward(guessDate) { rndtime = Math.round(curTime.getTime()) return new Promise((resolve) => { let url = { url: `https://zqact.tenpay.com/cgi-bin/activity/activity.fcgi?activity=guess_new&action=guess_stock_reward&guess_date=${guessDate}&channel=1&_=${rndtime}&openid=${app_openid}&fskey=${app_fskey}&access_token=${app_token}&_appName=${app_appName}&_appver=${app_appver}&_osVer=${app_osVer}&_devId=${app_devId}`, headers: { 'Cookie': app_ck, 'Accept': `application/json, text/plain, */*`, 'Connection': `keep-alive`, 'Referer': `https://zqact.tenpay.com/activity/page/guessRiseFall/`, 'Accept-Encoding': `gzip, deflate, br`, 'Host': `zqact.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-cn` }, }; $.get(url, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if(logDebug) console.log(result) if(result.retcode == 0) { if(result.stock_rewards && Array.isArray(result.stock_rewards)) { for(let i=0; i { let url = { url: `https://zqact.tenpay.com/cgi-bin/guess_op.fcgi?action=2&act_id=3&user_answer=${answer}&date=${guessDate}&channel=1&_=${rndtime}&openid=${app_openid}&fskey=${app_fskey}&access_token=${app_token}&_appName=${app_appName}&_appver=${app_appver}&_osVer=${app_osVer}&_devId=${app_devId}`, headers: { 'Cookie': app_ck, 'Accept': `application/json, text/plain, */*`, 'Connection': `keep-alive`, 'Referer': `https://zqact.tenpay.com/activity/page/guessRiseFall/`, 'Accept-Encoding': `gzip, deflate, br`, 'Host': `zqact.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-cn` }, }; $.get(url, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if(logDebug) console.log(result) guessStr = (answer==1) ? "猜涨" : "猜跌" if(result.retcode == 0) { $.log(`上证指数 猜涨跌成功:${guessStr}\n`); } else { $.log(`上证指数 ${guessStr}失败:${result.retmsg}\n`); } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }); }); } //猜个股涨跌次数 async function appGuessStockStatus(stockItem) { rndtime = Math.round(new Date().getTime()) return new Promise((resolve) => { let url = { url: `https://wzq.tenpay.com/cgi-bin/guess_home.fcgi?access_token=${app_token}&openid=${app_openid}&fskey=${app_fskey}&check=11&_dev=iPhone13,2&_devId=${app_devId}&_appver=${app_appver}&_osVer=${app_osVer}&_appName=${app_appName}&source=3&channel=1&symbol=${stockItem.symbol}&new_version=3`, headers: { 'Cookie': app_ck, 'Accept': `application/json, text/plain, */*`, 'Connection': `keep-alive`, 'Referer': `https://zqact.tenpay.com/activity/page/guessRiseFall/`, 'Accept-Encoding': `gzip, deflate, br`, 'Host': `zqact.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-cn` }, }; $.get(url, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if(logDebug) console.log(result) if(result.retcode == 0) { $.log(`剩余猜个股涨跌次数:${result.guess_times_left}`); if(result.guess_times_left > 0) { if(result.T_info.user_answer > 0) { $.log(`已竞猜:${stockItem.stockname}\n`); } else { let guessStr = (stockItem.zdf < 0) ? '跌' : '涨' let answer = (stockItem.zdf < 0) ? 2 : 1 console.log(`${stockItem.stockname}今天涨幅为${stockItem.zdf}%,猜${guessStr}`) await $.wait(1000) await appGuessStock(stockItem,answer) } } else { $.log(`竞猜个股次数已用完\n`); guessStockFlag = 0 } } else { $.log(`获取猜个股涨跌次数失败:${result.retmsg}\n`); } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }); }); } //猜个股涨跌 async function appGuessStock(stockItem,answer) { rndtime = Math.round(curTime.getTime()) return new Promise((resolve) => { let url = { url: `https://wzq.tenpay.com/cgi-bin/guess_op.fcgi?access_token=${app_token}&openid=${app_openid}&fskey=${app_fskey}&check=11&_dev=iPhone13,2&_devId=${app_devId}&_appver=${app_appver}&_osVer=${app_osVer}&_appName=${app_appName}&`, headers: { 'Cookie': app_ck, 'Accept': `application/json, text/plain, */*`, 'Connection': `keep-alive`, 'Referer': `https://zqact.tenpay.com/activity/page/guessRiseFall/`, 'Accept-Encoding': `gzip, deflate, br`, 'Host': `zqact.tenpay.com`, 'User-Agent': app_UA, 'Accept-Language': `zh-cn` }, body: `source=3&channel=1&outer_src=0&new_version=3&symbol=${stockItem.symbol}&date=${todayDate}&action=2&user_answer=${answer}&access_token=${app_token}&openid=${app_openid}&fskey=${app_fskey}&check=11&`, }; $.post(url, async (err, resp, data) => { try { if (err) { console.log("腾讯自选股: API查询请求失败 ‼️‼️"); console.log(JSON.stringify(err)); $.logErr(err); } else { if (safeGet(data)) { let result = JSON.parse(data); if(logDebug) console.log(result) let guessStr = (answer==1) ? "猜涨" : "猜跌" if(result.retcode == 0) { $.log(`${stockItem.stockname} 猜涨跌成功:${guessStr}\n`); } else { $.log(`${stockItem.stockname} ${guessStr}失败:${result.retmsg}\n`); } } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }); }); } //////////////////////////////////////////////////////////////////// function time(time) { var date = new Date(time + 8 * 3600 * 1000); return date.toJSON().substr(0, 19).replace('T', ' ').replace(/-/g, '.'); } function safeGet(data) { try { if (typeof JSON.parse(data) == "object") { return true; } } catch (e) { console.log(e); console.log(`服务器访问数据为空,请检查自身设备网络情况`); return false; } } function printCaller(){ return (new Error()).stack.split("\n")[2].trim().split(" ")[1] } function formatDateTime(inputTime) { var date = new Date(inputTime); var y = date.getFullYear(); var m = date.getMonth() + 1; m = m < 10 ? ('0' + m) : m; var d = date.getDate(); d = d < 10 ? ('0' + d) : d; var h = date.getHours(); h = h < 10 ? ('0' + h) : h; var minute = date.getMinutes(); var second = date.getSeconds(); minute = minute < 10 ? ('0' + minute) : minute; second = second < 10 ? ('0' + second) : second; return `${y}${m}${d}`; }; function Env(t, e) { 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("", `\ud83d\udd14${this.name}, \u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } isSurge() { return "undefined" != typeof $httpClient && "undefined" == typeof $loon } isLoon() { return "undefined" != typeof $loon } 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("@"), a = { url: `http://${h}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": o, Accept: "*/*" } }; this.post(a, (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(); 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) { let e = { "M+": (new Date).getMonth() + 1, "d+": (new Date).getDate(), "H+": (new Date).getHours(), "m+": (new Date).getMinutes(), "s+": (new Date).getSeconds(), "q+": Math.floor(((new Date).getMonth() + 3) / 3), S: (new Date).getMilliseconds() }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, ((new Date).getFullYear() + "").substr(4 - RegExp.$1.length))); for (let s in e) new RegExp("(" + s + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? e[s] : ("00" + e[s]).substr(("" + e[s]).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 } } } }; this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r))); let h = ["", "==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="]; h.push(e), s && h.push(s), i && h.push(i), console.log(h.join("\n")), this.logs = this.logs.concat(h) } 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("", `\u2757\ufe0f${this.name}, \u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name}, \u9519\u8bef!`, t) } wait(t) { return new Promise(e => setTimeout(e, t)) } done(t = {}) { const e = (new Date).getTime(), s = (e - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) } }(t, e) }