From faf5cbb9b05fac0f6909ce8d59ac9fc84008c303 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Wed, 16 Dec 2020 07:17:56 +0800 Subject: [PATCH 01/57] Update qqre.js --- qqre.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/qqre.js b/qqre.js index e732ad5..e09b6e5 100644 --- a/qqre.js +++ b/qqre.js @@ -248,12 +248,12 @@ function qqreadbox2() { function showmsg() { console.log(tz) let d = new Date(new Date().getTime() + 8 * 60 * 60 * 1000); -let gold=Number(task.data.user.amount) -if (notifyInterval==1&&gold >= 50000 && d.getHours()>=9 && d.getHours()<=20&&task.data.treasureBox.doneFlag==0){ +//let gold=Number(task.data.user.amount) +if (notifyInterval==1 && d.getHours()>=9 && d.getHours()<=20&&task.data.treasureBox.doneFlag==0){ notify.sendNotify(jsname,tz,'');//显示所有通知 console.log('显示所有通知') } -else if (notifyInterval==2&&gold >= 100000&&d.getHours()>=9&&d.getHours()<=20&&task.data.treasureBox.doneFlag==15){ +else if (notifyInterval==2&&d.getHours()>=9&&d.getHours()<=20&&task.data.treasureBox.doneFlag==15){ notify.sendNotify(jsname,kz,'')//宝箱每15次通知一次 console.log('宝箱每15次通知一次') } From d24830a568fd1d25afdecd001a7db81b571dc2d3 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Wed, 16 Dec 2020 07:19:05 +0800 Subject: [PATCH 02/57] Update qqre.js --- qqre.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qqre.js b/qqre.js index e09b6e5..e339f63 100644 --- a/qqre.js +++ b/qqre.js @@ -248,7 +248,7 @@ function qqreadbox2() { function showmsg() { console.log(tz) let d = new Date(new Date().getTime() + 8 * 60 * 60 * 1000); -//let gold=Number(task.data.user.amount) + if (notifyInterval==1 && d.getHours()>=9 && d.getHours()<=20&&task.data.treasureBox.doneFlag==0){ notify.sendNotify(jsname,tz,'');//显示所有通知 console.log('显示所有通知') From ce3a1c7de8a2ee9055f36829c02d88648d21b437 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Wed, 16 Dec 2020 07:19:28 +0800 Subject: [PATCH 03/57] Update main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 75c5341..111a65b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,7 +22,7 @@ jobs: - name: Checkout uses: actions/checkout@v2 with: - repository: lxmd01/qq + repository: lxmd02/qq - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: From 6a9574f5d6085e5820ac33d2e26632d7f63b38e7 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Wed, 16 Dec 2020 08:22:08 +0800 Subject: [PATCH 04/57] Update main.yml --- .github/workflows/main.yml | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 111a65b..56d418b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,28 +1,28 @@ # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions -name: 企鹅阅读 +# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: qqreads on: workflow_dispatch: schedule: - - cron: '*/2 * * * *' - watch: - types: [started] - + - cron: '*/7 * * * *' + jobs: build: + runs-on: ubuntu-latest if: github.event.repository.owner.id == github.event.sender.id env: QQREAD_HEADER: ${{ secrets.QQREAD_HEADER }} - QQREAD_TIMEHEADER: ${{ secrets.QQREAD_TIMEHEADER }} QQREAD_TIMEURL: ${{ secrets.QQREAD_TIMEURL }} + QQREAD_TIMEHEADER: ${{ secrets.QQREAD_TIMEHEADER }} steps: - name: Checkout uses: actions/checkout@v2 - with: - repository: lxmd02/qq - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: @@ -34,18 +34,11 @@ jobs: with: path: node_modules key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('package-lock.json') }} # 使用 package-lock.json 的 Hash 作为缓存的 key。也可以使用 package.json 代替 - - name: npm install - if: env.QQREAD_HEADER + - name: npm install run: | npm install - - name: ' 运行 【企鹅阅读】' + npm install got + npm install tough-cookie + - name: '运行 【QQ阅读】' run: | - node qqre.js - env: - PUSH_KEY: ${{ secrets.PUSH_KEY }} - BARK_PUSH: ${{ secrets.BARK_PUSH }} - BARK_SOUND: ${{ secrets.BARK_SOUND }} - TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN }} - TG_USER_ID: ${{ secrets.TG_USER_ID }} - DD_BOT_TOKEN: ${{ secrets.DD_BOT_TOKEN }} - DD_BOT_SECRET: ${{ secrets.DD_BOT_SECRET }} + node qqreads.js From 1409fffc35691d093398f957eca112828530ca05 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Wed, 16 Dec 2020 08:30:39 +0800 Subject: [PATCH 05/57] Update qqre.js --- qqre.js | 593 +++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 396 insertions(+), 197 deletions(-) diff --git a/qqre.js b/qqre.js index e339f63..23a9a11 100644 --- a/qqre.js +++ b/qqre.js @@ -1,276 +1,475 @@ - - -/*ziye -本人github地址 https://github.com/ziye12/JavaScript -转载请备注个名字,谢谢 -11.25 增加 阅读时长上传,阅读金币,阅读随机金币 -11.25 修复翻倍宝箱不同时领取的问题.增加阅读金币判定 -11.25 修复阅读时长问题,阅读金币问题,请重新获取时长cookiek -11.26 随机金币只有一次,故去除,调整修复阅读金币问题,增加时长上传限制 -11.26 增加领取周时长奖励 -11.26 增加结束命令 -11.27 调整通知为,成功开启宝箱再通知 -11.28 修复错误 -11.29 更新 支持action.默认每天21点到21点20通知 -12.2 修复打卡问题 -12.3 缩短运行时间,由于企鹅读书版本更新.请手动进去看一次书 -12.3 调整推送时间为12点和24点左右 - +/* +ziye +源 github 地址 https://github.com/ziye12/JavaScript */ - -const jsname='企鹅读书' -const $ = Env(jsname) - -console.log(`============ 脚本执行-北京时间(UTC+8):${new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toLocaleString()} =============\n`) -const notify = $.isNode() ? require('./sendNotify') : ''; -var tz=''; -var kz=''; -const logs = 0; //0为关闭日志,1为开启 -const notifyInterval=2 -//0为关闭通知,1为所有通知,2为宝箱领取成功通知,3为宝箱每15次通知一次 - -const dd=1//单次任务延迟,默认1秒 - -const TIME=30//单次时长上传限制,默认5分钟 - -const maxtime=20//每日上传时长限制,默认12小时 - -const wktimess=1200//周奖励领取标准,默认1200分钟 +const jsname = "企鹅读书"; +const $ = Env(jsname); +console.log(`============ 脚本执行-北京时间(UTC+8):${new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toLocaleString()} =============`); + +const logs = 0; //0为关闭日志,1为开启 +const notifyInterval = 0; +//0为关闭通知,1为所有通知,2为宝箱领取成功通知,3为宝箱每18次通知一次 +const dd = 1; //单次任务延迟,默认1秒 +const TIME = 30; //单次时长上传限制,默认5分钟 +const maxtime = 20; //每日上传时长限制,默认20小时 +const wktimess = 1200; //周奖励领取标准,默认1200分钟 const qqreadurlVal = "https://mqqapi.reader.qq.com/mqq/user/init"; -let qqreadheaderVal, qqreadtimeurlVal, qqreadtimeheaderVal,cookiesArr = []; +let qqreadheaderVal, qqreadtimeurlVal, qqreadtimeheaderVal, cookiesArr = []; +var tz = ''; let task = '', config, ssr2 = '', wktime; -let headers = [], timeurls = [], timeheaders = []; - // catch value from Action Secret. - if ($.isNode()) { - -if (process.env.QQREAD_HEADER && process.env.QQREAD_HEADER.indexOf('#') > -1) { - headers = process.env.QQREAD_HEADER.split('#'); - } else { - headers = process.env.QQREAD_HEADER.split(); - }; - if (process.env.QQREAD_TIMEURL && process.env.QQREAD_TIMEURL.indexOf('\n') > -1) { - timeurls = process.env.QQREAD_TIMEURL.split('\n'); - } else { - timeurls = process.env.QQREAD_TIMEURL.split(); - }; - if (process.env.QQREAD_TIMEHEADER && process.env.QQREAD_TIMEHEADER.indexOf('#') > -1) { - timeheaders = process.env.QQREAD_TIMEHEADER.split('#'); - } else { - timeheaders = process.env.QQREAD_TIMEHEADER.split(); - }; -} -for (let index = 0; index < headers.length; index++) { - const json_temp = {qqreadheaderVal:"", qqreadtimeurlVal:"", qqreadtimeheaderVal:""}; - json_temp.qqreadheaderVal = headers[index]; - json_temp.qqreadtimeurlVal = timeurls[index]; - json_temp.qqreadtimeheaderVal = timeheaders[index]; - cookiesArr.push(json_temp); +!(async () => { + await getCookiesFromSecret(); + await qqRead(); +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) + +async function qqRead() { + for (const item of cookiesArr) { + qqreadheaderVal = item["qqreadheaderVal"]; + qqreadtimeurlVal = item["qqreadtimeurlVal"]; + qqreadtimeheaderVal = item["qqreadtimeheaderVal"]; + + await qqreadinfo();//用户名 + await qqreadconfig();//时长查询 + await qqreadtask();//任务列表 + + if (task.data.taskList[0].doneFlag == 0) await qqreaddayread();//阅读任务 + if (task.data.taskList[2].doneFlag == 0) { + await qqreadsign();//金币签到 + await qqreadtake();//阅豆签到 + await qqreadsign2();//签到翻倍 + } + if (task.data.treasureBox.doneFlag == 0) await qqreadbox();//宝箱 + if (task.data.taskList[1].doneFlag == 0) { + await qqreadssr1();//阅读金币1 + await $.wait(3000); + await qqreadssr2();//阅读金币2 + await $.wait(5000); + await qqreadssr3();//阅读金币3 + } + if (task.data.taskList[3].doneFlag == 0) await qqreadvideo();//视频奖励 + if (task.data.treasureBox.videoDoneFlag == 0) await qqreadbox2();//宝箱翻倍 + if (config.data.pageParams.todayReadSeconds / 3600 <= maxtime) await qqreadtime();//阅读时长 + + await qqreadwktime();//周时长查询 + await qqreadpick();//领周时长奖励 + } + await showmsg();//通知 } -let num = 0; -all(); - -function all() { - qqreadheaderVal = cookiesArr[num].qqreadheaderVal; -qqreadtimeurlVal = cookiesArr[num].qqreadtimeurlVal; - qqreadtimeheaderVal = cookiesArr[num].qqreadtimeheaderVal; -$.num = num+ 1; -console.log(`-------------------------\n\n开始企鹅阅读第${$.num}个账号阅读`) - for (let i = 0; i < 5; i++) { - (function (i) { - setTimeout( - function () { - if (i == 0) { - qqreadinfo(); // 用户名 - qqreadtask(); - - - } else if (i == 1) - qqreadtrack(); - // 任务列表 - - - - else if (i == 2 && task.data && task.data.treasureBox.doneFlag == 0) - qqreadbox(); - // 宝箱 - else if ( - i == 3 && task.data && - task.data.treasureBox.videoDoneFlag == 0 - ) - qqreadbox2(); - // 宝箱翻倍 - else if (i == 4 && num< cookiesArr.length - 1) { - showmsg();//通知 - num += 1; - all(); - } else if (i == 4 && num == cookiesArr.length - 1) { - showmsg(); // 通知 - console.log(`-------------------------\n\n企鹅阅读共完成${$.num}个账号阅读,阅读请求全部结束`) - console.log(`============ 脚本执行完毕时间-北京时间(UTC+8):${new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toLocaleString()} =============\n`) - $.done(); - } - }, - - (i + 1) * dd * 1000 - ); - })(i); +function getCookiesFromSecret() { + // catch value from Action Secret. + if ($.isNode()) { + let headers = [], timeurls = [], timeheaders = []; + if (process.env.QQREAD_HEADER) { + if (process.env.QQREAD_HEADER.indexOf('#') > -1) { + headers = process.env.QQREAD_HEADER.split('#'); + } else { + headers = [process.env.QQREAD_HEADER]; + }; + if (process.env.QQREAD_TIMEURL.indexOf('\n') > -1) { + timeurls = process.env.QQREAD_TIMEURL.split('\n'); + } else { + timeurls = [process.env.QQREAD_TIMEURL]; + }; + if (process.env.QQREAD_TIMEHEADER.indexOf('#') > -1) { + timeheaders = process.env.QQREAD_TIMEHEADER.split('#'); + } else { + timeheaders = [process.env.QQREAD_TIMEHEADER]; + }; + } + for (let index = 0; index < headers.length; index++) { + cookiesArr.push({ + "qqreadheaderVal": headers[index] || "", + "qqreadtimeurlVal": timeurls[index] || "", + "qqreadtimeheaderVal": timeheaders[index] || "" + }); + } + console.log(`============ 共 ${cookiesArr.length} 个企鹅读书账号 =============\n`); } } - -// 任务列表 +//任务列表 function qqreadtask() { return new Promise((resolve, reject) => { const toqqreadtaskurl = { url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/page?fromGuid=", - headers: JSON.parse(qqreadtimeheaderVal), - - timeout: 60000, + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 }; $.get(toqqreadtaskurl, (error, response, data) => { if (logs) $.log(`${jsname}, 任务列表: ${data}`); task = JSON.parse(data); - kz += - `【现金余额】:${(task.data.user.amount / 10000).toFixed(2)}元\n` + - `【已开宝箱】:${task.data.treasureBox.count}个\n`; - tz += - `【现金余额】:${(task.data.user.amount / 10000).toFixed(2)}元\n` + - - `【宝箱任务${task.data.treasureBox.count + 1}】:${ - task.data.treasureBox.tipText - }\n`; - + "【任务列表】:余额 " + + task.data.user.amount + + " 金币(" + (task.data.user.amount / 10000) + " 元)\n" + + "【第" + + task.data.invite.issue + + "期】:时间 " + + task.data.invite.dayRange + + "\n" + + " 已邀请 " + + task.data.invite.inviteCount + + " 人,再邀请 " + + task.data.invite.nextInviteConfig.count + + " 人获得 " + + task.data.invite.nextInviteConfig.amount + + " 金币\n" + + "【" + + task.data.taskList[0].title + + "】: " + + task.data.taskList[0].amount + + " 金币," + + task.data.taskList[0].actionText + + "\n" + + "【" + + task.data.taskList[1].title + + "】: " + + task.data.taskList[1].amount + + " 金币," + + task.data.taskList[1].actionText + + "\n" + + "【" + + task.data.taskList[2].title + + "】: " + + task.data.taskList[2].amount + + " 金币," + + task.data.taskList[2].actionText + + "\n" + + "【" + + task.data.taskList[3].title + + "】: " + + task.data.taskList[3].amount + + " 金币," + + task.data.taskList[3].actionText + + "\n" + + "【宝箱任务" + + (task.data.treasureBox.count + 1) + + "】:" + + task.data.treasureBox.tipText + + "\n" + + "【" + + task.data.fans.title + + "】: " + + task.data.fans.fansCount + + " 个好友, " + + task.data.fans.todayAmount + + " 金币\n"; resolve(); }); }); } - - - -// 更新 -function qqreadtrack() { +//用户名 +function qqreadinfo() { return new Promise((resolve, reject) => { - const toqqreadtrackurl = { - url: "https://mqqapi.reader.qq.com/log/v4/mqq/track", - - headers: JSON.parse(qqreadtimeheaderVal), - body: qqreadheaderVal, - timeout: 60000, + const toqqreadinfourl = { + url: qqreadurlVal, + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 }; - $.post(toqqreadtrackurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 更新: ${data}`); - track = JSON.parse(data); - tz += `【数据更新】:更新${track.msg}\n`; + $.get(toqqreadinfourl, (error, response, data) => { + //console.log(data); + if (logs) $.log(`${jsname}, 用户名: ${data}`); + const info = JSON.parse(data); + tz += "\n【用户信息】: " + info.data.user.nickName + "\n"; resolve(); }); }); } +//阅豆签到 +function qqreadtake() { + return new Promise((resolve, reject) => { + const toqqreadtakeurl = { + url: "https://mqqapi.reader.qq.com/mqq/sign_in/user", + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + $.post(toqqreadtakeurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅豆签到: ${data}`); + let take = JSON.parse(data); + if (take.data.takeTicket > 0) tz += "【阅豆签到】:获得 " + take.data.takeTicket + " 豆\n"; + resolve(); + }); + }); +} +//阅读时长任务 +function qqreadconfig() { + return new Promise((resolve, reject) => { + const toqqreadconfigurl = { + url: "https://mqqapi.reader.qq.com/mqq/page/config?router=%2Fpages%2Fbook-read%2Findex&options=", + headers: JSON.parse(qqreadheaderVal) + }; + $.get(toqqreadconfigurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅读时长查询: ${data}`); + config = JSON.parse(data); + if (config.code == 0) tz += "【时长查询】:今日阅读 " + (config.data.pageParams.todayReadSeconds / 60).toFixed(0) + " 分钟\n"; + resolve(); + }); + }); +} +//阅读时长 +function qqreadtime() { + return new Promise((resolve, reject) => { + const toqqreadtimeurl = { + url: qqreadtimeurlVal.replace(/readTime=/g, `readTime=${TIME}`), + headers: JSON.parse(qqreadtimeheaderVal) + }; + $.get(toqqreadtimeurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅读时长: ${data}`); + let time = JSON.parse(data); + if (time && time.code == 0) tz += "【阅读时长】:上传 " + TIME / 6 + " 分钟\n"; + resolve(); + }); + }); +} -// 用户名 -function qqreadinfo() { +//阅读金币1 +function qqreadssr1() { return new Promise((resolve, reject) => { - const toqqreadinfourl = { - url: "https://mqqapi.reader.qq.com/mqq/user/init", + const toqqreadssr1url = { + url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=30`, + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + if (config.data.pageParams.todayReadSeconds / 60 >= 1) { + $.get(toqqreadssr1url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币奖励1: ${data}`); + let ssr1 = JSON.parse(data); + if (ssr1.data.amount > 0) + tz += "【阅读金币1】获得 " + ssr1.data.amount + " 金币\n"; + resolve(); + }); + } + resolve(); + }); +} - headers: JSON.parse(qqreadtimeheaderVal), +//阅读金币2 +function qqreadssr2() { + return new Promise((resolve, reject) => { + const toqqreadssr2url = { + url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=300`, + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + if (config.data.pageParams.todayReadSeconds / 60 >= 5) { + $.get(toqqreadssr2url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币奖励2: ${data}`); + ssr2 = JSON.parse(data); + if (ssr2.code === 0) { + if (ssr2.data.amount > 0) tz += "【阅读金币2】获得 " + ssr2.data.amount + " 金币\n"; + } + resolve(); + }); + } + resolve(); + }); +} - timeout: 60000, +//阅读金币3 +function qqreadssr3() { + return new Promise((resolve, reject) => { + const toqqreadssr3url = { + url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=1800`, + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 }; - $.get(toqqreadinfourl, (error, response, data) => { - if (logs) $.log(`${jsname}, 用户名: ${data}`); - info = JSON.parse(data); - kz += `\n========== 【${info.data.user.nickName}】 ==========\n`; - tz += `\n========== 【${info.data.user.nickName}】 ==========\n`; + if (config.data.pageParams.todayReadSeconds / 60 >= 30) { + $.get(toqqreadssr3url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币奖励3: ${data}`); + let ssr3 = JSON.parse(data); + if (ssr3.code === 0) { + if (ssr3.data.amount > 0) tz += "【阅读金币3】获得 " + ssr3.data.amount + " 金币\n"; + } + resolve(); + }); + } + resolve(); + }); +} +//金币签到 +function qqreadsign() { + return new Promise((resolve, reject) => { + const toqqreadsignurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/clock_in/page", + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + $.get(toqqreadsignurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币签到: ${data}`); + let sign = JSON.parse(data); + if (sign.data.videoDoneFlag) tz += "【金币签到】:获得 " + sign.data.todayAmount + " 金币\n"; resolve(); }); }); } +//金币签到翻倍 +function qqreadsign2() { + return new Promise((resolve, reject) => { + const toqqreadsign2url = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/clock_in_video", + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + $.get(toqqreadsign2url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币签到翻倍: ${data}`); + let sign2 = JSON.parse(data); + if (sign2.code == 0) tz += "【签到翻倍】:获得 " + sign2.data.amount + " 金币\n"; + resolve(); + }); + }); +} +//每日阅读 +function qqreaddayread() { + return new Promise((resolve, reject) => { + const toqqreaddayreadurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/read_book", + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + $.get(toqqreaddayreadurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 每日阅读: ${data}`); + let dayread = JSON.parse(data); + if (dayread.code == 0) tz += "【每日阅读】:获得 " + dayread.data.amount + " 金币\n"; + resolve(); + }); + }); +} +//视频奖励 +function qqreadvideo() { + return new Promise((resolve, reject) => { + const toqqreadvideourl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/watch_video", + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + $.get(toqqreadvideourl, (error, response, data) => { + if (logs) $.log(`${jsname}, 视频奖励: ${data}`); + let video = JSON.parse(data); + if (video.code == 0) tz += "【视频奖励】:获得 " + video.data.amount + " 金币\n"; + resolve(); + }); + }); +} -// 宝箱奖励 +//宝箱奖励 function qqreadbox() { return new Promise((resolve, reject) => { const toqqreadboxurl = { url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box", - headers: JSON.parse(qqreadtimeheaderVal), - timeout: 60000, + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 }; $.get(toqqreadboxurl, (error, response, data) => { if (logs) $.log(`${jsname}, 宝箱奖励: ${data}`); - box = JSON.parse(data); - if (box.data.count >= 0) { - tz += `【宝箱奖励${box.data.count}】:获得${box.data.amount}金币\n`; - } - + const box = JSON.parse(data); + if (box.data.count >= 0) tz += "【宝箱奖励" + box.data.count + "】:获得 " + box.data.amount + " 金币\n"; resolve(); }); }); } -// 宝箱奖励翻倍 +//宝箱奖励翻倍 function qqreadbox2() { return new Promise((resolve, reject) => { const toqqreadbox2url = { - url: - "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box_video", - - headers: JSON.parse(qqreadtimeheaderVal), - timeout: 60000, + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box_video", + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 }; $.get(toqqreadbox2url, (error, response, data) => { if (logs) $.log(`${jsname}, 宝箱奖励翻倍: ${data}`); - box2 = JSON.parse(data); - if (box2.code == 0) { - tz += `【宝箱翻倍】:获得${box2.data.amount}金币\n`; - } - + let box2 = JSON.parse(data); + if (box2.code == 0) tz += "【宝箱翻倍】:获得 " + box2.data.amount + " 金币\n"; resolve(); }); }); } +//本周阅读时长 +function qqreadwktime() { + return new Promise((resolve, reject) => { + const toqqreadwktimeurl = { + url: `https://mqqapi.reader.qq.com/mqq/v1/bookShelfInit`, + headers: JSON.parse(qqreadheaderVal) + }; + $.get(toqqreadwktimeurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅读时长: ${data}`); + wktime = JSON.parse(data); + if (wktime.code == 0) tz += "【本周阅读时长】: " + wktime.data.readTime + " 分钟\n"; + resolve(); + }); + }); +} +//本周阅读时长奖励任务 +function qqreadpick() { + return new Promise((resolve, reject) => { + const toqqreadpickurl = { + url: `https://mqqapi.reader.qq.com/mqq/pickPackageInit`, + headers: JSON.parse(qqreadheaderVal) + }; + if (wktime.data.readTime >= wktimess) { + $.get(toqqreadpickurl, (error, response, data) => { + if (logs) $.log(`${jsname},周阅读时长奖励任务: ${data}`); + let pick = JSON.parse(data); + if (pick.data[7].isPick == true) tz += "【周时长奖励】:已全部领取\n"; + for (let i = 0; i < pick.data.length; i++) { + setTimeout(() => { + var pickid = pick.data[i].readTime; + var Packageid = ["10", "10", "20", "30", "50", "80", "100", "120"]; + const toqqreadPackageurl = { + url: `https://mqqapi.reader.qq.com/mqq/pickPackage?readTime=${pickid}`, + headers: JSON.parse(qqreadheaderVal), + timeout: 60000, + }; + $.get(toqqreadPackageurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 领周阅读时长: ${data}`); + let Package = JSON.parse(data); + if (Package.code == 0) tz += "【周时长奖励 " + (i + 1) + " 】:领取 " + Packageid[i] + " 阅豆\n"; + }); + }, i * 100); + } + }); + resolve(); + } + resolve(); + }); +} +function showmsg() { + return new Promise(async resolve => { + tz += `\n========= 脚本执行完毕时间-北京时间(UTC+8):${new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toLocaleString()} =============\n`; + console.log(tz); + if (notifyInterval == 1) $.msg(jsname, "", tz);//显示所有通知 + else if (notifyInterval == 2 && task.data.treasureBox.doneFlag == 0) $.msg(jsname, "", tz);//宝箱领取成功通知 + else if (notifyInterval == 3 && task.data.treasureBox.count == 0 || task.data.treasureBox.count == 15 || task.data.treasureBox.count == 30 || task.data.treasureBox.count == 45 || task.data.treasureBox.count == 60) + $.msg(jsname, "", tz); //宝箱每15次通知一次 + resolve(); + }); +} -function showmsg() { -console.log(tz) -let d = new Date(new Date().getTime() + 8 * 60 * 60 * 1000); - -if (notifyInterval==1 && d.getHours()>=9 && d.getHours()<=20&&task.data.treasureBox.doneFlag==0){ - notify.sendNotify(jsname,tz,'');//显示所有通知 - console.log('显示所有通知') -} -else if (notifyInterval==2&&d.getHours()>=9&&d.getHours()<=20&&task.data.treasureBox.doneFlag==15){ - notify.sendNotify(jsname,kz,'')//宝箱每15次通知一次 - console.log('宝箱每15次通知一次') -} -//else if (notifyInterval==3&&gold >= 50000&&d.getHours()>=9&&d.getHours()<=20&&task.data.treasureBox.doneFlag==0&&task.data.treasureBox.count==0||task.data.treasureBox.count==15||task.data.treasureBox.count==30||task.data.treasureBox.count==45||task.data.treasureBox.count==60){ - - //notify.sendNotify(jsname,tz,'');//宝箱每15次通知一次 - //console.log('宝箱每15次通知一次') -//} -else if (d.getHours()==19&&d.getMinutes()>=45&&d.getMinutes()<=55){ - notify.sendNotify(jsname,kz,'')//每天19点45分通知一次 - -} -kz='' -tz='' -} - + + From a54cd5db6bf338d7a23a7257f8cf6a2cd2b0c35d Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Wed, 16 Dec 2020 08:31:06 +0800 Subject: [PATCH 06/57] Rename qqre.js to qqread.js --- qqre.js => qqread.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename qqre.js => qqread.js (100%) diff --git a/qqre.js b/qqread.js similarity index 100% rename from qqre.js rename to qqread.js From 7e4c9134f2e67bb67b436846d3a64e91390de2b0 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Wed, 16 Dec 2020 08:37:48 +0800 Subject: [PATCH 07/57] Delete qqread.js --- qqread.js | 477 ------------------------------------------------------ 1 file changed, 477 deletions(-) delete mode 100644 qqread.js diff --git a/qqread.js b/qqread.js deleted file mode 100644 index 23a9a11..0000000 --- a/qqread.js +++ /dev/null @@ -1,477 +0,0 @@ -/* -ziye -源 github 地址 https://github.com/ziye12/JavaScript -*/ -const jsname = "企鹅读书"; -const $ = Env(jsname); -console.log(`============ 脚本执行-北京时间(UTC+8):${new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toLocaleString()} =============`); - -const logs = 0; //0为关闭日志,1为开启 -const notifyInterval = 0; -//0为关闭通知,1为所有通知,2为宝箱领取成功通知,3为宝箱每18次通知一次 -const dd = 1; //单次任务延迟,默认1秒 -const TIME = 30; //单次时长上传限制,默认5分钟 -const maxtime = 20; //每日上传时长限制,默认20小时 -const wktimess = 1200; //周奖励领取标准,默认1200分钟 - -const qqreadurlVal = "https://mqqapi.reader.qq.com/mqq/user/init"; -let qqreadheaderVal, qqreadtimeurlVal, qqreadtimeheaderVal, cookiesArr = []; -var tz = ''; -let task = '', config, ssr2 = '', wktime; - -!(async () => { - await getCookiesFromSecret(); - await qqRead(); -})() - .catch((e) => { - $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') - }) - .finally(() => { - $.done(); - }) - -async function qqRead() { - for (const item of cookiesArr) { - qqreadheaderVal = item["qqreadheaderVal"]; - qqreadtimeurlVal = item["qqreadtimeurlVal"]; - qqreadtimeheaderVal = item["qqreadtimeheaderVal"]; - - await qqreadinfo();//用户名 - await qqreadconfig();//时长查询 - await qqreadtask();//任务列表 - - if (task.data.taskList[0].doneFlag == 0) await qqreaddayread();//阅读任务 - if (task.data.taskList[2].doneFlag == 0) { - await qqreadsign();//金币签到 - await qqreadtake();//阅豆签到 - await qqreadsign2();//签到翻倍 - } - if (task.data.treasureBox.doneFlag == 0) await qqreadbox();//宝箱 - if (task.data.taskList[1].doneFlag == 0) { - await qqreadssr1();//阅读金币1 - await $.wait(3000); - await qqreadssr2();//阅读金币2 - await $.wait(5000); - await qqreadssr3();//阅读金币3 - } - if (task.data.taskList[3].doneFlag == 0) await qqreadvideo();//视频奖励 - if (task.data.treasureBox.videoDoneFlag == 0) await qqreadbox2();//宝箱翻倍 - if (config.data.pageParams.todayReadSeconds / 3600 <= maxtime) await qqreadtime();//阅读时长 - - await qqreadwktime();//周时长查询 - await qqreadpick();//领周时长奖励 - } - await showmsg();//通知 -} - -function getCookiesFromSecret() { - // catch value from Action Secret. - if ($.isNode()) { - let headers = [], timeurls = [], timeheaders = []; - if (process.env.QQREAD_HEADER) { - if (process.env.QQREAD_HEADER.indexOf('#') > -1) { - headers = process.env.QQREAD_HEADER.split('#'); - } else { - headers = [process.env.QQREAD_HEADER]; - }; - if (process.env.QQREAD_TIMEURL.indexOf('\n') > -1) { - timeurls = process.env.QQREAD_TIMEURL.split('\n'); - } else { - timeurls = [process.env.QQREAD_TIMEURL]; - }; - if (process.env.QQREAD_TIMEHEADER.indexOf('#') > -1) { - timeheaders = process.env.QQREAD_TIMEHEADER.split('#'); - } else { - timeheaders = [process.env.QQREAD_TIMEHEADER]; - }; - } - for (let index = 0; index < headers.length; index++) { - cookiesArr.push({ - "qqreadheaderVal": headers[index] || "", - "qqreadtimeurlVal": timeurls[index] || "", - "qqreadtimeheaderVal": timeheaders[index] || "" - }); - } - console.log(`============ 共 ${cookiesArr.length} 个企鹅读书账号 =============\n`); - } -} - -//任务列表 -function qqreadtask() { - return new Promise((resolve, reject) => { - const toqqreadtaskurl = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/page?fromGuid=", - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - $.get(toqqreadtaskurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 任务列表: ${data}`); - task = JSON.parse(data); - tz += - "【任务列表】:余额 " + - task.data.user.amount + - " 金币(" + (task.data.user.amount / 10000) + " 元)\n" + - "【第" + - task.data.invite.issue + - "期】:时间 " + - task.data.invite.dayRange + - "\n" + - " 已邀请 " + - task.data.invite.inviteCount + - " 人,再邀请 " + - task.data.invite.nextInviteConfig.count + - " 人获得 " + - task.data.invite.nextInviteConfig.amount + - " 金币\n" + - "【" + - task.data.taskList[0].title + - "】: " + - task.data.taskList[0].amount + - " 金币," + - task.data.taskList[0].actionText + - "\n" + - "【" + - task.data.taskList[1].title + - "】: " + - task.data.taskList[1].amount + - " 金币," + - task.data.taskList[1].actionText + - "\n" + - "【" + - task.data.taskList[2].title + - "】: " + - task.data.taskList[2].amount + - " 金币," + - task.data.taskList[2].actionText + - "\n" + - "【" + - task.data.taskList[3].title + - "】: " + - task.data.taskList[3].amount + - " 金币," + - task.data.taskList[3].actionText + - "\n" + - "【宝箱任务" + - (task.data.treasureBox.count + 1) + - "】:" + - task.data.treasureBox.tipText + - "\n" + - "【" + - task.data.fans.title + - "】: " + - task.data.fans.fansCount + - " 个好友, " + - task.data.fans.todayAmount + - " 金币\n"; - resolve(); - }); - }); -} - -//用户名 -function qqreadinfo() { - return new Promise((resolve, reject) => { - const toqqreadinfourl = { - url: qqreadurlVal, - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - $.get(toqqreadinfourl, (error, response, data) => { - //console.log(data); - if (logs) $.log(`${jsname}, 用户名: ${data}`); - const info = JSON.parse(data); - tz += "\n【用户信息】: " + info.data.user.nickName + "\n"; - resolve(); - }); - }); -} - -//阅豆签到 -function qqreadtake() { - return new Promise((resolve, reject) => { - const toqqreadtakeurl = { - url: "https://mqqapi.reader.qq.com/mqq/sign_in/user", - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - $.post(toqqreadtakeurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅豆签到: ${data}`); - let take = JSON.parse(data); - if (take.data.takeTicket > 0) tz += "【阅豆签到】:获得 " + take.data.takeTicket + " 豆\n"; - resolve(); - }); - }); -} - -//阅读时长任务 -function qqreadconfig() { - return new Promise((resolve, reject) => { - const toqqreadconfigurl = { - url: "https://mqqapi.reader.qq.com/mqq/page/config?router=%2Fpages%2Fbook-read%2Findex&options=", - headers: JSON.parse(qqreadheaderVal) - }; - $.get(toqqreadconfigurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅读时长查询: ${data}`); - config = JSON.parse(data); - if (config.code == 0) tz += "【时长查询】:今日阅读 " + (config.data.pageParams.todayReadSeconds / 60).toFixed(0) + " 分钟\n"; - resolve(); - }); - }); -} - -//阅读时长 -function qqreadtime() { - return new Promise((resolve, reject) => { - const toqqreadtimeurl = { - url: qqreadtimeurlVal.replace(/readTime=/g, `readTime=${TIME}`), - headers: JSON.parse(qqreadtimeheaderVal) - }; - $.get(toqqreadtimeurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅读时长: ${data}`); - let time = JSON.parse(data); - if (time && time.code == 0) tz += "【阅读时长】:上传 " + TIME / 6 + " 分钟\n"; - resolve(); - }); - }); -} - -//阅读金币1 -function qqreadssr1() { - return new Promise((resolve, reject) => { - const toqqreadssr1url = { - url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=30`, - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - if (config.data.pageParams.todayReadSeconds / 60 >= 1) { - $.get(toqqreadssr1url, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币奖励1: ${data}`); - let ssr1 = JSON.parse(data); - if (ssr1.data.amount > 0) - tz += "【阅读金币1】获得 " + ssr1.data.amount + " 金币\n"; - resolve(); - }); - } - resolve(); - }); -} - -//阅读金币2 -function qqreadssr2() { - return new Promise((resolve, reject) => { - const toqqreadssr2url = { - url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=300`, - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - if (config.data.pageParams.todayReadSeconds / 60 >= 5) { - $.get(toqqreadssr2url, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币奖励2: ${data}`); - ssr2 = JSON.parse(data); - if (ssr2.code === 0) { - if (ssr2.data.amount > 0) tz += "【阅读金币2】获得 " + ssr2.data.amount + " 金币\n"; - } - resolve(); - }); - } - resolve(); - }); -} - -//阅读金币3 -function qqreadssr3() { - return new Promise((resolve, reject) => { - const toqqreadssr3url = { - url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=1800`, - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - if (config.data.pageParams.todayReadSeconds / 60 >= 30) { - $.get(toqqreadssr3url, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币奖励3: ${data}`); - let ssr3 = JSON.parse(data); - if (ssr3.code === 0) { - if (ssr3.data.amount > 0) tz += "【阅读金币3】获得 " + ssr3.data.amount + " 金币\n"; - } - resolve(); - }); - } - resolve(); - }); -} - -//金币签到 -function qqreadsign() { - return new Promise((resolve, reject) => { - const toqqreadsignurl = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/clock_in/page", - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - $.get(toqqreadsignurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币签到: ${data}`); - let sign = JSON.parse(data); - if (sign.data.videoDoneFlag) tz += "【金币签到】:获得 " + sign.data.todayAmount + " 金币\n"; - resolve(); - }); - }); -} - -//金币签到翻倍 -function qqreadsign2() { - return new Promise((resolve, reject) => { - const toqqreadsign2url = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/clock_in_video", - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - $.get(toqqreadsign2url, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币签到翻倍: ${data}`); - let sign2 = JSON.parse(data); - if (sign2.code == 0) tz += "【签到翻倍】:获得 " + sign2.data.amount + " 金币\n"; - resolve(); - }); - }); -} - -//每日阅读 -function qqreaddayread() { - return new Promise((resolve, reject) => { - const toqqreaddayreadurl = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/read_book", - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - $.get(toqqreaddayreadurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 每日阅读: ${data}`); - let dayread = JSON.parse(data); - if (dayread.code == 0) tz += "【每日阅读】:获得 " + dayread.data.amount + " 金币\n"; - resolve(); - }); - }); -} - -//视频奖励 -function qqreadvideo() { - return new Promise((resolve, reject) => { - const toqqreadvideourl = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/watch_video", - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - $.get(toqqreadvideourl, (error, response, data) => { - if (logs) $.log(`${jsname}, 视频奖励: ${data}`); - let video = JSON.parse(data); - if (video.code == 0) tz += "【视频奖励】:获得 " + video.data.amount + " 金币\n"; - resolve(); - }); - }); -} - -//宝箱奖励 -function qqreadbox() { - return new Promise((resolve, reject) => { - const toqqreadboxurl = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box", - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - $.get(toqqreadboxurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 宝箱奖励: ${data}`); - const box = JSON.parse(data); - if (box.data.count >= 0) tz += "【宝箱奖励" + box.data.count + "】:获得 " + box.data.amount + " 金币\n"; - resolve(); - }); - }); -} - -//宝箱奖励翻倍 -function qqreadbox2() { - return new Promise((resolve, reject) => { - const toqqreadbox2url = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box_video", - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - $.get(toqqreadbox2url, (error, response, data) => { - if (logs) $.log(`${jsname}, 宝箱奖励翻倍: ${data}`); - let box2 = JSON.parse(data); - if (box2.code == 0) tz += "【宝箱翻倍】:获得 " + box2.data.amount + " 金币\n"; - resolve(); - }); - }); -} - -//本周阅读时长 -function qqreadwktime() { - return new Promise((resolve, reject) => { - const toqqreadwktimeurl = { - url: `https://mqqapi.reader.qq.com/mqq/v1/bookShelfInit`, - headers: JSON.parse(qqreadheaderVal) - }; - $.get(toqqreadwktimeurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅读时长: ${data}`); - wktime = JSON.parse(data); - if (wktime.code == 0) tz += "【本周阅读时长】: " + wktime.data.readTime + " 分钟\n"; - resolve(); - }); - }); -} - -//本周阅读时长奖励任务 -function qqreadpick() { - return new Promise((resolve, reject) => { - const toqqreadpickurl = { - url: `https://mqqapi.reader.qq.com/mqq/pickPackageInit`, - headers: JSON.parse(qqreadheaderVal) - }; - if (wktime.data.readTime >= wktimess) { - $.get(toqqreadpickurl, (error, response, data) => { - if (logs) $.log(`${jsname},周阅读时长奖励任务: ${data}`); - let pick = JSON.parse(data); - if (pick.data[7].isPick == true) tz += "【周时长奖励】:已全部领取\n"; - for (let i = 0; i < pick.data.length; i++) { - setTimeout(() => { - var pickid = pick.data[i].readTime; - var Packageid = ["10", "10", "20", "30", "50", "80", "100", "120"]; - const toqqreadPackageurl = { - url: `https://mqqapi.reader.qq.com/mqq/pickPackage?readTime=${pickid}`, - headers: JSON.parse(qqreadheaderVal), - timeout: 60000, - }; - $.get(toqqreadPackageurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 领周阅读时长: ${data}`); - let Package = JSON.parse(data); - if (Package.code == 0) tz += "【周时长奖励 " + (i + 1) + " 】:领取 " + Packageid[i] + " 阅豆\n"; - }); - }, i * 100); - } - }); - resolve(); - } - resolve(); - }); -} - -function showmsg() { - return new Promise(async resolve => { - tz += `\n========= 脚本执行完毕时间-北京时间(UTC+8):${new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toLocaleString()} =============\n`; - console.log(tz); - if (notifyInterval == 1) $.msg(jsname, "", tz);//显示所有通知 - else if (notifyInterval == 2 && task.data.treasureBox.doneFlag == 0) $.msg(jsname, "", tz);//宝箱领取成功通知 - else if (notifyInterval == 3 && task.data.treasureBox.count == 0 || task.data.treasureBox.count == 15 || task.data.treasureBox.count == 30 || task.data.treasureBox.count == 45 || task.data.treasureBox.count == 60) - $.msg(jsname, "", tz); //宝箱每15次通知一次 - resolve(); - }); -} - - - - - - - - - -// prettier-ignore -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)} From 6e46bc6e229689cd1c9e9351269919631f492a43 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Wed, 16 Dec 2020 08:38:07 +0800 Subject: [PATCH 08/57] Add files via upload --- qqreads.js | 469 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 469 insertions(+) create mode 100644 qqreads.js diff --git a/qqreads.js b/qqreads.js new file mode 100644 index 0000000..e89df4a --- /dev/null +++ b/qqreads.js @@ -0,0 +1,469 @@ +/* +ziye +源 github 地址 https://github.com/ziye12/JavaScript +*/ +const jsname = "企鹅读书"; +const $ = Env(jsname); +console.log(`============ 脚本执行-北京时间(UTC+8):${new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toLocaleString()} =============`); + +const logs = 0; //0为关闭日志,1为开启 +const notifyInterval = 0; +//0为关闭通知,1为所有通知,2为宝箱领取成功通知,3为宝箱每18次通知一次 +const dd = 1; //单次任务延迟,默认1秒 +const TIME = 30; //单次时长上传限制,默认5分钟 +const maxtime = 20; //每日上传时长限制,默认20小时 +const wktimess = 1200; //周奖励领取标准,默认1200分钟 + +const qqreadurlVal = "https://mqqapi.reader.qq.com/mqq/user/init"; +let qqreadheaderVal, qqreadtimeurlVal, qqreadtimeheaderVal, cookiesArr = []; +var tz = ''; +let task = '', config, ssr2 = '', wktime; + +!(async () => { + await getCookiesFromSecret(); + await qqRead(); +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) + +async function qqRead() { + for (const item of cookiesArr) { + qqreadheaderVal = item["qqreadheaderVal"]; + qqreadtimeurlVal = item["qqreadtimeurlVal"]; + qqreadtimeheaderVal = item["qqreadtimeheaderVal"]; + + await qqreadinfo();//用户名 + await qqreadconfig();//时长查询 + await qqreadtask();//任务列表 + + if (task.data.taskList[0].doneFlag == 0) await qqreaddayread();//阅读任务 + if (task.data.taskList[2].doneFlag == 0) { + await qqreadsign();//金币签到 + await qqreadtake();//阅豆签到 + await qqreadsign2();//签到翻倍 + } + if (task.data.treasureBox.doneFlag == 0) await qqreadbox();//宝箱 + if (task.data.taskList[1].doneFlag == 0) { + await qqreadssr1();//阅读金币1 + await $.wait(3000); + await qqreadssr2();//阅读金币2 + await $.wait(5000); + await qqreadssr3();//阅读金币3 + } + if (task.data.taskList[3].doneFlag == 0) await qqreadvideo();//视频奖励 + if (task.data.treasureBox.videoDoneFlag == 0) await qqreadbox2();//宝箱翻倍 + if (config.data.pageParams.todayReadSeconds / 3600 <= maxtime) await qqreadtime();//阅读时长 + + await qqreadwktime();//周时长查询 + await qqreadpick();//领周时长奖励 + } + await showmsg();//通知 +} + +function getCookiesFromSecret() { + // catch value from Action Secret. + if ($.isNode()) { + let headers = [], timeurls = [], timeheaders = []; + if (process.env.QQREAD_HEADER) { + if (process.env.QQREAD_HEADER.indexOf('#') > -1) { + headers = process.env.QQREAD_HEADER.split('#'); + } else { + headers = [process.env.QQREAD_HEADER]; + }; + if (process.env.QQREAD_TIMEURL.indexOf('\n') > -1) { + timeurls = process.env.QQREAD_TIMEURL.split('\n'); + } else { + timeurls = [process.env.QQREAD_TIMEURL]; + }; + if (process.env.QQREAD_TIMEHEADER.indexOf('#') > -1) { + timeheaders = process.env.QQREAD_TIMEHEADER.split('#'); + } else { + timeheaders = [process.env.QQREAD_TIMEHEADER]; + }; + } + for (let index = 0; index < headers.length; index++) { + cookiesArr.push({ + "qqreadheaderVal": headers[index] || "", + "qqreadtimeurlVal": timeurls[index] || "", + "qqreadtimeheaderVal": timeheaders[index] || "" + }); + } + console.log(`============ 共 ${cookiesArr.length} 个企鹅读书账号 =============\n`); + } +} + +//任务列表 +function qqreadtask() { + return new Promise((resolve, reject) => { + const toqqreadtaskurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/page?fromGuid=", + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + $.get(toqqreadtaskurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 任务列表: ${data}`); + task = JSON.parse(data); + tz += + "【任务列表】:余额 " + + task.data.user.amount + + " 金币(" + (task.data.user.amount / 10000) + " 元)\n" + + "【第" + + task.data.invite.issue + + "期】:时间 " + + task.data.invite.dayRange + + "\n" + + " 已邀请 " + + task.data.invite.inviteCount + + " 人,再邀请 " + + task.data.invite.nextInviteConfig.count + + " 人获得 " + + task.data.invite.nextInviteConfig.amount + + " 金币\n" + + "【" + + task.data.taskList[0].title + + "】: " + + task.data.taskList[0].amount + + " 金币," + + task.data.taskList[0].actionText + + "\n" + + "【" + + task.data.taskList[1].title + + "】: " + + task.data.taskList[1].amount + + " 金币," + + task.data.taskList[1].actionText + + "\n" + + "【" + + task.data.taskList[2].title + + "】: " + + task.data.taskList[2].amount + + " 金币," + + task.data.taskList[2].actionText + + "\n" + + "【" + + task.data.taskList[3].title + + "】: " + + task.data.taskList[3].amount + + " 金币," + + task.data.taskList[3].actionText + + "\n" + + "【宝箱任务" + + (task.data.treasureBox.count + 1) + + "】:" + + task.data.treasureBox.tipText + + "\n" + + "【" + + task.data.fans.title + + "】: " + + task.data.fans.fansCount + + " 个好友, " + + task.data.fans.todayAmount + + " 金币\n"; + resolve(); + }); + }); +} + +//用户名 +function qqreadinfo() { + return new Promise((resolve, reject) => { + const toqqreadinfourl = { + url: qqreadurlVal, + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + $.get(toqqreadinfourl, (error, response, data) => { + //console.log(data); + if (logs) $.log(`${jsname}, 用户名: ${data}`); + const info = JSON.parse(data); + tz += "\n【用户信息】: " + info.data.user.nickName + "\n"; + resolve(); + }); + }); +} + +//阅豆签到 +function qqreadtake() { + return new Promise((resolve, reject) => { + const toqqreadtakeurl = { + url: "https://mqqapi.reader.qq.com/mqq/sign_in/user", + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + $.post(toqqreadtakeurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅豆签到: ${data}`); + let take = JSON.parse(data); + if (take.data.takeTicket > 0) tz += "【阅豆签到】:获得 " + take.data.takeTicket + " 豆\n"; + resolve(); + }); + }); +} + +//阅读时长任务 +function qqreadconfig() { + return new Promise((resolve, reject) => { + const toqqreadconfigurl = { + url: "https://mqqapi.reader.qq.com/mqq/page/config?router=%2Fpages%2Fbook-read%2Findex&options=", + headers: JSON.parse(qqreadheaderVal) + }; + $.get(toqqreadconfigurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅读时长查询: ${data}`); + config = JSON.parse(data); + if (config.code == 0) tz += "【时长查询】:今日阅读 " + (config.data.pageParams.todayReadSeconds / 60).toFixed(0) + " 分钟\n"; + resolve(); + }); + }); +} + +//阅读时长 +function qqreadtime() { + return new Promise((resolve, reject) => { + const toqqreadtimeurl = { + url: qqreadtimeurlVal.replace(/readTime=/g, `readTime=${TIME}`), + headers: JSON.parse(qqreadtimeheaderVal) + }; + $.get(toqqreadtimeurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅读时长: ${data}`); + let time = JSON.parse(data); + if (time && time.code == 0) tz += "【阅读时长】:上传 " + TIME / 6 + " 分钟\n"; + resolve(); + }); + }); +} + +//阅读金币1 +function qqreadssr1() { + return new Promise((resolve, reject) => { + const toqqreadssr1url = { + url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=30`, + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + if (config.data.pageParams.todayReadSeconds / 60 >= 1) { + $.get(toqqreadssr1url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币奖励1: ${data}`); + let ssr1 = JSON.parse(data); + if (ssr1.data.amount > 0) + tz += "【阅读金币1】获得 " + ssr1.data.amount + " 金币\n"; + resolve(); + }); + } + resolve(); + }); +} + +//阅读金币2 +function qqreadssr2() { + return new Promise((resolve, reject) => { + const toqqreadssr2url = { + url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=300`, + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + if (config.data.pageParams.todayReadSeconds / 60 >= 5) { + $.get(toqqreadssr2url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币奖励2: ${data}`); + ssr2 = JSON.parse(data); + if (ssr2.code === 0) { + if (ssr2.data.amount > 0) tz += "【阅读金币2】获得 " + ssr2.data.amount + " 金币\n"; + } + resolve(); + }); + } + resolve(); + }); +} + +//阅读金币3 +function qqreadssr3() { + return new Promise((resolve, reject) => { + const toqqreadssr3url = { + url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=1800`, + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + if (config.data.pageParams.todayReadSeconds / 60 >= 30) { + $.get(toqqreadssr3url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币奖励3: ${data}`); + let ssr3 = JSON.parse(data); + if (ssr3.code === 0) { + if (ssr3.data.amount > 0) tz += "【阅读金币3】获得 " + ssr3.data.amount + " 金币\n"; + } + resolve(); + }); + } + resolve(); + }); +} + +//金币签到 +function qqreadsign() { + return new Promise((resolve, reject) => { + const toqqreadsignurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/clock_in/page", + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + $.get(toqqreadsignurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币签到: ${data}`); + let sign = JSON.parse(data); + if (sign.data.videoDoneFlag) tz += "【金币签到】:获得 " + sign.data.todayAmount + " 金币\n"; + resolve(); + }); + }); +} + +//金币签到翻倍 +function qqreadsign2() { + return new Promise((resolve, reject) => { + const toqqreadsign2url = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/clock_in_video", + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + $.get(toqqreadsign2url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币签到翻倍: ${data}`); + let sign2 = JSON.parse(data); + if (sign2.code == 0) tz += "【签到翻倍】:获得 " + sign2.data.amount + " 金币\n"; + resolve(); + }); + }); +} + +//每日阅读 +function qqreaddayread() { + return new Promise((resolve, reject) => { + const toqqreaddayreadurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/read_book", + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + $.get(toqqreaddayreadurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 每日阅读: ${data}`); + let dayread = JSON.parse(data); + if (dayread.code == 0) tz += "【每日阅读】:获得 " + dayread.data.amount + " 金币\n"; + resolve(); + }); + }); +} + +//视频奖励 +function qqreadvideo() { + return new Promise((resolve, reject) => { + const toqqreadvideourl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/watch_video", + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + $.get(toqqreadvideourl, (error, response, data) => { + if (logs) $.log(`${jsname}, 视频奖励: ${data}`); + let video = JSON.parse(data); + if (video.code == 0) tz += "【视频奖励】:获得 " + video.data.amount + " 金币\n"; + resolve(); + }); + }); +} + +//宝箱奖励 +function qqreadbox() { + return new Promise((resolve, reject) => { + const toqqreadboxurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box", + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + $.get(toqqreadboxurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 宝箱奖励: ${data}`); + const box = JSON.parse(data); + if (box.data.count >= 0) tz += "【宝箱奖励" + box.data.count + "】:获得 " + box.data.amount + " 金币\n"; + resolve(); + }); + }); +} + +//宝箱奖励翻倍 +function qqreadbox2() { + return new Promise((resolve, reject) => { + const toqqreadbox2url = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box_video", + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + $.get(toqqreadbox2url, (error, response, data) => { + if (logs) $.log(`${jsname}, 宝箱奖励翻倍: ${data}`); + let box2 = JSON.parse(data); + if (box2.code == 0) tz += "【宝箱翻倍】:获得 " + box2.data.amount + " 金币\n"; + resolve(); + }); + }); +} + +//本周阅读时长 +function qqreadwktime() { + return new Promise((resolve, reject) => { + const toqqreadwktimeurl = { + url: `https://mqqapi.reader.qq.com/mqq/v1/bookShelfInit`, + headers: JSON.parse(qqreadheaderVal) + }; + $.get(toqqreadwktimeurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅读时长: ${data}`); + wktime = JSON.parse(data); + if (wktime.code == 0) tz += "【本周阅读时长】: " + wktime.data.readTime + " 分钟\n"; + resolve(); + }); + }); +} + +//本周阅读时长奖励任务 +function qqreadpick() { + return new Promise((resolve, reject) => { + const toqqreadpickurl = { + url: `https://mqqapi.reader.qq.com/mqq/pickPackageInit`, + headers: JSON.parse(qqreadheaderVal) + }; + if (wktime.data.readTime >= wktimess) { + $.get(toqqreadpickurl, (error, response, data) => { + if (logs) $.log(`${jsname},周阅读时长奖励任务: ${data}`); + let pick = JSON.parse(data); + if (pick.data[7].isPick == true) tz += "【周时长奖励】:已全部领取\n"; + for (let i = 0; i < pick.data.length; i++) { + setTimeout(() => { + var pickid = pick.data[i].readTime; + var Packageid = ["10", "10", "20", "30", "50", "80", "100", "120"]; + const toqqreadPackageurl = { + url: `https://mqqapi.reader.qq.com/mqq/pickPackage?readTime=${pickid}`, + headers: JSON.parse(qqreadheaderVal), + timeout: 60000, + }; + $.get(toqqreadPackageurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 领周阅读时长: ${data}`); + let Package = JSON.parse(data); + if (Package.code == 0) tz += "【周时长奖励 " + (i + 1) + " 】:领取 " + Packageid[i] + " 阅豆\n"; + }); + }, i * 100); + } + }); + resolve(); + } + resolve(); + }); +} + +function showmsg() { + return new Promise(async resolve => { + tz += `\n========= 脚本执行完毕时间-北京时间(UTC+8):${new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toLocaleString()} =============\n`; + console.log(tz); + if (notifyInterval == 1) $.msg(jsname, "", tz);//显示所有通知 + else if (notifyInterval == 2 && task.data.treasureBox.doneFlag == 0) $.msg(jsname, "", tz);//宝箱领取成功通知 + else if (notifyInterval == 3 && task.data.treasureBox.count == 0 || task.data.treasureBox.count == 15 || task.data.treasureBox.count == 30 || task.data.treasureBox.count == 45 || task.data.treasureBox.count == 60) + $.msg(jsname, "", tz); //宝箱每15次通知一次 + resolve(); + }); +} + +// prettier-ignore +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) } From 6efd7be857ee33eca314c3a81e08842ec0f2ce02 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Wed, 16 Dec 2020 08:41:37 +0800 Subject: [PATCH 09/57] Update qqreads.js --- qqreads.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/qqreads.js b/qqreads.js index e89df4a..9e7ee3c 100644 --- a/qqreads.js +++ b/qqreads.js @@ -457,10 +457,7 @@ function showmsg() { return new Promise(async resolve => { tz += `\n========= 脚本执行完毕时间-北京时间(UTC+8):${new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toLocaleString()} =============\n`; console.log(tz); - if (notifyInterval == 1) $.msg(jsname, "", tz);//显示所有通知 - else if (notifyInterval == 2 && task.data.treasureBox.doneFlag == 0) $.msg(jsname, "", tz);//宝箱领取成功通知 - else if (notifyInterval == 3 && task.data.treasureBox.count == 0 || task.data.treasureBox.count == 15 || task.data.treasureBox.count == 30 || task.data.treasureBox.count == 45 || task.data.treasureBox.count == 60) - $.msg(jsname, "", tz); //宝箱每15次通知一次 + resolve(); }); } From 6dbc1cb3f32fefe9adfd7e24d53986a3559c938b Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Wed, 16 Dec 2020 08:45:01 +0800 Subject: [PATCH 10/57] Update qqreads.js --- qqreads.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qqreads.js b/qqreads.js index 9e7ee3c..7b4b75b 100644 --- a/qqreads.js +++ b/qqreads.js @@ -180,7 +180,7 @@ function qqreadinfo() { //console.log(data); if (logs) $.log(`${jsname}, 用户名: ${data}`); const info = JSON.parse(data); - tz += "\n【用户信息】: " + info.data.user.nickName + "\n"; + // tz += "\n【用户信息】: " + info.data.user.nickName + "\n"; resolve(); }); }); From 0add54eba02b6e313739c5125026b41aa07da883 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 10:47:39 +0800 Subject: [PATCH 11/57] Delete qqreads.js --- qqreads.js | 466 ----------------------------------------------------- 1 file changed, 466 deletions(-) delete mode 100644 qqreads.js diff --git a/qqreads.js b/qqreads.js deleted file mode 100644 index 7b4b75b..0000000 --- a/qqreads.js +++ /dev/null @@ -1,466 +0,0 @@ -/* -ziye -源 github 地址 https://github.com/ziye12/JavaScript -*/ -const jsname = "企鹅读书"; -const $ = Env(jsname); -console.log(`============ 脚本执行-北京时间(UTC+8):${new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toLocaleString()} =============`); - -const logs = 0; //0为关闭日志,1为开启 -const notifyInterval = 0; -//0为关闭通知,1为所有通知,2为宝箱领取成功通知,3为宝箱每18次通知一次 -const dd = 1; //单次任务延迟,默认1秒 -const TIME = 30; //单次时长上传限制,默认5分钟 -const maxtime = 20; //每日上传时长限制,默认20小时 -const wktimess = 1200; //周奖励领取标准,默认1200分钟 - -const qqreadurlVal = "https://mqqapi.reader.qq.com/mqq/user/init"; -let qqreadheaderVal, qqreadtimeurlVal, qqreadtimeheaderVal, cookiesArr = []; -var tz = ''; -let task = '', config, ssr2 = '', wktime; - -!(async () => { - await getCookiesFromSecret(); - await qqRead(); -})() - .catch((e) => { - $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') - }) - .finally(() => { - $.done(); - }) - -async function qqRead() { - for (const item of cookiesArr) { - qqreadheaderVal = item["qqreadheaderVal"]; - qqreadtimeurlVal = item["qqreadtimeurlVal"]; - qqreadtimeheaderVal = item["qqreadtimeheaderVal"]; - - await qqreadinfo();//用户名 - await qqreadconfig();//时长查询 - await qqreadtask();//任务列表 - - if (task.data.taskList[0].doneFlag == 0) await qqreaddayread();//阅读任务 - if (task.data.taskList[2].doneFlag == 0) { - await qqreadsign();//金币签到 - await qqreadtake();//阅豆签到 - await qqreadsign2();//签到翻倍 - } - if (task.data.treasureBox.doneFlag == 0) await qqreadbox();//宝箱 - if (task.data.taskList[1].doneFlag == 0) { - await qqreadssr1();//阅读金币1 - await $.wait(3000); - await qqreadssr2();//阅读金币2 - await $.wait(5000); - await qqreadssr3();//阅读金币3 - } - if (task.data.taskList[3].doneFlag == 0) await qqreadvideo();//视频奖励 - if (task.data.treasureBox.videoDoneFlag == 0) await qqreadbox2();//宝箱翻倍 - if (config.data.pageParams.todayReadSeconds / 3600 <= maxtime) await qqreadtime();//阅读时长 - - await qqreadwktime();//周时长查询 - await qqreadpick();//领周时长奖励 - } - await showmsg();//通知 -} - -function getCookiesFromSecret() { - // catch value from Action Secret. - if ($.isNode()) { - let headers = [], timeurls = [], timeheaders = []; - if (process.env.QQREAD_HEADER) { - if (process.env.QQREAD_HEADER.indexOf('#') > -1) { - headers = process.env.QQREAD_HEADER.split('#'); - } else { - headers = [process.env.QQREAD_HEADER]; - }; - if (process.env.QQREAD_TIMEURL.indexOf('\n') > -1) { - timeurls = process.env.QQREAD_TIMEURL.split('\n'); - } else { - timeurls = [process.env.QQREAD_TIMEURL]; - }; - if (process.env.QQREAD_TIMEHEADER.indexOf('#') > -1) { - timeheaders = process.env.QQREAD_TIMEHEADER.split('#'); - } else { - timeheaders = [process.env.QQREAD_TIMEHEADER]; - }; - } - for (let index = 0; index < headers.length; index++) { - cookiesArr.push({ - "qqreadheaderVal": headers[index] || "", - "qqreadtimeurlVal": timeurls[index] || "", - "qqreadtimeheaderVal": timeheaders[index] || "" - }); - } - console.log(`============ 共 ${cookiesArr.length} 个企鹅读书账号 =============\n`); - } -} - -//任务列表 -function qqreadtask() { - return new Promise((resolve, reject) => { - const toqqreadtaskurl = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/page?fromGuid=", - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - $.get(toqqreadtaskurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 任务列表: ${data}`); - task = JSON.parse(data); - tz += - "【任务列表】:余额 " + - task.data.user.amount + - " 金币(" + (task.data.user.amount / 10000) + " 元)\n" + - "【第" + - task.data.invite.issue + - "期】:时间 " + - task.data.invite.dayRange + - "\n" + - " 已邀请 " + - task.data.invite.inviteCount + - " 人,再邀请 " + - task.data.invite.nextInviteConfig.count + - " 人获得 " + - task.data.invite.nextInviteConfig.amount + - " 金币\n" + - "【" + - task.data.taskList[0].title + - "】: " + - task.data.taskList[0].amount + - " 金币," + - task.data.taskList[0].actionText + - "\n" + - "【" + - task.data.taskList[1].title + - "】: " + - task.data.taskList[1].amount + - " 金币," + - task.data.taskList[1].actionText + - "\n" + - "【" + - task.data.taskList[2].title + - "】: " + - task.data.taskList[2].amount + - " 金币," + - task.data.taskList[2].actionText + - "\n" + - "【" + - task.data.taskList[3].title + - "】: " + - task.data.taskList[3].amount + - " 金币," + - task.data.taskList[3].actionText + - "\n" + - "【宝箱任务" + - (task.data.treasureBox.count + 1) + - "】:" + - task.data.treasureBox.tipText + - "\n" + - "【" + - task.data.fans.title + - "】: " + - task.data.fans.fansCount + - " 个好友, " + - task.data.fans.todayAmount + - " 金币\n"; - resolve(); - }); - }); -} - -//用户名 -function qqreadinfo() { - return new Promise((resolve, reject) => { - const toqqreadinfourl = { - url: qqreadurlVal, - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - $.get(toqqreadinfourl, (error, response, data) => { - //console.log(data); - if (logs) $.log(`${jsname}, 用户名: ${data}`); - const info = JSON.parse(data); - // tz += "\n【用户信息】: " + info.data.user.nickName + "\n"; - resolve(); - }); - }); -} - -//阅豆签到 -function qqreadtake() { - return new Promise((resolve, reject) => { - const toqqreadtakeurl = { - url: "https://mqqapi.reader.qq.com/mqq/sign_in/user", - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - $.post(toqqreadtakeurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅豆签到: ${data}`); - let take = JSON.parse(data); - if (take.data.takeTicket > 0) tz += "【阅豆签到】:获得 " + take.data.takeTicket + " 豆\n"; - resolve(); - }); - }); -} - -//阅读时长任务 -function qqreadconfig() { - return new Promise((resolve, reject) => { - const toqqreadconfigurl = { - url: "https://mqqapi.reader.qq.com/mqq/page/config?router=%2Fpages%2Fbook-read%2Findex&options=", - headers: JSON.parse(qqreadheaderVal) - }; - $.get(toqqreadconfigurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅读时长查询: ${data}`); - config = JSON.parse(data); - if (config.code == 0) tz += "【时长查询】:今日阅读 " + (config.data.pageParams.todayReadSeconds / 60).toFixed(0) + " 分钟\n"; - resolve(); - }); - }); -} - -//阅读时长 -function qqreadtime() { - return new Promise((resolve, reject) => { - const toqqreadtimeurl = { - url: qqreadtimeurlVal.replace(/readTime=/g, `readTime=${TIME}`), - headers: JSON.parse(qqreadtimeheaderVal) - }; - $.get(toqqreadtimeurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅读时长: ${data}`); - let time = JSON.parse(data); - if (time && time.code == 0) tz += "【阅读时长】:上传 " + TIME / 6 + " 分钟\n"; - resolve(); - }); - }); -} - -//阅读金币1 -function qqreadssr1() { - return new Promise((resolve, reject) => { - const toqqreadssr1url = { - url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=30`, - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - if (config.data.pageParams.todayReadSeconds / 60 >= 1) { - $.get(toqqreadssr1url, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币奖励1: ${data}`); - let ssr1 = JSON.parse(data); - if (ssr1.data.amount > 0) - tz += "【阅读金币1】获得 " + ssr1.data.amount + " 金币\n"; - resolve(); - }); - } - resolve(); - }); -} - -//阅读金币2 -function qqreadssr2() { - return new Promise((resolve, reject) => { - const toqqreadssr2url = { - url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=300`, - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - if (config.data.pageParams.todayReadSeconds / 60 >= 5) { - $.get(toqqreadssr2url, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币奖励2: ${data}`); - ssr2 = JSON.parse(data); - if (ssr2.code === 0) { - if (ssr2.data.amount > 0) tz += "【阅读金币2】获得 " + ssr2.data.amount + " 金币\n"; - } - resolve(); - }); - } - resolve(); - }); -} - -//阅读金币3 -function qqreadssr3() { - return new Promise((resolve, reject) => { - const toqqreadssr3url = { - url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=1800`, - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - if (config.data.pageParams.todayReadSeconds / 60 >= 30) { - $.get(toqqreadssr3url, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币奖励3: ${data}`); - let ssr3 = JSON.parse(data); - if (ssr3.code === 0) { - if (ssr3.data.amount > 0) tz += "【阅读金币3】获得 " + ssr3.data.amount + " 金币\n"; - } - resolve(); - }); - } - resolve(); - }); -} - -//金币签到 -function qqreadsign() { - return new Promise((resolve, reject) => { - const toqqreadsignurl = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/clock_in/page", - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - $.get(toqqreadsignurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币签到: ${data}`); - let sign = JSON.parse(data); - if (sign.data.videoDoneFlag) tz += "【金币签到】:获得 " + sign.data.todayAmount + " 金币\n"; - resolve(); - }); - }); -} - -//金币签到翻倍 -function qqreadsign2() { - return new Promise((resolve, reject) => { - const toqqreadsign2url = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/clock_in_video", - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - $.get(toqqreadsign2url, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币签到翻倍: ${data}`); - let sign2 = JSON.parse(data); - if (sign2.code == 0) tz += "【签到翻倍】:获得 " + sign2.data.amount + " 金币\n"; - resolve(); - }); - }); -} - -//每日阅读 -function qqreaddayread() { - return new Promise((resolve, reject) => { - const toqqreaddayreadurl = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/read_book", - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - $.get(toqqreaddayreadurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 每日阅读: ${data}`); - let dayread = JSON.parse(data); - if (dayread.code == 0) tz += "【每日阅读】:获得 " + dayread.data.amount + " 金币\n"; - resolve(); - }); - }); -} - -//视频奖励 -function qqreadvideo() { - return new Promise((resolve, reject) => { - const toqqreadvideourl = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/watch_video", - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - $.get(toqqreadvideourl, (error, response, data) => { - if (logs) $.log(`${jsname}, 视频奖励: ${data}`); - let video = JSON.parse(data); - if (video.code == 0) tz += "【视频奖励】:获得 " + video.data.amount + " 金币\n"; - resolve(); - }); - }); -} - -//宝箱奖励 -function qqreadbox() { - return new Promise((resolve, reject) => { - const toqqreadboxurl = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box", - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - $.get(toqqreadboxurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 宝箱奖励: ${data}`); - const box = JSON.parse(data); - if (box.data.count >= 0) tz += "【宝箱奖励" + box.data.count + "】:获得 " + box.data.amount + " 金币\n"; - resolve(); - }); - }); -} - -//宝箱奖励翻倍 -function qqreadbox2() { - return new Promise((resolve, reject) => { - const toqqreadbox2url = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box_video", - headers: JSON.parse(qqreadheaderVal), - timeout: 60000 - }; - $.get(toqqreadbox2url, (error, response, data) => { - if (logs) $.log(`${jsname}, 宝箱奖励翻倍: ${data}`); - let box2 = JSON.parse(data); - if (box2.code == 0) tz += "【宝箱翻倍】:获得 " + box2.data.amount + " 金币\n"; - resolve(); - }); - }); -} - -//本周阅读时长 -function qqreadwktime() { - return new Promise((resolve, reject) => { - const toqqreadwktimeurl = { - url: `https://mqqapi.reader.qq.com/mqq/v1/bookShelfInit`, - headers: JSON.parse(qqreadheaderVal) - }; - $.get(toqqreadwktimeurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅读时长: ${data}`); - wktime = JSON.parse(data); - if (wktime.code == 0) tz += "【本周阅读时长】: " + wktime.data.readTime + " 分钟\n"; - resolve(); - }); - }); -} - -//本周阅读时长奖励任务 -function qqreadpick() { - return new Promise((resolve, reject) => { - const toqqreadpickurl = { - url: `https://mqqapi.reader.qq.com/mqq/pickPackageInit`, - headers: JSON.parse(qqreadheaderVal) - }; - if (wktime.data.readTime >= wktimess) { - $.get(toqqreadpickurl, (error, response, data) => { - if (logs) $.log(`${jsname},周阅读时长奖励任务: ${data}`); - let pick = JSON.parse(data); - if (pick.data[7].isPick == true) tz += "【周时长奖励】:已全部领取\n"; - for (let i = 0; i < pick.data.length; i++) { - setTimeout(() => { - var pickid = pick.data[i].readTime; - var Packageid = ["10", "10", "20", "30", "50", "80", "100", "120"]; - const toqqreadPackageurl = { - url: `https://mqqapi.reader.qq.com/mqq/pickPackage?readTime=${pickid}`, - headers: JSON.parse(qqreadheaderVal), - timeout: 60000, - }; - $.get(toqqreadPackageurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 领周阅读时长: ${data}`); - let Package = JSON.parse(data); - if (Package.code == 0) tz += "【周时长奖励 " + (i + 1) + " 】:领取 " + Packageid[i] + " 阅豆\n"; - }); - }, i * 100); - } - }); - resolve(); - } - resolve(); - }); -} - -function showmsg() { - return new Promise(async resolve => { - tz += `\n========= 脚本执行完毕时间-北京时间(UTC+8):${new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toLocaleString()} =============\n`; - console.log(tz); - - resolve(); - }); -} - -// prettier-ignore -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) } From fa83bce9462ac5d94381d0adb2dd0937f3534005 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 10:53:52 +0800 Subject: [PATCH 12/57] Add files via upload --- qqread.js | 641 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 641 insertions(+) create mode 100644 qqread.js diff --git a/qqread.js b/qqread.js new file mode 100644 index 0000000..0c5903c --- /dev/null +++ b/qqread.js @@ -0,0 +1,641 @@ +/* +****************************************************************************** + 改用,nodejs云端专用。可N个账号。by;lxk0301 + 一个账号需三个环境变量/secret + 分别为 QQ_READ_HEADER_VAL QQ_READ_TIME_URL_VAL QQ_READ_TIME_HEADER_VAL + 多个账号 对应三个环境变量/secret 使用@符号或者换行隔开 + iOS可使用BoxJs可使用此订阅修改复制所需的环境变量 https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/mySelf.boxjs.json + 环境变量与BoxJs里面对应关系 + QQ_READ_HEADER_VAL ------》 qqreadbodyVal + QQ_READ_TIME_URL_VAL ------》 qqreadtimeurl + QQ_READ_TIME_HEADER_VAL ------》 qqreadtimehd + ***************************************************************************************************************** +ziye +本人github地址 https://github.com/ziye12/JavaScript +转载请备注个名字,谢谢 + +11.25 增加 阅读时长上传,阅读金币,阅读随机金币 +11.25 修复翻倍宝箱不同时领取的问题.增加阅读金币判定 +11.25 修复阅读时长问题,阅读金币问题,请重新获取时长cookie +11.26 随机金币只有一次,故去除,调整修复阅读金币问题,增加时长上传限制 +11.26 增加领取周时长奖励 +11.26 增加结束命令 +11.27 调整通知为,成功开启宝箱再通知 +11.28 修复错误 +12.1 调整通知为15次宝箱通知一次 +12.1 优化通知 + +⚠️cookie获取方法: + +进 https://m.q.qq.com/a/s/d3eacc70120b9a37e46bad408c0c4c2a 点我的 获取cookie + +进一本书 看 10秒以下 然后退出,获取阅读时长cookie,看书一定不能超过10秒 + +可能某些页面会卡住,但是能获取到cookie,再注释cookie重写就行了! + + + +⚠️宝箱奖励为20分钟一次,自己根据情况设置定时,建议设置11分钟一次 + +hostname=mqqapi.reader.qq.com +############## 圈x +#企鹅读书获取更新body +https:\/\/mqqapi\.reader\.qq\.com\/log\/v4\/mqq\/track url script-request-body https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js +#企鹅读书获取时长cookie +https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid? url script-request-header https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js +############## loon +#企鹅读书获取更新body +http-request https:\/\/mqqapi\.reader\.qq\.com\/log\/v4\/mqq\/track script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js,requires-body=true, tag=企鹅读书获取更新body +#企鹅读书获取时长cookie +http-request https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid? script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js, requires-header=true, tag=企鹅读书获取时长cookie +############## surge +#企鹅读书获取更新body +企鹅读书获取更新body = type=http-request,pattern=https:\/\/mqqapi\.reader\.qq\.com\/log\/v4\/mqq\/track,requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js, script-update-interval=0 +#企鹅读书获取时长cookie +企鹅读书获取时长cookie = type=http-request,pattern=https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid?,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js + + + +*/ + +const jsname = '企鹅读书' +const $ = Env(jsname) +let task = '', config, ssr2 = '', wktime, day = 0; +console.log(`\n========= 脚本执行时间(TM):${new Date(new Date().getTime() + 0 * 60 * 60 * 1000).toLocaleString('zh', {hour12: false})} =========\n`) + +const logs = 1; //0为关闭日志,1为开启 + +const TIME = 30//单次时长上传限制,默认5分钟 +const maxtime = 20//每日上传时长限制,默认20小时 +const wktimess = 1200//周奖励领取标准,默认1200分钟 +let tz = '',kz; +const qqreadbodyValKey = 'qqreadbodyVal' +let qqreadbodyVal = $.getdata(qqreadbodyValKey) + + +const qqreadtimeurlKey = 'qqreadtimeurl' +let qqreadtimeurlVal = $.getdata(qqreadtimeurlKey) + +const qqreadtimeheaderKey = 'qqreadtimehd' +let qqreadtimeheaderVal = $.getdata(qqreadtimeheaderKey) +//云函数使用在下面填写 +let QQ_READ_COOKIES = [ + { + "qqreadbodyVal": ``, + "qqreadtimeurlVal": ``, + "qqreadtimeheaderVal": `` + } +] +function getNodeCookie() { + if ($.isNode()) { + let QQ_READ_BODY_VAL = [], QQ_READ_TIME_URL_VAL = [], QQ_READ_TIME_HEADER_VAL = []; + if (process.env.QQ_READ_HEADER_VAL) { + if (process.env.QQ_READ_HEADER_VAL.indexOf('@') > -1) { + console.log(`您的QQ_READ_HEADER_VAL选择的是用@隔开\n`) + QQ_READ_BODY_VAL = process.env.QQ_READ_HEADER_VAL.split('@'); + } else if (process.env.QQ_READ_HEADER_VAL.indexOf('\n') > -1) { + console.log(`您的QQ_READ_HEADER_VAL选择的是用换行隔开\n`) + QQ_READ_BODY_VAL = process.env.QQ_READ_HEADER_VAL.split('\n'); + } else { + QQ_READ_BODY_VAL = [process.env.QQ_READ_HEADER_VAL]; + } + // QQ_READ_HEADER_VAL = [...new Set(QQ_READ_HEADER_VAL)] + // $.log(QQ_READ_HEADER_VAL) + } + if (process.env.QQ_READ_TIME_URL_VAL) { + if (process.env.QQ_READ_TIME_URL_VAL.indexOf('@') > -1) { + console.log(`您的QQ_READ_TIME_URL_VAL选择的是用@隔开\n`) + QQ_READ_TIME_URL_VAL = process.env.QQ_READ_TIME_URL_VAL.split('@'); + } else if (process.env.QQ_READ_HEADER_VAL.indexOf('\n') > -1) { + console.log(`您的QQ_READ_TIME_URL_VAL选择的是用换行隔开\n`) + QQ_READ_TIME_URL_VAL = process.env.QQ_READ_TIME_URL_VAL.split('\n'); + } else { + QQ_READ_TIME_URL_VAL = [process.env.QQ_READ_TIME_URL_VAL]; + } + // QQ_READ_TIME_URL_VAL = [...new Set(QQ_READ_TIME_URL_VAL)] + } + if (process.env.QQ_READ_TIME_HEADER_VAL) { + if (process.env.QQ_READ_TIME_HEADER_VAL.indexOf('@') > -1) { + console.log(`您的QQ_READ_TIME_HEADER_VAL选择的是用@隔开\n`) + QQ_READ_TIME_HEADER_VAL = process.env.QQ_READ_TIME_HEADER_VAL.split('@'); + } else if (process.env.QQ_READ_TIME_HEADER_VAL.indexOf('\n') > -1) { + console.log(`您的QQ_READ_TIME_HEADER_VAL选择的是用换行隔开\n`) + QQ_READ_TIME_HEADER_VAL = process.env.QQ_READ_TIME_HEADER_VAL.split('\n'); + } else { + QQ_READ_TIME_HEADER_VAL = [process.env.QQ_READ_TIME_HEADER_VAL]; + } + // QQ_READ_TIME_HEADER_VAL = [...new Set(QQ_READ_TIME_HEADER_VAL)] + } + if (QQ_READ_BODY_VAL && QQ_READ_BODY_VAL.length > 0) QQ_READ_COOKIES = []; + for (let i = 0; i < QQ_READ_BODY_VAL.length; i ++) { + QQ_READ_COOKIES.push({ + "qqreadbodyVal": QQ_READ_BODY_VAL[i] || "", + "qqreadtimeurlVal": QQ_READ_TIME_URL_VAL[i] || "", + "qqreadtimeheaderVal": QQ_READ_TIME_HEADER_VAL[i] || "" + }) + } + // console.log(`${JSON.stringify(QQ_READ_COOKIES)}`) + } +} +//CK运行 +let isGetCookie = typeof $request !== 'undefined' +if (isGetCookie) { + GetCookie() +} else { + !(async () => { + await getNodeCookie(); + await QQ_READ(); + // await all(); + })() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) +} + +function GetCookie() { + if ($request.body && $request.body.indexOf("bookDetail_bottomBar_read_C") >= 0 && $request.body.indexOf("bookRead_show_I") >= 0 && $request.body.indexOf("topBar_left_back_C") < 0 && $request.body.indexOf("bookRead_dropOut_shelfYes_C") < 0) { + const qqreadbodyVal = $request.body; + if (qqreadbodyVal) $.setdata(qqreadbodyVal, qqreadbodyValKey); + $.log(`[${jsname}] 获取更新body: 成功,qqreadbodyVal: ${qqreadbodyVal}`); + $.msg(jsname, `获取更新body: 成功🎉`, ``); + } + if ($request && $request.url.indexOf("addReadTimeWithBid?") >= 0) { + const qqreadtimeurlVal = $request.url + if (qqreadtimeurlVal) $.setdata(qqreadtimeurlVal, qqreadtimeurlKey) + $.log(`[${jsname}] 获取阅读时长url: 成功,qqreadtimeurlVal: ${qqreadtimeurlVal}`) + + const qqreadtimeheaderVal = JSON.stringify($request.headers) + if (qqreadtimeheaderVal) $.setdata(qqreadtimeheaderVal, qqreadtimeheaderKey) + $.log(`[${jsname}] 获取时长header: 成功,qqreadtimeheaderVal: ${qqreadtimeheaderVal}`) + $.msg(qqreadtimeheaderKey, `获取阅读时长cookie: 成功🎉`, ``) + } + $.done(); +} +async function QQ_READ() { + for (let i = 0; i < QQ_READ_COOKIES.length; i++) { + $.log(`\n*************开始QQ账号${i + 1}**************\n`); + tz = ''; + if (!QQ_READ_COOKIES[i]["qqreadbodyVal"] || !QQ_READ_COOKIES[i]['qqreadtimeurlVal'] || !QQ_READ_COOKIES[i]['qqreadtimeheaderVal']) { + $.log(`账号${i + 1}暂未提供脚本执行所需的cookie`); + continue + } + qqreadbodyVal = QQ_READ_COOKIES[i]['qqreadbodyVal']; + qqreadtimeurlVal = QQ_READ_COOKIES[i]['qqreadtimeurlVal']; + qqreadtimeheaderVal = QQ_READ_COOKIES[i]['qqreadtimeheaderVal']; + await qqreadinfo();//用户名 + await qqreadwktime();//周时长查询 + await qqreadtrack(); + await qqreadconfig();//时长查询 + await qqreadtask();//任务列表 + if (config.data.pageParams.todayReadSeconds / 3600 <= maxtime) { + await qqreadtime();// 上传时长 + } + await qqreadpick();//领周时长奖励 + if (task.data.taskList[0].doneFlag == 0) { + await qqreaddayread();//阅读任务 + } + if (task.data.taskList[1].doneFlag == 0) { + await $.wait(5000) + await qqreadssr1();//阅读金币1 + } + if (task.data.taskList[2].doneFlag == 0) { + await qqreadsign();//金币签到 + await qqreadtake();//阅豆签到 + } + if (task.data.taskList[3].doneFlag == 0) { + await qqreadvideo();//视频奖励 + } + if (task.data.treasureBox.doneFlag == 0) { + await qqreadbox();//宝箱 + } + if (task.data.taskList[1].doneFlag == 0) { + await $.wait(5000) + await qqreadssr2();//阅读金币2 + } + if (task.data.taskList[2].doneFlag == 0) { + await qqreadsign2();//金币签到 + } + + if (task.data.treasureBox.videoDoneFlag == 0) { + await qqreadbox2();//宝箱翻倍 + } + if (task.data.taskList[1].doneFlag == 0) { + await $.wait(5000) + await qqreadssr3();//阅读金币3 + } + if (task.data.user.amount >= 100000) { + await qqreadwithdraw(); + } + await showmsg();//通知 + } +} +function showmsg() { + $.msg(jsname, "", tz); // 宝箱每15次通知一次 +} +//提现 +function qqreadwithdraw() { + return new Promise((resolve, reject) => { + const toqqreadwithdrawurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/withdraw?amount=100000", + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.post(toqqreadwithdrawurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 提现: ${data}`); + let withdraw = JSON.parse(data); + if (withdraw.data.code == 0) + tz += `【现金提现】:成功提现10元\n`; + kz += `【现金提现】:成功提现10元\n`; + resolve(); + }); + }); +} +// 任务列表 +function qqreadtask() { + return new Promise((resolve, reject) => { + const toqqreadtaskurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/page?fromGuid=", + headers: JSON.parse(qqreadtimeheaderVal), + + timeout: 60000, + }; + $.get(toqqreadtaskurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 任务列表: ${data}`); + task = JSON.parse(data); + kz += + `【现金余额】:${(task.data.user.amount / 10000).toFixed(2)}元\n` + + `【已开宝箱】:${task.data.treasureBox.count}个\n`; + + tz += + `【现金余额】:${(task.data.user.amount / 10000).toFixed(2)}元\n` + + `【第${task.data.invite.issue}期】:时间${task.data.invite.dayRange}\n` + + ` 已邀请${task.data.invite.inviteCount}人,再邀请${task.data.invite.nextInviteConfig.count}人获得${task.data.invite.nextInviteConfig.amount}金币\n` + + `【${task.data.taskList[0].title}】:${task.data.taskList[0].amount}金币,${task.data.taskList[0].actionText}\n` + + `【${task.data.taskList[1].title}】:${task.data.taskList[1].amount}金币,${task.data.taskList[1].actionText}\n` + + `【${task.data.taskList[2].title}】:${task.data.taskList[2].amount}金币,${task.data.taskList[2].actionText}\n` + + `【${task.data.taskList[3].title}】:${task.data.taskList[3].amount}金币,${task.data.taskList[3].actionText}\n` + + `【宝箱任务${task.data.treasureBox.count + 1}】:${ + task.data.treasureBox.tipText + }\n` + + `【${task.data.fans.title}】:${task.data.fans.fansCount}个好友,${task.data.fans.todayAmount}金币\n`; + + resolve(); + }); + }); +} + + +// 更新 +function qqreadtrack() { + return new Promise((resolve, reject) => { + const body = qqreadbodyVal.replace(new RegExp(/"dis":[0-9]{13}/), `"dis":${new Date().getTime()}`) + const toqqreadtrackurl = { + url: "https://mqqapi.reader.qq.com/log/v4/mqq/track", + headers: JSON.parse(qqreadtimeheaderVal), + body: body, + timeout: 60000, + }; + $.post(toqqreadtrackurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 更新: ${data}`); + let track = JSON.parse(data); + tz += `【数据更新】:更新${track.msg}\n`; + resolve(); + }); + }); +} + + +// 用户名 +function qqreadinfo() { + return new Promise((resolve, reject) => { + const toqqreadinfourl = { + url: "https://mqqapi.reader.qq.com/mqq/user/init", + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadinfourl, (error, response, data) => { + if (logs) $.log(`${jsname}, 用户名: ${data}`); + let info = JSON.parse(data); + kz += `\n========== 【${info.data.user.nickName}】 ==========\n`; + tz += `\n========== 【${info.data.user.nickName}】 ==========\n`; + + resolve(); + }); + }); +} + +// 阅豆签到 +function qqreadtake() { + return new Promise((resolve, reject) => { + const toqqreadtakeurl = { + url: "https://mqqapi.reader.qq.com/mqq/sign_in/user", + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.post(toqqreadtakeurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅豆签到: ${data}`); + let take = JSON.parse(data); + if (take.data.takeTicket > 0) { + tz += `【阅豆签到】:获得${take.data.takeTicket}豆\n`; + } + + resolve(); + }); + }); +} + +// 阅读时长任务 +function qqreadconfig() { + return new Promise((resolve, reject) => { + const toqqreadconfigurl = { + url: + "https://mqqapi.reader.qq.com/mqq/page/config?router=%2Fpages%2Fbook-read%2Findex&options=", + headers: JSON.parse(qqreadtimeheaderVal), + }; + $.get(toqqreadconfigurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅读时长查询: ${data}`); + config = JSON.parse(data); + if (config.code == 0) + tz += `【时长查询】:今日阅读${( + config.data.pageParams.todayReadSeconds / 60 + ).toFixed(0)}分钟\n`; + + resolve(); + }); + }); +} + +// 阅读时长 +function qqreadtime() { + return new Promise((resolve, reject) => { + const toqqreadtimeurl = { + url: qqreadtimeurlVal.replace(/readTime=/g, `readTime=${TIME}`), + headers: JSON.parse(qqreadtimeheaderVal), + }; + $.get(toqqreadtimeurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅读时长qqreadtime: ${data}`); + let time = JSON.parse(data); + if (time.code == 0) tz += `【阅读时长】:上传${TIME / 6}分钟\n`; + + resolve(); + }); + }); +} + +// 阅读金币1 +function qqreadssr1() { + return new Promise((resolve, reject) => { + const toqqreadssr1url = { + url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=30`, + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + if (config.data && config.data.pageParams.todayReadSeconds / 60 >= 1) { + $.get(toqqreadssr1url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币奖励1: ${data}`); + let ssr1 = JSON.parse(data); + if (ssr1.data.amount > 0) + tz += `【阅读金币1】获得${ssr1.data.amount}金币\n`; + }); + } + resolve(); + }); +} + +// 阅读金币2 +function qqreadssr2() { + return new Promise((resolve, reject) => { + const toqqreadssr2url = { + url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=300`, + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + if (config.data && config.data.pageParams.todayReadSeconds / 60 >= 5) { + $.get(toqqreadssr2url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币奖励2: ${data}`); + ssr2 = JSON.parse(data); + if (ssr2.data.amount > 0) + tz += `【阅读金币2】获得${ssr2.data.amount}金币\n`; + + + }); + } + resolve(); + }); +} + +// 阅读金币3 +function qqreadssr3() { + return new Promise((resolve, reject) => { + const toqqreadssr3url = { + url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=1800`, + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + if (config.data && config.data.pageParams.todayReadSeconds / 60 >= 30) { + $.get(toqqreadssr3url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币奖励3: ${data}`); + let ssr3 = JSON.parse(data); + if (ssr3.data.amount > 0) + tz += `【阅读金币3】获得${ssr3.data.amount}金币\n`; + + + }); + } + resolve(); + }); +} + +// 金币签到 +function qqreadsign() { + return new Promise((resolve, reject) => { + const toqqreadsignurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/clock_in/page", + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadsignurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币签到: ${data}`); + sign = JSON.parse(data); + if (sign.data.videoDoneFlag) { + tz += `【金币签到】:获得${sign.data.todayAmount}金币\n`; + } + resolve(); + }); + }); +} + +// 金币签到翻倍 +function qqreadsign2() { + return new Promise((resolve, reject) => { + const toqqreadsign2url = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/clock_in_video", + + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadsign2url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币签到翻倍: ${data}`); + let sign2 = JSON.parse(data); + if (sign2.code == 0) { + tz += `【签到翻倍】:获得${sign2.data.amount}金币\n`; + } + + resolve(); + }); + }); +} + +// 每日阅读 +function qqreaddayread() { + return new Promise((resolve, reject) => { + const toqqreaddayreadurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/read_book", + + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreaddayreadurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 每日阅读: ${data}`); + let dayread = JSON.parse(data); + if (dayread.code == 0) { + tz += `【每日阅读】:获得${dayread.data.amount}金币\n`; + } + + resolve(); + }); + }); +} + +// 视频奖励 +function qqreadvideo() { + return new Promise((resolve, reject) => { + const toqqreadvideourl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/watch_video", + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadvideourl, (error, response, data) => { + if (logs) $.log(`${jsname}, 视频奖励: ${data}`); + let video = JSON.parse(data); + if (video.code == 0) { + tz += `【视频奖励】:获得${video.data.amount}金币\n`; + } + + resolve(); + }); + }); +} + +// 宝箱奖励 +function qqreadbox() { + return new Promise((resolve, reject) => { + const toqqreadboxurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box", + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadboxurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 宝箱奖励: ${data}`); + let box = JSON.parse(data); + if (box.data.count >= 0) { + tz += `【宝箱奖励${box.data.count}】:获得${box.data.amount}金币\n`; + } + + resolve(); + }); + }); +} + +// 宝箱奖励翻倍 +function qqreadbox2() { + return new Promise((resolve, reject) => { + const toqqreadbox2url = { + url: + "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box_video", + + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadbox2url, (error, response, data) => { + if (logs) $.log(`${jsname}, 宝箱奖励翻倍: ${data}`); + let box2 = JSON.parse(data); + if (box2.code == 0) { + tz += `【宝箱翻倍】:获得${box2.data.amount}金币\n`; + } + + resolve(); + }); + }); +} + +// 本周阅读时长 +function qqreadwktime() { + return new Promise((resolve, reject) => { + const toqqreadwktimeurl = { + url: `https://mqqapi.reader.qq.com/mqq/v1/bookShelfInit`, + headers: JSON.parse(qqreadtimeheaderVal), + }; + $.get(toqqreadwktimeurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅读时长: ${data}`); + wktime = JSON.parse(data); + if (wktime.code == 0) + tz += `【本周阅读时长】:${wktime.data.readTime}分钟\n`; + + resolve(); + }); + }); +} + +// 本周阅读时长奖励任务 +function qqreadpick() { + return new Promise((resolve, reject) => { + const toqqreadpickurl = { + url: `https://mqqapi.reader.qq.com/mqq/pickPackageInit`, + headers: JSON.parse(qqreadtimeheaderVal), + }; + if (wktime.data.readTime >= wktimess && wktime.data.readTime <= 1250) { + $.get(toqqreadpickurl, (error, response, data) => { + if (logs) $.log(`${jsname},周阅读时长奖励任务: ${data}`); + let pick = JSON.parse(data); + if (pick.data[7].isPick == true) tz += "【周时长奖励】:已全部领取\n"; + + for (let i = 0; i < pick.data.length; i++) { + setTimeout(() => { + const pickid = pick.data[i].readTime; + const Packageid = [ + "10", + "10", + "20", + "30", + "50", + "80", + "100", + "120", + ]; + const toqqreadPackageurl = { + url: `https://mqqapi.reader.qq.com/mqq/pickPackage?readTime=${pickid}`, + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadPackageurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 领周阅读时长: ${data}`); + Package = JSON.parse(data); + if (Package.code == 0) + tz += `【周时长奖励${i + 1}】:领取${Packageid[i]}阅豆\n`; + }); + }, i * 100); + } + }); + resolve(); + } + resolve(); + }); +} + + +// prettier-ignore +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)} From a30079e38a5fd4ee14d87c647dd3eee153e83053 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 11:08:28 +0800 Subject: [PATCH 13/57] Update main.yml --- .github/workflows/main.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 56d418b..3e30ae2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -17,9 +17,9 @@ jobs: runs-on: ubuntu-latest if: github.event.repository.owner.id == github.event.sender.id env: - QQREAD_HEADER: ${{ secrets.QQREAD_HEADER }} - QQREAD_TIMEURL: ${{ secrets.QQREAD_TIMEURL }} - QQREAD_TIMEHEADER: ${{ secrets.QQREAD_TIMEHEADER }} + QQ_READ_HEADER_VAL: ${{ secrets.QQ_READ_HEADER_VAL }} + QQ_READ_TIME_URL_VAL: ${{ secrets.QQ_READ_TIME_URL_VAL }} + QQ_READ_TIME_HEADER_VAL: ${{ secrets.QQ_READ_TIME_HEADER_VAL }} steps: - name: Checkout uses: actions/checkout@v2 @@ -41,4 +41,4 @@ jobs: npm install tough-cookie - name: '运行 【QQ阅读】' run: | - node qqreads.js + node qqread.js From b4f53d1369e7afed066c1f20059e47ae7e98969a Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 19:47:06 +0800 Subject: [PATCH 14/57] Delete main.yml --- .github/workflows/main.yml | 44 -------------------------------------- 1 file changed, 44 deletions(-) delete mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 3e30ae2..0000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,44 +0,0 @@ -# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions - -# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions - -name: qqreads - -on: - workflow_dispatch: - schedule: - - cron: '*/7 * * * *' - -jobs: - build: - - runs-on: ubuntu-latest - if: github.event.repository.owner.id == github.event.sender.id - env: - QQ_READ_HEADER_VAL: ${{ secrets.QQ_READ_HEADER_VAL }} - QQ_READ_TIME_URL_VAL: ${{ secrets.QQ_READ_TIME_URL_VAL }} - QQ_READ_TIME_HEADER_VAL: ${{ secrets.QQ_READ_TIME_HEADER_VAL }} - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - name: Cache node_modules - uses: actions/cache@v2 # 使用 GitHub 官方的缓存 Action。 - env: - cache-name: cache-node-modules - with: - path: node_modules - key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('package-lock.json') }} # 使用 package-lock.json 的 Hash 作为缓存的 key。也可以使用 package.json 代替 - - name: npm install - run: | - npm install - npm install got - npm install tough-cookie - - name: '运行 【QQ阅读】' - run: | - node qqread.js From b3350b05c8da781e91853630fd7739f51232ba6f Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 19:52:54 +0800 Subject: [PATCH 15/57] Create main.yml --- .github/workflows/main.yml | 45 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..674c902 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,45 @@ +# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: youth + +on: + workflow_dispatch: + schedule: + - cron: '*/7 * * * *' + watch: + types: started +env: + TZ: Asia/Shanghai + +jobs: + build: + runs-on: ubuntu-latest + if: github.event.repository.owner.id == github.event.sender.id + env: + QQ_READ_HEADER_VAL: ${{ secrets.QQ_READ_HEADER_VAL }} + QQ_READ_TIME_URL_VAL: ${{ secrets.QQ_READ_TIME_URL_VAL }} + QQ_READ_TIME_HEADER_VAL: ${{ secrets.QQ_READ_TIME_HEADER_VAL }} + steps: + - uses: actions/checkout@v1 + - name: Use Node.js 14.x + uses: actions/setup-node@v1 + with: + node-version: 14.x + - name: npm install + if: env.QQ_READ_HEADER_VAL + run: | + npm install + - name: '运行 【企鹅阅读】' + if: env.QQ_READ_HEADER_VAL + run: | + node qqread.js + env: + YOUTH_NOTIFY_CONTROL: ${{ secrets.YOUTH_NOTIFY_CONTROL }} + PUSH_KEY: ${{ secrets.PUSH_KEY }} + BARK_PUSH: ${{ secrets.BARK_PUSH }} + TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN }} + TG_USER_ID: ${{ secrets.TG_USER_ID }} + BARK_SOUND: ${{ secrets.BARK_SOUND }} + DD_BOT_TOKEN: ${{ secrets.DD_BOT_TOKEN }} + DD_BOT_SECRET: ${{ secrets.DD_BOT_SECRET }} From 4637a72d3da924bb7507fc24f0ebcce35738e0f3 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 19:53:24 +0800 Subject: [PATCH 16/57] Update main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 674c902..f5637a7 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,7 +1,7 @@ # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions -name: youth +name: 企鹅阅读 on: workflow_dispatch: From edcc90773d026d3654c5b2a48bb105e24b547926 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:00:48 +0800 Subject: [PATCH 17/57] Update main.yml --- .github/workflows/main.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f5637a7..ffdd872 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,18 +14,19 @@ env: jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-latest if: github.event.repository.owner.id == github.event.sender.id env: QQ_READ_HEADER_VAL: ${{ secrets.QQ_READ_HEADER_VAL }} QQ_READ_TIME_URL_VAL: ${{ secrets.QQ_READ_TIME_URL_VAL }} QQ_READ_TIME_HEADER_VAL: ${{ secrets.QQ_READ_TIME_HEADER_VAL }} steps: - - uses: actions/checkout@v1 - - name: Use Node.js 14.x + - name: Checkout + uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: - node-version: 14.x + node-version: ${{ matrix.node-version }} - name: npm install if: env.QQ_READ_HEADER_VAL run: | From b9bdec77d2cc600f3ed80c6b7f9157b26776d383 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:01:35 +0800 Subject: [PATCH 18/57] Update main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ffdd872..13be7bc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,7 +14,7 @@ env: jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-latest if: github.event.repository.owner.id == github.event.sender.id env: QQ_READ_HEADER_VAL: ${{ secrets.QQ_READ_HEADER_VAL }} From 5d2b25273dc5079160cd2daa67de5a295e6dc988 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:02:54 +0800 Subject: [PATCH 19/57] Delete main.yml --- .github/workflows/main.yml | 46 -------------------------------------- 1 file changed, 46 deletions(-) delete mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 13be7bc..0000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,46 +0,0 @@ -# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions - -name: 企鹅阅读 - -on: - workflow_dispatch: - schedule: - - cron: '*/7 * * * *' - watch: - types: started -env: - TZ: Asia/Shanghai - -jobs: - build: - runs-on: ubuntu-latest - if: github.event.repository.owner.id == github.event.sender.id - env: - QQ_READ_HEADER_VAL: ${{ secrets.QQ_READ_HEADER_VAL }} - QQ_READ_TIME_URL_VAL: ${{ secrets.QQ_READ_TIME_URL_VAL }} - QQ_READ_TIME_HEADER_VAL: ${{ secrets.QQ_READ_TIME_HEADER_VAL }} - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - name: npm install - if: env.QQ_READ_HEADER_VAL - run: | - npm install - - name: '运行 【企鹅阅读】' - if: env.QQ_READ_HEADER_VAL - run: | - node qqread.js - env: - YOUTH_NOTIFY_CONTROL: ${{ secrets.YOUTH_NOTIFY_CONTROL }} - PUSH_KEY: ${{ secrets.PUSH_KEY }} - BARK_PUSH: ${{ secrets.BARK_PUSH }} - TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN }} - TG_USER_ID: ${{ secrets.TG_USER_ID }} - BARK_SOUND: ${{ secrets.BARK_SOUND }} - DD_BOT_TOKEN: ${{ secrets.DD_BOT_TOKEN }} - DD_BOT_SECRET: ${{ secrets.DD_BOT_SECRET }} From 91c72fb1262a1cc7592ddc2275fb3d76cb10105c Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:12:20 +0800 Subject: [PATCH 20/57] Create npm-publish.yml --- .github/workflows/npm-publish.yml | 46 +++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 .github/workflows/npm-publish.yml diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml new file mode 100644 index 0000000..34eaf5a --- /dev/null +++ b/.github/workflows/npm-publish.yml @@ -0,0 +1,46 @@ +# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: 企鹅读书 + +on: + workflow_dispatch: + schedule: + - cron: '*/7 * * * *' + watch: + types: started + +jobs: + build: + runs-on: ubuntu-latest + if: github.event.repository.owner.id == github.event.sender.id + env: + QQ_READ_HEADER_VAL: ${{ secrets.QQ_READ_HEADER_VAL }} + QQ_READ_TIME_URL_VAL: ${{ secrets.QQ_READ_TIME_URL_VAL }} + QQ_READ_TIME_HEADER_VAL: ${{ secrets.QQ_READ_TIME_HEADER_VAL }} + + steps: + - name: Checkout + run: | + git clone https://github.com/ziye12/JavaScript.git ~/JavaScript + - name: Use Node.js 12.x + uses: actions/setup-node@v1 + with: + node-version: 12.x + - name: npm install + if: env.QQ_READ_HEADER_VAL + run: | + npm install + - name: '运行 【企鹅读书】' + if: env.QQ_READ_HEADER_VAL + run: | + node qqreads.js + env: + + PUSH_KEY: ${{ secrets.PUSH_KEY }} + BARK_PUSH: ${{ secrets.BARK_PUSH }} + TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN }} + TG_USER_ID: ${{ secrets.TG_USER_ID }} + BARK_SOUND: ${{ secrets.BARK_SOUND }} + DD_BOT_TOKEN: ${{ secrets.DD_BOT_TOKEN }} + DD_BOT_SECRET: ${{ secrets.DD_BOT_SECRET }} From 01cd2e5524d79ac2910207577a77334d5f4a5798 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:16:49 +0800 Subject: [PATCH 21/57] Update npm-publish.yml --- .github/workflows/npm-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index 34eaf5a..b8bed46 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -22,7 +22,7 @@ jobs: steps: - name: Checkout run: | - git clone https://github.com/ziye12/JavaScript.git ~/JavaScript + git clone https://github.com/lxmd02/qq.git - name: Use Node.js 12.x uses: actions/setup-node@v1 with: From 6689a7ad3980a5e6381820bff28ff43487a59f22 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:33:41 +0800 Subject: [PATCH 22/57] Create Task --- Task | 1 + 1 file changed, 1 insertion(+) create mode 100644 Task diff --git a/Task b/Task new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Task @@ -0,0 +1 @@ + From e4c88bac48d1e1a0e4dd779ab31922999ef24fc9 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:33:52 +0800 Subject: [PATCH 23/57] Delete Task --- Task | 1 - 1 file changed, 1 deletion(-) delete mode 100644 Task diff --git a/Task b/Task deleted file mode 100644 index 8b13789..0000000 --- a/Task +++ /dev/null @@ -1 +0,0 @@ - From f637a182df636bb56e21494a6dd218adc486df15 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:36:16 +0800 Subject: [PATCH 24/57] Create qq --- Task/qq | 1 + 1 file changed, 1 insertion(+) create mode 100644 Task/qq diff --git a/Task/qq b/Task/qq new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Task/qq @@ -0,0 +1 @@ + From 51d1c934a95068ac9221e52b00dd5c13a6a3252c Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:39:55 +0800 Subject: [PATCH 25/57] Add files via upload --- Task/qqread.js | 641 +++++++++++++++++++++++++++++++++++++++++++++ Task/sendNotify.js | 255 ++++++++++++++++++ 2 files changed, 896 insertions(+) create mode 100644 Task/qqread.js create mode 100644 Task/sendNotify.js diff --git a/Task/qqread.js b/Task/qqread.js new file mode 100644 index 0000000..0c5903c --- /dev/null +++ b/Task/qqread.js @@ -0,0 +1,641 @@ +/* +****************************************************************************** + 改用,nodejs云端专用。可N个账号。by;lxk0301 + 一个账号需三个环境变量/secret + 分别为 QQ_READ_HEADER_VAL QQ_READ_TIME_URL_VAL QQ_READ_TIME_HEADER_VAL + 多个账号 对应三个环境变量/secret 使用@符号或者换行隔开 + iOS可使用BoxJs可使用此订阅修改复制所需的环境变量 https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/mySelf.boxjs.json + 环境变量与BoxJs里面对应关系 + QQ_READ_HEADER_VAL ------》 qqreadbodyVal + QQ_READ_TIME_URL_VAL ------》 qqreadtimeurl + QQ_READ_TIME_HEADER_VAL ------》 qqreadtimehd + ***************************************************************************************************************** +ziye +本人github地址 https://github.com/ziye12/JavaScript +转载请备注个名字,谢谢 + +11.25 增加 阅读时长上传,阅读金币,阅读随机金币 +11.25 修复翻倍宝箱不同时领取的问题.增加阅读金币判定 +11.25 修复阅读时长问题,阅读金币问题,请重新获取时长cookie +11.26 随机金币只有一次,故去除,调整修复阅读金币问题,增加时长上传限制 +11.26 增加领取周时长奖励 +11.26 增加结束命令 +11.27 调整通知为,成功开启宝箱再通知 +11.28 修复错误 +12.1 调整通知为15次宝箱通知一次 +12.1 优化通知 + +⚠️cookie获取方法: + +进 https://m.q.qq.com/a/s/d3eacc70120b9a37e46bad408c0c4c2a 点我的 获取cookie + +进一本书 看 10秒以下 然后退出,获取阅读时长cookie,看书一定不能超过10秒 + +可能某些页面会卡住,但是能获取到cookie,再注释cookie重写就行了! + + + +⚠️宝箱奖励为20分钟一次,自己根据情况设置定时,建议设置11分钟一次 + +hostname=mqqapi.reader.qq.com +############## 圈x +#企鹅读书获取更新body +https:\/\/mqqapi\.reader\.qq\.com\/log\/v4\/mqq\/track url script-request-body https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js +#企鹅读书获取时长cookie +https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid? url script-request-header https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js +############## loon +#企鹅读书获取更新body +http-request https:\/\/mqqapi\.reader\.qq\.com\/log\/v4\/mqq\/track script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js,requires-body=true, tag=企鹅读书获取更新body +#企鹅读书获取时长cookie +http-request https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid? script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js, requires-header=true, tag=企鹅读书获取时长cookie +############## surge +#企鹅读书获取更新body +企鹅读书获取更新body = type=http-request,pattern=https:\/\/mqqapi\.reader\.qq\.com\/log\/v4\/mqq\/track,requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js, script-update-interval=0 +#企鹅读书获取时长cookie +企鹅读书获取时长cookie = type=http-request,pattern=https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid?,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js + + + +*/ + +const jsname = '企鹅读书' +const $ = Env(jsname) +let task = '', config, ssr2 = '', wktime, day = 0; +console.log(`\n========= 脚本执行时间(TM):${new Date(new Date().getTime() + 0 * 60 * 60 * 1000).toLocaleString('zh', {hour12: false})} =========\n`) + +const logs = 1; //0为关闭日志,1为开启 + +const TIME = 30//单次时长上传限制,默认5分钟 +const maxtime = 20//每日上传时长限制,默认20小时 +const wktimess = 1200//周奖励领取标准,默认1200分钟 +let tz = '',kz; +const qqreadbodyValKey = 'qqreadbodyVal' +let qqreadbodyVal = $.getdata(qqreadbodyValKey) + + +const qqreadtimeurlKey = 'qqreadtimeurl' +let qqreadtimeurlVal = $.getdata(qqreadtimeurlKey) + +const qqreadtimeheaderKey = 'qqreadtimehd' +let qqreadtimeheaderVal = $.getdata(qqreadtimeheaderKey) +//云函数使用在下面填写 +let QQ_READ_COOKIES = [ + { + "qqreadbodyVal": ``, + "qqreadtimeurlVal": ``, + "qqreadtimeheaderVal": `` + } +] +function getNodeCookie() { + if ($.isNode()) { + let QQ_READ_BODY_VAL = [], QQ_READ_TIME_URL_VAL = [], QQ_READ_TIME_HEADER_VAL = []; + if (process.env.QQ_READ_HEADER_VAL) { + if (process.env.QQ_READ_HEADER_VAL.indexOf('@') > -1) { + console.log(`您的QQ_READ_HEADER_VAL选择的是用@隔开\n`) + QQ_READ_BODY_VAL = process.env.QQ_READ_HEADER_VAL.split('@'); + } else if (process.env.QQ_READ_HEADER_VAL.indexOf('\n') > -1) { + console.log(`您的QQ_READ_HEADER_VAL选择的是用换行隔开\n`) + QQ_READ_BODY_VAL = process.env.QQ_READ_HEADER_VAL.split('\n'); + } else { + QQ_READ_BODY_VAL = [process.env.QQ_READ_HEADER_VAL]; + } + // QQ_READ_HEADER_VAL = [...new Set(QQ_READ_HEADER_VAL)] + // $.log(QQ_READ_HEADER_VAL) + } + if (process.env.QQ_READ_TIME_URL_VAL) { + if (process.env.QQ_READ_TIME_URL_VAL.indexOf('@') > -1) { + console.log(`您的QQ_READ_TIME_URL_VAL选择的是用@隔开\n`) + QQ_READ_TIME_URL_VAL = process.env.QQ_READ_TIME_URL_VAL.split('@'); + } else if (process.env.QQ_READ_HEADER_VAL.indexOf('\n') > -1) { + console.log(`您的QQ_READ_TIME_URL_VAL选择的是用换行隔开\n`) + QQ_READ_TIME_URL_VAL = process.env.QQ_READ_TIME_URL_VAL.split('\n'); + } else { + QQ_READ_TIME_URL_VAL = [process.env.QQ_READ_TIME_URL_VAL]; + } + // QQ_READ_TIME_URL_VAL = [...new Set(QQ_READ_TIME_URL_VAL)] + } + if (process.env.QQ_READ_TIME_HEADER_VAL) { + if (process.env.QQ_READ_TIME_HEADER_VAL.indexOf('@') > -1) { + console.log(`您的QQ_READ_TIME_HEADER_VAL选择的是用@隔开\n`) + QQ_READ_TIME_HEADER_VAL = process.env.QQ_READ_TIME_HEADER_VAL.split('@'); + } else if (process.env.QQ_READ_TIME_HEADER_VAL.indexOf('\n') > -1) { + console.log(`您的QQ_READ_TIME_HEADER_VAL选择的是用换行隔开\n`) + QQ_READ_TIME_HEADER_VAL = process.env.QQ_READ_TIME_HEADER_VAL.split('\n'); + } else { + QQ_READ_TIME_HEADER_VAL = [process.env.QQ_READ_TIME_HEADER_VAL]; + } + // QQ_READ_TIME_HEADER_VAL = [...new Set(QQ_READ_TIME_HEADER_VAL)] + } + if (QQ_READ_BODY_VAL && QQ_READ_BODY_VAL.length > 0) QQ_READ_COOKIES = []; + for (let i = 0; i < QQ_READ_BODY_VAL.length; i ++) { + QQ_READ_COOKIES.push({ + "qqreadbodyVal": QQ_READ_BODY_VAL[i] || "", + "qqreadtimeurlVal": QQ_READ_TIME_URL_VAL[i] || "", + "qqreadtimeheaderVal": QQ_READ_TIME_HEADER_VAL[i] || "" + }) + } + // console.log(`${JSON.stringify(QQ_READ_COOKIES)}`) + } +} +//CK运行 +let isGetCookie = typeof $request !== 'undefined' +if (isGetCookie) { + GetCookie() +} else { + !(async () => { + await getNodeCookie(); + await QQ_READ(); + // await all(); + })() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) +} + +function GetCookie() { + if ($request.body && $request.body.indexOf("bookDetail_bottomBar_read_C") >= 0 && $request.body.indexOf("bookRead_show_I") >= 0 && $request.body.indexOf("topBar_left_back_C") < 0 && $request.body.indexOf("bookRead_dropOut_shelfYes_C") < 0) { + const qqreadbodyVal = $request.body; + if (qqreadbodyVal) $.setdata(qqreadbodyVal, qqreadbodyValKey); + $.log(`[${jsname}] 获取更新body: 成功,qqreadbodyVal: ${qqreadbodyVal}`); + $.msg(jsname, `获取更新body: 成功🎉`, ``); + } + if ($request && $request.url.indexOf("addReadTimeWithBid?") >= 0) { + const qqreadtimeurlVal = $request.url + if (qqreadtimeurlVal) $.setdata(qqreadtimeurlVal, qqreadtimeurlKey) + $.log(`[${jsname}] 获取阅读时长url: 成功,qqreadtimeurlVal: ${qqreadtimeurlVal}`) + + const qqreadtimeheaderVal = JSON.stringify($request.headers) + if (qqreadtimeheaderVal) $.setdata(qqreadtimeheaderVal, qqreadtimeheaderKey) + $.log(`[${jsname}] 获取时长header: 成功,qqreadtimeheaderVal: ${qqreadtimeheaderVal}`) + $.msg(qqreadtimeheaderKey, `获取阅读时长cookie: 成功🎉`, ``) + } + $.done(); +} +async function QQ_READ() { + for (let i = 0; i < QQ_READ_COOKIES.length; i++) { + $.log(`\n*************开始QQ账号${i + 1}**************\n`); + tz = ''; + if (!QQ_READ_COOKIES[i]["qqreadbodyVal"] || !QQ_READ_COOKIES[i]['qqreadtimeurlVal'] || !QQ_READ_COOKIES[i]['qqreadtimeheaderVal']) { + $.log(`账号${i + 1}暂未提供脚本执行所需的cookie`); + continue + } + qqreadbodyVal = QQ_READ_COOKIES[i]['qqreadbodyVal']; + qqreadtimeurlVal = QQ_READ_COOKIES[i]['qqreadtimeurlVal']; + qqreadtimeheaderVal = QQ_READ_COOKIES[i]['qqreadtimeheaderVal']; + await qqreadinfo();//用户名 + await qqreadwktime();//周时长查询 + await qqreadtrack(); + await qqreadconfig();//时长查询 + await qqreadtask();//任务列表 + if (config.data.pageParams.todayReadSeconds / 3600 <= maxtime) { + await qqreadtime();// 上传时长 + } + await qqreadpick();//领周时长奖励 + if (task.data.taskList[0].doneFlag == 0) { + await qqreaddayread();//阅读任务 + } + if (task.data.taskList[1].doneFlag == 0) { + await $.wait(5000) + await qqreadssr1();//阅读金币1 + } + if (task.data.taskList[2].doneFlag == 0) { + await qqreadsign();//金币签到 + await qqreadtake();//阅豆签到 + } + if (task.data.taskList[3].doneFlag == 0) { + await qqreadvideo();//视频奖励 + } + if (task.data.treasureBox.doneFlag == 0) { + await qqreadbox();//宝箱 + } + if (task.data.taskList[1].doneFlag == 0) { + await $.wait(5000) + await qqreadssr2();//阅读金币2 + } + if (task.data.taskList[2].doneFlag == 0) { + await qqreadsign2();//金币签到 + } + + if (task.data.treasureBox.videoDoneFlag == 0) { + await qqreadbox2();//宝箱翻倍 + } + if (task.data.taskList[1].doneFlag == 0) { + await $.wait(5000) + await qqreadssr3();//阅读金币3 + } + if (task.data.user.amount >= 100000) { + await qqreadwithdraw(); + } + await showmsg();//通知 + } +} +function showmsg() { + $.msg(jsname, "", tz); // 宝箱每15次通知一次 +} +//提现 +function qqreadwithdraw() { + return new Promise((resolve, reject) => { + const toqqreadwithdrawurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/withdraw?amount=100000", + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.post(toqqreadwithdrawurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 提现: ${data}`); + let withdraw = JSON.parse(data); + if (withdraw.data.code == 0) + tz += `【现金提现】:成功提现10元\n`; + kz += `【现金提现】:成功提现10元\n`; + resolve(); + }); + }); +} +// 任务列表 +function qqreadtask() { + return new Promise((resolve, reject) => { + const toqqreadtaskurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/page?fromGuid=", + headers: JSON.parse(qqreadtimeheaderVal), + + timeout: 60000, + }; + $.get(toqqreadtaskurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 任务列表: ${data}`); + task = JSON.parse(data); + kz += + `【现金余额】:${(task.data.user.amount / 10000).toFixed(2)}元\n` + + `【已开宝箱】:${task.data.treasureBox.count}个\n`; + + tz += + `【现金余额】:${(task.data.user.amount / 10000).toFixed(2)}元\n` + + `【第${task.data.invite.issue}期】:时间${task.data.invite.dayRange}\n` + + ` 已邀请${task.data.invite.inviteCount}人,再邀请${task.data.invite.nextInviteConfig.count}人获得${task.data.invite.nextInviteConfig.amount}金币\n` + + `【${task.data.taskList[0].title}】:${task.data.taskList[0].amount}金币,${task.data.taskList[0].actionText}\n` + + `【${task.data.taskList[1].title}】:${task.data.taskList[1].amount}金币,${task.data.taskList[1].actionText}\n` + + `【${task.data.taskList[2].title}】:${task.data.taskList[2].amount}金币,${task.data.taskList[2].actionText}\n` + + `【${task.data.taskList[3].title}】:${task.data.taskList[3].amount}金币,${task.data.taskList[3].actionText}\n` + + `【宝箱任务${task.data.treasureBox.count + 1}】:${ + task.data.treasureBox.tipText + }\n` + + `【${task.data.fans.title}】:${task.data.fans.fansCount}个好友,${task.data.fans.todayAmount}金币\n`; + + resolve(); + }); + }); +} + + +// 更新 +function qqreadtrack() { + return new Promise((resolve, reject) => { + const body = qqreadbodyVal.replace(new RegExp(/"dis":[0-9]{13}/), `"dis":${new Date().getTime()}`) + const toqqreadtrackurl = { + url: "https://mqqapi.reader.qq.com/log/v4/mqq/track", + headers: JSON.parse(qqreadtimeheaderVal), + body: body, + timeout: 60000, + }; + $.post(toqqreadtrackurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 更新: ${data}`); + let track = JSON.parse(data); + tz += `【数据更新】:更新${track.msg}\n`; + resolve(); + }); + }); +} + + +// 用户名 +function qqreadinfo() { + return new Promise((resolve, reject) => { + const toqqreadinfourl = { + url: "https://mqqapi.reader.qq.com/mqq/user/init", + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadinfourl, (error, response, data) => { + if (logs) $.log(`${jsname}, 用户名: ${data}`); + let info = JSON.parse(data); + kz += `\n========== 【${info.data.user.nickName}】 ==========\n`; + tz += `\n========== 【${info.data.user.nickName}】 ==========\n`; + + resolve(); + }); + }); +} + +// 阅豆签到 +function qqreadtake() { + return new Promise((resolve, reject) => { + const toqqreadtakeurl = { + url: "https://mqqapi.reader.qq.com/mqq/sign_in/user", + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.post(toqqreadtakeurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅豆签到: ${data}`); + let take = JSON.parse(data); + if (take.data.takeTicket > 0) { + tz += `【阅豆签到】:获得${take.data.takeTicket}豆\n`; + } + + resolve(); + }); + }); +} + +// 阅读时长任务 +function qqreadconfig() { + return new Promise((resolve, reject) => { + const toqqreadconfigurl = { + url: + "https://mqqapi.reader.qq.com/mqq/page/config?router=%2Fpages%2Fbook-read%2Findex&options=", + headers: JSON.parse(qqreadtimeheaderVal), + }; + $.get(toqqreadconfigurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅读时长查询: ${data}`); + config = JSON.parse(data); + if (config.code == 0) + tz += `【时长查询】:今日阅读${( + config.data.pageParams.todayReadSeconds / 60 + ).toFixed(0)}分钟\n`; + + resolve(); + }); + }); +} + +// 阅读时长 +function qqreadtime() { + return new Promise((resolve, reject) => { + const toqqreadtimeurl = { + url: qqreadtimeurlVal.replace(/readTime=/g, `readTime=${TIME}`), + headers: JSON.parse(qqreadtimeheaderVal), + }; + $.get(toqqreadtimeurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅读时长qqreadtime: ${data}`); + let time = JSON.parse(data); + if (time.code == 0) tz += `【阅读时长】:上传${TIME / 6}分钟\n`; + + resolve(); + }); + }); +} + +// 阅读金币1 +function qqreadssr1() { + return new Promise((resolve, reject) => { + const toqqreadssr1url = { + url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=30`, + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + if (config.data && config.data.pageParams.todayReadSeconds / 60 >= 1) { + $.get(toqqreadssr1url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币奖励1: ${data}`); + let ssr1 = JSON.parse(data); + if (ssr1.data.amount > 0) + tz += `【阅读金币1】获得${ssr1.data.amount}金币\n`; + }); + } + resolve(); + }); +} + +// 阅读金币2 +function qqreadssr2() { + return new Promise((resolve, reject) => { + const toqqreadssr2url = { + url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=300`, + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + if (config.data && config.data.pageParams.todayReadSeconds / 60 >= 5) { + $.get(toqqreadssr2url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币奖励2: ${data}`); + ssr2 = JSON.parse(data); + if (ssr2.data.amount > 0) + tz += `【阅读金币2】获得${ssr2.data.amount}金币\n`; + + + }); + } + resolve(); + }); +} + +// 阅读金币3 +function qqreadssr3() { + return new Promise((resolve, reject) => { + const toqqreadssr3url = { + url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=1800`, + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + if (config.data && config.data.pageParams.todayReadSeconds / 60 >= 30) { + $.get(toqqreadssr3url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币奖励3: ${data}`); + let ssr3 = JSON.parse(data); + if (ssr3.data.amount > 0) + tz += `【阅读金币3】获得${ssr3.data.amount}金币\n`; + + + }); + } + resolve(); + }); +} + +// 金币签到 +function qqreadsign() { + return new Promise((resolve, reject) => { + const toqqreadsignurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/clock_in/page", + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadsignurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币签到: ${data}`); + sign = JSON.parse(data); + if (sign.data.videoDoneFlag) { + tz += `【金币签到】:获得${sign.data.todayAmount}金币\n`; + } + resolve(); + }); + }); +} + +// 金币签到翻倍 +function qqreadsign2() { + return new Promise((resolve, reject) => { + const toqqreadsign2url = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/clock_in_video", + + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadsign2url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币签到翻倍: ${data}`); + let sign2 = JSON.parse(data); + if (sign2.code == 0) { + tz += `【签到翻倍】:获得${sign2.data.amount}金币\n`; + } + + resolve(); + }); + }); +} + +// 每日阅读 +function qqreaddayread() { + return new Promise((resolve, reject) => { + const toqqreaddayreadurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/read_book", + + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreaddayreadurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 每日阅读: ${data}`); + let dayread = JSON.parse(data); + if (dayread.code == 0) { + tz += `【每日阅读】:获得${dayread.data.amount}金币\n`; + } + + resolve(); + }); + }); +} + +// 视频奖励 +function qqreadvideo() { + return new Promise((resolve, reject) => { + const toqqreadvideourl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/watch_video", + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadvideourl, (error, response, data) => { + if (logs) $.log(`${jsname}, 视频奖励: ${data}`); + let video = JSON.parse(data); + if (video.code == 0) { + tz += `【视频奖励】:获得${video.data.amount}金币\n`; + } + + resolve(); + }); + }); +} + +// 宝箱奖励 +function qqreadbox() { + return new Promise((resolve, reject) => { + const toqqreadboxurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box", + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadboxurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 宝箱奖励: ${data}`); + let box = JSON.parse(data); + if (box.data.count >= 0) { + tz += `【宝箱奖励${box.data.count}】:获得${box.data.amount}金币\n`; + } + + resolve(); + }); + }); +} + +// 宝箱奖励翻倍 +function qqreadbox2() { + return new Promise((resolve, reject) => { + const toqqreadbox2url = { + url: + "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box_video", + + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadbox2url, (error, response, data) => { + if (logs) $.log(`${jsname}, 宝箱奖励翻倍: ${data}`); + let box2 = JSON.parse(data); + if (box2.code == 0) { + tz += `【宝箱翻倍】:获得${box2.data.amount}金币\n`; + } + + resolve(); + }); + }); +} + +// 本周阅读时长 +function qqreadwktime() { + return new Promise((resolve, reject) => { + const toqqreadwktimeurl = { + url: `https://mqqapi.reader.qq.com/mqq/v1/bookShelfInit`, + headers: JSON.parse(qqreadtimeheaderVal), + }; + $.get(toqqreadwktimeurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅读时长: ${data}`); + wktime = JSON.parse(data); + if (wktime.code == 0) + tz += `【本周阅读时长】:${wktime.data.readTime}分钟\n`; + + resolve(); + }); + }); +} + +// 本周阅读时长奖励任务 +function qqreadpick() { + return new Promise((resolve, reject) => { + const toqqreadpickurl = { + url: `https://mqqapi.reader.qq.com/mqq/pickPackageInit`, + headers: JSON.parse(qqreadtimeheaderVal), + }; + if (wktime.data.readTime >= wktimess && wktime.data.readTime <= 1250) { + $.get(toqqreadpickurl, (error, response, data) => { + if (logs) $.log(`${jsname},周阅读时长奖励任务: ${data}`); + let pick = JSON.parse(data); + if (pick.data[7].isPick == true) tz += "【周时长奖励】:已全部领取\n"; + + for (let i = 0; i < pick.data.length; i++) { + setTimeout(() => { + const pickid = pick.data[i].readTime; + const Packageid = [ + "10", + "10", + "20", + "30", + "50", + "80", + "100", + "120", + ]; + const toqqreadPackageurl = { + url: `https://mqqapi.reader.qq.com/mqq/pickPackage?readTime=${pickid}`, + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadPackageurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 领周阅读时长: ${data}`); + Package = JSON.parse(data); + if (Package.code == 0) + tz += `【周时长奖励${i + 1}】:领取${Packageid[i]}阅豆\n`; + }); + }, i * 100); + } + }); + resolve(); + } + resolve(); + }); +} + + +// prettier-ignore +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)} diff --git a/Task/sendNotify.js b/Task/sendNotify.js new file mode 100644 index 0000000..1062340 --- /dev/null +++ b/Task/sendNotify.js @@ -0,0 +1,255 @@ +const $ = new Env(); +// =======================================微信server酱通知设置区域=========================================== +//此处填你申请的SCKEY. +//注:此处设置github action用户填写到Settings-Secrets里面(Name输入PUSH_KEY) +let SCKEY = ''; + +// =======================================Bark App通知设置区域=========================================== +//此处填你BarkAPP的信息(IP/设备码,例如:https://api.day.app/XXXXXXXX) +//注:此处设置github action用户填写到Settings-Secrets里面(Name输入BARK_PUSH) +let BARK_PUSH = ''; +//BARK app推送铃声,铃声列表去APP查看复制填写 +//注:此处设置github action用户填写到Settings-Secrets里面(Name输入BARK_SOUND , Value输入app提供的铃声名称,例如:birdsong) +let BARK_SOUND = 'shake'; + + +// =======================================telegram机器人通知设置区域=========================================== +//此处填你telegram bot 的Token,例如:1077xxx4424:AAFjv0FcqxxxxxxgEMGfi22B4yh15R5uw +//注:此处设置github action用户填写到Settings-Secrets里面(Name输入TG_BOT_TOKEN) +let TG_BOT_TOKEN = ''; +//此处填你接收通知消息的telegram用户的id,例如:129xxx206 +//注:此处设置github action用户填写到Settings-Secrets里面(Name输入TG_USER_ID) +let TG_USER_ID = ''; + +// =======================================钉钉机器人通知设置区域=========================================== +//此处填你钉钉 bot 的webhook,例如:5a544165465465645d0f31dca676e7bd07415asdasd +//注:此处设置github action用户填写到Settings-Secrets里面(Name输入DD_BOT_TOKEN) +let DD_BOT_TOKEN = ''; +//密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串 +let DD_BOT_SECRET = ''; + +if (process.env.PUSH_KEY) { + SCKEY = process.env.PUSH_KEY; +} +if (process.env.BARK_PUSH) { + if(process.env.BARK_PUSH.indexOf('https') > -1 || process.env.BARK_PUSH.indexOf('http') > -1) { + //兼容BARK自建用户 + BARK_PUSH = process.env.BARK_PUSH + } else { + BARK_PUSH = `https://api.day.app/${process.env.BARK_PUSH}` + } + if (process.env.BARK_SOUND) { + BARK_SOUND = process.env.BARK_SOUND + } +} else { + if(BARK_PUSH && BARK_PUSH.indexOf('https') === -1 && BARK_PUSH.indexOf('http') === -1) { + //兼容BARK本地用户只填写设备码的情况 + BARK_PUSH = `https://api.day.app/${BARK_PUSH}` + } +} +if (process.env.TG_BOT_TOKEN) { + TG_BOT_TOKEN = process.env.TG_BOT_TOKEN; +} +if (process.env.TG_USER_ID) { + TG_USER_ID = process.env.TG_USER_ID; +} + +if (process.env.DD_BOT_TOKEN) { + DD_BOT_TOKEN = process.env.DD_BOT_TOKEN; + if (process.env.DD_BOT_SECRET) { + DD_BOT_SECRET = process.env.DD_BOT_SECRET; + } +} + +async function sendNotify(text, desp) { + //提供四种通知 + await serverNotify(text, desp); + await BarkNotify(text, desp); + await tgBotNotify(text, desp); + await ddBotNotify(text, desp); +} + +function serverNotify(text, desp) { + return new Promise(resolve => { + if (SCKEY) { + //微信server酱推送通知一个\n不会换行,需要两个\n才能换行,故做此替换 + desp = desp.replace(/[\n\r]/g, '\n\n'); + const options = { + url: `https://sc.ftqq.com/${SCKEY}.send`, + body: `text=${text}&desp=${desp}`, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log('\n发送通知调用API失败!!\n') + console.log(err); + } else { + data = JSON.parse(data); + if (data.errno === 0) { + console.log('\nserver酱发送通知消息成功\n') + } else if (data.errno === 1024) { + console.log('\nPUSH_KEY 错误\n') + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + } else { + console.log('\n您未提供server酱的SCKEY,取消微信推送消息通知\n'); + resolve() + } + }) +} + +function BarkNotify(text, desp) { + return new Promise(resolve => { + if (BARK_PUSH) { + const options = { + url: `${BARK_PUSH}/${encodeURIComponent(text)}/${encodeURIComponent(desp)}?sound=${BARK_SOUND}`, + } + $.get(options, (err, resp, data) => { + try { + if (err) { + console.log('\nBark APP发送通知调用API失败!!\n') + console.log(err); + } else { + data = JSON.parse(data); + if (data.code === 200) { + console.log('\nBark APP发送通知消息成功\n') + } else { + console.log(`\n${data.message}\n`); + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(); + } + }) + } else { + console.log('\n您未提供Bark的APP推送BARK_PUSH,取消Bark推送消息通知\n'); + resolve() + } + }) +} + +function tgBotNotify(text, desp) { + return new Promise(resolve => { + if (TG_BOT_TOKEN && TG_USER_ID) { + const options = { + url: `https://api.telegram.org/bot${TG_BOT_TOKEN}/sendMessage`, + body: `chat_id=${TG_USER_ID}&text=${text}\n\n${desp}`, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log('\ntelegram发送通知消息失败!!\n') + console.log(err); + } else { + data = JSON.parse(data); + if (data.ok) { + console.log('\nTelegram发送通知消息完成。\n') + } else if (data.error_code === 400) { + console.log('\n请主动给bot发送一条消息并检查接收用户ID是否正确。\n') + } else if (data.error_code === 401){ + console.log('\nTelegram bot token 填写错误。\n') + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + } else { + console.log('\n您未提供telegram机器人推送所需的TG_BOT_TOKEN和TG_USER_ID,取消telegram推送消息通知\n'); + resolve() + } + }) +} +function ddBotNotify(text, desp) { + return new Promise(resolve => { + const options = { + url: `https://oapi.dingtalk.com/robot/send?access_token=${DD_BOT_TOKEN}`, + json: { + "msgtype": "text", + "text": { + "content": ` ${text}\n\n${desp}` + } + }, + headers: { + 'Content-Type': 'application/json' + } + } + if (DD_BOT_TOKEN && DD_BOT_SECRET) { + const crypto = require('crypto'); + const dateNow = Date.now(); + const hmac = crypto.createHmac('sha256', DD_BOT_SECRET); + hmac.update(`${dateNow}\n${DD_BOT_SECRET}`); + const result = encodeURIComponent(hmac.digest('base64')); + options.url = `${options.url}×tamp=${dateNow}&sign=${result}`; + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log('\n钉钉发送通知消息失败!!\n') + console.log(err); + } else { + data = JSON.parse(data); + if (data.errcode === 0) { + console.log('\n钉钉发送通知消息完成。\n') + } else { + console.log(`\n${data.errmsg}\n`) + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + } else if (DD_BOT_TOKEN) { + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log('\n钉钉发送通知消息失败!!\n') + console.log(err); + } else { + data = JSON.parse(data); + if (data.errcode === 0) { + console.log('\n钉钉发送通知消息完成。\n') + } else { + console.log(`\n${data.errmsg}\n`) + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + } else { + console.log('\n您未提供钉钉机器人推送所需的DD_BOT_TOKEN或者DD_BOT_SECRET,取消钉钉推送消息通知\n'); + resolve() + } + }) +} +module.exports = { + sendNotify, + BarkNotify, + SCKEY, + BARK_PUSH, + TG_BOT_TOKEN, + TG_USER_ID, + DD_BOT_TOKEN, +}//这里导出SCKEY,BARK_PUSH等通知参数是jd_bean_sign.js处需要 +// prettier-ignore +function Env(t,s){return new class{constructor(t,s){this.name=t,this.data=null,this.dataFile="box.dat",this.logs=[],this.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,s),this.log("",`\ud83d\udd14${this.name}, \u5f00\u59cb!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}getScript(t){return new Promise(s=>{$.get({url:t},(t,e,i)=>s(i))})}runScript(t,s){return new Promise(e=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let o=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");o=o?1*o:20,o=s&&s.timeout?s.timeout:o;const[h,a]=i.split("@"),r={url:`http://${a}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:o},headers:{"X-Key":h,Accept:"*/*"}};$.post(r,(t,s,i)=>e(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),s=this.path.resolve(process.cwd(),this.dataFile),e=this.fs.existsSync(t),i=!e&&this.fs.existsSync(s);if(!e&&!i)return{};{const i=e?t:s;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),s=this.path.resolve(process.cwd(),this.dataFile),e=this.fs.existsSync(t),i=!e&&this.fs.existsSync(s),o=JSON.stringify(this.data);e?this.fs.writeFileSync(t,o):i?this.fs.writeFileSync(s,o):this.fs.writeFileSync(t,o)}}lodash_get(t,s,e){const i=s.replace(/\[(\d+)\]/g,".$1").split(".");let o=t;for(const t of i)if(o=Object(o)[t],void 0===o)return e;return o}lodash_set(t,s,e){return Object(t)!==t?t:(Array.isArray(s)||(s=s.toString().match(/[^.[\]]+/g)||[]),s.slice(0,-1).reduce((t,e,i)=>Object(t[e])===t[e]?t[e]:t[e]=Math.abs(s[i+1])>>0==+s[i+1]?[]:{},t)[s[s.length-1]]=e,t)}getdata(t){let s=this.getval(t);if(/^@/.test(t)){const[,e,i]=/^@(.*?)\.(.*?)$/.exec(t),o=e?this.getval(e):"";if(o)try{const t=JSON.parse(o);s=t?this.lodash_get(t,i,""):s}catch(t){s=""}}return s}setdata(t,s){let e=!1;if(/^@/.test(s)){const[,i,o]=/^@(.*?)\.(.*?)$/.exec(s),h=this.getval(i),a=i?"null"===h?null:h||"{}":"{}";try{const s=JSON.parse(a);this.lodash_set(s,o,t),e=this.setval(JSON.stringify(s),i)}catch(s){const h={};this.lodash_set(h,o,t),e=this.setval(JSON.stringify(h),i)}}else e=$.setval(t,s);return e}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,s){return this.isSurge()||this.isLoon()?$persistentStore.write(t,s):this.isQuanX()?$prefs.setValueForKey(t,s):this.isNode()?(this.data=this.loaddata(),this.data[s]=t,this.writedata(),!0):this.data&&this.data[s]||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,s=(()=>{})){t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"]),this.isSurge()||this.isLoon()?$httpClient.get(t,(t,e,i)=>{!t&&e&&(e.body=i,e.statusCode=e.status),s(t,e,i)}):this.isQuanX()?$task.fetch(t).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t)):this.isNode()&&(this.initGotEnv(t),this.got(t).on("redirect",(t,s)=>{try{const e=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();this.ckjar.setCookieSync(e,null),s.cookieJar=this.ckjar}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t)))}post(t,s=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),delete t.headers["Content-Length"],this.isSurge()||this.isLoon())$httpClient.post(t,(t,e,i)=>{!t&&e&&(e.body=i,e.statusCode=e.status),s(t,e,i)});else if(this.isQuanX())t.method="POST",$task.fetch(t).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t));else if(this.isNode()){this.initGotEnv(t);const{url:e,...i}=t;this.got.post(e,i).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t))}}time(t){let s={"M+":(new Date).getMonth()+1,"d+":(new Date).getDate(),"H+":(new Date).getHours(),"m+":(new Date).getMinutes(),"s+":(new Date).getSeconds(),"q+":Math.floor(((new Date).getMonth()+3)/3),S:(new Date).getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,((new Date).getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in s)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?s[e]:("00"+s[e]).substr((""+s[e]).length)));return t}msg(s=t,e="",i="",o){const h=t=>!t||!this.isLoon()&&this.isSurge()?t:"string"==typeof t?this.isLoon()?t:this.isQuanX()?{"open-url":t}:void 0:"object"==typeof t&&(t["open-url"]||t["media-url"])?this.isLoon()?t["open-url"]:this.isQuanX()?t:void 0:void 0;$.isMute||(this.isSurge()||this.isLoon()?$notification.post(s,e,i,h(o)):this.isQuanX()&&$notify(s,e,i,h(o))),this.logs.push("","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="),this.logs.push(s),e&&this.logs.push(e),i&&this.logs.push(i)}log(...t){t.length>0?this.logs=[...this.logs,...t]:console.log(this.logs.join(this.logSeparator))}logErr(t,s){const e=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();e?$.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t.stack):$.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t)}wait(t){return new Promise(s=>setTimeout(s,t))}done(t={}){const s=(new Date).getTime(),e=(s-this.startTime)/1e3;this.log("",`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${e} \u79d2`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,s)} From 275ecdab21fd5e7025944c922abf19843c382a64 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:40:08 +0800 Subject: [PATCH 26/57] Delete sendNotify.js --- sendNotify.js | 255 -------------------------------------------------- 1 file changed, 255 deletions(-) delete mode 100644 sendNotify.js diff --git a/sendNotify.js b/sendNotify.js deleted file mode 100644 index 1062340..0000000 --- a/sendNotify.js +++ /dev/null @@ -1,255 +0,0 @@ -const $ = new Env(); -// =======================================微信server酱通知设置区域=========================================== -//此处填你申请的SCKEY. -//注:此处设置github action用户填写到Settings-Secrets里面(Name输入PUSH_KEY) -let SCKEY = ''; - -// =======================================Bark App通知设置区域=========================================== -//此处填你BarkAPP的信息(IP/设备码,例如:https://api.day.app/XXXXXXXX) -//注:此处设置github action用户填写到Settings-Secrets里面(Name输入BARK_PUSH) -let BARK_PUSH = ''; -//BARK app推送铃声,铃声列表去APP查看复制填写 -//注:此处设置github action用户填写到Settings-Secrets里面(Name输入BARK_SOUND , Value输入app提供的铃声名称,例如:birdsong) -let BARK_SOUND = 'shake'; - - -// =======================================telegram机器人通知设置区域=========================================== -//此处填你telegram bot 的Token,例如:1077xxx4424:AAFjv0FcqxxxxxxgEMGfi22B4yh15R5uw -//注:此处设置github action用户填写到Settings-Secrets里面(Name输入TG_BOT_TOKEN) -let TG_BOT_TOKEN = ''; -//此处填你接收通知消息的telegram用户的id,例如:129xxx206 -//注:此处设置github action用户填写到Settings-Secrets里面(Name输入TG_USER_ID) -let TG_USER_ID = ''; - -// =======================================钉钉机器人通知设置区域=========================================== -//此处填你钉钉 bot 的webhook,例如:5a544165465465645d0f31dca676e7bd07415asdasd -//注:此处设置github action用户填写到Settings-Secrets里面(Name输入DD_BOT_TOKEN) -let DD_BOT_TOKEN = ''; -//密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串 -let DD_BOT_SECRET = ''; - -if (process.env.PUSH_KEY) { - SCKEY = process.env.PUSH_KEY; -} -if (process.env.BARK_PUSH) { - if(process.env.BARK_PUSH.indexOf('https') > -1 || process.env.BARK_PUSH.indexOf('http') > -1) { - //兼容BARK自建用户 - BARK_PUSH = process.env.BARK_PUSH - } else { - BARK_PUSH = `https://api.day.app/${process.env.BARK_PUSH}` - } - if (process.env.BARK_SOUND) { - BARK_SOUND = process.env.BARK_SOUND - } -} else { - if(BARK_PUSH && BARK_PUSH.indexOf('https') === -1 && BARK_PUSH.indexOf('http') === -1) { - //兼容BARK本地用户只填写设备码的情况 - BARK_PUSH = `https://api.day.app/${BARK_PUSH}` - } -} -if (process.env.TG_BOT_TOKEN) { - TG_BOT_TOKEN = process.env.TG_BOT_TOKEN; -} -if (process.env.TG_USER_ID) { - TG_USER_ID = process.env.TG_USER_ID; -} - -if (process.env.DD_BOT_TOKEN) { - DD_BOT_TOKEN = process.env.DD_BOT_TOKEN; - if (process.env.DD_BOT_SECRET) { - DD_BOT_SECRET = process.env.DD_BOT_SECRET; - } -} - -async function sendNotify(text, desp) { - //提供四种通知 - await serverNotify(text, desp); - await BarkNotify(text, desp); - await tgBotNotify(text, desp); - await ddBotNotify(text, desp); -} - -function serverNotify(text, desp) { - return new Promise(resolve => { - if (SCKEY) { - //微信server酱推送通知一个\n不会换行,需要两个\n才能换行,故做此替换 - desp = desp.replace(/[\n\r]/g, '\n\n'); - const options = { - url: `https://sc.ftqq.com/${SCKEY}.send`, - body: `text=${text}&desp=${desp}`, - headers: { - 'Content-Type': 'application/x-www-form-urlencoded' - } - } - $.post(options, (err, resp, data) => { - try { - if (err) { - console.log('\n发送通知调用API失败!!\n') - console.log(err); - } else { - data = JSON.parse(data); - if (data.errno === 0) { - console.log('\nserver酱发送通知消息成功\n') - } else if (data.errno === 1024) { - console.log('\nPUSH_KEY 错误\n') - } - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - } else { - console.log('\n您未提供server酱的SCKEY,取消微信推送消息通知\n'); - resolve() - } - }) -} - -function BarkNotify(text, desp) { - return new Promise(resolve => { - if (BARK_PUSH) { - const options = { - url: `${BARK_PUSH}/${encodeURIComponent(text)}/${encodeURIComponent(desp)}?sound=${BARK_SOUND}`, - } - $.get(options, (err, resp, data) => { - try { - if (err) { - console.log('\nBark APP发送通知调用API失败!!\n') - console.log(err); - } else { - data = JSON.parse(data); - if (data.code === 200) { - console.log('\nBark APP发送通知消息成功\n') - } else { - console.log(`\n${data.message}\n`); - } - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(); - } - }) - } else { - console.log('\n您未提供Bark的APP推送BARK_PUSH,取消Bark推送消息通知\n'); - resolve() - } - }) -} - -function tgBotNotify(text, desp) { - return new Promise(resolve => { - if (TG_BOT_TOKEN && TG_USER_ID) { - const options = { - url: `https://api.telegram.org/bot${TG_BOT_TOKEN}/sendMessage`, - body: `chat_id=${TG_USER_ID}&text=${text}\n\n${desp}`, - headers: { - 'Content-Type': 'application/x-www-form-urlencoded' - } - } - $.post(options, (err, resp, data) => { - try { - if (err) { - console.log('\ntelegram发送通知消息失败!!\n') - console.log(err); - } else { - data = JSON.parse(data); - if (data.ok) { - console.log('\nTelegram发送通知消息完成。\n') - } else if (data.error_code === 400) { - console.log('\n请主动给bot发送一条消息并检查接收用户ID是否正确。\n') - } else if (data.error_code === 401){ - console.log('\nTelegram bot token 填写错误。\n') - } - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - } else { - console.log('\n您未提供telegram机器人推送所需的TG_BOT_TOKEN和TG_USER_ID,取消telegram推送消息通知\n'); - resolve() - } - }) -} -function ddBotNotify(text, desp) { - return new Promise(resolve => { - const options = { - url: `https://oapi.dingtalk.com/robot/send?access_token=${DD_BOT_TOKEN}`, - json: { - "msgtype": "text", - "text": { - "content": ` ${text}\n\n${desp}` - } - }, - headers: { - 'Content-Type': 'application/json' - } - } - if (DD_BOT_TOKEN && DD_BOT_SECRET) { - const crypto = require('crypto'); - const dateNow = Date.now(); - const hmac = crypto.createHmac('sha256', DD_BOT_SECRET); - hmac.update(`${dateNow}\n${DD_BOT_SECRET}`); - const result = encodeURIComponent(hmac.digest('base64')); - options.url = `${options.url}×tamp=${dateNow}&sign=${result}`; - $.post(options, (err, resp, data) => { - try { - if (err) { - console.log('\n钉钉发送通知消息失败!!\n') - console.log(err); - } else { - data = JSON.parse(data); - if (data.errcode === 0) { - console.log('\n钉钉发送通知消息完成。\n') - } else { - console.log(`\n${data.errmsg}\n`) - } - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - } else if (DD_BOT_TOKEN) { - $.post(options, (err, resp, data) => { - try { - if (err) { - console.log('\n钉钉发送通知消息失败!!\n') - console.log(err); - } else { - data = JSON.parse(data); - if (data.errcode === 0) { - console.log('\n钉钉发送通知消息完成。\n') - } else { - console.log(`\n${data.errmsg}\n`) - } - } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) - } else { - console.log('\n您未提供钉钉机器人推送所需的DD_BOT_TOKEN或者DD_BOT_SECRET,取消钉钉推送消息通知\n'); - resolve() - } - }) -} -module.exports = { - sendNotify, - BarkNotify, - SCKEY, - BARK_PUSH, - TG_BOT_TOKEN, - TG_USER_ID, - DD_BOT_TOKEN, -}//这里导出SCKEY,BARK_PUSH等通知参数是jd_bean_sign.js处需要 -// prettier-ignore -function Env(t,s){return new class{constructor(t,s){this.name=t,this.data=null,this.dataFile="box.dat",this.logs=[],this.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,s),this.log("",`\ud83d\udd14${this.name}, \u5f00\u59cb!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}getScript(t){return new Promise(s=>{$.get({url:t},(t,e,i)=>s(i))})}runScript(t,s){return new Promise(e=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let o=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");o=o?1*o:20,o=s&&s.timeout?s.timeout:o;const[h,a]=i.split("@"),r={url:`http://${a}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:o},headers:{"X-Key":h,Accept:"*/*"}};$.post(r,(t,s,i)=>e(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),s=this.path.resolve(process.cwd(),this.dataFile),e=this.fs.existsSync(t),i=!e&&this.fs.existsSync(s);if(!e&&!i)return{};{const i=e?t:s;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),s=this.path.resolve(process.cwd(),this.dataFile),e=this.fs.existsSync(t),i=!e&&this.fs.existsSync(s),o=JSON.stringify(this.data);e?this.fs.writeFileSync(t,o):i?this.fs.writeFileSync(s,o):this.fs.writeFileSync(t,o)}}lodash_get(t,s,e){const i=s.replace(/\[(\d+)\]/g,".$1").split(".");let o=t;for(const t of i)if(o=Object(o)[t],void 0===o)return e;return o}lodash_set(t,s,e){return Object(t)!==t?t:(Array.isArray(s)||(s=s.toString().match(/[^.[\]]+/g)||[]),s.slice(0,-1).reduce((t,e,i)=>Object(t[e])===t[e]?t[e]:t[e]=Math.abs(s[i+1])>>0==+s[i+1]?[]:{},t)[s[s.length-1]]=e,t)}getdata(t){let s=this.getval(t);if(/^@/.test(t)){const[,e,i]=/^@(.*?)\.(.*?)$/.exec(t),o=e?this.getval(e):"";if(o)try{const t=JSON.parse(o);s=t?this.lodash_get(t,i,""):s}catch(t){s=""}}return s}setdata(t,s){let e=!1;if(/^@/.test(s)){const[,i,o]=/^@(.*?)\.(.*?)$/.exec(s),h=this.getval(i),a=i?"null"===h?null:h||"{}":"{}";try{const s=JSON.parse(a);this.lodash_set(s,o,t),e=this.setval(JSON.stringify(s),i)}catch(s){const h={};this.lodash_set(h,o,t),e=this.setval(JSON.stringify(h),i)}}else e=$.setval(t,s);return e}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,s){return this.isSurge()||this.isLoon()?$persistentStore.write(t,s):this.isQuanX()?$prefs.setValueForKey(t,s):this.isNode()?(this.data=this.loaddata(),this.data[s]=t,this.writedata(),!0):this.data&&this.data[s]||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,s=(()=>{})){t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"]),this.isSurge()||this.isLoon()?$httpClient.get(t,(t,e,i)=>{!t&&e&&(e.body=i,e.statusCode=e.status),s(t,e,i)}):this.isQuanX()?$task.fetch(t).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t)):this.isNode()&&(this.initGotEnv(t),this.got(t).on("redirect",(t,s)=>{try{const e=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();this.ckjar.setCookieSync(e,null),s.cookieJar=this.ckjar}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t)))}post(t,s=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),delete t.headers["Content-Length"],this.isSurge()||this.isLoon())$httpClient.post(t,(t,e,i)=>{!t&&e&&(e.body=i,e.statusCode=e.status),s(t,e,i)});else if(this.isQuanX())t.method="POST",$task.fetch(t).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t));else if(this.isNode()){this.initGotEnv(t);const{url:e,...i}=t;this.got.post(e,i).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t))}}time(t){let s={"M+":(new Date).getMonth()+1,"d+":(new Date).getDate(),"H+":(new Date).getHours(),"m+":(new Date).getMinutes(),"s+":(new Date).getSeconds(),"q+":Math.floor(((new Date).getMonth()+3)/3),S:(new Date).getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,((new Date).getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in s)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?s[e]:("00"+s[e]).substr((""+s[e]).length)));return t}msg(s=t,e="",i="",o){const h=t=>!t||!this.isLoon()&&this.isSurge()?t:"string"==typeof t?this.isLoon()?t:this.isQuanX()?{"open-url":t}:void 0:"object"==typeof t&&(t["open-url"]||t["media-url"])?this.isLoon()?t["open-url"]:this.isQuanX()?t:void 0:void 0;$.isMute||(this.isSurge()||this.isLoon()?$notification.post(s,e,i,h(o)):this.isQuanX()&&$notify(s,e,i,h(o))),this.logs.push("","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="),this.logs.push(s),e&&this.logs.push(e),i&&this.logs.push(i)}log(...t){t.length>0?this.logs=[...this.logs,...t]:console.log(this.logs.join(this.logSeparator))}logErr(t,s){const e=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();e?$.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t.stack):$.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t)}wait(t){return new Promise(s=>setTimeout(s,t))}done(t={}){const s=(new Date).getTime(),e=(s-this.startTime)/1e3;this.log("",`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${e} \u79d2`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,s)} From b4f6925509e8a9b21b583c88bc77ca1a7d6e6fcf Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:42:21 +0800 Subject: [PATCH 27/57] Update and rename npm-publish.yml to qqread.yml --- .github/workflows/{npm-publish.yml => qqread.yml} | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) rename .github/workflows/{npm-publish.yml => qqread.yml} (91%) diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/qqread.yml similarity index 91% rename from .github/workflows/npm-publish.yml rename to .github/workflows/qqread.yml index b8bed46..ab96bfb 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/qqread.yml @@ -22,7 +22,7 @@ jobs: steps: - name: Checkout run: | - git clone https://github.com/lxmd02/qq.git + git clone https://github.com/lxmd02/qq.git ~/qq - name: Use Node.js 12.x uses: actions/setup-node@v1 with: @@ -30,11 +30,13 @@ jobs: - name: npm install if: env.QQ_READ_HEADER_VAL run: | + cd ~/qq npm install - name: '运行 【企鹅读书】' if: env.QQ_READ_HEADER_VAL run: | - node qqreads.js + cd ~/qq + node Task/qqread.js env: PUSH_KEY: ${{ secrets.PUSH_KEY }} From ae078c7c239b32db6cd4193a848abf0d1cb665b4 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:42:38 +0800 Subject: [PATCH 28/57] Delete qqread.js --- qqread.js | 641 ------------------------------------------------------ 1 file changed, 641 deletions(-) delete mode 100644 qqread.js diff --git a/qqread.js b/qqread.js deleted file mode 100644 index 0c5903c..0000000 --- a/qqread.js +++ /dev/null @@ -1,641 +0,0 @@ -/* -****************************************************************************** - 改用,nodejs云端专用。可N个账号。by;lxk0301 - 一个账号需三个环境变量/secret - 分别为 QQ_READ_HEADER_VAL QQ_READ_TIME_URL_VAL QQ_READ_TIME_HEADER_VAL - 多个账号 对应三个环境变量/secret 使用@符号或者换行隔开 - iOS可使用BoxJs可使用此订阅修改复制所需的环境变量 https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/mySelf.boxjs.json - 环境变量与BoxJs里面对应关系 - QQ_READ_HEADER_VAL ------》 qqreadbodyVal - QQ_READ_TIME_URL_VAL ------》 qqreadtimeurl - QQ_READ_TIME_HEADER_VAL ------》 qqreadtimehd - ***************************************************************************************************************** -ziye -本人github地址 https://github.com/ziye12/JavaScript -转载请备注个名字,谢谢 - -11.25 增加 阅读时长上传,阅读金币,阅读随机金币 -11.25 修复翻倍宝箱不同时领取的问题.增加阅读金币判定 -11.25 修复阅读时长问题,阅读金币问题,请重新获取时长cookie -11.26 随机金币只有一次,故去除,调整修复阅读金币问题,增加时长上传限制 -11.26 增加领取周时长奖励 -11.26 增加结束命令 -11.27 调整通知为,成功开启宝箱再通知 -11.28 修复错误 -12.1 调整通知为15次宝箱通知一次 -12.1 优化通知 - -⚠️cookie获取方法: - -进 https://m.q.qq.com/a/s/d3eacc70120b9a37e46bad408c0c4c2a 点我的 获取cookie - -进一本书 看 10秒以下 然后退出,获取阅读时长cookie,看书一定不能超过10秒 - -可能某些页面会卡住,但是能获取到cookie,再注释cookie重写就行了! - - - -⚠️宝箱奖励为20分钟一次,自己根据情况设置定时,建议设置11分钟一次 - -hostname=mqqapi.reader.qq.com -############## 圈x -#企鹅读书获取更新body -https:\/\/mqqapi\.reader\.qq\.com\/log\/v4\/mqq\/track url script-request-body https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js -#企鹅读书获取时长cookie -https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid? url script-request-header https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js -############## loon -#企鹅读书获取更新body -http-request https:\/\/mqqapi\.reader\.qq\.com\/log\/v4\/mqq\/track script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js,requires-body=true, tag=企鹅读书获取更新body -#企鹅读书获取时长cookie -http-request https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid? script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js, requires-header=true, tag=企鹅读书获取时长cookie -############## surge -#企鹅读书获取更新body -企鹅读书获取更新body = type=http-request,pattern=https:\/\/mqqapi\.reader\.qq\.com\/log\/v4\/mqq\/track,requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js, script-update-interval=0 -#企鹅读书获取时长cookie -企鹅读书获取时长cookie = type=http-request,pattern=https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid?,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js - - - -*/ - -const jsname = '企鹅读书' -const $ = Env(jsname) -let task = '', config, ssr2 = '', wktime, day = 0; -console.log(`\n========= 脚本执行时间(TM):${new Date(new Date().getTime() + 0 * 60 * 60 * 1000).toLocaleString('zh', {hour12: false})} =========\n`) - -const logs = 1; //0为关闭日志,1为开启 - -const TIME = 30//单次时长上传限制,默认5分钟 -const maxtime = 20//每日上传时长限制,默认20小时 -const wktimess = 1200//周奖励领取标准,默认1200分钟 -let tz = '',kz; -const qqreadbodyValKey = 'qqreadbodyVal' -let qqreadbodyVal = $.getdata(qqreadbodyValKey) - - -const qqreadtimeurlKey = 'qqreadtimeurl' -let qqreadtimeurlVal = $.getdata(qqreadtimeurlKey) - -const qqreadtimeheaderKey = 'qqreadtimehd' -let qqreadtimeheaderVal = $.getdata(qqreadtimeheaderKey) -//云函数使用在下面填写 -let QQ_READ_COOKIES = [ - { - "qqreadbodyVal": ``, - "qqreadtimeurlVal": ``, - "qqreadtimeheaderVal": `` - } -] -function getNodeCookie() { - if ($.isNode()) { - let QQ_READ_BODY_VAL = [], QQ_READ_TIME_URL_VAL = [], QQ_READ_TIME_HEADER_VAL = []; - if (process.env.QQ_READ_HEADER_VAL) { - if (process.env.QQ_READ_HEADER_VAL.indexOf('@') > -1) { - console.log(`您的QQ_READ_HEADER_VAL选择的是用@隔开\n`) - QQ_READ_BODY_VAL = process.env.QQ_READ_HEADER_VAL.split('@'); - } else if (process.env.QQ_READ_HEADER_VAL.indexOf('\n') > -1) { - console.log(`您的QQ_READ_HEADER_VAL选择的是用换行隔开\n`) - QQ_READ_BODY_VAL = process.env.QQ_READ_HEADER_VAL.split('\n'); - } else { - QQ_READ_BODY_VAL = [process.env.QQ_READ_HEADER_VAL]; - } - // QQ_READ_HEADER_VAL = [...new Set(QQ_READ_HEADER_VAL)] - // $.log(QQ_READ_HEADER_VAL) - } - if (process.env.QQ_READ_TIME_URL_VAL) { - if (process.env.QQ_READ_TIME_URL_VAL.indexOf('@') > -1) { - console.log(`您的QQ_READ_TIME_URL_VAL选择的是用@隔开\n`) - QQ_READ_TIME_URL_VAL = process.env.QQ_READ_TIME_URL_VAL.split('@'); - } else if (process.env.QQ_READ_HEADER_VAL.indexOf('\n') > -1) { - console.log(`您的QQ_READ_TIME_URL_VAL选择的是用换行隔开\n`) - QQ_READ_TIME_URL_VAL = process.env.QQ_READ_TIME_URL_VAL.split('\n'); - } else { - QQ_READ_TIME_URL_VAL = [process.env.QQ_READ_TIME_URL_VAL]; - } - // QQ_READ_TIME_URL_VAL = [...new Set(QQ_READ_TIME_URL_VAL)] - } - if (process.env.QQ_READ_TIME_HEADER_VAL) { - if (process.env.QQ_READ_TIME_HEADER_VAL.indexOf('@') > -1) { - console.log(`您的QQ_READ_TIME_HEADER_VAL选择的是用@隔开\n`) - QQ_READ_TIME_HEADER_VAL = process.env.QQ_READ_TIME_HEADER_VAL.split('@'); - } else if (process.env.QQ_READ_TIME_HEADER_VAL.indexOf('\n') > -1) { - console.log(`您的QQ_READ_TIME_HEADER_VAL选择的是用换行隔开\n`) - QQ_READ_TIME_HEADER_VAL = process.env.QQ_READ_TIME_HEADER_VAL.split('\n'); - } else { - QQ_READ_TIME_HEADER_VAL = [process.env.QQ_READ_TIME_HEADER_VAL]; - } - // QQ_READ_TIME_HEADER_VAL = [...new Set(QQ_READ_TIME_HEADER_VAL)] - } - if (QQ_READ_BODY_VAL && QQ_READ_BODY_VAL.length > 0) QQ_READ_COOKIES = []; - for (let i = 0; i < QQ_READ_BODY_VAL.length; i ++) { - QQ_READ_COOKIES.push({ - "qqreadbodyVal": QQ_READ_BODY_VAL[i] || "", - "qqreadtimeurlVal": QQ_READ_TIME_URL_VAL[i] || "", - "qqreadtimeheaderVal": QQ_READ_TIME_HEADER_VAL[i] || "" - }) - } - // console.log(`${JSON.stringify(QQ_READ_COOKIES)}`) - } -} -//CK运行 -let isGetCookie = typeof $request !== 'undefined' -if (isGetCookie) { - GetCookie() -} else { - !(async () => { - await getNodeCookie(); - await QQ_READ(); - // await all(); - })() - .catch((e) => { - $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') - }) - .finally(() => { - $.done(); - }) -} - -function GetCookie() { - if ($request.body && $request.body.indexOf("bookDetail_bottomBar_read_C") >= 0 && $request.body.indexOf("bookRead_show_I") >= 0 && $request.body.indexOf("topBar_left_back_C") < 0 && $request.body.indexOf("bookRead_dropOut_shelfYes_C") < 0) { - const qqreadbodyVal = $request.body; - if (qqreadbodyVal) $.setdata(qqreadbodyVal, qqreadbodyValKey); - $.log(`[${jsname}] 获取更新body: 成功,qqreadbodyVal: ${qqreadbodyVal}`); - $.msg(jsname, `获取更新body: 成功🎉`, ``); - } - if ($request && $request.url.indexOf("addReadTimeWithBid?") >= 0) { - const qqreadtimeurlVal = $request.url - if (qqreadtimeurlVal) $.setdata(qqreadtimeurlVal, qqreadtimeurlKey) - $.log(`[${jsname}] 获取阅读时长url: 成功,qqreadtimeurlVal: ${qqreadtimeurlVal}`) - - const qqreadtimeheaderVal = JSON.stringify($request.headers) - if (qqreadtimeheaderVal) $.setdata(qqreadtimeheaderVal, qqreadtimeheaderKey) - $.log(`[${jsname}] 获取时长header: 成功,qqreadtimeheaderVal: ${qqreadtimeheaderVal}`) - $.msg(qqreadtimeheaderKey, `获取阅读时长cookie: 成功🎉`, ``) - } - $.done(); -} -async function QQ_READ() { - for (let i = 0; i < QQ_READ_COOKIES.length; i++) { - $.log(`\n*************开始QQ账号${i + 1}**************\n`); - tz = ''; - if (!QQ_READ_COOKIES[i]["qqreadbodyVal"] || !QQ_READ_COOKIES[i]['qqreadtimeurlVal'] || !QQ_READ_COOKIES[i]['qqreadtimeheaderVal']) { - $.log(`账号${i + 1}暂未提供脚本执行所需的cookie`); - continue - } - qqreadbodyVal = QQ_READ_COOKIES[i]['qqreadbodyVal']; - qqreadtimeurlVal = QQ_READ_COOKIES[i]['qqreadtimeurlVal']; - qqreadtimeheaderVal = QQ_READ_COOKIES[i]['qqreadtimeheaderVal']; - await qqreadinfo();//用户名 - await qqreadwktime();//周时长查询 - await qqreadtrack(); - await qqreadconfig();//时长查询 - await qqreadtask();//任务列表 - if (config.data.pageParams.todayReadSeconds / 3600 <= maxtime) { - await qqreadtime();// 上传时长 - } - await qqreadpick();//领周时长奖励 - if (task.data.taskList[0].doneFlag == 0) { - await qqreaddayread();//阅读任务 - } - if (task.data.taskList[1].doneFlag == 0) { - await $.wait(5000) - await qqreadssr1();//阅读金币1 - } - if (task.data.taskList[2].doneFlag == 0) { - await qqreadsign();//金币签到 - await qqreadtake();//阅豆签到 - } - if (task.data.taskList[3].doneFlag == 0) { - await qqreadvideo();//视频奖励 - } - if (task.data.treasureBox.doneFlag == 0) { - await qqreadbox();//宝箱 - } - if (task.data.taskList[1].doneFlag == 0) { - await $.wait(5000) - await qqreadssr2();//阅读金币2 - } - if (task.data.taskList[2].doneFlag == 0) { - await qqreadsign2();//金币签到 - } - - if (task.data.treasureBox.videoDoneFlag == 0) { - await qqreadbox2();//宝箱翻倍 - } - if (task.data.taskList[1].doneFlag == 0) { - await $.wait(5000) - await qqreadssr3();//阅读金币3 - } - if (task.data.user.amount >= 100000) { - await qqreadwithdraw(); - } - await showmsg();//通知 - } -} -function showmsg() { - $.msg(jsname, "", tz); // 宝箱每15次通知一次 -} -//提现 -function qqreadwithdraw() { - return new Promise((resolve, reject) => { - const toqqreadwithdrawurl = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/withdraw?amount=100000", - headers: JSON.parse(qqreadtimeheaderVal), - timeout: 60000, - }; - $.post(toqqreadwithdrawurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 提现: ${data}`); - let withdraw = JSON.parse(data); - if (withdraw.data.code == 0) - tz += `【现金提现】:成功提现10元\n`; - kz += `【现金提现】:成功提现10元\n`; - resolve(); - }); - }); -} -// 任务列表 -function qqreadtask() { - return new Promise((resolve, reject) => { - const toqqreadtaskurl = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/page?fromGuid=", - headers: JSON.parse(qqreadtimeheaderVal), - - timeout: 60000, - }; - $.get(toqqreadtaskurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 任务列表: ${data}`); - task = JSON.parse(data); - kz += - `【现金余额】:${(task.data.user.amount / 10000).toFixed(2)}元\n` + - `【已开宝箱】:${task.data.treasureBox.count}个\n`; - - tz += - `【现金余额】:${(task.data.user.amount / 10000).toFixed(2)}元\n` + - `【第${task.data.invite.issue}期】:时间${task.data.invite.dayRange}\n` + - ` 已邀请${task.data.invite.inviteCount}人,再邀请${task.data.invite.nextInviteConfig.count}人获得${task.data.invite.nextInviteConfig.amount}金币\n` + - `【${task.data.taskList[0].title}】:${task.data.taskList[0].amount}金币,${task.data.taskList[0].actionText}\n` + - `【${task.data.taskList[1].title}】:${task.data.taskList[1].amount}金币,${task.data.taskList[1].actionText}\n` + - `【${task.data.taskList[2].title}】:${task.data.taskList[2].amount}金币,${task.data.taskList[2].actionText}\n` + - `【${task.data.taskList[3].title}】:${task.data.taskList[3].amount}金币,${task.data.taskList[3].actionText}\n` + - `【宝箱任务${task.data.treasureBox.count + 1}】:${ - task.data.treasureBox.tipText - }\n` + - `【${task.data.fans.title}】:${task.data.fans.fansCount}个好友,${task.data.fans.todayAmount}金币\n`; - - resolve(); - }); - }); -} - - -// 更新 -function qqreadtrack() { - return new Promise((resolve, reject) => { - const body = qqreadbodyVal.replace(new RegExp(/"dis":[0-9]{13}/), `"dis":${new Date().getTime()}`) - const toqqreadtrackurl = { - url: "https://mqqapi.reader.qq.com/log/v4/mqq/track", - headers: JSON.parse(qqreadtimeheaderVal), - body: body, - timeout: 60000, - }; - $.post(toqqreadtrackurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 更新: ${data}`); - let track = JSON.parse(data); - tz += `【数据更新】:更新${track.msg}\n`; - resolve(); - }); - }); -} - - -// 用户名 -function qqreadinfo() { - return new Promise((resolve, reject) => { - const toqqreadinfourl = { - url: "https://mqqapi.reader.qq.com/mqq/user/init", - headers: JSON.parse(qqreadtimeheaderVal), - timeout: 60000, - }; - $.get(toqqreadinfourl, (error, response, data) => { - if (logs) $.log(`${jsname}, 用户名: ${data}`); - let info = JSON.parse(data); - kz += `\n========== 【${info.data.user.nickName}】 ==========\n`; - tz += `\n========== 【${info.data.user.nickName}】 ==========\n`; - - resolve(); - }); - }); -} - -// 阅豆签到 -function qqreadtake() { - return new Promise((resolve, reject) => { - const toqqreadtakeurl = { - url: "https://mqqapi.reader.qq.com/mqq/sign_in/user", - headers: JSON.parse(qqreadtimeheaderVal), - timeout: 60000, - }; - $.post(toqqreadtakeurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅豆签到: ${data}`); - let take = JSON.parse(data); - if (take.data.takeTicket > 0) { - tz += `【阅豆签到】:获得${take.data.takeTicket}豆\n`; - } - - resolve(); - }); - }); -} - -// 阅读时长任务 -function qqreadconfig() { - return new Promise((resolve, reject) => { - const toqqreadconfigurl = { - url: - "https://mqqapi.reader.qq.com/mqq/page/config?router=%2Fpages%2Fbook-read%2Findex&options=", - headers: JSON.parse(qqreadtimeheaderVal), - }; - $.get(toqqreadconfigurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅读时长查询: ${data}`); - config = JSON.parse(data); - if (config.code == 0) - tz += `【时长查询】:今日阅读${( - config.data.pageParams.todayReadSeconds / 60 - ).toFixed(0)}分钟\n`; - - resolve(); - }); - }); -} - -// 阅读时长 -function qqreadtime() { - return new Promise((resolve, reject) => { - const toqqreadtimeurl = { - url: qqreadtimeurlVal.replace(/readTime=/g, `readTime=${TIME}`), - headers: JSON.parse(qqreadtimeheaderVal), - }; - $.get(toqqreadtimeurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅读时长qqreadtime: ${data}`); - let time = JSON.parse(data); - if (time.code == 0) tz += `【阅读时长】:上传${TIME / 6}分钟\n`; - - resolve(); - }); - }); -} - -// 阅读金币1 -function qqreadssr1() { - return new Promise((resolve, reject) => { - const toqqreadssr1url = { - url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=30`, - headers: JSON.parse(qqreadtimeheaderVal), - timeout: 60000, - }; - if (config.data && config.data.pageParams.todayReadSeconds / 60 >= 1) { - $.get(toqqreadssr1url, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币奖励1: ${data}`); - let ssr1 = JSON.parse(data); - if (ssr1.data.amount > 0) - tz += `【阅读金币1】获得${ssr1.data.amount}金币\n`; - }); - } - resolve(); - }); -} - -// 阅读金币2 -function qqreadssr2() { - return new Promise((resolve, reject) => { - const toqqreadssr2url = { - url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=300`, - headers: JSON.parse(qqreadtimeheaderVal), - timeout: 60000, - }; - if (config.data && config.data.pageParams.todayReadSeconds / 60 >= 5) { - $.get(toqqreadssr2url, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币奖励2: ${data}`); - ssr2 = JSON.parse(data); - if (ssr2.data.amount > 0) - tz += `【阅读金币2】获得${ssr2.data.amount}金币\n`; - - - }); - } - resolve(); - }); -} - -// 阅读金币3 -function qqreadssr3() { - return new Promise((resolve, reject) => { - const toqqreadssr3url = { - url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=1800`, - headers: JSON.parse(qqreadtimeheaderVal), - timeout: 60000, - }; - if (config.data && config.data.pageParams.todayReadSeconds / 60 >= 30) { - $.get(toqqreadssr3url, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币奖励3: ${data}`); - let ssr3 = JSON.parse(data); - if (ssr3.data.amount > 0) - tz += `【阅读金币3】获得${ssr3.data.amount}金币\n`; - - - }); - } - resolve(); - }); -} - -// 金币签到 -function qqreadsign() { - return new Promise((resolve, reject) => { - const toqqreadsignurl = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/clock_in/page", - headers: JSON.parse(qqreadtimeheaderVal), - timeout: 60000, - }; - $.get(toqqreadsignurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币签到: ${data}`); - sign = JSON.parse(data); - if (sign.data.videoDoneFlag) { - tz += `【金币签到】:获得${sign.data.todayAmount}金币\n`; - } - resolve(); - }); - }); -} - -// 金币签到翻倍 -function qqreadsign2() { - return new Promise((resolve, reject) => { - const toqqreadsign2url = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/clock_in_video", - - headers: JSON.parse(qqreadtimeheaderVal), - timeout: 60000, - }; - $.get(toqqreadsign2url, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币签到翻倍: ${data}`); - let sign2 = JSON.parse(data); - if (sign2.code == 0) { - tz += `【签到翻倍】:获得${sign2.data.amount}金币\n`; - } - - resolve(); - }); - }); -} - -// 每日阅读 -function qqreaddayread() { - return new Promise((resolve, reject) => { - const toqqreaddayreadurl = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/read_book", - - headers: JSON.parse(qqreadtimeheaderVal), - timeout: 60000, - }; - $.get(toqqreaddayreadurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 每日阅读: ${data}`); - let dayread = JSON.parse(data); - if (dayread.code == 0) { - tz += `【每日阅读】:获得${dayread.data.amount}金币\n`; - } - - resolve(); - }); - }); -} - -// 视频奖励 -function qqreadvideo() { - return new Promise((resolve, reject) => { - const toqqreadvideourl = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/watch_video", - headers: JSON.parse(qqreadtimeheaderVal), - timeout: 60000, - }; - $.get(toqqreadvideourl, (error, response, data) => { - if (logs) $.log(`${jsname}, 视频奖励: ${data}`); - let video = JSON.parse(data); - if (video.code == 0) { - tz += `【视频奖励】:获得${video.data.amount}金币\n`; - } - - resolve(); - }); - }); -} - -// 宝箱奖励 -function qqreadbox() { - return new Promise((resolve, reject) => { - const toqqreadboxurl = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box", - headers: JSON.parse(qqreadtimeheaderVal), - timeout: 60000, - }; - $.get(toqqreadboxurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 宝箱奖励: ${data}`); - let box = JSON.parse(data); - if (box.data.count >= 0) { - tz += `【宝箱奖励${box.data.count}】:获得${box.data.amount}金币\n`; - } - - resolve(); - }); - }); -} - -// 宝箱奖励翻倍 -function qqreadbox2() { - return new Promise((resolve, reject) => { - const toqqreadbox2url = { - url: - "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box_video", - - headers: JSON.parse(qqreadtimeheaderVal), - timeout: 60000, - }; - $.get(toqqreadbox2url, (error, response, data) => { - if (logs) $.log(`${jsname}, 宝箱奖励翻倍: ${data}`); - let box2 = JSON.parse(data); - if (box2.code == 0) { - tz += `【宝箱翻倍】:获得${box2.data.amount}金币\n`; - } - - resolve(); - }); - }); -} - -// 本周阅读时长 -function qqreadwktime() { - return new Promise((resolve, reject) => { - const toqqreadwktimeurl = { - url: `https://mqqapi.reader.qq.com/mqq/v1/bookShelfInit`, - headers: JSON.parse(qqreadtimeheaderVal), - }; - $.get(toqqreadwktimeurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅读时长: ${data}`); - wktime = JSON.parse(data); - if (wktime.code == 0) - tz += `【本周阅读时长】:${wktime.data.readTime}分钟\n`; - - resolve(); - }); - }); -} - -// 本周阅读时长奖励任务 -function qqreadpick() { - return new Promise((resolve, reject) => { - const toqqreadpickurl = { - url: `https://mqqapi.reader.qq.com/mqq/pickPackageInit`, - headers: JSON.parse(qqreadtimeheaderVal), - }; - if (wktime.data.readTime >= wktimess && wktime.data.readTime <= 1250) { - $.get(toqqreadpickurl, (error, response, data) => { - if (logs) $.log(`${jsname},周阅读时长奖励任务: ${data}`); - let pick = JSON.parse(data); - if (pick.data[7].isPick == true) tz += "【周时长奖励】:已全部领取\n"; - - for (let i = 0; i < pick.data.length; i++) { - setTimeout(() => { - const pickid = pick.data[i].readTime; - const Packageid = [ - "10", - "10", - "20", - "30", - "50", - "80", - "100", - "120", - ]; - const toqqreadPackageurl = { - url: `https://mqqapi.reader.qq.com/mqq/pickPackage?readTime=${pickid}`, - headers: JSON.parse(qqreadtimeheaderVal), - timeout: 60000, - }; - $.get(toqqreadPackageurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 领周阅读时长: ${data}`); - Package = JSON.parse(data); - if (Package.code == 0) - tz += `【周时长奖励${i + 1}】:领取${Packageid[i]}阅豆\n`; - }); - }, i * 100); - } - }); - resolve(); - } - resolve(); - }); -} - - -// prettier-ignore -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)} From 1b7795c448297b3b49fa3e8d76e2bd75b63e8143 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:47:48 +0800 Subject: [PATCH 29/57] Update qqread.yml --- .github/workflows/qqread.yml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/.github/workflows/qqread.yml b/.github/workflows/qqread.yml index ab96bfb..8989947 100644 --- a/.github/workflows/qqread.yml +++ b/.github/workflows/qqread.yml @@ -23,19 +23,23 @@ jobs: - name: Checkout run: | git clone https://github.com/lxmd02/qq.git ~/qq - - name: Use Node.js 12.x + - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: - node-version: 12.x - - name: npm install - if: env.QQ_READ_HEADER_VAL - run: | - cd ~/qq - npm install + node-version: ${{ matrix.node-version }} + - name: Cache node_modules + uses: actions/cache@v2 # 使用 GitHub 官方的缓存 Action。 + env: + cache-name: cache-node-modules + with: + path: node_modules + key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('package-lock.json') }} # 使用 package-lock.json 的 Hash 作为缓存的 key。也可以使用 package.json 代替 + - name: '运行 【企鹅读书】' if: env.QQ_READ_HEADER_VAL run: | cd ~/qq + npm install node Task/qqread.js env: From 4a9a0202219c1fa912fab4ddf91aeac8456a9e3f Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:48:10 +0800 Subject: [PATCH 30/57] Delete qq --- Task/qq | 1 - 1 file changed, 1 deletion(-) delete mode 100644 Task/qq diff --git a/Task/qq b/Task/qq deleted file mode 100644 index 8b13789..0000000 --- a/Task/qq +++ /dev/null @@ -1 +0,0 @@ - From 1fa3250d7154d535f0b9484cbee7e4ececbaac74 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:49:56 +0800 Subject: [PATCH 31/57] Update qqread.yml --- .github/workflows/qqread.yml | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/.github/workflows/qqread.yml b/.github/workflows/qqread.yml index 8989947..e426fa8 100644 --- a/.github/workflows/qqread.yml +++ b/.github/workflows/qqread.yml @@ -1,28 +1,25 @@ # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions -name: 企鹅读书 +name: qqreads on: workflow_dispatch: schedule: - - cron: '*/7 * * * *' - watch: - types: started - + - cron: '*/7 * * * *' + jobs: build: + runs-on: ubuntu-latest if: github.event.repository.owner.id == github.event.sender.id env: QQ_READ_HEADER_VAL: ${{ secrets.QQ_READ_HEADER_VAL }} QQ_READ_TIME_URL_VAL: ${{ secrets.QQ_READ_TIME_URL_VAL }} QQ_READ_TIME_HEADER_VAL: ${{ secrets.QQ_READ_TIME_HEADER_VAL }} - steps: - name: Checkout - run: | - git clone https://github.com/lxmd02/qq.git ~/qq + uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: @@ -34,19 +31,11 @@ jobs: with: path: node_modules key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('package-lock.json') }} # 使用 package-lock.json 的 Hash 作为缓存的 key。也可以使用 package.json 代替 - - - name: '运行 【企鹅读书】' - if: env.QQ_READ_HEADER_VAL + - name: npm install run: | - cd ~/qq npm install + npm install got + npm install tough-cookie + - name: '运行 【QQ阅读】' + run: | node Task/qqread.js - env: - - PUSH_KEY: ${{ secrets.PUSH_KEY }} - BARK_PUSH: ${{ secrets.BARK_PUSH }} - TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN }} - TG_USER_ID: ${{ secrets.TG_USER_ID }} - BARK_SOUND: ${{ secrets.BARK_SOUND }} - DD_BOT_TOKEN: ${{ secrets.DD_BOT_TOKEN }} - DD_BOT_SECRET: ${{ secrets.DD_BOT_SECRET }} From 8d3f8f8c5618dc8da428117ae201cf732e87c32b Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:51:00 +0800 Subject: [PATCH 32/57] Update qqread.yml --- .github/workflows/qqread.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qqread.yml b/.github/workflows/qqread.yml index e426fa8..8c8a76d 100644 --- a/.github/workflows/qqread.yml +++ b/.github/workflows/qqread.yml @@ -1,7 +1,7 @@ # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions -name: qqreads +name: 企鹅阅读 on: workflow_dispatch: From 72cb18790a13671264992a70a1fcddc6192b4dbd Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:54:46 +0800 Subject: [PATCH 33/57] Update qqread.yml --- .github/workflows/qqread.yml | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/.github/workflows/qqread.yml b/.github/workflows/qqread.yml index 8c8a76d..51f2ad5 100644 --- a/.github/workflows/qqread.yml +++ b/.github/workflows/qqread.yml @@ -1,13 +1,19 @@ # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions +# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + name: 企鹅阅读 on: workflow_dispatch: schedule: - cron: '*/7 * * * *' - + # watch: + # types: started + repository_dispatch: + types: 企鹅 jobs: build: @@ -18,8 +24,9 @@ jobs: QQ_READ_TIME_URL_VAL: ${{ secrets.QQ_READ_TIME_URL_VAL }} QQ_READ_TIME_HEADER_VAL: ${{ secrets.QQ_READ_TIME_HEADER_VAL }} steps: - - name: Checkout - uses: actions/checkout@v2 + - name: 企鹅阅读 + run: | + git clone https://gitee.com/lxmd02/qq.git ~/qq - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: @@ -31,11 +38,19 @@ jobs: with: path: node_modules key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('package-lock.json') }} # 使用 package-lock.json 的 Hash 作为缓存的 key。也可以使用 package.json 代替 - - name: npm install + - name: '运行 【企鹅阅读】' run: | + cd ~/qq npm install - npm install got - npm install tough-cookie - - name: '运行 【QQ阅读】' - run: | - node Task/qqread.js + node qqread.js + env: + JD_COOKIE: ${{ secrets.JD_COOKIE }} + JD_DEBUG: ${{ secrets.JD_DEBUG }} + PUSH_KEY: ${{ secrets.PUSH_KEY }} + BARK_PUSH: ${{ secrets.BARK_PUSH }} + TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN }} + TG_USER_ID: ${{ secrets.TG_USER_ID }} + BARK_SOUND: ${{ secrets.BARK_SOUND }} + DD_BOT_TOKEN: ${{ secrets.DD_BOT_TOKEN }} + DD_BOT_SECRET: ${{ secrets.DD_BOT_SECRET }} + IGOT_PUSH_KEY: ${{ secrets.IGOT_PUSH_KEY }} From 243668290f489f4f90fdf8721d179f5ddcaceb75 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:55:33 +0800 Subject: [PATCH 34/57] Update qqread.yml --- .github/workflows/qqread.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/qqread.yml b/.github/workflows/qqread.yml index 51f2ad5..0125949 100644 --- a/.github/workflows/qqread.yml +++ b/.github/workflows/qqread.yml @@ -1,5 +1,3 @@ -# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions From 7a14d8eabd065a050a975b11ed638c561c99e899 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:58:48 +0800 Subject: [PATCH 35/57] Update qqread.yml --- .github/workflows/qqread.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/qqread.yml b/.github/workflows/qqread.yml index 0125949..4719717 100644 --- a/.github/workflows/qqread.yml +++ b/.github/workflows/qqread.yml @@ -24,7 +24,7 @@ jobs: steps: - name: 企鹅阅读 run: | - git clone https://gitee.com/lxmd02/qq.git ~/qq + git clone https://github.com/lxmd02/qq.git ~/Task - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: @@ -40,7 +40,7 @@ jobs: run: | cd ~/qq npm install - node qqread.js + node Task/qqread.js env: JD_COOKIE: ${{ secrets.JD_COOKIE }} JD_DEBUG: ${{ secrets.JD_DEBUG }} From 5503a046149c999071699e64c897bdb21ded6f6a Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 20:59:54 +0800 Subject: [PATCH 36/57] Update qqread.yml --- .github/workflows/qqread.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qqread.yml b/.github/workflows/qqread.yml index 4719717..066d739 100644 --- a/.github/workflows/qqread.yml +++ b/.github/workflows/qqread.yml @@ -24,7 +24,7 @@ jobs: steps: - name: 企鹅阅读 run: | - git clone https://github.com/lxmd02/qq.git ~/Task + git clone https://github.com/lxmd02/qq.git ~/qq - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: From 5003f1dff1327813b7107d2f645f09c1dcb5b6c6 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 21:06:18 +0800 Subject: [PATCH 37/57] Update qqread.yml --- .github/workflows/qqread.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qqread.yml b/.github/workflows/qqread.yml index 066d739..e696937 100644 --- a/.github/workflows/qqread.yml +++ b/.github/workflows/qqread.yml @@ -39,7 +39,7 @@ jobs: - name: '运行 【企鹅阅读】' run: | cd ~/qq - npm install + node Task/qqread.js env: JD_COOKIE: ${{ secrets.JD_COOKIE }} From 12e84c83fd35e9c3198d7354b457964f282b723f Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 21:10:08 +0800 Subject: [PATCH 38/57] Update qqread.yml --- .github/workflows/qqread.yml | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/.github/workflows/qqread.yml b/.github/workflows/qqread.yml index e696937..b5453c3 100644 --- a/.github/workflows/qqread.yml +++ b/.github/workflows/qqread.yml @@ -8,10 +8,9 @@ on: workflow_dispatch: schedule: - cron: '*/7 * * * *' - # watch: - # types: started - repository_dispatch: - types: 企鹅 + watch: + types: started + jobs: build: @@ -22,20 +21,18 @@ jobs: QQ_READ_TIME_URL_VAL: ${{ secrets.QQ_READ_TIME_URL_VAL }} QQ_READ_TIME_HEADER_VAL: ${{ secrets.QQ_READ_TIME_HEADER_VAL }} steps: - - name: 企鹅阅读 + - name: Checkout run: | git clone https://github.com/lxmd02/qq.git ~/qq - - name: Use Node.js ${{ matrix.node-version }} + - name: Use Node.js 12.x uses: actions/setup-node@v1 with: - node-version: ${{ matrix.node-version }} - - name: Cache node_modules - uses: actions/cache@v2 # 使用 GitHub 官方的缓存 Action。 - env: - cache-name: cache-node-modules - with: - path: node_modules - key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('package-lock.json') }} # 使用 package-lock.json 的 Hash 作为缓存的 key。也可以使用 package.json 代替 + node-version: 12.x + - name: npm install + if: env.QQ_READ_HEADER_VAL + run: | + cd ~/qq + npm install - name: '运行 【企鹅阅读】' run: | cd ~/qq From ed0b947db76c17bb2823cb509facab841d49cef8 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 21:14:27 +0800 Subject: [PATCH 39/57] Update qqread.yml --- .github/workflows/qqread.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/qqread.yml b/.github/workflows/qqread.yml index b5453c3..46d5193 100644 --- a/.github/workflows/qqread.yml +++ b/.github/workflows/qqread.yml @@ -34,14 +34,11 @@ jobs: cd ~/qq npm install - name: '运行 【企鹅阅读】' + if: env.QQ_READ_HEADER_VAL run: | - cd ~/qq - + cd ~/qq node Task/qqread.js env: - JD_COOKIE: ${{ secrets.JD_COOKIE }} - JD_DEBUG: ${{ secrets.JD_DEBUG }} - PUSH_KEY: ${{ secrets.PUSH_KEY }} BARK_PUSH: ${{ secrets.BARK_PUSH }} TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN }} TG_USER_ID: ${{ secrets.TG_USER_ID }} From 1c9a51fff230ee9192b2b78a36ab725c17260b8c Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 21:18:18 +0800 Subject: [PATCH 40/57] Update qqread.yml --- .github/workflows/qqread.yml | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/.github/workflows/qqread.yml b/.github/workflows/qqread.yml index 46d5193..902affc 100644 --- a/.github/workflows/qqread.yml +++ b/.github/workflows/qqread.yml @@ -1,29 +1,27 @@ - # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions -name: 企鹅阅读 +name: 企鹅读书 on: workflow_dispatch: schedule: - - cron: '*/7 * * * *' + - cron: '*/7 * * * *' watch: - types: started - + types: started + jobs: build: - runs-on: ubuntu-latest if: github.event.repository.owner.id == github.event.sender.id env: - QQ_READ_HEADER_VAL: ${{ secrets.QQ_READ_HEADER_VAL }} - QQ_READ_TIME_URL_VAL: ${{ secrets.QQ_READ_TIME_URL_VAL }} - QQ_READ_TIME_HEADER_VAL: ${{ secrets.QQ_READ_TIME_HEADER_VAL }} + QQ_READ_HEADER_VAL: ${{ secrets.QQ_READ_HEADER_VAL }} + QQ_READ_TIME_URL_VAL: ${{ secrets.QQ_READ_TIME_URL_VAL }} + QQ_READ_TIME_HEADER_VAL: ${{ secrets.QQ_READ_TIME_HEADER_VAL }} steps: - name: Checkout run: | - git clone https://github.com/lxmd02/qq.git ~/qq + git clone https://github.com/lxmd02/qq.git - name: Use Node.js 12.x uses: actions/setup-node@v1 with: @@ -33,16 +31,17 @@ jobs: run: | cd ~/qq npm install - - name: '运行 【企鹅阅读】' + - name: '运行 【企鹅读书】' if: env.QQ_READ_HEADER_VAL run: | - cd ~/qq + cd ~/qq node Task/qqread.js env: + + PUSH_KEY: ${{ secrets.PUSH_KEY }} BARK_PUSH: ${{ secrets.BARK_PUSH }} TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN }} TG_USER_ID: ${{ secrets.TG_USER_ID }} BARK_SOUND: ${{ secrets.BARK_SOUND }} DD_BOT_TOKEN: ${{ secrets.DD_BOT_TOKEN }} DD_BOT_SECRET: ${{ secrets.DD_BOT_SECRET }} - IGOT_PUSH_KEY: ${{ secrets.IGOT_PUSH_KEY }} From cd09477c2b5d0683dca5535744d04e5c5ae2a057 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 21:20:55 +0800 Subject: [PATCH 41/57] Update qqread.yml --- .github/workflows/qqread.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/qqread.yml b/.github/workflows/qqread.yml index 902affc..26022b1 100644 --- a/.github/workflows/qqread.yml +++ b/.github/workflows/qqread.yml @@ -21,7 +21,7 @@ jobs: steps: - name: Checkout run: | - git clone https://github.com/lxmd02/qq.git + git clone https://github.com/lxmd02/JavaScript.git ~/JavaScript - name: Use Node.js 12.x uses: actions/setup-node@v1 with: @@ -29,12 +29,12 @@ jobs: - name: npm install if: env.QQ_READ_HEADER_VAL run: | - cd ~/qq + cd ~/JavaScript npm install - name: '运行 【企鹅读书】' if: env.QQ_READ_HEADER_VAL run: | - cd ~/qq + cd ~/JavaScript node Task/qqread.js env: From 959666170fc76862f1ac1949564a40e4d23c1abe Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 21:21:58 +0800 Subject: [PATCH 42/57] Update qqread.yml --- .github/workflows/qqread.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/qqread.yml b/.github/workflows/qqread.yml index 26022b1..3076809 100644 --- a/.github/workflows/qqread.yml +++ b/.github/workflows/qqread.yml @@ -21,7 +21,7 @@ jobs: steps: - name: Checkout run: | - git clone https://github.com/lxmd02/JavaScript.git ~/JavaScript + git clone https://github.com/lxmd02/JavaScript-1.git ~/JavaScript-1 - name: Use Node.js 12.x uses: actions/setup-node@v1 with: @@ -29,12 +29,12 @@ jobs: - name: npm install if: env.QQ_READ_HEADER_VAL run: | - cd ~/JavaScript + cd ~/JavaScript-1 npm install - name: '运行 【企鹅读书】' if: env.QQ_READ_HEADER_VAL run: | - cd ~/JavaScript + cd ~/JavaScript-1 node Task/qqread.js env: From 1d67a09c531a01050137d0bd80f3f50ad3416ae2 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 21:24:02 +0800 Subject: [PATCH 43/57] Update qqread.yml --- .github/workflows/qqread.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/qqread.yml b/.github/workflows/qqread.yml index 3076809..eae9f2b 100644 --- a/.github/workflows/qqread.yml +++ b/.github/workflows/qqread.yml @@ -21,7 +21,7 @@ jobs: steps: - name: Checkout run: | - git clone https://github.com/lxmd02/JavaScript-1.git ~/JavaScript-1 + git clone https://github.com/lxmd02/JavaScript-1.git ~/Task - name: Use Node.js 12.x uses: actions/setup-node@v1 with: @@ -29,13 +29,13 @@ jobs: - name: npm install if: env.QQ_READ_HEADER_VAL run: | - cd ~/JavaScript-1 + cd ~/Task npm install - name: '运行 【企鹅读书】' if: env.QQ_READ_HEADER_VAL run: | - cd ~/JavaScript-1 - node Task/qqread.js + cd ~/Task + node qqread.js env: PUSH_KEY: ${{ secrets.PUSH_KEY }} From ba49dbdae95730fd31fe1c14d24e82c67d5ff62f Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 21:26:06 +0800 Subject: [PATCH 44/57] Update qqread.yml --- .github/workflows/qqread.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/qqread.yml b/.github/workflows/qqread.yml index eae9f2b..b249e17 100644 --- a/.github/workflows/qqread.yml +++ b/.github/workflows/qqread.yml @@ -21,7 +21,7 @@ jobs: steps: - name: Checkout run: | - git clone https://github.com/lxmd02/JavaScript-1.git ~/Task + git clone https://github.com/lxmd02/JavaScript-1.git ~/JavaScript-1 - name: Use Node.js 12.x uses: actions/setup-node@v1 with: @@ -29,12 +29,12 @@ jobs: - name: npm install if: env.QQ_READ_HEADER_VAL run: | - cd ~/Task + cd ~/JavaScript-1 npm install - name: '运行 【企鹅读书】' if: env.QQ_READ_HEADER_VAL run: | - cd ~/Task + cd ~/JavaScript-1 node qqread.js env: From d1e1204f5f008af120babe85b92451f235bddf88 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 21:27:27 +0800 Subject: [PATCH 45/57] Update qqread.yml --- .github/workflows/qqread.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qqread.yml b/.github/workflows/qqread.yml index b249e17..192f4f7 100644 --- a/.github/workflows/qqread.yml +++ b/.github/workflows/qqread.yml @@ -34,7 +34,7 @@ jobs: - name: '运行 【企鹅读书】' if: env.QQ_READ_HEADER_VAL run: | - cd ~/JavaScript-1 + cd ~/JavaScript-1/Task node qqread.js env: From b34494946273a1227dd05a27f3efc38f8e8638fd Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 21:31:43 +0800 Subject: [PATCH 46/57] Update qqread.yml --- .github/workflows/qqread.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/qqread.yml b/.github/workflows/qqread.yml index 192f4f7..854a04f 100644 --- a/.github/workflows/qqread.yml +++ b/.github/workflows/qqread.yml @@ -26,6 +26,11 @@ jobs: uses: actions/setup-node@v1 with: node-version: 12.x + - name: npm install + run: | + npm install + npm install got + npm install tough-cookie - name: npm install if: env.QQ_READ_HEADER_VAL run: | From ff29c1339866af78e86eb1332776719bba034baf Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 21:35:33 +0800 Subject: [PATCH 47/57] Update qqread.yml --- .github/workflows/qqread.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/qqread.yml b/.github/workflows/qqread.yml index 854a04f..8a62f9d 100644 --- a/.github/workflows/qqread.yml +++ b/.github/workflows/qqread.yml @@ -26,18 +26,15 @@ jobs: uses: actions/setup-node@v1 with: node-version: 12.x - - name: npm install - run: | - npm install - npm install got - npm install tough-cookie - name: npm install if: env.QQ_READ_HEADER_VAL run: | cd ~/JavaScript-1 npm install + npm install got + npm install tough-cookie - name: '运行 【企鹅读书】' - if: env.QQ_READ_HEADER_VAL + run: | cd ~/JavaScript-1/Task node qqread.js From fb6576d7c2ce3f7701cf470e05e9211322228f34 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 21:59:21 +0800 Subject: [PATCH 48/57] Update qqread.js --- Task/qqread.js | 135 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 93 insertions(+), 42 deletions(-) diff --git a/Task/qqread.js b/Task/qqread.js index 0c5903c..7bfa5a9 100644 --- a/Task/qqread.js +++ b/Task/qqread.js @@ -266,21 +266,21 @@ function qqreadtask() { if (logs) $.log(`${jsname}, 任务列表: ${data}`); task = JSON.parse(data); kz += - `【现金余额】:${(task.data.user.amount / 10000).toFixed(2)}元\n` + - `【已开宝箱】:${task.data.treasureBox.count}个\n`; + `【现金余额】:${(task.data.user.amount / 10000).toFixed(2)}元\n` + + `【已开宝箱】:${task.data.treasureBox.count}个\n`; tz += - `【现金余额】:${(task.data.user.amount / 10000).toFixed(2)}元\n` + - `【第${task.data.invite.issue}期】:时间${task.data.invite.dayRange}\n` + - ` 已邀请${task.data.invite.inviteCount}人,再邀请${task.data.invite.nextInviteConfig.count}人获得${task.data.invite.nextInviteConfig.amount}金币\n` + - `【${task.data.taskList[0].title}】:${task.data.taskList[0].amount}金币,${task.data.taskList[0].actionText}\n` + - `【${task.data.taskList[1].title}】:${task.data.taskList[1].amount}金币,${task.data.taskList[1].actionText}\n` + - `【${task.data.taskList[2].title}】:${task.data.taskList[2].amount}金币,${task.data.taskList[2].actionText}\n` + - `【${task.data.taskList[3].title}】:${task.data.taskList[3].amount}金币,${task.data.taskList[3].actionText}\n` + - `【宝箱任务${task.data.treasureBox.count + 1}】:${ - task.data.treasureBox.tipText - }\n` + - `【${task.data.fans.title}】:${task.data.fans.fansCount}个好友,${task.data.fans.todayAmount}金币\n`; + `【现金余额】:${(task.data.user.amount / 10000).toFixed(2)}元\n` + + `【第${task.data.invite.issue}期】:时间${task.data.invite.dayRange}\n` + + ` 已邀请${task.data.invite.inviteCount}人,再邀请${task.data.invite.nextInviteConfig.count}人获得${task.data.invite.nextInviteConfig.amount}金币\n` + + `【${task.data.taskList[0].title}】:${task.data.taskList[0].amount}金币,${task.data.taskList[0].actionText}\n` + + `【${task.data.taskList[1].title}】:${task.data.taskList[1].amount}金币,${task.data.taskList[1].actionText}\n` + + `【${task.data.taskList[2].title}】:${task.data.taskList[2].amount}金币,${task.data.taskList[2].actionText}\n` + + `【${task.data.taskList[3].title}】:${task.data.taskList[3].amount}金币,${task.data.taskList[3].actionText}\n` + + `【宝箱任务${task.data.treasureBox.count + 1}】:${ + task.data.treasureBox.tipText + }\n` + + `【${task.data.fans.title}】:${task.data.fans.fansCount}个好友,${task.data.fans.todayAmount}金币\n`; resolve(); }); @@ -288,26 +288,79 @@ function qqreadtask() { } + + + + + +// 金币统计 +function qqreadtrans() { + return new Promise((resolve, reject) => { +for(var y=1;y<9;y++){ + let day=0; + const toqqreadtransurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/trans/list?pn="+y, + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadtransurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 今日收益: ${data}`); + trans = JSON.parse(data); + for(var i=0;i<20;i++){ +if(trans.data.list[i].createTime>=daytime) + day+=trans.data.list[i].amount; +} +tz+="【今日收益】:获得"+day+'\n' +resolve(); + }); + } + }); +} + + + // 更新 function qqreadtrack() { return new Promise((resolve, reject) => { - const body = qqreadbodyVal.replace(new RegExp(/"dis":[0-9]{13}/), `"dis":${new Date().getTime()}`) - const toqqreadtrackurl = { - url: "https://mqqapi.reader.qq.com/log/v4/mqq/track", - headers: JSON.parse(qqreadtimeheaderVal), - body: body, - timeout: 60000, + const body = qqreadbodyVal.replace(new RegExp(/"dis":[0-9]{13}/),`"dis":${new Date().getTime()}`) + const toqqreadtrackurl = { + url: "https://mqqapi.reader.qq.com/log/v4/mqq/track", + headers: JSON.parse(qqreadtimeheaderVal), + body: body, + timeout: 60000, }; $.post(toqqreadtrackurl, (error, response, data) => { if (logs) $.log(`${jsname}, 更新: ${data}`); - let track = JSON.parse(data); - tz += `【数据更新】:更新${track.msg}\n`; + track = JSON.parse(data); + tz += `【数据更新】:更新${track.msg}\n`; + resolve(); + }); + }); +} + + +//提现 +function qqreadwithdraw() { + return new Promise((resolve, reject) => { + const toqqreadwithdrawurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/withdraw?amount=100000", + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.post(toqqreadwithdrawurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 提现: ${data}`); + withdraw = JSON.parse(data); +if(withdraw.data.code==0) + tz += `【现金提现】:成功提现10元\n`; + kz += `【现金提现】:成功提现10元\n`; resolve(); }); }); } + + // 用户名 function qqreadinfo() { return new Promise((resolve, reject) => { @@ -318,7 +371,7 @@ function qqreadinfo() { }; $.get(toqqreadinfourl, (error, response, data) => { if (logs) $.log(`${jsname}, 用户名: ${data}`); - let info = JSON.parse(data); + info = JSON.parse(data); kz += `\n========== 【${info.data.user.nickName}】 ==========\n`; tz += `\n========== 【${info.data.user.nickName}】 ==========\n`; @@ -337,7 +390,7 @@ function qqreadtake() { }; $.post(toqqreadtakeurl, (error, response, data) => { if (logs) $.log(`${jsname}, 阅豆签到: ${data}`); - let take = JSON.parse(data); + take = JSON.parse(data); if (take.data.takeTicket > 0) { tz += `【阅豆签到】:获得${take.data.takeTicket}豆\n`; } @@ -352,7 +405,7 @@ function qqreadconfig() { return new Promise((resolve, reject) => { const toqqreadconfigurl = { url: - "https://mqqapi.reader.qq.com/mqq/page/config?router=%2Fpages%2Fbook-read%2Findex&options=", + "https://mqqapi.reader.qq.com/mqq/page/config?router=%2Fpages%2Fbook-read%2Findex&options=", headers: JSON.parse(qqreadtimeheaderVal), }; $.get(toqqreadconfigurl, (error, response, data) => { @@ -360,7 +413,7 @@ function qqreadconfig() { config = JSON.parse(data); if (config.code == 0) tz += `【时长查询】:今日阅读${( - config.data.pageParams.todayReadSeconds / 60 + config.data.pageParams.todayReadSeconds / 60 ).toFixed(0)}分钟\n`; resolve(); @@ -376,8 +429,8 @@ function qqreadtime() { headers: JSON.parse(qqreadtimeheaderVal), }; $.get(toqqreadtimeurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅读时长qqreadtime: ${data}`); - let time = JSON.parse(data); + if (logs) $.log(`${jsname}, 阅读时长: ${data}`); + time = JSON.parse(data); if (time.code == 0) tz += `【阅读时长】:上传${TIME / 6}分钟\n`; resolve(); @@ -396,12 +449,13 @@ function qqreadssr1() { if (config.data && config.data.pageParams.todayReadSeconds / 60 >= 1) { $.get(toqqreadssr1url, (error, response, data) => { if (logs) $.log(`${jsname}, 金币奖励1: ${data}`); - let ssr1 = JSON.parse(data); + ssr1 = JSON.parse(data); if (ssr1.data.amount > 0) tz += `【阅读金币1】获得${ssr1.data.amount}金币\n`; + + resolve(); }); } - resolve(); }); } @@ -420,10 +474,9 @@ function qqreadssr2() { if (ssr2.data.amount > 0) tz += `【阅读金币2】获得${ssr2.data.amount}金币\n`; - + resolve(); }); } - resolve(); }); } @@ -438,14 +491,13 @@ function qqreadssr3() { if (config.data && config.data.pageParams.todayReadSeconds / 60 >= 30) { $.get(toqqreadssr3url, (error, response, data) => { if (logs) $.log(`${jsname}, 金币奖励3: ${data}`); - let ssr3 = JSON.parse(data); + ssr3 = JSON.parse(data); if (ssr3.data.amount > 0) tz += `【阅读金币3】获得${ssr3.data.amount}金币\n`; - + resolve(); }); } - resolve(); }); } @@ -479,7 +531,7 @@ function qqreadsign2() { }; $.get(toqqreadsign2url, (error, response, data) => { if (logs) $.log(`${jsname}, 金币签到翻倍: ${data}`); - let sign2 = JSON.parse(data); + sign2 = JSON.parse(data); if (sign2.code == 0) { tz += `【签到翻倍】:获得${sign2.data.amount}金币\n`; } @@ -500,7 +552,7 @@ function qqreaddayread() { }; $.get(toqqreaddayreadurl, (error, response, data) => { if (logs) $.log(`${jsname}, 每日阅读: ${data}`); - let dayread = JSON.parse(data); + dayread = JSON.parse(data); if (dayread.code == 0) { tz += `【每日阅读】:获得${dayread.data.amount}金币\n`; } @@ -520,7 +572,7 @@ function qqreadvideo() { }; $.get(toqqreadvideourl, (error, response, data) => { if (logs) $.log(`${jsname}, 视频奖励: ${data}`); - let video = JSON.parse(data); + video = JSON.parse(data); if (video.code == 0) { tz += `【视频奖励】:获得${video.data.amount}金币\n`; } @@ -540,7 +592,7 @@ function qqreadbox() { }; $.get(toqqreadboxurl, (error, response, data) => { if (logs) $.log(`${jsname}, 宝箱奖励: ${data}`); - let box = JSON.parse(data); + box = JSON.parse(data); if (box.data.count >= 0) { tz += `【宝箱奖励${box.data.count}】:获得${box.data.amount}金币\n`; } @@ -555,14 +607,14 @@ function qqreadbox2() { return new Promise((resolve, reject) => { const toqqreadbox2url = { url: - "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box_video", + "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box_video", headers: JSON.parse(qqreadtimeheaderVal), timeout: 60000, }; $.get(toqqreadbox2url, (error, response, data) => { if (logs) $.log(`${jsname}, 宝箱奖励翻倍: ${data}`); - let box2 = JSON.parse(data); + box2 = JSON.parse(data); if (box2.code == 0) { tz += `【宝箱翻倍】:获得${box2.data.amount}金币\n`; } @@ -600,7 +652,7 @@ function qqreadpick() { if (wktime.data.readTime >= wktimess && wktime.data.readTime <= 1250) { $.get(toqqreadpickurl, (error, response, data) => { if (logs) $.log(`${jsname},周阅读时长奖励任务: ${data}`); - let pick = JSON.parse(data); + pick = JSON.parse(data); if (pick.data[7].isPick == true) tz += "【周时长奖励】:已全部领取\n"; for (let i = 0; i < pick.data.length; i++) { @@ -632,7 +684,6 @@ function qqreadpick() { }); resolve(); } - resolve(); }); } From 152bfb3872a8a65a6ad549bba5783f04aee1615f Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 22:10:37 +0800 Subject: [PATCH 49/57] Update qqread.js --- Task/qqread.js | 137 ++++++++++++++++--------------------------------- 1 file changed, 43 insertions(+), 94 deletions(-) diff --git a/Task/qqread.js b/Task/qqread.js index 7bfa5a9..bf55fd6 100644 --- a/Task/qqread.js +++ b/Task/qqread.js @@ -187,8 +187,8 @@ async function QQ_READ() { qqreadtimeheaderVal = QQ_READ_COOKIES[i]['qqreadtimeheaderVal']; await qqreadinfo();//用户名 await qqreadwktime();//周时长查询 - await qqreadtrack(); await qqreadconfig();//时长查询 + await qqreadtrack(); await qqreadtask();//任务列表 if (config.data.pageParams.todayReadSeconds / 3600 <= maxtime) { await qqreadtime();// 上传时长 @@ -266,21 +266,21 @@ function qqreadtask() { if (logs) $.log(`${jsname}, 任务列表: ${data}`); task = JSON.parse(data); kz += - `【现金余额】:${(task.data.user.amount / 10000).toFixed(2)}元\n` + - `【已开宝箱】:${task.data.treasureBox.count}个\n`; + `【现金余额】:${(task.data.user.amount / 10000).toFixed(2)}元\n` + + `【已开宝箱】:${task.data.treasureBox.count}个\n`; tz += - `【现金余额】:${(task.data.user.amount / 10000).toFixed(2)}元\n` + - `【第${task.data.invite.issue}期】:时间${task.data.invite.dayRange}\n` + - ` 已邀请${task.data.invite.inviteCount}人,再邀请${task.data.invite.nextInviteConfig.count}人获得${task.data.invite.nextInviteConfig.amount}金币\n` + - `【${task.data.taskList[0].title}】:${task.data.taskList[0].amount}金币,${task.data.taskList[0].actionText}\n` + - `【${task.data.taskList[1].title}】:${task.data.taskList[1].amount}金币,${task.data.taskList[1].actionText}\n` + - `【${task.data.taskList[2].title}】:${task.data.taskList[2].amount}金币,${task.data.taskList[2].actionText}\n` + - `【${task.data.taskList[3].title}】:${task.data.taskList[3].amount}金币,${task.data.taskList[3].actionText}\n` + - `【宝箱任务${task.data.treasureBox.count + 1}】:${ - task.data.treasureBox.tipText - }\n` + - `【${task.data.fans.title}】:${task.data.fans.fansCount}个好友,${task.data.fans.todayAmount}金币\n`; + `【现金余额】:${(task.data.user.amount / 10000).toFixed(2)}元\n` + + `【第${task.data.invite.issue}期】:时间${task.data.invite.dayRange}\n` + + ` 已邀请${task.data.invite.inviteCount}人,再邀请${task.data.invite.nextInviteConfig.count}人获得${task.data.invite.nextInviteConfig.amount}金币\n` + + `【${task.data.taskList[0].title}】:${task.data.taskList[0].amount}金币,${task.data.taskList[0].actionText}\n` + + `【${task.data.taskList[1].title}】:${task.data.taskList[1].amount}金币,${task.data.taskList[1].actionText}\n` + + `【${task.data.taskList[2].title}】:${task.data.taskList[2].amount}金币,${task.data.taskList[2].actionText}\n` + + `【${task.data.taskList[3].title}】:${task.data.taskList[3].amount}金币,${task.data.taskList[3].actionText}\n` + + `【宝箱任务${task.data.treasureBox.count + 1}】:${ + task.data.treasureBox.tipText + }\n` + + `【${task.data.fans.title}】:${task.data.fans.fansCount}个好友,${task.data.fans.todayAmount}金币\n`; resolve(); }); @@ -288,79 +288,26 @@ function qqreadtask() { } - - - - - -// 金币统计 -function qqreadtrans() { - return new Promise((resolve, reject) => { -for(var y=1;y<9;y++){ - let day=0; - const toqqreadtransurl = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/trans/list?pn="+y, - headers: JSON.parse(qqreadtimeheaderVal), - timeout: 60000, - }; - $.get(toqqreadtransurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 今日收益: ${data}`); - trans = JSON.parse(data); - for(var i=0;i<20;i++){ -if(trans.data.list[i].createTime>=daytime) - day+=trans.data.list[i].amount; -} -tz+="【今日收益】:获得"+day+'\n' -resolve(); - }); - } - }); -} - - - // 更新 function qqreadtrack() { return new Promise((resolve, reject) => { - const body = qqreadbodyVal.replace(new RegExp(/"dis":[0-9]{13}/),`"dis":${new Date().getTime()}`) - const toqqreadtrackurl = { - url: "https://mqqapi.reader.qq.com/log/v4/mqq/track", - headers: JSON.parse(qqreadtimeheaderVal), - body: body, - timeout: 60000, - }; - $.post(toqqreadtrackurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 更新: ${data}`); - track = JSON.parse(data); - tz += `【数据更新】:更新${track.msg}\n`; - resolve(); - }); - }); -} - - -//提现 -function qqreadwithdraw() { - return new Promise((resolve, reject) => { - const toqqreadwithdrawurl = { - url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/withdraw?amount=100000", + const body = qqreadbodyVal.replace(new RegExp(/"dis":[0-9]{13}/), `"dis":${new Date().getTime()}`) + const toqqreadtrackurl = { + url: "https://mqqapi.reader.qq.com/log/v4/mqq/track", headers: JSON.parse(qqreadtimeheaderVal), + body: body, timeout: 60000, }; - $.post(toqqreadwithdrawurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 提现: ${data}`); - withdraw = JSON.parse(data); -if(withdraw.data.code==0) - tz += `【现金提现】:成功提现10元\n`; - kz += `【现金提现】:成功提现10元\n`; + $.post(toqqreadtrackurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 更新: ${data}`); + let track = JSON.parse(data); + tz += `【数据更新】:更新${track.msg}\n`; resolve(); }); }); } - - // 用户名 function qqreadinfo() { return new Promise((resolve, reject) => { @@ -371,7 +318,7 @@ function qqreadinfo() { }; $.get(toqqreadinfourl, (error, response, data) => { if (logs) $.log(`${jsname}, 用户名: ${data}`); - info = JSON.parse(data); + let info = JSON.parse(data); kz += `\n========== 【${info.data.user.nickName}】 ==========\n`; tz += `\n========== 【${info.data.user.nickName}】 ==========\n`; @@ -390,7 +337,7 @@ function qqreadtake() { }; $.post(toqqreadtakeurl, (error, response, data) => { if (logs) $.log(`${jsname}, 阅豆签到: ${data}`); - take = JSON.parse(data); + let take = JSON.parse(data); if (take.data.takeTicket > 0) { tz += `【阅豆签到】:获得${take.data.takeTicket}豆\n`; } @@ -405,7 +352,7 @@ function qqreadconfig() { return new Promise((resolve, reject) => { const toqqreadconfigurl = { url: - "https://mqqapi.reader.qq.com/mqq/page/config?router=%2Fpages%2Fbook-read%2Findex&options=", + "https://mqqapi.reader.qq.com/mqq/page/config?router=%2Fpages%2Fbook-read%2Findex&options=", headers: JSON.parse(qqreadtimeheaderVal), }; $.get(toqqreadconfigurl, (error, response, data) => { @@ -413,7 +360,7 @@ function qqreadconfig() { config = JSON.parse(data); if (config.code == 0) tz += `【时长查询】:今日阅读${( - config.data.pageParams.todayReadSeconds / 60 + config.data.pageParams.todayReadSeconds / 60 ).toFixed(0)}分钟\n`; resolve(); @@ -429,8 +376,8 @@ function qqreadtime() { headers: JSON.parse(qqreadtimeheaderVal), }; $.get(toqqreadtimeurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅读时长: ${data}`); - time = JSON.parse(data); + if (logs) $.log(`${jsname}, 阅读时长qqreadtime: ${data}`); + let time = JSON.parse(data); if (time.code == 0) tz += `【阅读时长】:上传${TIME / 6}分钟\n`; resolve(); @@ -449,13 +396,12 @@ function qqreadssr1() { if (config.data && config.data.pageParams.todayReadSeconds / 60 >= 1) { $.get(toqqreadssr1url, (error, response, data) => { if (logs) $.log(`${jsname}, 金币奖励1: ${data}`); - ssr1 = JSON.parse(data); + let ssr1 = JSON.parse(data); if (ssr1.data.amount > 0) tz += `【阅读金币1】获得${ssr1.data.amount}金币\n`; - - resolve(); }); } + resolve(); }); } @@ -474,9 +420,10 @@ function qqreadssr2() { if (ssr2.data.amount > 0) tz += `【阅读金币2】获得${ssr2.data.amount}金币\n`; - resolve(); + }); } + resolve(); }); } @@ -491,13 +438,14 @@ function qqreadssr3() { if (config.data && config.data.pageParams.todayReadSeconds / 60 >= 30) { $.get(toqqreadssr3url, (error, response, data) => { if (logs) $.log(`${jsname}, 金币奖励3: ${data}`); - ssr3 = JSON.parse(data); + let ssr3 = JSON.parse(data); if (ssr3.data.amount > 0) tz += `【阅读金币3】获得${ssr3.data.amount}金币\n`; - resolve(); + }); } + resolve(); }); } @@ -531,7 +479,7 @@ function qqreadsign2() { }; $.get(toqqreadsign2url, (error, response, data) => { if (logs) $.log(`${jsname}, 金币签到翻倍: ${data}`); - sign2 = JSON.parse(data); + let sign2 = JSON.parse(data); if (sign2.code == 0) { tz += `【签到翻倍】:获得${sign2.data.amount}金币\n`; } @@ -552,7 +500,7 @@ function qqreaddayread() { }; $.get(toqqreaddayreadurl, (error, response, data) => { if (logs) $.log(`${jsname}, 每日阅读: ${data}`); - dayread = JSON.parse(data); + let dayread = JSON.parse(data); if (dayread.code == 0) { tz += `【每日阅读】:获得${dayread.data.amount}金币\n`; } @@ -572,7 +520,7 @@ function qqreadvideo() { }; $.get(toqqreadvideourl, (error, response, data) => { if (logs) $.log(`${jsname}, 视频奖励: ${data}`); - video = JSON.parse(data); + let video = JSON.parse(data); if (video.code == 0) { tz += `【视频奖励】:获得${video.data.amount}金币\n`; } @@ -592,7 +540,7 @@ function qqreadbox() { }; $.get(toqqreadboxurl, (error, response, data) => { if (logs) $.log(`${jsname}, 宝箱奖励: ${data}`); - box = JSON.parse(data); + let box = JSON.parse(data); if (box.data.count >= 0) { tz += `【宝箱奖励${box.data.count}】:获得${box.data.amount}金币\n`; } @@ -607,14 +555,14 @@ function qqreadbox2() { return new Promise((resolve, reject) => { const toqqreadbox2url = { url: - "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box_video", + "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box_video", headers: JSON.parse(qqreadtimeheaderVal), timeout: 60000, }; $.get(toqqreadbox2url, (error, response, data) => { if (logs) $.log(`${jsname}, 宝箱奖励翻倍: ${data}`); - box2 = JSON.parse(data); + let box2 = JSON.parse(data); if (box2.code == 0) { tz += `【宝箱翻倍】:获得${box2.data.amount}金币\n`; } @@ -652,7 +600,7 @@ function qqreadpick() { if (wktime.data.readTime >= wktimess && wktime.data.readTime <= 1250) { $.get(toqqreadpickurl, (error, response, data) => { if (logs) $.log(`${jsname},周阅读时长奖励任务: ${data}`); - pick = JSON.parse(data); + let pick = JSON.parse(data); if (pick.data[7].isPick == true) tz += "【周时长奖励】:已全部领取\n"; for (let i = 0; i < pick.data.length; i++) { @@ -684,6 +632,7 @@ function qqreadpick() { }); resolve(); } + resolve(); }); } From 3df7e08a3c799d8a4a81c213e52e57f33d88c96b Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 22:19:29 +0800 Subject: [PATCH 50/57] Update qqread.js --- Task/qqread.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Task/qqread.js b/Task/qqread.js index bf55fd6..16213ff 100644 --- a/Task/qqread.js +++ b/Task/qqread.js @@ -185,10 +185,15 @@ async function QQ_READ() { qqreadbodyVal = QQ_READ_COOKIES[i]['qqreadbodyVal']; qqreadtimeurlVal = QQ_READ_COOKIES[i]['qqreadtimeurlVal']; qqreadtimeheaderVal = QQ_READ_COOKIES[i]['qqreadtimeheaderVal']; + await $.wait(5000) await qqreadinfo();//用户名 + await $.wait(5000) await qqreadwktime();//周时长查询 + await $.wait(5000) await qqreadconfig();//时长查询 + await $.wait(5000) await qqreadtrack(); + await $.wait(5000) await qqreadtask();//任务列表 if (config.data.pageParams.todayReadSeconds / 3600 <= maxtime) { await qqreadtime();// 上传时长 @@ -229,6 +234,7 @@ async function QQ_READ() { if (task.data.user.amount >= 100000) { await qqreadwithdraw(); } + await showmsg();//通知 } } From 8180bf95396106cdb592cd3800ec68f28fb59788 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 22:27:34 +0800 Subject: [PATCH 51/57] Update qqread.js --- Task/qqread.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Task/qqread.js b/Task/qqread.js index 16213ff..4f5c455 100644 --- a/Task/qqread.js +++ b/Task/qqread.js @@ -143,7 +143,7 @@ if (isGetCookie) { GetCookie() } else { !(async () => { - await getNodeCookie(); + // await getNodeCookie(); await QQ_READ(); // await all(); })() @@ -185,15 +185,15 @@ async function QQ_READ() { qqreadbodyVal = QQ_READ_COOKIES[i]['qqreadbodyVal']; qqreadtimeurlVal = QQ_READ_COOKIES[i]['qqreadtimeurlVal']; qqreadtimeheaderVal = QQ_READ_COOKIES[i]['qqreadtimeheaderVal']; - await $.wait(5000) + await qqreadinfo();//用户名 - await $.wait(5000) + await qqreadwktime();//周时长查询 - await $.wait(5000) + await qqreadconfig();//时长查询 - await $.wait(5000) + await qqreadtrack(); - await $.wait(5000) + await qqreadtask();//任务列表 if (config.data.pageParams.todayReadSeconds / 3600 <= maxtime) { await qqreadtime();// 上传时长 From 73aab71293c055b99475db38b059b89b59f11367 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 22:32:05 +0800 Subject: [PATCH 52/57] Update qqread.js --- Task/qqread.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Task/qqread.js b/Task/qqread.js index 4f5c455..e94a4a5 100644 --- a/Task/qqread.js +++ b/Task/qqread.js @@ -143,7 +143,7 @@ if (isGetCookie) { GetCookie() } else { !(async () => { - // await getNodeCookie(); + await getNodeCookie(); await QQ_READ(); // await all(); })() @@ -235,7 +235,7 @@ async function QQ_READ() { await qqreadwithdraw(); } - await showmsg();//通知 + // await showmsg();//通知 } } function showmsg() { From 5cb7b6b02bd0bf822b243715dc85df8a827545aa Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 22:37:16 +0800 Subject: [PATCH 53/57] Update qqread.js --- Task/qqread.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Task/qqread.js b/Task/qqread.js index e94a4a5..234fff1 100644 --- a/Task/qqread.js +++ b/Task/qqread.js @@ -235,7 +235,7 @@ async function QQ_READ() { await qqreadwithdraw(); } - // await showmsg();//通知 + await showmsg();//通知 } } function showmsg() { @@ -323,7 +323,7 @@ function qqreadinfo() { timeout: 60000, }; $.get(toqqreadinfourl, (error, response, data) => { - if (logs) $.log(`${jsname}, 用户名: ${data}`); + //if (logs) $.log(`${jsname}, 用户名: ${data}`); let info = JSON.parse(data); kz += `\n========== 【${info.data.user.nickName}】 ==========\n`; tz += `\n========== 【${info.data.user.nickName}】 ==========\n`; From b5c8cbb63b58d75f5e2c67debe3e026cc43db3eb Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Thu, 17 Dec 2020 22:41:43 +0800 Subject: [PATCH 54/57] Update qqread.js --- Task/qqread.js | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/Task/qqread.js b/Task/qqread.js index 234fff1..9a95743 100644 --- a/Task/qqread.js +++ b/Task/qqread.js @@ -250,7 +250,7 @@ function qqreadwithdraw() { timeout: 60000, }; $.post(toqqreadwithdrawurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 提现: ${data}`); + // if (logs) $.log(`${jsname}, 提现: ${data}`); let withdraw = JSON.parse(data); if (withdraw.data.code == 0) tz += `【现金提现】:成功提现10元\n`; @@ -269,7 +269,7 @@ function qqreadtask() { timeout: 60000, }; $.get(toqqreadtaskurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 任务列表: ${data}`); + // if (logs) $.log(`${jsname}, 任务列表: ${data}`); task = JSON.parse(data); kz += `【现金余额】:${(task.data.user.amount / 10000).toFixed(2)}元\n` + @@ -305,7 +305,7 @@ function qqreadtrack() { timeout: 60000, }; $.post(toqqreadtrackurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 更新: ${data}`); + // if (logs) $.log(`${jsname}, 更新: ${data}`); let track = JSON.parse(data); tz += `【数据更新】:更新${track.msg}\n`; resolve(); @@ -342,7 +342,7 @@ function qqreadtake() { timeout: 60000, }; $.post(toqqreadtakeurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅豆签到: ${data}`); + // if (logs) $.log(`${jsname}, 阅豆签到: ${data}`); let take = JSON.parse(data); if (take.data.takeTicket > 0) { tz += `【阅豆签到】:获得${take.data.takeTicket}豆\n`; @@ -362,7 +362,7 @@ function qqreadconfig() { headers: JSON.parse(qqreadtimeheaderVal), }; $.get(toqqreadconfigurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅读时长查询: ${data}`); + // if (logs) $.log(`${jsname}, 阅读时长查询: ${data}`); config = JSON.parse(data); if (config.code == 0) tz += `【时长查询】:今日阅读${( @@ -382,7 +382,7 @@ function qqreadtime() { headers: JSON.parse(qqreadtimeheaderVal), }; $.get(toqqreadtimeurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅读时长qqreadtime: ${data}`); + // if (logs) $.log(`${jsname}, 阅读时长qqreadtime: ${data}`); let time = JSON.parse(data); if (time.code == 0) tz += `【阅读时长】:上传${TIME / 6}分钟\n`; @@ -401,7 +401,7 @@ function qqreadssr1() { }; if (config.data && config.data.pageParams.todayReadSeconds / 60 >= 1) { $.get(toqqreadssr1url, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币奖励1: ${data}`); + // if (logs) $.log(`${jsname}, 金币奖励1: ${data}`); let ssr1 = JSON.parse(data); if (ssr1.data.amount > 0) tz += `【阅读金币1】获得${ssr1.data.amount}金币\n`; @@ -421,7 +421,7 @@ function qqreadssr2() { }; if (config.data && config.data.pageParams.todayReadSeconds / 60 >= 5) { $.get(toqqreadssr2url, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币奖励2: ${data}`); + // if (logs) $.log(`${jsname}, 金币奖励2: ${data}`); ssr2 = JSON.parse(data); if (ssr2.data.amount > 0) tz += `【阅读金币2】获得${ssr2.data.amount}金币\n`; @@ -443,7 +443,7 @@ function qqreadssr3() { }; if (config.data && config.data.pageParams.todayReadSeconds / 60 >= 30) { $.get(toqqreadssr3url, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币奖励3: ${data}`); + // if (logs) $.log(`${jsname}, 金币奖励3: ${data}`); let ssr3 = JSON.parse(data); if (ssr3.data.amount > 0) tz += `【阅读金币3】获得${ssr3.data.amount}金币\n`; @@ -464,7 +464,7 @@ function qqreadsign() { timeout: 60000, }; $.get(toqqreadsignurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币签到: ${data}`); + // if (logs) $.log(`${jsname}, 金币签到: ${data}`); sign = JSON.parse(data); if (sign.data.videoDoneFlag) { tz += `【金币签到】:获得${sign.data.todayAmount}金币\n`; @@ -484,7 +484,7 @@ function qqreadsign2() { timeout: 60000, }; $.get(toqqreadsign2url, (error, response, data) => { - if (logs) $.log(`${jsname}, 金币签到翻倍: ${data}`); + // if (logs) $.log(`${jsname}, 金币签到翻倍: ${data}`); let sign2 = JSON.parse(data); if (sign2.code == 0) { tz += `【签到翻倍】:获得${sign2.data.amount}金币\n`; @@ -505,7 +505,7 @@ function qqreaddayread() { timeout: 60000, }; $.get(toqqreaddayreadurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 每日阅读: ${data}`); + // if (logs) $.log(`${jsname}, 每日阅读: ${data}`); let dayread = JSON.parse(data); if (dayread.code == 0) { tz += `【每日阅读】:获得${dayread.data.amount}金币\n`; @@ -525,7 +525,7 @@ function qqreadvideo() { timeout: 60000, }; $.get(toqqreadvideourl, (error, response, data) => { - if (logs) $.log(`${jsname}, 视频奖励: ${data}`); + // if (logs) $.log(`${jsname}, 视频奖励: ${data}`); let video = JSON.parse(data); if (video.code == 0) { tz += `【视频奖励】:获得${video.data.amount}金币\n`; @@ -545,7 +545,7 @@ function qqreadbox() { timeout: 60000, }; $.get(toqqreadboxurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 宝箱奖励: ${data}`); + // if (logs) $.log(`${jsname}, 宝箱奖励: ${data}`); let box = JSON.parse(data); if (box.data.count >= 0) { tz += `【宝箱奖励${box.data.count}】:获得${box.data.amount}金币\n`; @@ -567,7 +567,7 @@ function qqreadbox2() { timeout: 60000, }; $.get(toqqreadbox2url, (error, response, data) => { - if (logs) $.log(`${jsname}, 宝箱奖励翻倍: ${data}`); + // if (logs) $.log(`${jsname}, 宝箱奖励翻倍: ${data}`); let box2 = JSON.parse(data); if (box2.code == 0) { tz += `【宝箱翻倍】:获得${box2.data.amount}金币\n`; @@ -586,7 +586,7 @@ function qqreadwktime() { headers: JSON.parse(qqreadtimeheaderVal), }; $.get(toqqreadwktimeurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅读时长: ${data}`); + // if (logs) $.log(`${jsname}, 阅读时长: ${data}`); wktime = JSON.parse(data); if (wktime.code == 0) tz += `【本周阅读时长】:${wktime.data.readTime}分钟\n`; @@ -605,7 +605,7 @@ function qqreadpick() { }; if (wktime.data.readTime >= wktimess && wktime.data.readTime <= 1250) { $.get(toqqreadpickurl, (error, response, data) => { - if (logs) $.log(`${jsname},周阅读时长奖励任务: ${data}`); + // if (logs) $.log(`${jsname},周阅读时长奖励任务: ${data}`); let pick = JSON.parse(data); if (pick.data[7].isPick == true) tz += "【周时长奖励】:已全部领取\n"; @@ -628,7 +628,7 @@ function qqreadpick() { timeout: 60000, }; $.get(toqqreadPackageurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 领周阅读时长: ${data}`); + // if (logs) $.log(`${jsname}, 领周阅读时长: ${data}`); Package = JSON.parse(data); if (Package.code == 0) tz += `【周时长奖励${i + 1}】:领取${Packageid[i]}阅豆\n`; From 9ee248653960f14ce4918b4fc9bec3a0c8fe70a5 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Sun, 27 Dec 2020 00:09:59 +0800 Subject: [PATCH 55/57] Update qqread.js --- Task/qqread.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Task/qqread.js b/Task/qqread.js index 9a95743..8ce6c91 100644 --- a/Task/qqread.js +++ b/Task/qqread.js @@ -231,9 +231,7 @@ async function QQ_READ() { await $.wait(5000) await qqreadssr3();//阅读金币3 } - if (task.data.user.amount >= 100000) { - await qqreadwithdraw(); - } + await showmsg();//通知 } From c5540c3fc40aeceb6edf31debc09423b65458787 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Tue, 29 Dec 2020 16:40:18 +0800 Subject: [PATCH 56/57] Update qqread.js --- Task/qqread.js | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/Task/qqread.js b/Task/qqread.js index 8ce6c91..64b9e1e 100644 --- a/Task/qqread.js +++ b/Task/qqread.js @@ -182,6 +182,8 @@ async function QQ_READ() { $.log(`账号${i + 1}暂未提供脚本执行所需的cookie`); continue } + nowTimes = new Date(new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000); + daytime= new Date(new Date().toLocaleDateString()).getTime()- 8 * 60 * 60 * 1000; qqreadbodyVal = QQ_READ_COOKIES[i]['qqreadbodyVal']; qqreadtimeurlVal = QQ_READ_COOKIES[i]['qqreadtimeurlVal']; qqreadtimeheaderVal = QQ_READ_COOKIES[i]['qqreadtimeheaderVal']; @@ -232,13 +234,45 @@ async function QQ_READ() { await qqreadssr3();//阅读金币3 } - + await qqreadtrans();//今日收益累计 await showmsg();//通知 } } function showmsg() { $.msg(jsname, "", tz); // 宝箱每15次通知一次 } + + +// 金币统计 +function qqreadtrans() { + return new Promise((resolve, reject) => { +for(var y=1;y<9;y++){ + let day=0; + const toqqreadtransurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/trans/list?pn="+y, + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadtransurl, (error, response, data) => { + if (logs) $.log(`${O}, 今日收益: ${data}`); + trans = JSON.parse(data); + for(var i=0;i<20;i++){ +if(trans.data.list[i].createTime>=daytime) + day+=trans.data.list[i].amount; + } +tz+="【今日收益】:获得"+day+'\n' +kz+="【今日收益】:获得"+day+'\n' +resolve(); + }); + } + + }); +} + + + + + //提现 function qqreadwithdraw() { return new Promise((resolve, reject) => { From 961e3fed01eab323494b8a4916de48ff7866be51 Mon Sep 17 00:00:00 2001 From: lxmd02 <76054781+lxmd02@users.noreply.github.com> Date: Tue, 29 Dec 2020 16:43:05 +0800 Subject: [PATCH 57/57] Update qqread.js --- Task/qqread.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Task/qqread.js b/Task/qqread.js index 64b9e1e..52c7512 100644 --- a/Task/qqread.js +++ b/Task/qqread.js @@ -182,8 +182,7 @@ async function QQ_READ() { $.log(`账号${i + 1}暂未提供脚本执行所需的cookie`); continue } - nowTimes = new Date(new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000); - daytime= new Date(new Date().toLocaleDateString()).getTime()- 8 * 60 * 60 * 1000; + qqreadbodyVal = QQ_READ_COOKIES[i]['qqreadbodyVal']; qqreadtimeurlVal = QQ_READ_COOKIES[i]['qqreadtimeurlVal']; qqreadtimeheaderVal = QQ_READ_COOKIES[i]['qqreadtimeheaderVal']; @@ -234,7 +233,7 @@ async function QQ_READ() { await qqreadssr3();//阅读金币3 } - await qqreadtrans();//今日收益累计 + // await qqreadtrans();//今日收益累计 await showmsg();//通知 } }