From 2e9a9c7d8ff42780686a168b9e83246dedcfb808 Mon Sep 17 00:00:00 2001 From: Akira-Work Date: Fri, 13 Nov 2020 13:24:17 +0800 Subject: [PATCH 001/290] =?UTF-8?q?=E6=97=A5=E5=BF=97=E8=BE=93=E5=87=BA?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E9=85=8D=E7=BD=AE=20|ts=20=20=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE=E5=86=99=E9=94=99=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/Readme.md | 7 ++++-- docker/crontab_list_ts.sh | 46 +++++++++++++++++++-------------------- 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/docker/Readme.md b/docker/Readme.md index 0e4681f..8e7c709 100644 --- a/docker/Readme.md +++ b/docker/Readme.md @@ -76,9 +76,10 @@ jd_scripts: git -C /scripts/ pull node ``` -- `jd_scripts/my_crontab_list.sh` 参考内容如下(输出日志的最后加上 `|ts` 可在日志每一行前面显示时间): +- `jd_scripts/my_crontab_list.sh` 参考内容如下: + ```shell -0 */1 * * * git -C /scripts/ pull >> /scripts/logs/pull.log 2>&1|ts +0 */1 * * * git -C /scripts/ pull |ts >> /scripts/logs/pull.log 2>&1 2 0 * * * node /scripts/jd_bean_sign.js >> /scripts/logs/jd_bean_sign.log 2>&1 2 0 * * * node /scripts/jd_blueCoin.js >> /scripts/logs/jd_blueCoin.log 2>&1 2 0 * * * node /scripts/jd_club_lottery.js >> /scripts/logs/jd_club_lottery.log 2>&1 @@ -95,6 +96,8 @@ jd_scripts: 15 * * * * node /scripts/jd_superMarket.js >> /scripts/logs/jd_superMarket.log 2>&1 55 23 * * * node /scripts/jd_unsubscribe.js >> /scripts/logs/jd_unsubscribe.log 2>&1 ``` +> 定时任务命之后,也就是 `>>` 符号之前加上 `|ts` 可在日志每一行前面显示时间,如下图: +> ![image](https://user-images.githubusercontent.com/6993269/99031839-09e04b00-25b3-11eb-8e47-0b6515a282bb.png) - 目录文件配置好之后在 `jd_scripts`目录执行 `docker-compose up -d` 启动; `docker-compose logs` 打印日志; diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index 1d0f210..ba02c1e 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -1,6 +1,6 @@ -0 */1 * * * git -C /scripts/ pull >> /scripts/logs/pull.log 2>&1|ts +0 */1 * * * git -C /scripts/ pull |ts >> /scripts/logs/pull.log 2>&1 2 */1 * * * crontab /scripts/docker/${CRONTAB_LIST_FILE} -3 */1 * * * npm install --prefix /scripts >> /scripts/logs/npm_install.log 2>&1|ts +3 */1 * * * npm install --prefix /scripts |ts >> /scripts/logs/npm_install.log 2>&1 # 每3天的23:50分清理一次日志 50 23 */3 * * rm -rf /scripts/logs/*.log @@ -12,44 +12,44 @@ ##############长期活动############## # 签到 -0 0,12,18 * * * node /scripts/jd_bean_sign.js >> /scripts/logs/jd_bean_sign.log 2>&1|ts +0 0,12,18 * * * node /scripts/jd_bean_sign.js |ts >> /scripts/logs/jd_bean_sign.log 2>&1 # 京小超兑换奖品 -0 0 * * * node /scripts/jd_blueCoin.js >> /scripts/logs/jd_blueCoin.log 2>&1|ts +0 0 * * * node /scripts/jd_blueCoin.js |ts >> /scripts/logs/jd_blueCoin.log 2>&1 # 摇京豆 -0 0 * * * node /scripts/jd_club_lottery.js >> /scripts/logs/jd_club_lottery.log 2>&1|ts +0 0 * * * node /scripts/jd_club_lottery.js |ts >> /scripts/logs/jd_club_lottery.log 2>&1 # 东东农场 -5 6-18/6 * * * node /scripts/jd_fruit.js >> /scripts/logs/jd_fruit.log 2>&1|ts +5 6-18/6 * * * node /scripts/jd_fruit.js |ts >> /scripts/logs/jd_fruit.log 2>&1 # 宠汪汪 -15 */2 * * * node /scripts/jd_joy.js >> /scripts/logs/jd_joy.log 2>&1|ts +15 */2 * * * node /scripts/jd_joy.js |ts >> /scripts/logs/jd_joy.log 2>&1 # 宠汪汪喂食 -15 */1 * * * node /scripts/jd_joy_feedPets.js >> /scripts/logs/jd_joy_feedPets.log 2>&1|ts +15 */1 * * * node /scripts/jd_joy_feedPets.js |ts >> /scripts/logs/jd_joy_feedPets.log 2>&1 # 宠汪汪积分兑换奖品 -0 0-16/8 * * * node /scripts/jd_joy_reward.js >> /scripts/logs/jd_joy_reward.log 2>&1|ts +0 0-16/8 * * * node /scripts/jd_joy_reward.js |ts >> /scripts/logs/jd_joy_reward.log 2>&1 # 宠汪汪偷好友积分与狗粮 -0 0,6 * * * node /scripts/jd_joy_steal.js >> /scripts/logs/jd_joy_steal.log 2>&1|ts +0 0,6 * * * node /scripts/jd_joy_steal.js |ts >> /scripts/logs/jd_joy_steal.log 2>&1 # 摇钱树 -0 */2 * * * node /scripts/jd_moneyTree.js >> /scripts/logs/jd_moneyTree.log 2>&1|ts +0 */2 * * * node /scripts/jd_moneyTree.js |ts >> /scripts/logs/jd_moneyTree.log 2>&1 # 东东萌宠 -5 6-18/6 * * * node /scripts/jd_pet.js >> /scripts/logs/jd_pet.log 2>&1|ts +5 6-18/6 * * * node /scripts/jd_pet.js |ts >> /scripts/logs/jd_pet.log 2>&1 # 京东种豆得豆 -0 7-22/1 * * * node /scripts/jd_plantBean.js >> /scripts/logs/jd_plantBean.log 2>&1|ts +0 7-22/1 * * * node /scripts/jd_plantBean.js |ts >> /scripts/logs/jd_plantBean.log 2>&1 # 京东全民开红包 -1 1 * * * node /scripts/jd_redPacket.js >> /scripts/logs/jd_redPacket.log 2>&1|ts +1 1 * * * node /scripts/jd_redPacket.js |ts >> /scripts/logs/jd_redPacket.log 2>&1 # 进店领豆 -10 0 * * * node /scripts/jd_shop.js >> /scripts/logs/jd_shop.log 2>&1|ts +10 0 * * * node /scripts/jd_shop.js |ts >> /scripts/logs/jd_shop.log 2>&1 # 京东天天加速 -8 */3 * * * node /scripts/jd_speed.js >> /scripts/logs/jd_speed.log 2>&1|ts +8 */3 * * * node /scripts/jd_speed.js |ts >> /scripts/logs/jd_speed.log 2>&1 # 东东超市 -11 1-23/5 * * * node /scripts/jd_superMarket.js >> /scripts/logs/jd_superMarket.log 2>&1|ts +11 1-23/5 * * * node /scripts/jd_superMarket.js |ts >> /scripts/logs/jd_superMarket.log 2>&1 # 取关京东店铺商品 -55 23 * * * node /scripts/jd_unsubscribe.js >> /scripts/logs/jd_unsubscribe.log 2>&1|ts +55 23 * * * node /scripts/jd_unsubscribe.js |ts >> /scripts/logs/jd_unsubscribe.log 2>&1 # 京豆变动通知 -0 2 * * * node /scripts/jd_bean_change.js >> /scripts/logs/jd_bean_change.log 2>&1|ts +0 2 * * * node /scripts/jd_bean_change.js |ts >> /scripts/logs/jd_bean_change.log 2>&1 # 京东抽奖机 -11 1 * * * node /scripts/jd_lotteryMachine.js >> /scripts/logs/jd_lotteryMachine.log 2>&1|ts +11 1 * * * node /scripts/jd_lotteryMachine.js |ts >> /scripts/logs/jd_lotteryMachine.log 2>&1 # 京东排行榜 -11 9 * * * node /scripts/jd_rankingList.js >> /scripts/logs/jd_rankingList.log 2>&1|ts +11 9 * * * node /scripts/jd_rankingList.js |ts >> /scripts/logs/jd_rankingList.log 2>&1 # 天天提鹅 -18 */3 * * * node /scripts/jd_daily_egg.js >> /scripts/logs/jd_daily_egg.log 2>&1|ts +18 */3 * * * node /scripts/jd_daily_egg.js |ts >> /scripts/logs/jd_daily_egg.log 2>&1 # 金融养猪 -12 13 * * * node /scripts/jd_pigPet.js >> /scripts/logs/jd_pigPet.log 2>&1|ts +12 13 * * * node /scripts/jd_pigPet.js |ts >> /scripts/logs/jd_pigPet.log 2>&1 From f53c7687d564b3bc791b12dd0841641a75c62534 Mon Sep 17 00:00:00 2001 From: Tinafang Date: Fri, 13 Nov 2020 18:45:18 +0800 Subject: [PATCH 002/290] Create serverless.yml --- serverless.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 serverless.yml diff --git a/serverless.yml b/serverless.yml new file mode 100644 index 0000000..69c157e --- /dev/null +++ b/serverless.yml @@ -0,0 +1,24 @@ +# serverless.yml + +#组件信息 +component: scf # (必选) 组件名称,在该实例中为scf +name: jdscript # (必选) 组件实例名称。 + +#组件参数配置 +inputs: + name: scf-${name} # 云函数名称,默认为 ${name}-${stage}-${app} + enableRoleAuth: true # 默认会尝试创建 SCF_QcsRole 角色,如果不需要配置成 false 即可 + src: ./ + handler: index.main_handler #入口 + runtime: Nodejs12.16 # 运行环境 默认 Nodejs10.15 + region: ap-guangzhou # 函数所在区域 + description: This is a function in ${app} application. + memorySize: 64 # 内存大小,单位MB + timeout: 900 # 超时时间,单位秒 + events: # 触发器 + - timer: # 定时触发器 + parameters: + # name: timer # 触发器名称,默认timer-${name}-${stage} + cronExpression: "0 0 0 */1 * * *" # 每天零点执行一次 + enable: true + argument: argument # 额外的参数 From 5ed9b307e13f065a011f232ea29a254c5db3df02 Mon Sep 17 00:00:00 2001 From: Tinafang Date: Fri, 13 Nov 2020 18:45:40 +0800 Subject: [PATCH 003/290] Create index.js --- index.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 index.js diff --git a/index.js b/index.js new file mode 100644 index 0000000..82e1aed --- /dev/null +++ b/index.js @@ -0,0 +1,5 @@ +'use strict'; +exports.main_handler = async (event, context, callback) => { + require('./jd_xtg.js') //这里写你想要的脚本 + require('./jd_fruit.js') //这里写你想要的脚本 +} From 957676c48366f6b8a28dfdbcb7c0ca5d1404fcab Mon Sep 17 00:00:00 2001 From: Tinafang Date: Fri, 13 Nov 2020 18:46:13 +0800 Subject: [PATCH 004/290] Create tencentscf.md --- tencentscf.md | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 tencentscf.md diff --git a/tencentscf.md b/tencentscf.md new file mode 100644 index 0000000..642a636 --- /dev/null +++ b/tencentscf.md @@ -0,0 +1,95 @@ + +# 云函数快速部署京东脚本 + +## 1. 安装 Node.js 环境 + +Node.js 环境 [下载地址](https://nodejs.org/zh-tw/download/ ) ,根据自己的操作系统下载和安装。 + +## 2. 下载代码 + +点击红框处下载压缩包 +![下载代码](https://imgbed-bucket-1251971143.cos.ap-guangzhou.myqcloud.com/./1605262233829-download.png) + +## 3. 安装依赖,配置 cookie + +### 3.1 安装依赖 + +压缩包解压后进入项目文件夹 + +- Windows 用户按住 **shift** 点击右键,点击 **在此处打开命令窗口** +- Mac 用户通过终端,自行进入该文件夹 + +在命令行内输入 `npm i `,等待运行完成。 + +此时,项目文件夹内会多出一个 `node_modules`文件夹 + +### 3.2 配置 cookie + +打开项目文件内的 `jdCookie.js` + +在最上面的 `CookieJDs`里写入 cookie ,多个账号以逗号分隔 + +例如 + +```javascript +let CookieJDs = [ + 'pt_key=xxx;pt_pin=xxx;', + 'pt_key=zzz;pt_pin=zzz;', + 'pt_key=aaa;pt_pin=xxxaaa' +] +``` + +> 注:获取京东 cookie 教程参考 [浏览器获取京东cookie教程](https://github.com/lxk0301/jd_scripts/blob/master/backUp/GetJdCookie.md) , [插件获取京东cookie教程](https://github.com/lxk0301/jd_scripts/blob/master/backUp/GetJdCookie2.md) + + +## 4. 部署到云函数 + +### 4.1 开通服务 + +依次登录 [SCF 云函数控制台](https://console.cloud.tencent.com/scf) 和 [SLS 控制台](https://console.cloud.tencent.com/sls) 开通相关服务,确保账户下已开通服务并创建相应[服务角色](https://console.cloud.tencent.com/cam/role) **SCF_QcsRole、SLS_QcsRole** + +> 注意!为了确保权限足够,获取这两个参数时不要使用子账户!此外,腾讯云账户需要[实名认证](https://console.cloud.tencent.com/developer/auth)。 + +### 4.2 工具部署 + +下载 Serverless 工具,快速部署函数 +``` +npm install -g serverless +``` + +执行部署命令 +``` +serverless deploy +``` + +如果已经配置了永久秘钥,则可以直接部署,如果没有,可以直接微信扫码登录腾讯云,并且授权部署。 + +过几秒后,查看输出,可以看到函数和定时触发器都已经配置完成。 +``` +serverless ⚡framework +Action: "deploy" - Stage: "dev" - App: "jdscript" - Instance: "jdscript" + +functionName: scf-jdscript +description: This is a function in jdscript application. +namespace: default +runtime: Nodejs12.16 +handler: index.main_handler +memorySize: 64 +lastVersion: $LATEST +traffic: 1 +triggers: + timer: + - timer-jdscript-dev + +36s › jdscript › Success +``` + +## 5. 查看和测试 + +登录后,在 [腾讯云函数地址](https://console.cloud.tencent.com/scf/index) 点击管理控制台,查看最新部署的函数。 + +在左侧栏的日志查询中,可以查看到触发的日志,包括是否打卡成功等。 + +![测试函数](https://imgbed-bucket-1251971143.cos.ap-guangzhou.myqcloud.com/./1605263963294-test.png) + +> 如果需要配置永久秘钥,则可以在[访问秘钥页面](https://console.cloud.tencent.com/cam/capi)获取账号的 TENCENT_SECRET_ID,TENCENT_SECRET_KEY,并配置在代码根目录 .env 文件中。 From 6c1983eebdb7178f82eee0404668efc84255c854 Mon Sep 17 00:00:00 2001 From: EvineDeng Date: Fri, 13 Nov 2020 22:50:07 +0800 Subject: [PATCH 005/290] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AE=89=E5=8D=93?= =?UTF-8?q?=E5=92=8CMacOS=E8=BF=90=E8=A1=8C=E8=84=9A=E6=9C=AC=E7=9A=84?= =?UTF-8?q?=E6=95=99=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ab39d7b..92ab6d8 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,13 @@ ### 方法一:本地安装Node.js,下载本库脚本 - - 教程请见:[EvineDeng/jd-base](https://github.com/EvineDeng/jd-base) + - 教程请见:[EvineDeng/jd-base](https://github.com/EvineDeng/jd-base),适用于以下系统: + + 1. Armbian/OpenWrt/Debian/Ubuntu/CentOS/Fedora/RedHat等Linux系统 + + 2. Android + + 3. MacOS ### 方法二:云服务器、腾讯云函数等等 @@ -65,7 +71,7 @@ ### 方法三:Docker(NAS或VPS用户) - - 可以精确控制任务运行时间,有三种办法:[docker办法一](https://github.com/lxk0301/jd_scripts/tree/master/docker)、[docker办法二(和本地安装Node.js有点类似)](https://github.com/EvineDeng/jd-base)、[docker办法三](https://github.com/chinnkarahoi/jd-scripts-docker) + - 可以精确控制任务运行时间,有三种办法:[docker办法一](https://github.com/lxk0301/jd_scripts/tree/master/docker)、[docker办法二(和本地安装Node.js类似)](https://github.com/EvineDeng/jd-base)、[docker办法三](https://github.com/chinnkarahoi/jd-scripts-docker) - [环境变量](https://github.com/lxk0301/jd_scripts/blob/master/githubAction.md#%E4%B8%8B%E6%96%B9%E6%8F%90%E4%BE%9B%E4%BD%BF%E7%94%A8%E5%88%B0%E7%9A%84-secrets%E5%85%A8%E9%9B%86%E5%90%88) #### 注:以上三种运行机制都是Node.js,故您需仔细阅读下面几点 From 633e41a37ce995697d820049229429bc36bcd38d Mon Sep 17 00:00:00 2001 From: deepdark111 <67956668+deepdark111@users.noreply.github.com> Date: Sun, 15 Nov 2020 15:18:02 +0800 Subject: [PATCH 006/290] Update crontab_list_ts.sh MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复养猪cron时间 --- docker/crontab_list_ts.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index ba02c1e..7ffb506 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -52,4 +52,4 @@ # 天天提鹅 18 */3 * * * node /scripts/jd_daily_egg.js |ts >> /scripts/logs/jd_daily_egg.log 2>&1 # 金融养猪 -12 13 * * * node /scripts/jd_pigPet.js |ts >> /scripts/logs/jd_pigPet.log 2>&1 +12 * * * * node /scripts/jd_pigPet.js |ts >> /scripts/logs/jd_pigPet.log 2>&1 From a6ef726f9696c14401f4d50f7912a541456253c7 Mon Sep 17 00:00:00 2001 From: Tinafang Date: Mon, 16 Nov 2020 11:35:38 +0800 Subject: [PATCH 007/290] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 92ab6d8..85ca379 100644 --- a/README.md +++ b/README.md @@ -65,8 +65,8 @@ ### 方法二:云服务器、腾讯云函数等等 - 需自行有云服务器,云函数等 - - - 腾云云函数使用 [教程说明](iCloud.md) + - 腾讯云云函数 [快速部署教程](tencentscf.md)(免费) + - 腾讯云云函数控制台使用 [教程说明](iCloud.md) ### 方法三:Docker(NAS或VPS用户) From 84a58effc3bfa2ff07e846bcc4a63ec0d95e72cc Mon Sep 17 00:00:00 2001 From: Tinafang Date: Mon, 16 Nov 2020 11:38:00 +0800 Subject: [PATCH 008/290] Update tencentscf.md --- tencentscf.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tencentscf.md b/tencentscf.md index 642a636..49b1858 100644 --- a/tencentscf.md +++ b/tencentscf.md @@ -3,12 +3,12 @@ ## 1. 安装 Node.js 环境 -Node.js 环境 [下载地址](https://nodejs.org/zh-tw/download/ ) ,根据自己的操作系统下载和安装。 +Node.js 环境 [下载地址](https://nodejs.org/zh-tw/download/) ,根据自己的操作系统下载和安装。 ## 2. 下载代码 点击红框处下载压缩包 -![下载代码](https://imgbed-bucket-1251971143.cos.ap-guangzhou.myqcloud.com/./1605262233829-download.png) +![下载代码](https://imgbed-bucket-1251971143.cos.ap-guangzhou.myqcloud.com/1605497672397-zip.png) ## 3. 安装依赖,配置 cookie @@ -62,7 +62,7 @@ npm install -g serverless serverless deploy ``` -如果已经配置了永久秘钥,则可以直接部署,如果没有,可以直接微信扫码登录腾讯云,并且授权部署。 +如果已经配置了永久秘钥,则可以直接部署,如果没有,可以直接**微信扫码**登录腾讯云,并且授权部署。 过几秒后,查看输出,可以看到函数和定时触发器都已经配置完成。 ``` From 7400728523122d1556286e6b5863e42b1e9acfd7 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 16 Nov 2020 14:56:32 +0800 Subject: [PATCH 009/290] fix bug --- jd_superMarket.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jd_superMarket.js b/jd_superMarket.js index cbdb85e..f01bc3f 100644 --- a/jd_superMarket.js +++ b/jd_superMarket.js @@ -547,8 +547,8 @@ async function unlockProductByCategory(category) { //升级货架和商品 async function upgrade() { superMarketUpgrade = $.getdata('jdSuperMarketUpgrade') ? $.getdata('jdSuperMarketUpgrade') : superMarketUpgrade; - if ($.isNode() && process.env.jdSuperMarketUpgrade) { - superMarketUpgrade = process.env.jdSuperMarketUpgrade; + if ($.isNode() && process.env.SUPERMARKET_UPGRADE) { + superMarketUpgrade = process.env.SUPERMARKET_UPGRADE; } if (`${superMarketUpgrade}` === 'false') { console.log(`\n自动升级: 您设置的是关闭自动升级\n`); From d73c9ce39e24cd3340f14d8373191d45c30ae9b3 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 16 Nov 2020 16:38:36 +0800 Subject: [PATCH 010/290] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E9=A2=91=E7=8E=87=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jdPlantBeanShareCodes.js | 2 +- jd_moneyTree.js | 20 +++----------------- jd_plantBean.js | 2 +- lxk0301.boxjs.json | 7 ------- 4 files changed, 5 insertions(+), 26 deletions(-) diff --git a/jdPlantBeanShareCodes.js b/jdPlantBeanShareCodes.js index 356cc89..3894909 100644 --- a/jdPlantBeanShareCodes.js +++ b/jdPlantBeanShareCodes.js @@ -8,7 +8,7 @@ // 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例 // 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2 let PlantBeanShareCodes = [ - '66j4yt3ebl5ierjljoszp7e4izzbzaqhi5k2unz2afwlyqsgnasq@olmijoxgmjutyrsovl2xalt2tbtfmg6sqldcb3q@e7lhibzb3zek27amgsvywffxx7hxgtzstrk2lba',//账号一的好友shareCode,不同好友中间用@符号隔开 + '66j4yt3ebl5ierjljoszp7e4izzbzaqhi5k2unz2afwlyqsgnasq@olmijoxgmjutyrsovl2xalt2tbtfmg6sqldcb3q@e7lhibzb3zek27amgsvywffxx7hxgtzstrk2lba@olmijoxgmjutyx55upqaqxrblt7f3h26dgj2riy',//账号一的好友shareCode,不同好友中间用@符号隔开 '4npkonnsy7xi3p6pjfxg6ct5gll42gmvnz7zgoy@6dygkptofggtp6ffhbowku3xgu@mlrdw3aw26j3wgzjipsxgonaoyr2evrdsifsziy@mlrdw3aw26j3wgzjipsxgonaoyr2evrdsifsziy',//账号二的好友shareCode,不同好友中间用@符号隔开 ] // 判断github action里面是否有东东萌宠互助码 diff --git a/jd_moneyTree.js b/jd_moneyTree.js index 0cac275..843d25a 100644 --- a/jd_moneyTree.js +++ b/jd_moneyTree.js @@ -1,6 +1,6 @@ /* 京东摇钱树 :https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_moneyTree.js -更新时间:2020-11-07 +更新时间:2020-11-16 京东摇钱树支持京东双账号 注:如果使用Node.js, 需自行安装'crypto-js,got,http-server,tough-cookie'模块. 例: npm install crypto-js http-server tough-cookie got --save */ @@ -30,7 +30,6 @@ if ($.isNode()) { cookiesArr.push($.getdata('CookieJD2')); } -const Notice = $.getdata('jdMoneyTreeNoticeTimes') * 1 || 2;//设置运行多少次才通知。默认运行两次脚本通知,其他设置请在BoxJs进行设置 let jdNotify = true;//是否开启静默运行,默认true开启 const JD_API_HOST = 'https://ms.jr.jd.com/gw/generic/uc/h5/m'; let userInfo = null, taskInfo = [], message = '', subTitle = '', fruitTotal = 0; @@ -80,16 +79,10 @@ async function jd_moneyTree() { await stealFriendFruit() await msgControl(); - console.log(`运行脚本次数和设置的次数是否相等::${($.getdata($.treeMsgTime) * 1) === Notice}`); - jdNotify = $.getdata('jdMoneyTreeNotify') ? $.getdata('jdMoneyTreeNotify') : jdNotify; - console.log(`box订阅静默运行-是否打开::${jdNotify || jdNotify === 'true'}`); - console.log(`是否弹窗通知::${(($.getdata($.treeMsgTime) * 1) === Notice) && (!jdNotify || jdNotify === 'false')}`); $.log(`\n${message}\n`); if (!jdNotify || jdNotify === 'false') { - if (($.getdata($.treeMsgTime) * 1) === Notice) { - $.msg($.name, subTitle, message); - $.setdata('0', $.treeMsgTime); - } + $.msg($.name, subTitle, message); + $.setdata('0', $.treeMsgTime); } } function user_info() { @@ -121,13 +114,6 @@ function user_info() { if (userInfo.realName) { // console.log(`助力码sharePin为::${userInfo.sharePin}`); $.treeMsgTime = userInfo.sharePin; - if ($.getdata($.treeMsgTime)) { - if ($.getdata($.treeMsgTime) >= Notice) { - $.setdata('0', $.treeMsgTime); - } - } else { - $.setdata('0', $.treeMsgTime); - } subTitle = `【${userInfo.nick}】${userInfo.treeInfo.treeName}`; // message += `【我的金果数量】${userInfo.treeInfo.fruit}\n`; // message += `【我的金币数量】${userInfo.treeInfo.coin}\n`; diff --git a/jd_plantBean.js b/jd_plantBean.js index 917bbb2..b69b893 100644 --- a/jd_plantBean.js +++ b/jd_plantBean.js @@ -36,7 +36,7 @@ let shareCodes = [ // IOS本地脚本用户这个列表填入你要助力的好 //账号一的好友shareCode,不同好友的shareCode中间用@符号隔开 '66j4yt3ebl5ierjljoszp7e4izzbzaqhi5k2unz2afwlyqsgnasq@olmijoxgmjutyrsovl2xalt2tbtfmg6sqldcb3q@e7lhibzb3zek27amgsvywffxx7hxgtzstrk2lba@e7lhibzb3zek32e72n4xesxmgc2m76eju62zk3y', //账号二的好友shareCode,不同好友的shareCode中间用@符号隔开 - '4npkonnsy7xi3p6pjfxg6ct5gll42gmvnz7zgoy@6dygkptofggtp6ffhbowku3xgu@mlrdw3aw26j3wgzjipsxgonaoyr2evrdsifsziy', + 'olmijoxgmjutyx55upqaqxrblt7f3h26dgj2riy@4npkonnsy7xi3p6pjfxg6ct5gll42gmvnz7zgoy@6dygkptofggtp6ffhbowku3xgu@mlrdw3aw26j3wgzjipsxgonaoyr2evrdsifsziy', ] let currentRoundId = null;//本期活动id let lastRoundId = null;//上期id diff --git a/lxk0301.boxjs.json b/lxk0301.boxjs.json index a1ae6c0..e309512 100644 --- a/lxk0301.boxjs.json +++ b/lxk0301.boxjs.json @@ -540,13 +540,6 @@ "val": true, "type": "boolean", "desc": "运行京东摇钱树脚本时不发出系统弹窗通知" - }, - { - "id": "jdMoneyTreeNoticeTimes", - "name": "通知频率", - "val": 2, - "type": "number", - "desc": "脚本运行多少次后弹窗通知(默认2次,如果开启静默运行,此设置失效)" } ], "author": "@lxk0301", From 902b9978f153cd6d0709bb0ff47c294173e3dc22 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 16 Nov 2020 16:42:26 +0800 Subject: [PATCH 011/290] =?UTF-8?q?=E6=94=B9=E6=AD=A3=E5=AE=A0=E6=B1=AA?= =?UTF-8?q?=E6=B1=AA=E5=B0=8F=E7=A8=8B=E5=BA=8F=E8=8E=B7=E5=8F=96token?= =?UTF-8?q?=E7=9A=84=E9=A1=B6=E9=83=A8=E6=B3=A8=E9=87=8A=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Loon/lxk0301_LoonTask.conf | 10 ++++++---- jd_joy_help.js | 6 +++--- jd_joy_run.js | 14 +++++++------- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/Loon/lxk0301_LoonTask.conf b/Loon/lxk0301_LoonTask.conf index 678fa1f..4907c87 100644 --- a/Loon/lxk0301_LoonTask.conf +++ b/Loon/lxk0301_LoonTask.conf @@ -67,17 +67,19 @@ cron "20 * * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scrip cron "15 10 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, tag=宠汪汪邀请助力与赛跑助力 #宠汪汪助力更新Token -http-response ^https:\/\/draw\.jdfcloud\.com\/mirror\/\/api\/user\/addUser\?code=\w+& script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, requires-body=true, timeout=10, tag=宠汪汪助力更新Token +http-response ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/addUser\?code=\w+& script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, requires-body=true, timeout=10, tag=宠汪汪助力更新Token #宠汪汪助力获取Token -http-request ^https:\/\/draw\.jdfcloud\.com\/mirror\/\/api\/user\/user\/detail\?openId=\w+& script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, requires-body=true, timeout=10, tag=宠汪汪助力获取Token +http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/user\/detail\?openId=\w+& script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, requires-body=true, timeout=10, tag=宠汪汪助力获取Token # 宠汪汪强制为别人助力 -http-request ^https:\/\/draw\.jdfcloud\.com\/mirror\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com\/mirror\/\/pet\/helpFriend\?friendPin script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js, requires-body=true, timeout=10, tag=宠汪汪强制为别人助力 +http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com\/mirror\/\/pet\/helpFriend\?friendPin script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js, requires-body=true, timeout=10, tag=宠汪汪强制为别人助力 #聚宝盆投狗粮辅助(github@Zero-S1搬的) -http-response ^https:\/\/jdjoy\.jd\.com\/pet\/getPetTreasureBox|^https:\/\/draw\.jdfcloud\.com\/mirror\/\/pet\/getPetTreasureBox script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_petTreasureBox.js, requires-body=true, timeout=10, tag=聚宝盆投狗粮辅助 +http-response ^https:\/\/jdjoy\.jd\.com\/pet\/getPetTreasureBox|^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/getPetTreasureBox script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_petTreasureBox.js, requires-body=true, timeout=10, tag=聚宝盆投狗粮辅助 #小米运动 cron "25 17 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/xmSports.js, tag=小米运动 + +# 小米运动获取Token http-response ^https:\/\/account\.huami\.com\/v2\/client\/login script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/xmSports.js, requires-body=true, timeout=10, tag=小米运动获取Token \ No newline at end of file diff --git a/jd_joy_help.js b/jd_joy_help.js index b46c542..7fe8613 100644 --- a/jd_joy_help.js +++ b/jd_joy_help.js @@ -15,15 +15,15 @@ hostname = draw.jdfcloud.com ======================Surge===================== [Script] -宠汪汪强制为别人助力= type=http-request,pattern= ^https:\/\/draw\.jdfcloud\.com\/mirror\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com\/mirror\/\/pet\/helpFriend\?friendPin,requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js +宠汪汪强制为别人助力= type=http-request,pattern= ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com\/mirror\/\/pet\/helpFriend\?friendPin,requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js ===================圈x===================== [rewrite_local] -^https:\/\/draw\.jdfcloud\.com\/mirror\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com\/mirror\/\/pet\/helpFriend\?friendPin url script-request-header https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js +^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com\/mirror\/\/pet\/helpFriend\?friendPin url script-request-header https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js =====================LOON===================== [Script] -http-request ^https:\/\/draw\.jdfcloud\.com\/mirror\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com\/mirror\/\/pet\/helpFriend\?friendPin script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js, requires-body=true, timeout=10, tag=宠汪汪强制为别人助力 +http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com\/mirror\/\/pet\/helpFriend\?friendPin script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js, requires-body=true, timeout=10, tag=宠汪汪强制为别人助力 你也可从下面链接拿好友的friendPin(复制链接到有京东ck的浏览器打开即可) diff --git a/jd_joy_run.js b/jd_joy_run.js index afb2df7..6858d5f 100644 --- a/jd_joy_run.js +++ b/jd_joy_run.js @@ -1,6 +1,6 @@ /** 宠汪汪邀请助力与赛跑助力脚本,感谢github@Zero-S1提供帮助 - 更新时间:2020-11-12(宠汪汪助力更新Token的配置正则表达式已改) + 更新时间:2020-11-16(宠汪汪助力更新Token的配置正则表达式已改) token时效很短,几个小时就失效了,闲麻烦的放弃就行 每天拿到token后,可一次性运行完毕即可。 @@ -15,8 +15,8 @@ hostname = draw.jdfcloud.com Surge [Script] 宠汪汪邀请助力与赛跑助力 = type=cron,cronexp="15 10 * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js -宠汪汪助力更新Token = type=http-response,pattern=^https:\/\/draw\.jdfcloud\.com\/\/api\/user\/addUser\?code=, requires-body=1, max-size=0, script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js -宠汪汪助力获取Token = type=http-request,pattern=^https:\/\/draw\.jdfcloud\.com\/\/api\/user\/user\/detail\?openId=, requires-body=1, max-size=0, script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js +宠汪汪助力更新Token = type=http-response,pattern=^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/addUser\?code=, requires-body=1, max-size=0, script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js +宠汪汪助力获取Token = type=http-request,pattern=^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/user\/detail\?openId=, requires-body=1, max-size=0, script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js 圈X [task_local] @@ -24,15 +24,15 @@ Surge 15 10 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, tag=宠汪汪邀请助力与赛跑助力, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jdcww.png, enabled=true [rewrite_local] # 宠汪汪助力更新Token -^https:\/\/draw\.jdfcloud\.com\/\/api\/user\/addUser\?code= url script-response-body https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js +^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/addUser\?code= url script-response-body https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js # 宠汪汪助力获取Token -^https:\/\/draw\.jdfcloud\.com\/\/api\/user\/user\/detail\?openId= url script-request-header https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js +^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/user\/detail\?openId= url script-request-header https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js *****Loon**** [Script] cron "15 10 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, tag=宠汪汪邀请助力与赛跑助力 -http-response ^https:\/\/draw\.jdfcloud\.com\/\/api\/user\/addUser\?code= script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, requires-body=true, timeout=10, tag=宠汪汪助力更新Token -http-request ^https:\/\/draw\.jdfcloud\.com\/\/api\/user\/user\/detail\?openId= script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, requires-body=true, timeout=10, tag=宠汪汪助力获取Token +http-response ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/addUser\?code= script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, requires-body=true, timeout=10, tag=宠汪汪助力更新Token +http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/user\/detail\?openId= script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, requires-body=true, timeout=10, tag=宠汪汪助力获取Token **/ const isRequest = typeof $request != "undefined" const $ = new Env('来客有礼宠汪汪'); From 185d5b6ce0e73421ca8c7b39369491fcef8cfbb1 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 16 Nov 2020 16:57:10 +0800 Subject: [PATCH 012/290] =?UTF-8?q?=E4=BF=AE=E6=AD=A3loon=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=92=8Csurge=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Loon/lxk0301_LoonTask.conf | 8 ++++---- Surge/lxk0301_Task.sgmodule.sgmodule | 7 ++++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Loon/lxk0301_LoonTask.conf b/Loon/lxk0301_LoonTask.conf index 4907c87..8947fa1 100644 --- a/Loon/lxk0301_LoonTask.conf +++ b/Loon/lxk0301_LoonTask.conf @@ -66,6 +66,9 @@ cron "20 * * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scrip #宠汪汪邀请助力与赛跑助力 cron "15 10 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, tag=宠汪汪邀请助力与赛跑助力 +#小米运动 +cron "25 17 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/xmSports.js, tag=小米运动 + #宠汪汪助力更新Token http-response ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/addUser\?code=\w+& script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, requires-body=true, timeout=10, tag=宠汪汪助力更新Token @@ -73,13 +76,10 @@ http-response ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/addUser\?c http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/user\/detail\?openId=\w+& script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, requires-body=true, timeout=10, tag=宠汪汪助力获取Token # 宠汪汪强制为别人助力 -http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com\/mirror\/\/pet\/helpFriend\?friendPin script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js, requires-body=true, timeout=10, tag=宠汪汪强制为别人助力 +http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/helpFriend\?friendPin script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js, requires-body=true, timeout=10, tag=宠汪汪强制为别人助力 #聚宝盆投狗粮辅助(github@Zero-S1搬的) http-response ^https:\/\/jdjoy\.jd\.com\/pet\/getPetTreasureBox|^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/getPetTreasureBox script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_petTreasureBox.js, requires-body=true, timeout=10, tag=聚宝盆投狗粮辅助 -#小米运动 -cron "25 17 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/xmSports.js, tag=小米运动 - # 小米运动获取Token http-response ^https:\/\/account\.huami\.com\/v2\/client\/login script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/xmSports.js, requires-body=true, timeout=10, tag=小米运动获取Token \ No newline at end of file diff --git a/Surge/lxk0301_Task.sgmodule.sgmodule b/Surge/lxk0301_Task.sgmodule.sgmodule index 2f46768..d60bdb5 100644 --- a/Surge/lxk0301_Task.sgmodule.sgmodule +++ b/Surge/lxk0301_Task.sgmodule.sgmodule @@ -1,4 +1,4 @@ -#!name=lxk0301 iOS Tasks Module +#!name=lxk0301 iOS Tasks&Cookies Module #!desc=iOS Tasks 模块配置 #!system=ios @@ -31,3 +31,8 @@ cron "1 1 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_script cron "2 9 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_bean_change.js, timeout=650, wake-system=1, tag=京豆变动通知 # cron "20 * * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_collectProduceScore.js, wake-system=1, tag=京东全民营业领金币 +http-response ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/addUser\?code=\w+& script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, requires-body=1, tag=宠汪汪助力更新Token +http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/user\/detail\?openId=\w+& script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, requires-body=1, tag=宠汪汪助力获取Token +http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/helpFriend\?friendPin script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js, requires-body=1, tag=宠汪汪强制为别人助力 +http-response ^https:\/\/jdjoy\.jd\.com\/pet\/getPetTreasureBox|^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/getPetTreasureBox script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_petTreasureBox.js, requires-body=1, tag=聚宝盆投狗粮辅助 +http-response ^https:\/\/account\.huami\.com\/v2\/client\/login script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/xmSports.js, requires-body=1, tag=小米运动获取Token From b1dcc19b1b02ce6661aadfd995438bde416ba53c Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 16 Nov 2020 16:59:25 +0800 Subject: [PATCH 013/290] =?UTF-8?q?=E6=96=B0=E5=A2=9Esurge=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E9=87=8C=E9=9D=A2=E7=9A=84mitm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Surge/lxk0301_Task.sgmodule.sgmodule | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Surge/lxk0301_Task.sgmodule.sgmodule b/Surge/lxk0301_Task.sgmodule.sgmodule index d60bdb5..ff1c37e 100644 --- a/Surge/lxk0301_Task.sgmodule.sgmodule +++ b/Surge/lxk0301_Task.sgmodule.sgmodule @@ -36,3 +36,6 @@ http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/user\/detai http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/helpFriend\?friendPin script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js, requires-body=1, tag=宠汪汪强制为别人助力 http-response ^https:\/\/jdjoy\.jd\.com\/pet\/getPetTreasureBox|^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/getPetTreasureBox script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_petTreasureBox.js, requires-body=1, tag=聚宝盆投狗粮辅助 http-response ^https:\/\/account\.huami\.com\/v2\/client\/login script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/xmSports.js, requires-body=1, tag=小米运动获取Token +http-request https:\/\/m\.ximalaya\.com\/speed\/task-center\/account\/coin script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/xmly_speed_ccokie.js , requires-body=1, tag=喜马拉雅极速版Cookie +[MITM] +hostname = %APPEND% m.ximalaya.com, api.m.jd.com, draw.jdfcloud.com, jdjoy.jd.com From 268766c0134581469c5b6ba868944c9924b6dd49 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 16 Nov 2020 17:17:35 +0800 Subject: [PATCH 014/290] =?UTF-8?q?=E6=9B=B4=E6=96=B0Loon=E8=AE=A2?= =?UTF-8?q?=E9=98=85=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Loon/lxk0301_LoonTask.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Loon/lxk0301_LoonTask.conf b/Loon/lxk0301_LoonTask.conf index 8947fa1..0129059 100644 --- a/Loon/lxk0301_LoonTask.conf +++ b/Loon/lxk0301_LoonTask.conf @@ -70,10 +70,10 @@ cron "15 10 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scri cron "25 17 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/xmSports.js, tag=小米运动 #宠汪汪助力更新Token -http-response ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/addUser\?code=\w+& script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, requires-body=true, timeout=10, tag=宠汪汪助力更新Token +http-response ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/addUser\?code= script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, requires-body=true, timeout=10, tag=宠汪汪助力更新Token #宠汪汪助力获取Token -http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/user\/detail\?openId=\w+& script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, requires-body=true, timeout=10, tag=宠汪汪助力获取Token +http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/user\/detail\?openId= script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, requires-body=true, timeout=10, tag=宠汪汪助力获取Token # 宠汪汪强制为别人助力 http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/helpFriend\?friendPin script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js, requires-body=true, timeout=10, tag=宠汪汪强制为别人助力 From d05405f5db18babaf5fe7c9247a8c45b0822d1b2 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 16 Nov 2020 17:26:23 +0800 Subject: [PATCH 015/290] update --- jd_joy_run.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/jd_joy_run.js b/jd_joy_run.js index 6858d5f..7d1fe41 100644 --- a/jd_joy_run.js +++ b/jd_joy_run.js @@ -133,6 +133,8 @@ function getToken() { // $.done({ body: JSON.stringify(body) }) $.done({ url: url }) } + } else { + $.done({}) } } async function main() { From 1f4d19fb82f418dfc673403a0d34d2d034406041 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 16 Nov 2020 17:47:32 +0800 Subject: [PATCH 016/290] update --- Surge/lxk0301_Task.sgmodule.sgmodule | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Surge/lxk0301_Task.sgmodule.sgmodule b/Surge/lxk0301_Task.sgmodule.sgmodule index ff1c37e..15a7c19 100644 --- a/Surge/lxk0301_Task.sgmodule.sgmodule +++ b/Surge/lxk0301_Task.sgmodule.sgmodule @@ -30,12 +30,3 @@ cron "1 1 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_script # cron "0 0 0 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_xtg.js, timeout=550, wake-system=1, tag=京东星推官 cron "2 9 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_bean_change.js, timeout=650, wake-system=1, tag=京豆变动通知 # cron "20 * * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_collectProduceScore.js, wake-system=1, tag=京东全民营业领金币 - -http-response ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/addUser\?code=\w+& script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, requires-body=1, tag=宠汪汪助力更新Token -http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/user\/detail\?openId=\w+& script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, requires-body=1, tag=宠汪汪助力获取Token -http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/helpFriend\?friendPin script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js, requires-body=1, tag=宠汪汪强制为别人助力 -http-response ^https:\/\/jdjoy\.jd\.com\/pet\/getPetTreasureBox|^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/getPetTreasureBox script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_petTreasureBox.js, requires-body=1, tag=聚宝盆投狗粮辅助 -http-response ^https:\/\/account\.huami\.com\/v2\/client\/login script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/xmSports.js, requires-body=1, tag=小米运动获取Token -http-request https:\/\/m\.ximalaya\.com\/speed\/task-center\/account\/coin script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/xmly_speed_ccokie.js , requires-body=1, tag=喜马拉雅极速版Cookie -[MITM] -hostname = %APPEND% m.ximalaya.com, api.m.jd.com, draw.jdfcloud.com, jdjoy.jd.com From 03d6fbc4a465886e2d2e35b9c8ddc6518b37d1ea Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Tue, 17 Nov 2020 09:38:49 +0800 Subject: [PATCH 017/290] update --- jd_joy_help.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jd_joy_help.js b/jd_joy_help.js index 7fe8613..090ad07 100644 --- a/jd_joy_help.js +++ b/jd_joy_help.js @@ -15,15 +15,15 @@ hostname = draw.jdfcloud.com ======================Surge===================== [Script] -宠汪汪强制为别人助力= type=http-request,pattern= ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com\/mirror\/\/pet\/helpFriend\?friendPin,requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js +宠汪汪强制为别人助力= type=http-request,pattern= ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/helpFriend\?friendPin,requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js ===================圈x===================== [rewrite_local] -^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com\/mirror\/\/pet\/helpFriend\?friendPin url script-request-header https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js +^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/helpFriend\?friendPin url script-request-header https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js =====================LOON===================== [Script] -http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com\/mirror\/\/pet\/helpFriend\?friendPin script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js, requires-body=true, timeout=10, tag=宠汪汪强制为别人助力 +http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/enterRoom\/h5\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/helpFriend\?friendPin script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js, requires-body=true, timeout=10, tag=宠汪汪强制为别人助力 你也可从下面链接拿好友的friendPin(复制链接到有京东ck的浏览器打开即可) From dc5bf3b822df3f3e8b2a5683d423e6e27d975b6c Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Tue, 17 Nov 2020 10:22:27 +0800 Subject: [PATCH 018/290] =?UTF-8?q?jd=5Fbean=5Fsign.js=E4=BA=AC=E8=B1=86?= =?UTF-8?q?=E7=AD=BE=E5=88=B0=E5=85=BC=E5=AE=B9=E8=85=BE=E8=AE=AF=E4=BA=91?= =?UTF-8?q?=E5=87=BD=E6=95=B0=EF=BC=8C=E6=84=9F=E8=B0=A2github@ykrank?= =?UTF-8?q?=E6=8F=90=E4=BE=9B=E7=9A=84=E5=B8=AE=E5=8A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_bean_sign.js | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/jd_bean_sign.js b/jd_bean_sign.js index a013c92..f972afd 100644 --- a/jd_bean_sign.js +++ b/jd_bean_sign.js @@ -1,7 +1,7 @@ /* 京豆签到,自用,可N个京东账号,IOS软件用户请使用 https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js Node.JS专用 -更新时间:2020-11-09 +更新时间:2020-11-17 从 github @ruicky改写而来 version v0.0.1 create by ruicky @@ -14,8 +14,9 @@ const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; const exec = require('child_process').execSync const fs = require('fs') const download = require('download'); -const path = "./result.txt"; -const JD_DailyBonusPath = "./JD_DailyBonus.js"; +let resultPath = "./result.txt"; +let JD_DailyBonusPath = "./JD_DailyBonus.js"; +let outPutUrl = './'; let cookiesArr = [], cookie = ''; if ($.isNode()) { @@ -29,9 +30,10 @@ if ($.isNode()) { $.msg($.name, '【提示】请先获取cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); return; } + await requireConfig(); // 下载最新代码 await downFile(); - const content = await fs.readFileSync('./JD_DailyBonus.js', 'utf8') + const content = await fs.readFileSync(JD_DailyBonusPath, 'utf8') for (let i =0; i < cookiesArr.length; i++) { cookie = cookiesArr[i]; if (cookie) { @@ -40,7 +42,7 @@ if ($.isNode()) { $.nickName = ''; await TotalBean(); console.log(`*****************开始京东账号${$.index} ${$.nickName || $.UserName}京豆签到*******************\n`); - console.log(`⚠⚠⚠⚠⚠⚠⚠⚠ 如遇到Bark APP推送通知消息失败的,请换用其他通知方式,Bark对推送内容长度有限制 ⚠⚠⚠⚠⚠⚠⚠⚠⚠\n`) + console.log(`⚠️⚠️⚠️⚠️目前Bark APP推送通知消息失败的,请换用其他通知方式,Bark对推送内容长度有限制 ⚠️⚠️⚠️⚠️\n`) await changeFile(content); await execSign(); } @@ -52,11 +54,11 @@ async function execSign() { console.log(`\n开始执行脚本签到,请稍等`) try { if (notify.SCKEY || notify.BARK_PUSH || notify.DD_BOT_TOKEN || (notify.TG_BOT_TOKEN && notify.TG_USER_ID) || notify.IGOT_PUSH_KEY) { - await exec("node JD_DailyBonus.js >> result.txt"); + await exec(`${process.execPath} ${JD_DailyBonusPath} >> ${resultPath}`); } else { // 如果没有提供通知推送,则打印日志 console.log('没有提供通知推送,则打印脚本执行日志') - await exec(`node JD_DailyBonus.js`, { stdio: "inherit" }); + await exec(`${process.execPath} ${JD_DailyBonusPath}`, { stdio: "inherit" }); } // await exec("node JD_DailyBonus.js", { stdio: "inherit" }); // console.log('执行完毕', new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toLocaleDateString()) @@ -64,8 +66,8 @@ async function execSign() { if ($.isNode()) { let notifyContent = ""; let BarkContent = ''; - if (fs.existsSync(path)) { - notifyContent = await fs.readFileSync(path, "utf8"); + if (fs.existsSync(resultPath)) { + notifyContent = await fs.readFileSync(resultPath, "utf8"); const barkContentStart = notifyContent.indexOf('【签到概览】') const barkContentEnd = notifyContent.length; if (process.env.JD_BEAN_SIGN_STOP_NOTIFY === 'true') return @@ -90,7 +92,7 @@ async function execSign() { } //运行完成后,删除下载的文件 console.log('运行完成后,删除下载的文件\n') - await deleteFile(path);//删除result.txt + await deleteFile(resultPath);//删除result.txt await deleteFile(JD_DailyBonusPath);//删除JD_DailyBonus.js console.log(`*****************京东账号${$.index} ${$.nickName || $.UserName}京豆签到完成*******************\n`); } catch (e) { @@ -112,7 +114,12 @@ async function downFile () { } else { url = 'https://cdn.jsdelivr.net/gh/NobyDa/Script@master/JD-DailyBonus/JD_DailyBonus.js'; } - await download(url, './') + try { + await download(url, outPutUrl); + console.log('文件下载完毕'); + } catch (e) { + console.log("文件下载异常:" + e); + } } async function changeFile (content) { @@ -200,7 +207,17 @@ function downloadUrl(url = 'https://raw.githubusercontent.com/NobyDa/Script/mast }) }) } - +function requireConfig() { + return new Promise(resolve => { + const file = 'jd_bean_sign.js'; + fs.access(file, fs.constants.W_OK, (err) => { + resultPath = err ? './tmp/result.txt' : resultPath; + JD_DailyBonusPath = err ? './tmp/JD_DailyBonus.js' : JD_DailyBonusPath; + outPutUrl = err ? './tmp/' : outPutUrl; + resolve() + }); + }) +} function timeFormat(time) { let date; if (time) { From 21ec072b2de05d11543daad311ac83df10b4eed8 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Tue, 17 Nov 2020 10:38:10 +0800 Subject: [PATCH 019/290] =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_bean_sign.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jd_bean_sign.js b/jd_bean_sign.js index f972afd..9a76a58 100644 --- a/jd_bean_sign.js +++ b/jd_bean_sign.js @@ -211,9 +211,9 @@ function requireConfig() { return new Promise(resolve => { const file = 'jd_bean_sign.js'; fs.access(file, fs.constants.W_OK, (err) => { - resultPath = err ? './tmp/result.txt' : resultPath; - JD_DailyBonusPath = err ? './tmp/JD_DailyBonus.js' : JD_DailyBonusPath; - outPutUrl = err ? './tmp/' : outPutUrl; + resultPath = err ? '/tmp/result.txt' : resultPath; + JD_DailyBonusPath = err ? '/tmp/JD_DailyBonus.js' : JD_DailyBonusPath; + outPutUrl = err ? '/tmp/' : outPutUrl; resolve() }); }) From 34d1e7b20139dce349615279bdd4e4e6329f4a64 Mon Sep 17 00:00:00 2001 From: Akira Date: Tue, 17 Nov 2020 10:59:34 +0800 Subject: [PATCH 020/290] Update Dockerfile --- docker/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 47d9920..5615cde 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -11,7 +11,7 @@ RUN git clone https://github.com/lxk0301/jd_scripts /scripts \ && cd /scripts \ && mkdir logs \ && npm install \ - && cd ~ \ + && cd /tmp \ && npm install request ENV CRONTAB_LIST_FILE crontab_list_ts.sh @@ -20,4 +20,4 @@ RUN crontab /scripts/docker/crontab_list_ts.sh WORKDIR /scripts -CMD ["node"] \ No newline at end of file +CMD ["node"] From 455af5e2e7d04a83f12307542c3f82303e677e67 Mon Sep 17 00:00:00 2001 From: Akira Date: Tue, 17 Nov 2020 11:02:18 +0800 Subject: [PATCH 021/290] Update crontab_list.sh --- docker/crontab_list.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index 3b2a449..8b18f28 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -1,6 +1,7 @@ 0 */1 * * * git -C /scripts/ pull >> /scripts/logs/pull.log 2>&1 2 */1 * * * crontab /scripts/docker/${CRONTAB_LIST_FILE} 3 */1 * * * npm install --prefix /scripts >> /scripts/logs/npm_install.log 2>&1 +4 */1 * * * npm install request --prefix /tmp >> /scripts/logs/npm_install_request.log 2>&1 # 每3天的23:50分清理一次日志 50 23 */3 * * rm -rf /scripts/logs/*.log @@ -44,7 +45,7 @@ # 取关京东店铺商品 55 23 * * * node /scripts/jd_unsubscribe.js >> /scripts/logs/jd_unsubscribe.log 2>&1 # 京豆变动通知 -0 2 * * * node /scripts/jd_bean_change.js >> /scripts/logs/jd_bean_change.log 2>&1 +0 10 * * * node /scripts/jd_bean_change.js >> /scripts/logs/jd_bean_change.log 2>&1 # 京东抽奖机 11 1 * * * node /scripts/jd_lotteryMachine.js >> /scripts/logs/jd_lotteryMachine.log 2>&1 # 京东排行榜 From 48783c7c6c92c93b892a25634089e4d4bc7d3b38 Mon Sep 17 00:00:00 2001 From: Akira Date: Tue, 17 Nov 2020 11:02:51 +0800 Subject: [PATCH 022/290] Update crontab_list_ts.sh --- docker/crontab_list_ts.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index 7ffb506..a3fcad6 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -1,6 +1,7 @@ 0 */1 * * * git -C /scripts/ pull |ts >> /scripts/logs/pull.log 2>&1 2 */1 * * * crontab /scripts/docker/${CRONTAB_LIST_FILE} 3 */1 * * * npm install --prefix /scripts |ts >> /scripts/logs/npm_install.log 2>&1 +4 */1 * * * npm install request --prefix /tmp |ts >> /scripts/logs/npm_install_request.log 2>&1 # 每3天的23:50分清理一次日志 50 23 */3 * * rm -rf /scripts/logs/*.log From 3ebc6efc0e0c0951349ccfa7d1098f07dde7a0be Mon Sep 17 00:00:00 2001 From: Akira Date: Tue, 17 Nov 2020 11:03:39 +0800 Subject: [PATCH 023/290] Update crontab_list_ts.sh --- docker/crontab_list_ts.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index a3fcad6..3f14ea7 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -45,7 +45,7 @@ # 取关京东店铺商品 55 23 * * * node /scripts/jd_unsubscribe.js |ts >> /scripts/logs/jd_unsubscribe.log 2>&1 # 京豆变动通知 -0 2 * * * node /scripts/jd_bean_change.js |ts >> /scripts/logs/jd_bean_change.log 2>&1 +0 10 * * * node /scripts/jd_bean_change.js |ts >> /scripts/logs/jd_bean_change.log 2>&1 # 京东抽奖机 11 1 * * * node /scripts/jd_lotteryMachine.js |ts >> /scripts/logs/jd_lotteryMachine.log 2>&1 # 京东排行榜 From 9ea5821e792671ae4aa5b33a85c0d7b3e9de4408 Mon Sep 17 00:00:00 2001 From: Akira Date: Tue, 17 Nov 2020 13:09:15 +0800 Subject: [PATCH 024/290] =?UTF-8?q?crontab=20=E6=94=AF=E6=8C=81=E7=BB=84?= =?UTF-8?q?=E5=90=88=E5=91=BD=E4=BB=A4=EF=BC=8C=E8=B0=83=E6=95=B4=E7=AD=BE?= =?UTF-8?q?=E5=88=B0=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=E8=B0=83=E6=95=B4?= =?UTF-8?q?=EF=BC=8C=E6=97=A0=E9=9C=80=E5=85=B3=E5=BF=83=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E5=88=B0=E9=82=A3=E4=B8=AA=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `crontab` 支持组合命令,调整签到定时任务调整,无需关心签到 `js` 文件下载到那个目录了 --- docker/crontab_list.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index 8b18f28..af32d57 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -1,7 +1,6 @@ 0 */1 * * * git -C /scripts/ pull >> /scripts/logs/pull.log 2>&1 2 */1 * * * crontab /scripts/docker/${CRONTAB_LIST_FILE} 3 */1 * * * npm install --prefix /scripts >> /scripts/logs/npm_install.log 2>&1 -4 */1 * * * npm install request --prefix /tmp >> /scripts/logs/npm_install_request.log 2>&1 # 每3天的23:50分清理一次日志 50 23 */3 * * rm -rf /scripts/logs/*.log @@ -13,7 +12,7 @@ ##############长期活动############## # 签到 -0 0,12,18 * * * node /scripts/jd_bean_sign.js >> /scripts/logs/jd_bean_sign.log 2>&1 +0 0,12,18 * * * cd /scripts && node jd_bean_sign.js >> /scripts/logs/jd_bean_sign.log 2>&1 # 京小超兑换奖品 0 0 * * * node /scripts/jd_blueCoin.js >> /scripts/logs/jd_blueCoin.log 2>&1 # 摇京豆 From c9e9944659e7748fc397b0e5fe7866a0b2a47aaf Mon Sep 17 00:00:00 2001 From: Akira Date: Tue, 17 Nov 2020 13:10:57 +0800 Subject: [PATCH 025/290] =?UTF-8?q?=20`crontab`=20=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E7=BB=84=E5=90=88=E5=91=BD=E4=BB=A4=EF=BC=8C=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E7=AD=BE=E5=88=B0=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `crontab` 支持组合命令,调整签到定时任务调整,无需关心签到 `js` 文件下载到那个目录了 --- docker/crontab_list_ts.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index 3f14ea7..449d43c 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -1,7 +1,6 @@ 0 */1 * * * git -C /scripts/ pull |ts >> /scripts/logs/pull.log 2>&1 2 */1 * * * crontab /scripts/docker/${CRONTAB_LIST_FILE} 3 */1 * * * npm install --prefix /scripts |ts >> /scripts/logs/npm_install.log 2>&1 -4 */1 * * * npm install request --prefix /tmp |ts >> /scripts/logs/npm_install_request.log 2>&1 # 每3天的23:50分清理一次日志 50 23 */3 * * rm -rf /scripts/logs/*.log @@ -13,7 +12,7 @@ ##############长期活动############## # 签到 -0 0,12,18 * * * node /scripts/jd_bean_sign.js |ts >> /scripts/logs/jd_bean_sign.log 2>&1 +0 0,12,18 * * * cd /scripts && node jd_bean_sign.js |ts >> /scripts/logs/jd_bean_sign.log 2>&1 # 京小超兑换奖品 0 0 * * * node /scripts/jd_blueCoin.js |ts >> /scripts/logs/jd_blueCoin.log 2>&1 # 摇京豆 From cd22138ddd82d58affeead882ad2eecea171c777 Mon Sep 17 00:00:00 2001 From: Akira Date: Tue, 17 Nov 2020 13:19:52 +0800 Subject: [PATCH 026/290] Update Readme.md --- docker/Readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/Readme.md b/docker/Readme.md index 8e7c709..7b5d824 100644 --- a/docker/Readme.md +++ b/docker/Readme.md @@ -76,11 +76,11 @@ jd_scripts: git -C /scripts/ pull node ``` -- `jd_scripts/my_crontab_list.sh` 参考内容如下: +- `jd_scripts/my_crontab_list.sh` 参考内容如下,自己根据需要调整增加删除,不熟悉用户推荐使用默认配置: ```shell 0 */1 * * * git -C /scripts/ pull |ts >> /scripts/logs/pull.log 2>&1 -2 0 * * * node /scripts/jd_bean_sign.js >> /scripts/logs/jd_bean_sign.log 2>&1 +2 0 * * * cd /scripts && node jd_bean_sign.js >> /scripts/logs/jd_bean_sign.log 2>&1 2 0 * * * node /scripts/jd_blueCoin.js >> /scripts/logs/jd_blueCoin.log 2>&1 2 0 * * * node /scripts/jd_club_lottery.js >> /scripts/logs/jd_club_lottery.log 2>&1 20 6-18/6 * * * node /scripts/jd_fruit.js >> /scripts/logs/jd_fruit.log 2>&1 From f5da6ee15f59a4428b49069153d42ece7ddfc4f1 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Tue, 17 Nov 2020 16:52:08 +0800 Subject: [PATCH 027/290] =?UTF-8?q?=E4=BA=AC=E4=B8=9C=E5=86=9C=E5=9C=BA?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BD=BF=E7=94=A8=E5=8A=A0=E7=AD=BE=E5=8D=A1?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_fruit.js | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/jd_fruit.js b/jd_fruit.js index c42003b..471d3c9 100644 --- a/jd_fruit.js +++ b/jd_fruit.js @@ -1,6 +1,6 @@ /* 东东水果:脚本更新地址 https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_fruit.js -更新时间:2020-11-10 +更新时间:2020-11-17 东东农场活动链接:https://h5.m.jd.com/babelDiy/Zeus/3KSjXqQabiTuD1cJ28QskrpWoBKT/index.html 已支持IOS双京东账号,Node.js支持N个京东账号 脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js @@ -335,15 +335,24 @@ async function doTenWaterAgain() { await myCardInfoForFarm(); const { fastCard, doubleCard, beanCard, signCard } = $.myCardInfoRes; console.log(`背包已有道具:\n快速浇水卡:${fastCard === -1 ? '未解锁': fastCard + '张'}\n水滴翻倍卡:${doubleCard === -1 ? '未解锁': doubleCard + '张'}\n水滴换京豆卡:${beanCard === -1 ? '未解锁' : beanCard + '张'}\n加签卡:${signCard === -1 ? '未解锁' : signCard + '张'}\n`) - if (totalEnergy >= 100 && $.myCardInfoRes.doubleCard > 0) { + if (totalEnergy >= 100 && doubleCard > 0) { //使用翻倍水滴卡 - for (let i = 0; i < new Array($.myCardInfoRes.doubleCard).fill('').length; i++) { + for (let i = 0; i < new Array(doubleCard).fill('').length; i++) { await userMyCardForFarm('doubleCard'); console.log(`使用翻倍水滴卡结果:${JSON.stringify($.userMyCardRes)}`); } await initForFarm(); totalEnergy = $.farmInfo.farmUserPro.totalEnergy; } + if (signCard > 0) { + //使用加签卡 + for (let i = 0; i < new Array(signCard).fill('').length; i++) { + await userMyCardForFarm('signCard'); + console.log(`使用加签卡结果:${JSON.stringify($.userMyCardRes)}`); + } + await initForFarm(); + totalEnergy = $.farmInfo.farmUserPro.totalEnergy; + } jdFruitBeanCard = $.getdata('jdFruitBeanCard') ? $.getdata('jdFruitBeanCard') : jdFruitBeanCard; if ($.isNode() && process.env.FRUIT_BEAN_CARD) { jdFruitBeanCard = process.env.FRUIT_BEAN_CARD; @@ -362,17 +371,6 @@ async function doTenWaterAgain() { console.log(`您目前水滴:${totalEnergy}g,水滴换豆卡${$.myCardInfoRes.beanCard}张,暂不满足水滴换豆的条件,为您继续浇水`) } } - // if (Date.now() < new Date(activeEndTime).getTime()) { - // if (totalEnergy >= 100 && $.myCardInfoRes.beanCard > 0) { - // //使用水滴换豆卡 - // await userMyCardForFarm('beanCard'); - // console.log(`使用水滴换豆卡结果:${JSON.stringify($.userMyCardRes)}`); - // if ($.userMyCardRes.code === '0') { - // message += `【水滴换豆卡】获得${$.userMyCardRes.beanCount}个京豆\n`; - // } - // } - // return - // } // if (totalEnergy > 100 && $.myCardInfoRes.fastCard > 0) { // //使用快速浇水卡 // await userMyCardForFarm('fastCard'); From 4cd5e3406b7826eeed142116639097702f1ae3d5 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Tue, 17 Nov 2020 18:13:52 +0800 Subject: [PATCH 028/290] fix bug --- jd_pigPet.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/jd_pigPet.js b/jd_pigPet.js index 98c1548..3d1a6bf 100644 --- a/jd_pigPet.js +++ b/jd_pigPet.js @@ -91,7 +91,7 @@ function pigPetUserBag() { console.log(`${item.goodsName} ${item.count}g`); } for (let item of data.resultData.resultData.goods) { - if (item.count > 20) { + if (item.count >= 20) { console.log(`10秒后开始喂食${item.goodsName},当前数量为${item.count}g`) await $.wait(10000); await pigPetAddFood(item.sku); @@ -120,7 +120,7 @@ function pigPetUserBag() { function pigPetAddFood(skuId) { return new Promise(async resolve => { console.log(`skuId::::${skuId}`) - const body = {"source":0,"channelLV":"yqs","riskDeviceParam":"{}","t":1605073588888, skuId ,"category":"1001"} + const body = {"source":0,"channelLV":"yqs","riskDeviceParam":"{}","t":Date.now(), skuId ,"category":"1001"} $.post(taskUrl('pigPetAddFood', body), (err, resp, data) => { try { if (err) { @@ -128,7 +128,7 @@ function pigPetAddFood(skuId) { console.log(`${$.name} API请求失败,请检查网路重试`) } else { if (data) { - // console.log(data) + console.log(`喂食结果:${data}`) data = JSON.parse(data); } else { console.log(`京东服务器返回空数据`) @@ -199,7 +199,7 @@ function pigPetLotteryIndex() { console.log(`${$.name} API请求失败,请检查网路重试`) } else { if (data) { - console.log(data) + // console.log(data) data = JSON.parse(data); if (data.resultCode === 0) { if (data.resultData.resultCode === 0) { @@ -240,13 +240,13 @@ function pigPetLotteryPlay() { console.log(`${$.name} API请求失败,请检查网路重试`) } else { if (data) { - console.log(data) + // console.log(data) data = JSON.parse(data); if (data.resultCode === 0) { if (data.resultData.resultCode === 0) { if (data.resultData.resultData) { // console.log(`当前大转盘剩余免费抽奖次数::${data.resultData.resultData.currentCount}`); - $.currentCount = data.resultData.resultData.currentCount; + $.currentCount = data.resultData.resultData.currentCount;//抽奖后剩余的抽奖次数 } } else { console.log(`其他情况:${JSON.stringify(data)}`) From dc0c9a7a6b91258116137ffeb9010ca4dfdc4c85 Mon Sep 17 00:00:00 2001 From: EvineDeng Date: Wed, 18 Nov 2020 13:19:50 +0800 Subject: [PATCH 029/290] add issue template --- .github/ISSUE_TEMPLATE/bug_report.md | 79 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 44 +++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..d169e19 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,79 @@ +--- +name: Bug 反馈 +about: 运行js脚本时出现bug +title: '' +labels: '' +assignees: '' + +--- + + + + + + + + + + + + +## 1.关于你要提交的问题 + +Q:是否搜索了issue(包括已关闭的issue) +- [ ] 没有类似的issue + +Q:是否仔细阅读了教程 +- [ ] 已仔细阅读教程 + +## 2. 你使用的哪种部署方法 + + + + + + +- [ ] 方法一:本地安装Node.js +- [ ] 方法二:腾讯云函数 +- [ ] 方法三:Docker办法一 +- [ ] 方法三:Docker办法二 +- [ ] 方法三:Docker办法三 +- [ ] 方法四:iOS系统的代理软件 + + +## 3. 详细叙述 +### (1) 具体问题 +A: + +### (2) 详细日志 +A: + + + + + +## 4.软件版本和 npm install 结果 +### (1) Node.js版本 + +A: + +### (2) npm版本 + +A: + +### (3)npm install的日志 + +A: diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..d741913 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,44 @@ +--- +name: 功能建议 +about: 请求实现新功能或改进已有功能 +title: '' +labels: '' +assignees: '' + +--- + + + + + + + + + + + + +## 期望增加的功能 + +A: + + + + + +## 入口 + +A: From 4d40cb6a243cda53d61866dabff04dcc3e0f2c9b Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 18 Nov 2020 13:42:51 +0800 Subject: [PATCH 030/290] Delete pull.yml --- .github/pull.yml | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 .github/pull.yml diff --git a/.github/pull.yml b/.github/pull.yml deleted file mode 100644 index bbadc61..0000000 --- a/.github/pull.yml +++ /dev/null @@ -1,6 +0,0 @@ -version: "1" -rules: # Array of rules - - base: master # Required. Target branch - upstream: lxk0301:master # Required. Must be in the same fork network. - mergeMethod: hardreset # Optional, one of [none, merge, squash, rebase, hardreset], Default: none. - mergeUnstable: true # Optional, merge pull request even when the mergeable_state is not clean. Default: false From 4bf49312b5f45d208e300bcde2213664684f9199 Mon Sep 17 00:00:00 2001 From: Akira-Work Date: Wed, 18 Nov 2020 15:20:05 +0800 Subject: [PATCH 031/290] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E5=8F=98=E9=87=8F=E9=85=8D=E7=BD=AE=E8=B0=83=E6=95=B4=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E8=8A=82=E7=82=B9=E4=B8=BA=E9=A6=99=E6=B8=AF=E6=96=B9?= =?UTF-8?q?=E4=BE=BFTG=E7=94=A8=E6=88=B7=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- serverless.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/serverless.yml b/serverless.yml index 69c157e..1db2fb8 100644 --- a/serverless.yml +++ b/serverless.yml @@ -11,10 +11,10 @@ inputs: src: ./ handler: index.main_handler #入口 runtime: Nodejs12.16 # 运行环境 默认 Nodejs10.15 - region: ap-guangzhou # 函数所在区域 + region: ap-hongkong # 函数所在区域 description: This is a function in ${app} application. - memorySize: 64 # 内存大小,单位MB - timeout: 900 # 超时时间,单位秒 + memorySize: 128 # 内存大小,单位MB + timeout: 6000 # 超时时间,单位秒 events: # 触发器 - timer: # 定时触发器 parameters: @@ -22,3 +22,6 @@ inputs: cronExpression: "0 0 0 */1 * * *" # 每天零点执行一次 enable: true argument: argument # 额外的参数 + environment: # 环境变量 + variables: # 环境变量对象 + AAA: BBB # 不要删除,用来格式化对齐追加的变量的 \ No newline at end of file From c09e088555af01be1f9e6037355d7cdcbb823548 Mon Sep 17 00:00:00 2001 From: Akira-Work Date: Wed, 18 Nov 2020 15:22:41 +0800 Subject: [PATCH 032/290] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E9=83=A8=E7=BD=B2=E5=88=B0=E8=85=BE=E8=AE=AF=E4=BA=91=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E4=BB=BB=E5=8A=A1=EF=BC=8C=E6=89=8B=E5=8A=A8=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=20=E4=B8=BA=E9=85=8D=E7=BD=AE=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E5=92=8C=E8=A7=A6=E5=8F=91=EF=BC=8C=E5=A6=82=E6=9C=89=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E5=8F=AF=E9=85=8D=E7=BD=AEmaster=E5=88=86=E6=94=AF?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=A7=A6=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy_tencent_scf.yml | 71 ++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 .github/workflows/deploy_tencent_scf.yml diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml new file mode 100644 index 0000000..b5d314b --- /dev/null +++ b/.github/workflows/deploy_tencent_scf.yml @@ -0,0 +1,71 @@ +name: 部署到腾讯云函数 + +on: + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + if: github.event.repository.owner.id == github.event.sender.id + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + repository: ${{ github.repository }} + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + + - name: "安装依赖和serverless工具" + run: | + npm install + sudo npm install serverless -g + + - name: "将Secrets里面配置的变量添加到severless.yml里面作为环境变量" + run: | + sed -i "/variables/a\ JD_COOKIE: ${{ secrets.JD_COOKIE }}" serverless.yml + sed -i "/variables/a\ JD_COOKIE: ${{ secrets.JD_COOKIE}}" serverless.yml + sed -i "/variables/a\ JD_BEAN_STOP: ${{ secrets.JD_BEAN_STOP}}" serverless.yml + sed -i "/variables/a\ JD_BEAN_SIGN_STOP_NOTIFY: ${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}}" serverless.yml + sed -i "/variables/a\ JD_BEAN_SIGN_NOTIFY_SIMPLE: ${{ secrets.JD_BEAN_SIGN_NOTIFY_SIMPLE}}" serverless.yml + sed -i "/variables/a\ JD_DEBUG: ${{ secrets.JD_DEBUG}}" serverless.yml + sed -i "/variables/a\ PUSH_KEY: ${{ secrets.PUSH_KEY}}" serverless.yml + sed -i "/variables/a\ BARK_PUSH: ${{ secrets.BARK_PUSH}}" serverless.yml + sed -i "/variables/a\ BARK_SOUND: ${{ secrets.BARK_SOUND}}" serverless.yml + sed -i "/variables/a\ TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN}}" serverless.yml + sed -i "/variables/a\ TG_USER_ID: ${{ secrets.TG_USER_ID}}" serverless.yml + sed -i "/variables/a\ DD_BOT_TOKEN: ${{ secrets.DD_BOT_TOKEN}}" serverless.yml + sed -i "/variables/a\ DD_BOT_SECRET: ${{ secrets.DD_BOT_SECRET}}" serverless.yml + sed -i "/variables/a\ IGOT_PUSH_KEY: ${{ secrets.IGOT_PUSH_KEY}}" serverless.yml + sed -i "/variables/a\ PET_NOTIFY_CONTROL: ${{ secrets.PET_NOTIFY_CONTROL}}" serverless.yml + sed -i "/variables/a\ FRUIT_NOTIFY_CONTROL: ${{ secrets.FRUIT_NOTIFY_CONTROL}}" serverless.yml + sed -i "/variables/a\ JD_JOY_REWARD_NOTIFY: ${{ secrets.JD_JOY_REWARD_NOTIFY}}" serverless.yml + sed -i "/variables/a\ JD_818_SHAREID_NOTIFY: ${{ secrets.JD_818_SHAREID_NOTIFY}}" serverless.yml + sed -i "/variables/a\ JOY_FEED_COUNT: ${{ secrets.JOY_FEED_COUNT}}" serverless.yml + sed -i "/variables/a\ JOY_HELP_FEED: ${{ secrets.JOY_HELP_FEED}}" serverless.yml + sed -i "/variables/a\ JOY_RUN_FLAG: ${{ secrets.JOY_RUN_FLAG}}" serverless.yml + sed -i "/variables/a\ JD_JOY_REWARD_NAME: ${{ secrets.JD_JOY_REWARD_NAME}}" serverless.yml + sed -i "/variables/a\ MARKET_COIN_TO_BEANS: ${{ secrets.MARKET_COIN_TO_BEANS}}" serverless.yml + sed -i "/variables/a\ MARKET_REWARD_NOTIFY: ${{ secrets.MARKET_REWARD_NOTIFY}}" serverless.yml + sed -i "/variables/a\ SUPERMARKET_UPGRADE: ${{ secrets.SUPERMARKET_UPGRADE}}" serverless.yml + sed -i "/variables/a\ BUSINESS_CIRCLE_JUMP: ${{ secrets.BUSINESS_CIRCLE_JUMP}}" serverless.yml + sed -i "/variables/a\ SUPERMARKET_LOTTERY: ${{ secrets.SUPERMARKET_LOTTERY}}" serverless.yml + sed -i "/variables/a\ FRUIT_BEAN_CARD: ${{ secrets.FRUIT_BEAN_CARD}}" serverless.yml + sed -i "/variables/a\ UN_SUBSCRIBES: ${{ secrets.UN_SUBSCRIBES}}" serverless.yml + sed -i "/variables/a\ FruitShareCodes: ${{ secrets.FruitShareCodes}}" serverless.yml + sed -i "/variables/a\ PETSHARECODES: ${{ secrets.PETSHARECODES}}" serverless.yml + sed -i "/variables/a\ PLANT_BEAN_SHARECODES: ${{ secrets.PLANT_BEAN_SHARECODES}}" serverless.yml + sed -i "/variables/a\ SUPERMARKET_SHARECODES: ${{ secrets.SUPERMARKET_SHARECODES}}" serverless.yml + sed -i "/variables/a\ TG_PROXY_HOST: ${{ secrets.TG_PROXY_HOST}}" serverless.yml + sed -i "/variables/a\ TG_PROXY_PORT: ${{ secrets.TG_PROXY_PORT}}" serverless.yml + cat serverless.yml + + - name: "部署到腾讯云函数" + run: serverless deploy + env: + STAGE: dev + SERVERLESS_PLATFORM_VENDOR: tencent + TENCENT_SECRET_ID: ${{ secrets.TENCENT_SECRET_ID }} + TENCENT_SECRET_KEY: ${{ secrets.TENCENT_SECRET_KEY }} From 53c681f2b1c4beae3969e8e5b4f879de49af70a2 Mon Sep 17 00:00:00 2001 From: Akira-Work Date: Wed, 18 Nov 2020 15:42:30 +0800 Subject: [PATCH 033/290] =?UTF-8?q?=E6=9B=B4=E6=96=B0readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + tencentscf.md | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/README.md b/README.md index 85ca379..44a6eb5 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,7 @@ - 需自行有云服务器,云函数等 - 腾讯云云函数 [快速部署教程](tencentscf.md)(免费) - 腾讯云云函数控制台使用 [教程说明](iCloud.md) + - 腾讯云云函数 [GitHub Action部署教程](tencentscf.md)(免费) ### 方法三:Docker(NAS或VPS用户) diff --git a/tencentscf.md b/tencentscf.md index 49b1858..389abb8 100644 --- a/tencentscf.md +++ b/tencentscf.md @@ -1,6 +1,10 @@ # 云函数快速部署京东脚本 +# 两种方式 +- 本地安装依赖使用serverless部署,[点这里]() +- Github Action 部署[点这里]() + ## 1. 安装 Node.js 环境 Node.js 环境 [下载地址](https://nodejs.org/zh-tw/download/) ,根据自己的操作系统下载和安装。 @@ -93,3 +97,18 @@ triggers: ![测试函数](https://imgbed-bucket-1251971143.cos.ap-guangzhou.myqcloud.com/./1605263963294-test.png) > 如果需要配置永久秘钥,则可以在[访问秘钥页面](https://console.cloud.tencent.com/cam/capi)获取账号的 TENCENT_SECRET_ID,TENCENT_SECRET_KEY,并配置在代码根目录 .env 文件中。 + + +# Github Action 部署 +## 1. 开通服务 + +依次登录 [SCF 云函数控制台](https://console.cloud.tencent.com/scf) 和 [SLS 控制台](https://console.cloud.tencent.com/sls) 开通相关服务,确保账户下已开通服务并创建相应[服务角色](https://console.cloud.tencent.com/cam/role) **SCF_QcsRole、SLS_QcsRole** + +> 注意!为了确保权限足够,获取这两个参数时不要使用子账户!此外,腾讯云账户需要[实名认证](https://console.cloud.tencent.com/developer/auth)。 + +## 2. 在这里新建一个访问密钥[新建密钥](https://console.cloud.tencent.com/cam/capi) +> 将SecretId和SecretKey分别配置在仓库的secrets变量里面, TENCENT_SECRET_ID对应你的SecretId的值,TENCENT_SECRET_KEY对应你的SecretKey的值 + +## 3. 配置自己需要secrets变量[参考这里](https://github.com/lxk0301/jd_scripts/blob/master/githubAction.md#%E4%B8%8B%E6%96%B9%E6%8F%90%E4%BE%9B%E4%BD%BF%E7%94%A8%E5%88%B0%E7%9A%84-secrets%E5%85%A8%E9%9B%86%E5%90%88) + +## 4.执行action workflow进行部署,workflow未报错即部署成功 \ No newline at end of file From a167deaac76a76d426a06154e3c032878c25c4cc Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 15:49:15 +0800 Subject: [PATCH 034/290] Update deploy_tencent_scf.yml --- .github/workflows/deploy_tencent_scf.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml index b5d314b..fe7c6ba 100644 --- a/.github/workflows/deploy_tencent_scf.yml +++ b/.github/workflows/deploy_tencent_scf.yml @@ -26,7 +26,6 @@ jobs: - name: "将Secrets里面配置的变量添加到severless.yml里面作为环境变量" run: | sed -i "/variables/a\ JD_COOKIE: ${{ secrets.JD_COOKIE }}" serverless.yml - sed -i "/variables/a\ JD_COOKIE: ${{ secrets.JD_COOKIE}}" serverless.yml sed -i "/variables/a\ JD_BEAN_STOP: ${{ secrets.JD_BEAN_STOP}}" serverless.yml sed -i "/variables/a\ JD_BEAN_SIGN_STOP_NOTIFY: ${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}}" serverless.yml sed -i "/variables/a\ JD_BEAN_SIGN_NOTIFY_SIMPLE: ${{ secrets.JD_BEAN_SIGN_NOTIFY_SIMPLE}}" serverless.yml From c989e7dee385d28b2a041e55dd21f3652f696124 Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 15:53:18 +0800 Subject: [PATCH 035/290] Update serverless.yml --- serverless.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/serverless.yml b/serverless.yml index 1db2fb8..393d4c1 100644 --- a/serverless.yml +++ b/serverless.yml @@ -14,7 +14,7 @@ inputs: region: ap-hongkong # 函数所在区域 description: This is a function in ${app} application. memorySize: 128 # 内存大小,单位MB - timeout: 6000 # 超时时间,单位秒 + timeout: 900 # 超时时间,单位秒 events: # 触发器 - timer: # 定时触发器 parameters: @@ -24,4 +24,4 @@ inputs: argument: argument # 额外的参数 environment: # 环境变量 variables: # 环境变量对象 - AAA: BBB # 不要删除,用来格式化对齐追加的变量的 \ No newline at end of file + AAA: BBB # 不要删除,用来格式化对齐追加的变量的 From 608e2f4a654ecdf8492d8fb454320207444fb3f2 Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 16:35:17 +0800 Subject: [PATCH 036/290] Update deploy_tencent_scf.yml --- .github/workflows/deploy_tencent_scf.yml | 58 ++++++++++++++---------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml index fe7c6ba..916442d 100644 --- a/.github/workflows/deploy_tencent_scf.yml +++ b/.github/workflows/deploy_tencent_scf.yml @@ -25,29 +25,41 @@ jobs: - name: "将Secrets里面配置的变量添加到severless.yml里面作为环境变量" run: | - sed -i "/variables/a\ JD_COOKIE: ${{ secrets.JD_COOKIE }}" serverless.yml - sed -i "/variables/a\ JD_BEAN_STOP: ${{ secrets.JD_BEAN_STOP}}" serverless.yml - sed -i "/variables/a\ JD_BEAN_SIGN_STOP_NOTIFY: ${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}}" serverless.yml - sed -i "/variables/a\ JD_BEAN_SIGN_NOTIFY_SIMPLE: ${{ secrets.JD_BEAN_SIGN_NOTIFY_SIMPLE}}" serverless.yml - sed -i "/variables/a\ JD_DEBUG: ${{ secrets.JD_DEBUG}}" serverless.yml - sed -i "/variables/a\ PUSH_KEY: ${{ secrets.PUSH_KEY}}" serverless.yml - sed -i "/variables/a\ BARK_PUSH: ${{ secrets.BARK_PUSH}}" serverless.yml - sed -i "/variables/a\ BARK_SOUND: ${{ secrets.BARK_SOUND}}" serverless.yml - sed -i "/variables/a\ TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN}}" serverless.yml - sed -i "/variables/a\ TG_USER_ID: ${{ secrets.TG_USER_ID}}" serverless.yml - sed -i "/variables/a\ DD_BOT_TOKEN: ${{ secrets.DD_BOT_TOKEN}}" serverless.yml - sed -i "/variables/a\ DD_BOT_SECRET: ${{ secrets.DD_BOT_SECRET}}" serverless.yml - sed -i "/variables/a\ IGOT_PUSH_KEY: ${{ secrets.IGOT_PUSH_KEY}}" serverless.yml - sed -i "/variables/a\ PET_NOTIFY_CONTROL: ${{ secrets.PET_NOTIFY_CONTROL}}" serverless.yml - sed -i "/variables/a\ FRUIT_NOTIFY_CONTROL: ${{ secrets.FRUIT_NOTIFY_CONTROL}}" serverless.yml - sed -i "/variables/a\ JD_JOY_REWARD_NOTIFY: ${{ secrets.JD_JOY_REWARD_NOTIFY}}" serverless.yml - sed -i "/variables/a\ JD_818_SHAREID_NOTIFY: ${{ secrets.JD_818_SHAREID_NOTIFY}}" serverless.yml - sed -i "/variables/a\ JOY_FEED_COUNT: ${{ secrets.JOY_FEED_COUNT}}" serverless.yml - sed -i "/variables/a\ JOY_HELP_FEED: ${{ secrets.JOY_HELP_FEED}}" serverless.yml - sed -i "/variables/a\ JOY_RUN_FLAG: ${{ secrets.JOY_RUN_FLAG}}" serverless.yml - sed -i "/variables/a\ JD_JOY_REWARD_NAME: ${{ secrets.JD_JOY_REWARD_NAME}}" serverless.yml - sed -i "/variables/a\ MARKET_COIN_TO_BEANS: ${{ secrets.MARKET_COIN_TO_BEANS}}" serverless.yml - sed -i "/variables/a\ MARKET_REWARD_NOTIFY: ${{ secrets.MARKET_REWARD_NOTIFY}}" serverless.yml + if [${{ secrets.JD_COOKIE }}]; then sed -i "/variables/a\ JD_COOKIE: ${{ secrets.JD_COOKIE }}" serverless.yml; fi; + if [${{ secrets.JD_COOKIE}}]; then sed -i "/variables/a\ JD_COOKIE: ${{ secrets.JD_COOKIE}}" serverless.yml; fi; + if [${{ secrets.JD_BEAN_STOP}}]; then sed -i "/variables/a\ JD_BEAN_STOP: ${{ secrets.JD_BEAN_STOP}}" serverless.yml; fi; + if [${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}}]; then sed -i "/variables/a\ JD_BEAN_SIGN_STOP_NOTIFY: ${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}}" serverless.yml; fi; + if [${{ secrets.JD_BEAN_SIGN_NOTIFY_SIMPLE}}]; then sed -i "/variables/a\ JD_BEAN_SIGN_NOTIFY_SIMPLE: ${{ secrets.JD_BEAN_SIGN_NOTIFY_SIMPLE}}" serverless.yml; fi; + if [${{ secrets.JD_DEBUG}}]; then sed -i "/variables/a\ JD_DEBUG: ${{ secrets.JD_DEBUG}}" serverless.yml; fi; + if [${{ secrets.PUSH_KEY}}]; then sed -i "/variables/a\ PUSH_KEY: ${{ secrets.PUSH_KEY}}" serverless.yml; fi; + if [${{ secrets.BARK_PUSH}}]; then sed -i "/variables/a\ BARK_PUSH: ${{ secrets.BARK_PUSH}}" serverless.yml; fi; + if [${{ secrets.BARK_SOUND}}]; then sed -i "/variables/a\ BARK_SOUND: ${{ secrets.BARK_SOUND}}" serverless.yml; fi; + if [${{ secrets.TG_BOT_TOKEN}}]; then sed -i "/variables/a\ TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN}}" serverless.yml; fi; + if [${{ secrets.TG_USER_ID}}]; then sed -i "/variables/a\ TG_USER_ID: ${{ secrets.TG_USER_ID}}" serverless.yml; fi; + if [${{ secrets.DD_BOT_TOKEN}}]; then sed -i "/variables/a\ DD_BOT_TOKEN: ${{ secrets.DD_BOT_TOKEN}}" serverless.yml; fi; + if [${{ secrets.DD_BOT_SECRET}}]; then sed -i "/variables/a\ DD_BOT_SECRET: ${{ secrets.DD_BOT_SECRET}}" serverless.yml; fi; + if [${{ secrets.IGOT_PUSH_KEY}}]; then sed -i "/variables/a\ IGOT_PUSH_KEY: ${{ secrets.IGOT_PUSH_KEY}}" serverless.yml; fi; + if [${{ secrets.PET_NOTIFY_CONTROL}}]; then sed -i "/variables/a\ PET_NOTIFY_CONTROL: ${{ secrets.PET_NOTIFY_CONTROL}}" serverless.yml; fi; + if [${{ secrets.FRUIT_NOTIFY_CONTROL}}]; then sed -i "/variables/a\ FRUIT_NOTIFY_CONTROL: ${{ secrets.FRUIT_NOTIFY_CONTROL}}" serverless.yml; fi; + if [${{ secrets.JD_JOY_REWARD_NOTIFY}}]; then sed -i "/variables/a\ JD_JOY_REWARD_NOTIFY: ${{ secrets.JD_JOY_REWARD_NOTIFY}}" serverless.yml; fi; + if [${{ secrets.JD_818_SHAREID_NOTIFY}}]; then sed -i "/variables/a\ JD_818_SHAREID_NOTIFY: ${{ secrets.JD_818_SHAREID_NOTIFY}}" serverless.yml; fi; + if [${{ secrets.JOY_FEED_COUNT}}]; then sed -i "/variables/a\ JOY_FEED_COUNT: ${{ secrets.JOY_FEED_COUNT}}" serverless.yml; fi; + if [${{ secrets.JOY_HELP_FEED}}]; then sed -i "/variables/a\ JOY_HELP_FEED: ${{ secrets.JOY_HELP_FEED}}" serverless.yml; fi; + if [${{ secrets.JOY_RUN_FLAG}}]; then sed -i "/variables/a\ JOY_RUN_FLAG: ${{ secrets.JOY_RUN_FLAG}}" serverless.yml; fi; + if [${{ secrets.JD_JOY_REWARD_NAME}}]; then sed -i "/variables/a\ JD_JOY_REWARD_NAME: ${{ secrets.JD_JOY_REWARD_NAME}}" serverless.yml; fi; + if [${{ secrets.MARKET_COIN_TO_BEANS}}]; then sed -i "/variables/a\ MARKET_COIN_TO_BEANS: ${{ secrets.MARKET_COIN_TO_BEANS}}" serverless.yml; fi; + if [${{ secrets.MARKET_REWARD_NOTIFY}}]; then sed -i "/variables/a\ MARKET_REWARD_NOTIFY: ${{ secrets.MARKET_REWARD_NOTIFY}}" serverless.yml; fi; + if [${{ secrets.SUPERMARKET_UPGRADE}}]; then sed -i "/variables/a\ SUPERMARKET_UPGRADE: ${{ secrets.SUPERMARKET_UPGRADE}}" serverless.yml; fi; + if [${{ secrets.BUSINESS_CIRCLE_JUMP}}]; then sed -i "/variables/a\ BUSINESS_CIRCLE_JUMP: ${{ secrets.BUSINESS_CIRCLE_JUMP}}" serverless.yml; fi; + if [${{ secrets.SUPERMARKET_LOTTERY}}]; then sed -i "/variables/a\ SUPERMARKET_LOTTERY: ${{ secrets.SUPERMARKET_LOTTERY}}" serverless.yml; fi; + if [${{ secrets.FRUIT_BEAN_CARD}}]; then sed -i "/variables/a\ FRUIT_BEAN_CARD: ${{ secrets.FRUIT_BEAN_CARD}}" serverless.yml; fi; + if [${{ secrets.UN_SUBSCRIBES}}]; then sed -i "/variables/a\ UN_SUBSCRIBES: ${{ secrets.UN_SUBSCRIBES}}" serverless.yml; fi; + if [${{ secrets.FruitShareCodes}}]; then sed -i "/variables/a\ FruitShareCodes: ${{ secrets.FruitShareCodes}}" serverless.yml; fi; + if [${{ secrets.PETSHARECODES}}]; then sed -i "/variables/a\ PETSHARECODES: ${{ secrets.PETSHARECODES}}" serverless.yml; fi; + if [${{ secrets.PLANT_BEAN_SHARECODES}}]; then sed -i "/variables/a\ PLANT_BEAN_SHARECODES: ${{ secrets.PLANT_BEAN_SHARECODES}}" serverless.yml; fi; + if [${{ secrets.SUPERMARKET_SHARECODES}}]; then sed -i "/variables/a\ SUPERMARKET_SHARECODES: ${{ secrets.SUPERMARKET_SHARECODES}}" serverless.yml; fi; + if [${{ secrets.TG_PROXY_HOST}}]; then sed -i "/variables/a\ TG_PROXY_HOST: ${{ secrets.TG_PROXY_HOST}}" serverless.yml; fi; + if [${{ secrets.TG_PROXY_PORT}}]; then sed -i "/variables/a\ TG_PROXY_PORT: ${{ secrets.TG_PROXY_PORT}}" serverless.yml; fi; sed -i "/variables/a\ SUPERMARKET_UPGRADE: ${{ secrets.SUPERMARKET_UPGRADE}}" serverless.yml sed -i "/variables/a\ BUSINESS_CIRCLE_JUMP: ${{ secrets.BUSINESS_CIRCLE_JUMP}}" serverless.yml sed -i "/variables/a\ SUPERMARKET_LOTTERY: ${{ secrets.SUPERMARKET_LOTTERY}}" serverless.yml From 4d63aa6f70beb2d819b4194c890ee9ab18d68140 Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 16:35:59 +0800 Subject: [PATCH 037/290] Update deploy_tencent_scf.yml --- .github/workflows/deploy_tencent_scf.yml | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml index 916442d..584b989 100644 --- a/.github/workflows/deploy_tencent_scf.yml +++ b/.github/workflows/deploy_tencent_scf.yml @@ -26,7 +26,6 @@ jobs: - name: "将Secrets里面配置的变量添加到severless.yml里面作为环境变量" run: | if [${{ secrets.JD_COOKIE }}]; then sed -i "/variables/a\ JD_COOKIE: ${{ secrets.JD_COOKIE }}" serverless.yml; fi; - if [${{ secrets.JD_COOKIE}}]; then sed -i "/variables/a\ JD_COOKIE: ${{ secrets.JD_COOKIE}}" serverless.yml; fi; if [${{ secrets.JD_BEAN_STOP}}]; then sed -i "/variables/a\ JD_BEAN_STOP: ${{ secrets.JD_BEAN_STOP}}" serverless.yml; fi; if [${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}}]; then sed -i "/variables/a\ JD_BEAN_SIGN_STOP_NOTIFY: ${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}}" serverless.yml; fi; if [${{ secrets.JD_BEAN_SIGN_NOTIFY_SIMPLE}}]; then sed -i "/variables/a\ JD_BEAN_SIGN_NOTIFY_SIMPLE: ${{ secrets.JD_BEAN_SIGN_NOTIFY_SIMPLE}}" serverless.yml; fi; @@ -60,17 +59,6 @@ jobs: if [${{ secrets.SUPERMARKET_SHARECODES}}]; then sed -i "/variables/a\ SUPERMARKET_SHARECODES: ${{ secrets.SUPERMARKET_SHARECODES}}" serverless.yml; fi; if [${{ secrets.TG_PROXY_HOST}}]; then sed -i "/variables/a\ TG_PROXY_HOST: ${{ secrets.TG_PROXY_HOST}}" serverless.yml; fi; if [${{ secrets.TG_PROXY_PORT}}]; then sed -i "/variables/a\ TG_PROXY_PORT: ${{ secrets.TG_PROXY_PORT}}" serverless.yml; fi; - sed -i "/variables/a\ SUPERMARKET_UPGRADE: ${{ secrets.SUPERMARKET_UPGRADE}}" serverless.yml - sed -i "/variables/a\ BUSINESS_CIRCLE_JUMP: ${{ secrets.BUSINESS_CIRCLE_JUMP}}" serverless.yml - sed -i "/variables/a\ SUPERMARKET_LOTTERY: ${{ secrets.SUPERMARKET_LOTTERY}}" serverless.yml - sed -i "/variables/a\ FRUIT_BEAN_CARD: ${{ secrets.FRUIT_BEAN_CARD}}" serverless.yml - sed -i "/variables/a\ UN_SUBSCRIBES: ${{ secrets.UN_SUBSCRIBES}}" serverless.yml - sed -i "/variables/a\ FruitShareCodes: ${{ secrets.FruitShareCodes}}" serverless.yml - sed -i "/variables/a\ PETSHARECODES: ${{ secrets.PETSHARECODES}}" serverless.yml - sed -i "/variables/a\ PLANT_BEAN_SHARECODES: ${{ secrets.PLANT_BEAN_SHARECODES}}" serverless.yml - sed -i "/variables/a\ SUPERMARKET_SHARECODES: ${{ secrets.SUPERMARKET_SHARECODES}}" serverless.yml - sed -i "/variables/a\ TG_PROXY_HOST: ${{ secrets.TG_PROXY_HOST}}" serverless.yml - sed -i "/variables/a\ TG_PROXY_PORT: ${{ secrets.TG_PROXY_PORT}}" serverless.yml cat serverless.yml - name: "部署到腾讯云函数" From f98d827b2d72e77b16c4bce532ae0ac8f2e68efa Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 16:50:40 +0800 Subject: [PATCH 038/290] Update deploy_tencent_scf.yml --- .github/workflows/deploy_tencent_scf.yml | 69 ++++++++++++------------ 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml index 584b989..5e37b08 100644 --- a/.github/workflows/deploy_tencent_scf.yml +++ b/.github/workflows/deploy_tencent_scf.yml @@ -25,40 +25,41 @@ jobs: - name: "将Secrets里面配置的变量添加到severless.yml里面作为环境变量" run: | - if [${{ secrets.JD_COOKIE }}]; then sed -i "/variables/a\ JD_COOKIE: ${{ secrets.JD_COOKIE }}" serverless.yml; fi; - if [${{ secrets.JD_BEAN_STOP}}]; then sed -i "/variables/a\ JD_BEAN_STOP: ${{ secrets.JD_BEAN_STOP}}" serverless.yml; fi; - if [${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}}]; then sed -i "/variables/a\ JD_BEAN_SIGN_STOP_NOTIFY: ${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}}" serverless.yml; fi; - if [${{ secrets.JD_BEAN_SIGN_NOTIFY_SIMPLE}}]; then sed -i "/variables/a\ JD_BEAN_SIGN_NOTIFY_SIMPLE: ${{ secrets.JD_BEAN_SIGN_NOTIFY_SIMPLE}}" serverless.yml; fi; - if [${{ secrets.JD_DEBUG}}]; then sed -i "/variables/a\ JD_DEBUG: ${{ secrets.JD_DEBUG}}" serverless.yml; fi; - if [${{ secrets.PUSH_KEY}}]; then sed -i "/variables/a\ PUSH_KEY: ${{ secrets.PUSH_KEY}}" serverless.yml; fi; - if [${{ secrets.BARK_PUSH}}]; then sed -i "/variables/a\ BARK_PUSH: ${{ secrets.BARK_PUSH}}" serverless.yml; fi; - if [${{ secrets.BARK_SOUND}}]; then sed -i "/variables/a\ BARK_SOUND: ${{ secrets.BARK_SOUND}}" serverless.yml; fi; - if [${{ secrets.TG_BOT_TOKEN}}]; then sed -i "/variables/a\ TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN}}" serverless.yml; fi; - if [${{ secrets.TG_USER_ID}}]; then sed -i "/variables/a\ TG_USER_ID: ${{ secrets.TG_USER_ID}}" serverless.yml; fi; - if [${{ secrets.DD_BOT_TOKEN}}]; then sed -i "/variables/a\ DD_BOT_TOKEN: ${{ secrets.DD_BOT_TOKEN}}" serverless.yml; fi; - if [${{ secrets.DD_BOT_SECRET}}]; then sed -i "/variables/a\ DD_BOT_SECRET: ${{ secrets.DD_BOT_SECRET}}" serverless.yml; fi; - if [${{ secrets.IGOT_PUSH_KEY}}]; then sed -i "/variables/a\ IGOT_PUSH_KEY: ${{ secrets.IGOT_PUSH_KEY}}" serverless.yml; fi; - if [${{ secrets.PET_NOTIFY_CONTROL}}]; then sed -i "/variables/a\ PET_NOTIFY_CONTROL: ${{ secrets.PET_NOTIFY_CONTROL}}" serverless.yml; fi; - if [${{ secrets.FRUIT_NOTIFY_CONTROL}}]; then sed -i "/variables/a\ FRUIT_NOTIFY_CONTROL: ${{ secrets.FRUIT_NOTIFY_CONTROL}}" serverless.yml; fi; - if [${{ secrets.JD_JOY_REWARD_NOTIFY}}]; then sed -i "/variables/a\ JD_JOY_REWARD_NOTIFY: ${{ secrets.JD_JOY_REWARD_NOTIFY}}" serverless.yml; fi; - if [${{ secrets.JD_818_SHAREID_NOTIFY}}]; then sed -i "/variables/a\ JD_818_SHAREID_NOTIFY: ${{ secrets.JD_818_SHAREID_NOTIFY}}" serverless.yml; fi; - if [${{ secrets.JOY_FEED_COUNT}}]; then sed -i "/variables/a\ JOY_FEED_COUNT: ${{ secrets.JOY_FEED_COUNT}}" serverless.yml; fi; - if [${{ secrets.JOY_HELP_FEED}}]; then sed -i "/variables/a\ JOY_HELP_FEED: ${{ secrets.JOY_HELP_FEED}}" serverless.yml; fi; - if [${{ secrets.JOY_RUN_FLAG}}]; then sed -i "/variables/a\ JOY_RUN_FLAG: ${{ secrets.JOY_RUN_FLAG}}" serverless.yml; fi; - if [${{ secrets.JD_JOY_REWARD_NAME}}]; then sed -i "/variables/a\ JD_JOY_REWARD_NAME: ${{ secrets.JD_JOY_REWARD_NAME}}" serverless.yml; fi; - if [${{ secrets.MARKET_COIN_TO_BEANS}}]; then sed -i "/variables/a\ MARKET_COIN_TO_BEANS: ${{ secrets.MARKET_COIN_TO_BEANS}}" serverless.yml; fi; - if [${{ secrets.MARKET_REWARD_NOTIFY}}]; then sed -i "/variables/a\ MARKET_REWARD_NOTIFY: ${{ secrets.MARKET_REWARD_NOTIFY}}" serverless.yml; fi; - if [${{ secrets.SUPERMARKET_UPGRADE}}]; then sed -i "/variables/a\ SUPERMARKET_UPGRADE: ${{ secrets.SUPERMARKET_UPGRADE}}" serverless.yml; fi; - if [${{ secrets.BUSINESS_CIRCLE_JUMP}}]; then sed -i "/variables/a\ BUSINESS_CIRCLE_JUMP: ${{ secrets.BUSINESS_CIRCLE_JUMP}}" serverless.yml; fi; - if [${{ secrets.SUPERMARKET_LOTTERY}}]; then sed -i "/variables/a\ SUPERMARKET_LOTTERY: ${{ secrets.SUPERMARKET_LOTTERY}}" serverless.yml; fi; - if [${{ secrets.FRUIT_BEAN_CARD}}]; then sed -i "/variables/a\ FRUIT_BEAN_CARD: ${{ secrets.FRUIT_BEAN_CARD}}" serverless.yml; fi; - if [${{ secrets.UN_SUBSCRIBES}}]; then sed -i "/variables/a\ UN_SUBSCRIBES: ${{ secrets.UN_SUBSCRIBES}}" serverless.yml; fi; - if [${{ secrets.FruitShareCodes}}]; then sed -i "/variables/a\ FruitShareCodes: ${{ secrets.FruitShareCodes}}" serverless.yml; fi; - if [${{ secrets.PETSHARECODES}}]; then sed -i "/variables/a\ PETSHARECODES: ${{ secrets.PETSHARECODES}}" serverless.yml; fi; - if [${{ secrets.PLANT_BEAN_SHARECODES}}]; then sed -i "/variables/a\ PLANT_BEAN_SHARECODES: ${{ secrets.PLANT_BEAN_SHARECODES}}" serverless.yml; fi; - if [${{ secrets.SUPERMARKET_SHARECODES}}]; then sed -i "/variables/a\ SUPERMARKET_SHARECODES: ${{ secrets.SUPERMARKET_SHARECODES}}" serverless.yml; fi; - if [${{ secrets.TG_PROXY_HOST}}]; then sed -i "/variables/a\ TG_PROXY_HOST: ${{ secrets.TG_PROXY_HOST}}" serverless.yml; fi; - if [${{ secrets.TG_PROXY_PORT}}]; then sed -i "/variables/a\ TG_PROXY_PORT: ${{ secrets.TG_PROXY_PORT}}" serverless.yml; fi; + if [ ${{ secrets.JD_COOKIE }} ]; then sed -i "/variables/a\ JD_COOKIE: ${{ secrets.JD_COOKIE }}" serverless.yml; fi; + if [ ${{ secrets.JD_COOKIE}} ]; then sed -i "/variables/a\ JD_COOKIE: ${{ secrets.JD_COOKIE}}" serverless.yml; fi; + if [ ${{ secrets.JD_BEAN_STOP}} ]; then sed -i "/variables/a\ JD_BEAN_STOP: ${{ secrets.JD_BEAN_STOP}}" serverless.yml; fi; + if [ ${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}} ]; then sed -i "/variables/a\ JD_BEAN_SIGN_STOP_NOTIFY: ${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}}" serverless.yml; fi; + if [ ${{ secrets.JD_BEAN_SIGN_NOTIFY_SIMPLE}} ]; then sed -i "/variables/a\ JD_BEAN_SIGN_NOTIFY_SIMPLE: ${{ secrets.JD_BEAN_SIGN_NOTIFY_SIMPLE}}" serverless.yml; fi; + if [ ${{ secrets.JD_DEBUG}} ]; then sed -i "/variables/a\ JD_DEBUG: ${{ secrets.JD_DEBUG}}" serverless.yml; fi; + if [ ${{ secrets.PUSH_KEY}} ]; then sed -i "/variables/a\ PUSH_KEY: ${{ secrets.PUSH_KEY}}" serverless.yml; fi; + if [ ${{ secrets.BARK_PUSH}} ]; then sed -i "/variables/a\ BARK_PUSH: ${{ secrets.BARK_PUSH}}" serverless.yml; fi; + if [ ${{ secrets.BARK_SOUND}} ]; then sed -i "/variables/a\ BARK_SOUND: ${{ secrets.BARK_SOUND}}" serverless.yml; fi; + if [ ${{ secrets.TG_BOT_TOKEN}} ]; then sed -i "/variables/a\ TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN}}" serverless.yml; fi; + if [ ${{ secrets.TG_USER_ID}} ]; then sed -i "/variables/a\ TG_USER_ID: ${{ secrets.TG_USER_ID}}" serverless.yml; fi; + if [ ${{ secrets.DD_BOT_TOKEN}} ]; then sed -i "/variables/a\ DD_BOT_TOKEN: ${{ secrets.DD_BOT_TOKEN}}" serverless.yml; fi; + if [ ${{ secrets.DD_BOT_SECRET}} ]; then sed -i "/variables/a\ DD_BOT_SECRET: ${{ secrets.DD_BOT_SECRET}}" serverless.yml; fi; + if [ ${{ secrets.IGOT_PUSH_KEY}} ]; then sed -i "/variables/a\ IGOT_PUSH_KEY: ${{ secrets.IGOT_PUSH_KEY}}" serverless.yml; fi; + if [ ${{ secrets.PET_NOTIFY_CONTROL}} ]; then sed -i "/variables/a\ PET_NOTIFY_CONTROL: ${{ secrets.PET_NOTIFY_CONTROL}}" serverless.yml; fi; + if [ ${{ secrets.FRUIT_NOTIFY_CONTROL}} ]; then sed -i "/variables/a\ FRUIT_NOTIFY_CONTROL: ${{ secrets.FRUIT_NOTIFY_CONTROL}}" serverless.yml; fi; + if [ ${{ secrets.JD_JOY_REWARD_NOTIFY}} ]; then sed -i "/variables/a\ JD_JOY_REWARD_NOTIFY: ${{ secrets.JD_JOY_REWARD_NOTIFY}}" serverless.yml; fi; + if [ ${{ secrets.JD_818_SHAREID_NOTIFY}} ]; then sed -i "/variables/a\ JD_818_SHAREID_NOTIFY: ${{ secrets.JD_818_SHAREID_NOTIFY}}" serverless.yml; fi; + if [ ${{ secrets.JOY_FEED_COUNT}} ]; then sed -i "/variables/a\ JOY_FEED_COUNT: ${{ secrets.JOY_FEED_COUNT}}" serverless.yml; fi; + if [ ${{ secrets.JOY_HELP_FEED}} ]; then sed -i "/variables/a\ JOY_HELP_FEED: ${{ secrets.JOY_HELP_FEED}}" serverless.yml; fi; + if [ ${{ secrets.JOY_RUN_FLAG}} ]; then sed -i "/variables/a\ JOY_RUN_FLAG: ${{ secrets.JOY_RUN_FLAG}}" serverless.yml; fi; + if [ ${{ secrets.JD_JOY_REWARD_NAME}} ]; then sed -i "/variables/a\ JD_JOY_REWARD_NAME: ${{ secrets.JD_JOY_REWARD_NAME}}" serverless.yml; fi; + if [ ${{ secrets.MARKET_COIN_TO_BEANS}} ]; then sed -i "/variables/a\ MARKET_COIN_TO_BEANS: ${{ secrets.MARKET_COIN_TO_BEANS}}" serverless.yml; fi; + if [ ${{ secrets.MARKET_REWARD_NOTIFY}} ]; then sed -i "/variables/a\ MARKET_REWARD_NOTIFY: ${{ secrets.MARKET_REWARD_NOTIFY}}" serverless.yml; fi; + if [ ${{ secrets.SUPERMARKET_UPGRADE}} ]; then sed -i "/variables/a\ SUPERMARKET_UPGRADE: ${{ secrets.SUPERMARKET_UPGRADE}}" serverless.yml; fi; + if [ ${{ secrets.BUSINESS_CIRCLE_JUMP}} ]; then sed -i "/variables/a\ BUSINESS_CIRCLE_JUMP: ${{ secrets.BUSINESS_CIRCLE_JUMP}}" serverless.yml; fi; + if [ ${{ secrets.SUPERMARKET_LOTTERY}} ]; then sed -i "/variables/a\ SUPERMARKET_LOTTERY: ${{ secrets.SUPERMARKET_LOTTERY}}" serverless.yml; fi; + if [ ${{ secrets.FRUIT_BEAN_CARD}} ]; then sed -i "/variables/a\ FRUIT_BEAN_CARD: ${{ secrets.FRUIT_BEAN_CARD}}" serverless.yml; fi; + if [ ${{ secrets.UN_SUBSCRIBES}} ]; then sed -i "/variables/a\ UN_SUBSCRIBES: ${{ secrets.UN_SUBSCRIBES}}" serverless.yml; fi; + if [ ${{ secrets.FruitShareCodes}} ]; then sed -i "/variables/a\ FruitShareCodes: ${{ secrets.FruitShareCodes}}" serverless.yml; fi; + if [ ${{ secrets.PETSHARECODES}} ]; then sed -i "/variables/a\ PETSHARECODES: ${{ secrets.PETSHARECODES}}" serverless.yml; fi; + if [ ${{ secrets.PLANT_BEAN_SHARECODES}} ]; then sed -i "/variables/a\ PLANT_BEAN_SHARECODES: ${{ secrets.PLANT_BEAN_SHARECODES}}" serverless.yml; fi; + if [ ${{ secrets.SUPERMARKET_SHARECODES}} ]; then sed -i "/variables/a\ SUPERMARKET_SHARECODES: ${{ secrets.SUPERMARKET_SHARECODES}}" serverless.yml; fi; + if [ ${{ secrets.TG_PROXY_HOST}} ]; then sed -i "/variables/a\ TG_PROXY_HOST: ${{ secrets.TG_PROXY_HOST}}" serverless.yml; fi; + if [ ${{ secrets.TG_PROXY_PORT}} ]; then sed -i "/variables/a\ TG_PROXY_PORT: ${{ secrets.TG_PROXY_PORT}}" serverless.yml; fi; cat serverless.yml - name: "部署到腾讯云函数" From c0666a66e23fe57e7abdb9b5d3661c1780906e11 Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 16:57:26 +0800 Subject: [PATCH 039/290] Update deploy_tencent_scf.yml --- .github/workflows/deploy_tencent_scf.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml index 5e37b08..d40a834 100644 --- a/.github/workflows/deploy_tencent_scf.yml +++ b/.github/workflows/deploy_tencent_scf.yml @@ -25,7 +25,6 @@ jobs: - name: "将Secrets里面配置的变量添加到severless.yml里面作为环境变量" run: | - if [ ${{ secrets.JD_COOKIE }} ]; then sed -i "/variables/a\ JD_COOKIE: ${{ secrets.JD_COOKIE }}" serverless.yml; fi; if [ ${{ secrets.JD_COOKIE}} ]; then sed -i "/variables/a\ JD_COOKIE: ${{ secrets.JD_COOKIE}}" serverless.yml; fi; if [ ${{ secrets.JD_BEAN_STOP}} ]; then sed -i "/variables/a\ JD_BEAN_STOP: ${{ secrets.JD_BEAN_STOP}}" serverless.yml; fi; if [ ${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}} ]; then sed -i "/variables/a\ JD_BEAN_SIGN_STOP_NOTIFY: ${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}}" serverless.yml; fi; From 2dcac20e63d74232743e2ea9f20a27ef5cb90039 Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 17:09:11 +0800 Subject: [PATCH 040/290] Update deploy_tencent_scf.yml --- .github/workflows/deploy_tencent_scf.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml index d40a834..5f817b4 100644 --- a/.github/workflows/deploy_tencent_scf.yml +++ b/.github/workflows/deploy_tencent_scf.yml @@ -25,7 +25,7 @@ jobs: - name: "将Secrets里面配置的变量添加到severless.yml里面作为环境变量" run: | - if [ ${{ secrets.JD_COOKIE}} ]; then sed -i "/variables/a\ JD_COOKIE: ${{ secrets.JD_COOKIE}}" serverless.yml; fi; + sed -i "/variables/a\ JD_COOKIE: ${{ secrets.JD_COOKIE}}" serverless.yml if [ ${{ secrets.JD_BEAN_STOP}} ]; then sed -i "/variables/a\ JD_BEAN_STOP: ${{ secrets.JD_BEAN_STOP}}" serverless.yml; fi; if [ ${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}} ]; then sed -i "/variables/a\ JD_BEAN_SIGN_STOP_NOTIFY: ${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}}" serverless.yml; fi; if [ ${{ secrets.JD_BEAN_SIGN_NOTIFY_SIMPLE}} ]; then sed -i "/variables/a\ JD_BEAN_SIGN_NOTIFY_SIMPLE: ${{ secrets.JD_BEAN_SIGN_NOTIFY_SIMPLE}}" serverless.yml; fi; From 4afcbb2eae54b011d45bb030e10908eb592ef08d Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 17:13:51 +0800 Subject: [PATCH 041/290] Update deploy_tencent_scf.yml --- .github/workflows/deploy_tencent_scf.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml index 5f817b4..b46c786 100644 --- a/.github/workflows/deploy_tencent_scf.yml +++ b/.github/workflows/deploy_tencent_scf.yml @@ -22,6 +22,8 @@ jobs: run: | npm install sudo npm install serverless -g + env: + TG_USER_ID: ${{ secrets.TG_USER_ID}} - name: "将Secrets里面配置的变量添加到severless.yml里面作为环境变量" run: | @@ -34,7 +36,7 @@ jobs: if [ ${{ secrets.BARK_PUSH}} ]; then sed -i "/variables/a\ BARK_PUSH: ${{ secrets.BARK_PUSH}}" serverless.yml; fi; if [ ${{ secrets.BARK_SOUND}} ]; then sed -i "/variables/a\ BARK_SOUND: ${{ secrets.BARK_SOUND}}" serverless.yml; fi; if [ ${{ secrets.TG_BOT_TOKEN}} ]; then sed -i "/variables/a\ TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN}}" serverless.yml; fi; - if [ ${{ secrets.TG_USER_ID}} ]; then sed -i "/variables/a\ TG_USER_ID: ${{ secrets.TG_USER_ID}}" serverless.yml; fi; + if [ $TG_USER_ID ]; then sed -i "/variables/a\ TG_USER_ID: $TG_USER_ID" serverless.yml; fi; if [ ${{ secrets.DD_BOT_TOKEN}} ]; then sed -i "/variables/a\ DD_BOT_TOKEN: ${{ secrets.DD_BOT_TOKEN}}" serverless.yml; fi; if [ ${{ secrets.DD_BOT_SECRET}} ]; then sed -i "/variables/a\ DD_BOT_SECRET: ${{ secrets.DD_BOT_SECRET}}" serverless.yml; fi; if [ ${{ secrets.IGOT_PUSH_KEY}} ]; then sed -i "/variables/a\ IGOT_PUSH_KEY: ${{ secrets.IGOT_PUSH_KEY}}" serverless.yml; fi; From e0ce6d8ec331c60b202e1850e40e7dcf4d11fa54 Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 17:17:42 +0800 Subject: [PATCH 042/290] Update deploy_tencent_scf.yml --- .github/workflows/deploy_tencent_scf.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml index b46c786..a53c9dd 100644 --- a/.github/workflows/deploy_tencent_scf.yml +++ b/.github/workflows/deploy_tencent_scf.yml @@ -62,6 +62,7 @@ jobs: if [ ${{ secrets.TG_PROXY_HOST}} ]; then sed -i "/variables/a\ TG_PROXY_HOST: ${{ secrets.TG_PROXY_HOST}}" serverless.yml; fi; if [ ${{ secrets.TG_PROXY_PORT}} ]; then sed -i "/variables/a\ TG_PROXY_PORT: ${{ secrets.TG_PROXY_PORT}}" serverless.yml; fi; cat serverless.yml + env - name: "部署到腾讯云函数" run: serverless deploy From ada600d7b844862b5abcc03e1ce35ee5180b4cbf Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 17:21:15 +0800 Subject: [PATCH 043/290] Update deploy_tencent_scf.yml --- .github/workflows/deploy_tencent_scf.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml index a53c9dd..2787462 100644 --- a/.github/workflows/deploy_tencent_scf.yml +++ b/.github/workflows/deploy_tencent_scf.yml @@ -22,6 +22,7 @@ jobs: run: | npm install sudo npm install serverless -g + env env: TG_USER_ID: ${{ secrets.TG_USER_ID}} @@ -63,6 +64,8 @@ jobs: if [ ${{ secrets.TG_PROXY_PORT}} ]; then sed -i "/variables/a\ TG_PROXY_PORT: ${{ secrets.TG_PROXY_PORT}}" serverless.yml; fi; cat serverless.yml env + env: + TG_USER_ID: ${{ secrets.TG_USER_ID}} - name: "部署到腾讯云函数" run: serverless deploy From af05ee13790143f2bef8b5de7f24603a9b159e13 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 18 Nov 2020 17:21:55 +0800 Subject: [PATCH 044/290] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug,=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=AF=8F=E6=97=A5=E7=AD=BE=E5=88=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_pigPet.js | 151 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 146 insertions(+), 5 deletions(-) diff --git a/jd_pigPet.js b/jd_pigPet.js index 3d1a6bf..3aedd66 100644 --- a/jd_pigPet.js +++ b/jd_pigPet.js @@ -59,6 +59,10 @@ if ($.isNode()) { $.done(); }) async function jdPigPet() { + await pigPetLogin(); + if (!$.hasPig) return + await pigPetSignIndex(); + await pigPetSign(); await pigPetOpenBox(); await pigPetLotteryIndex(); await pigPetLottery(); @@ -71,6 +75,53 @@ async function pigPetLottery() { } } } +async function pigPetSign() { + if (!$.sign) { + await pigPetSignOne(); + } else { + console.log(`第${$.no}天已签到\n`) + } +} +function pigPetSignOne() { + return new Promise(async resolve => { + const body = { + "source":2, + "channelLV":"juheye", + "riskDeviceParam": "{}", + "no": $.no + } + $.post(taskUrl('pigPetSignOne', body), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + console.log('签到结果',data) + // data = JSON.parse(data); + // if (data.resultCode === 0) { + // if (data.resultData.resultCode === 0) { + // if (data.resultData.resultData) { + // console.log(`当前大转盘剩余免费抽奖次数::${data.resultData.resultData.currentCount}`); + // $.sign = data.resultData.resultData.sign; + // $.no = data.resultData.resultData.today; + // } + // } else { + // console.log(`查询签到情况异常:${JSON.stringify(data)}`) + // } + // } + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} //查询背包食物 function pigPetUserBag() { return new Promise(async resolve => { @@ -120,7 +171,19 @@ function pigPetUserBag() { function pigPetAddFood(skuId) { return new Promise(async resolve => { console.log(`skuId::::${skuId}`) - const body = {"source":0,"channelLV":"yqs","riskDeviceParam":"{}","t":Date.now(), skuId ,"category":"1001"} + const body = { + "source": 0, + "channelLV":"yqs", + "riskDeviceParam":"{}", + "skuId": skuId.toString(), + "category":"1001", + } + // const body = { + // "source": 2, + // "channelLV":"juheye", + // "riskDeviceParam":"{}", + // "skuId": skuId.toString(), + // } $.post(taskUrl('pigPetAddFood', body), (err, resp, data) => { try { if (err) { @@ -142,6 +205,43 @@ function pigPetAddFood(skuId) { }) }) } +function pigPetLogin() { + return new Promise(async resolve => { + const body = { + "source":2, + "channelLV":"juheye", + "riskDeviceParam":"{}", + } + $.post(taskUrl('pigPetLogin', body), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + data = JSON.parse(data); + if (data.resultCode === 0) { + if (data.resultData.resultCode === 0) { + $.hasPig = data.resultData.resultData.hasPig; + if (!$.hasPig) { + console.log(`\n京东账号${$.index} ${$.nickName} 未开启养猪活动,请手动去京东金融APP开启此活动\n`) + } + } else { + console.log(`Login其他情况:${JSON.stringify(data)}`) + } + } + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} //开宝箱 function pigPetOpenBox() { return new Promise(async resolve => { @@ -223,6 +323,46 @@ function pigPetLotteryIndex() { }) }) } +//查询签到情况 +function pigPetSignIndex() { + $.sign = true; + return new Promise(async resolve => { + const body = { + "source":2, + "channelLV":"juheye", + "riskDeviceParam": "{}" + } + $.post(taskUrl('pigPetSignIndex', body), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + // console.log(data) + data = JSON.parse(data); + if (data.resultCode === 0) { + if (data.resultData.resultCode === 0) { + if (data.resultData.resultData) { + $.sign = data.resultData.resultData.sign; + $.no = data.resultData.resultData.today; + } + } else { + console.log(`查询签到情况异常:${JSON.stringify(data)}`) + } + } + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} //抽奖 function pigPetLotteryPlay() { return new Promise(async resolve => { @@ -309,15 +449,16 @@ function taskUrl(function_id, body) { url: `${JD_API_HOST}/${function_id}?_=${Date.now()}`, body: `reqData=${encodeURIComponent(JSON.stringify(body))}`, headers: { - 'Accept' : `application/json`, - 'Origin' : `https://uua.jr.jd.com`, + 'Accept' : `*/*`, + 'Origin' : `https://u.jr.jd.com`, 'Accept-Encoding' : `gzip, deflate, br`, 'Cookie' : cookie, 'Content-Type' : `application/x-www-form-urlencoded;charset=UTF-8`, 'Host' : `ms.jr.jd.com`, 'Connection' : `keep-alive`, - 'User-Agent' : `jdapp;iPhone;9.0.0;13.4.1;e35caf0a69be42084e3c97eef56c3af7b0262d01;network/4g;ADID/F75E8AED-CB48-4EAC-A213-E8CE4018F214;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/1;model/iPhone11,8;addressid/2005183373;hasOCPay/0;appBuild/167237;supportBestPay/0;jdSupportDarkMode/0;pv/1287.19;apprpd/MyJD_GameMain;ref/https%3A%2F%2Fuua.jr.jd.com%2Fuc-fe-wxgrowing%2Fmoneytree%2Findex%2F%3Fchannel%3Dyxhd%26lng%3D113.325843%26lat%3D23.204628%26sid%3D2d98e88cf7d182f60d533476c2ce777w%26un_area%3D19_1601_50258_51885;psq/1;ads/;psn/e35caf0a69be42084e3c97eef56c3af7b0262d01|3485;jdv/0|kong|t_1000170135|tuiguang|notset|1593059927172|1593059927;adk/;app_device/IOS;pap/JA2015_311210|9.0.0|IOS 13.4.1;Mozilla/5.0 (iPhone; CPU iPhone OS 13_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1`, - 'Referer' : `https://uua.jr.jd.com`, + // 'User-Agent' : `jdapp;iPhone;9.0.0;13.4.1;e35caf0a69be42084e3c97eef56c3af7b0262d01;network/4g;ADID/F75E8AED-CB48-4EAC-A213-E8CE4018F214;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/1;model/iPhone11,8;addressid/2005183373;hasOCPay/0;appBuild/167237;supportBestPay/0;jdSupportDarkMode/0;pv/1287.19;apprpd/MyJD_GameMain;ref/https%3A%2F%2Fuua.jr.jd.com%2Fuc-fe-wxgrowing%2Fmoneytree%2Findex%2F%3Fchannel%3Dyxhd%26lng%3D113.325843%26lat%3D23.204628%26sid%3D2d98e88cf7d182f60d533476c2ce777w%26un_area%3D19_1601_50258_51885;psq/1;ads/;psn/e35caf0a69be42084e3c97eef56c3af7b0262d01|3485;jdv/0|kong|t_1000170135|tuiguang|notset|1593059927172|1593059927;adk/;app_device/IOS;pap/JA2015_311210|9.0.0|IOS 13.4.1;Mozilla/5.0 (iPhone; CPU iPhone OS 13_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1`, + 'User-Agent' : `jdapp;android;8.5.12;9;network/wifi;model/GM1910;addressid/1302541636;aid/ac31e03386ddbec6;oaid/;osVer/28;appBuild/73078;adk/;ads/;pap/JA2015_311210|8.5.12|ANDROID 9;osv/9;pv/117.24;jdv/0|kong|t_1000217905_|jingfen|644e9b005c8542c1ac273da7763971d8|1589905791552|1589905794;ref/com.jingdong.app.mall.WebActivity;partner/oppo;apprpd/Home_Main;Mozilla/5.0 (Linux; Android 9; GM1910 Build/PKQ1.190110.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36 Edg/86.0.4240.111`, + 'Referer' : `https://u.jr.jd.com/`, 'Accept-Language' : `zh-cn` } } From 7d6b81735b164a2f7622065873bab55c7c1c1fdc Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 17:30:43 +0800 Subject: [PATCH 045/290] Update deploy_tencent_scf.yml --- .github/workflows/deploy_tencent_scf.yml | 104 +++++++++++++++-------- 1 file changed, 67 insertions(+), 37 deletions(-) diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml index 2787462..b7ecdd6 100644 --- a/.github/workflows/deploy_tencent_scf.yml +++ b/.github/workflows/deploy_tencent_scf.yml @@ -22,50 +22,80 @@ jobs: run: | npm install sudo npm install serverless -g - env - env: - TG_USER_ID: ${{ secrets.TG_USER_ID}} - name: "将Secrets里面配置的变量添加到severless.yml里面作为环境变量" run: | - sed -i "/variables/a\ JD_COOKIE: ${{ secrets.JD_COOKIE}}" serverless.yml - if [ ${{ secrets.JD_BEAN_STOP}} ]; then sed -i "/variables/a\ JD_BEAN_STOP: ${{ secrets.JD_BEAN_STOP}}" serverless.yml; fi; - if [ ${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}} ]; then sed -i "/variables/a\ JD_BEAN_SIGN_STOP_NOTIFY: ${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}}" serverless.yml; fi; - if [ ${{ secrets.JD_BEAN_SIGN_NOTIFY_SIMPLE}} ]; then sed -i "/variables/a\ JD_BEAN_SIGN_NOTIFY_SIMPLE: ${{ secrets.JD_BEAN_SIGN_NOTIFY_SIMPLE}}" serverless.yml; fi; - if [ ${{ secrets.JD_DEBUG}} ]; then sed -i "/variables/a\ JD_DEBUG: ${{ secrets.JD_DEBUG}}" serverless.yml; fi; - if [ ${{ secrets.PUSH_KEY}} ]; then sed -i "/variables/a\ PUSH_KEY: ${{ secrets.PUSH_KEY}}" serverless.yml; fi; - if [ ${{ secrets.BARK_PUSH}} ]; then sed -i "/variables/a\ BARK_PUSH: ${{ secrets.BARK_PUSH}}" serverless.yml; fi; - if [ ${{ secrets.BARK_SOUND}} ]; then sed -i "/variables/a\ BARK_SOUND: ${{ secrets.BARK_SOUND}}" serverless.yml; fi; - if [ ${{ secrets.TG_BOT_TOKEN}} ]; then sed -i "/variables/a\ TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN}}" serverless.yml; fi; + if [ $JD_COOKIE ]; then sed -i "/variables/a\ JD_COOKIE: $JD_COOKIE" serverless.yml; fi; + if [ $JD_BEAN_STOP ]; then sed -i "/variables/a\ JD_BEAN_STOP: $JD_BEAN_STOP" serverless.yml; fi; + if [ $JD_BEAN_SIGN_STOP_NOTIFY ]; then sed -i "/variables/a\ JD_BEAN_SIGN_STOP_NOTIFY: $JD_BEAN_SIGN_STOP_NOTIFY" serverless.yml; fi; + if [ $JD_BEAN_SIGN_NOTIFY_SIMPLE ]; then sed -i "/variables/a\ JD_BEAN_SIGN_NOTIFY_SIMPLE: $JD_BEAN_SIGN_NOTIFY_SIMPLE" serverless.yml; fi; + if [ $JD_DEBUG ]; then sed -i "/variables/a\ JD_DEBUG: $JD_DEBUG" serverless.yml; fi; + if [ $PUSH_KEY ]; then sed -i "/variables/a\ PUSH_KEY: $PUSH_KEY" serverless.yml; fi; + if [ $BARK_PUSH ]; then sed -i "/variables/a\ BARK_PUSH: $BARK_PUSH" serverless.yml; fi; + if [ $BARK_SOUND ]; then sed -i "/variables/a\ BARK_SOUND: $BARK_SOUND" serverless.yml; fi; + if [ $TG_BOT_TOKEN ]; then sed -i "/variables/a\ TG_BOT_TOKEN: $TG_BOT_TOKEN" serverless.yml; fi; if [ $TG_USER_ID ]; then sed -i "/variables/a\ TG_USER_ID: $TG_USER_ID" serverless.yml; fi; - if [ ${{ secrets.DD_BOT_TOKEN}} ]; then sed -i "/variables/a\ DD_BOT_TOKEN: ${{ secrets.DD_BOT_TOKEN}}" serverless.yml; fi; - if [ ${{ secrets.DD_BOT_SECRET}} ]; then sed -i "/variables/a\ DD_BOT_SECRET: ${{ secrets.DD_BOT_SECRET}}" serverless.yml; fi; - if [ ${{ secrets.IGOT_PUSH_KEY}} ]; then sed -i "/variables/a\ IGOT_PUSH_KEY: ${{ secrets.IGOT_PUSH_KEY}}" serverless.yml; fi; - if [ ${{ secrets.PET_NOTIFY_CONTROL}} ]; then sed -i "/variables/a\ PET_NOTIFY_CONTROL: ${{ secrets.PET_NOTIFY_CONTROL}}" serverless.yml; fi; - if [ ${{ secrets.FRUIT_NOTIFY_CONTROL}} ]; then sed -i "/variables/a\ FRUIT_NOTIFY_CONTROL: ${{ secrets.FRUIT_NOTIFY_CONTROL}}" serverless.yml; fi; - if [ ${{ secrets.JD_JOY_REWARD_NOTIFY}} ]; then sed -i "/variables/a\ JD_JOY_REWARD_NOTIFY: ${{ secrets.JD_JOY_REWARD_NOTIFY}}" serverless.yml; fi; - if [ ${{ secrets.JD_818_SHAREID_NOTIFY}} ]; then sed -i "/variables/a\ JD_818_SHAREID_NOTIFY: ${{ secrets.JD_818_SHAREID_NOTIFY}}" serverless.yml; fi; - if [ ${{ secrets.JOY_FEED_COUNT}} ]; then sed -i "/variables/a\ JOY_FEED_COUNT: ${{ secrets.JOY_FEED_COUNT}}" serverless.yml; fi; - if [ ${{ secrets.JOY_HELP_FEED}} ]; then sed -i "/variables/a\ JOY_HELP_FEED: ${{ secrets.JOY_HELP_FEED}}" serverless.yml; fi; - if [ ${{ secrets.JOY_RUN_FLAG}} ]; then sed -i "/variables/a\ JOY_RUN_FLAG: ${{ secrets.JOY_RUN_FLAG}}" serverless.yml; fi; - if [ ${{ secrets.JD_JOY_REWARD_NAME}} ]; then sed -i "/variables/a\ JD_JOY_REWARD_NAME: ${{ secrets.JD_JOY_REWARD_NAME}}" serverless.yml; fi; - if [ ${{ secrets.MARKET_COIN_TO_BEANS}} ]; then sed -i "/variables/a\ MARKET_COIN_TO_BEANS: ${{ secrets.MARKET_COIN_TO_BEANS}}" serverless.yml; fi; - if [ ${{ secrets.MARKET_REWARD_NOTIFY}} ]; then sed -i "/variables/a\ MARKET_REWARD_NOTIFY: ${{ secrets.MARKET_REWARD_NOTIFY}}" serverless.yml; fi; - if [ ${{ secrets.SUPERMARKET_UPGRADE}} ]; then sed -i "/variables/a\ SUPERMARKET_UPGRADE: ${{ secrets.SUPERMARKET_UPGRADE}}" serverless.yml; fi; - if [ ${{ secrets.BUSINESS_CIRCLE_JUMP}} ]; then sed -i "/variables/a\ BUSINESS_CIRCLE_JUMP: ${{ secrets.BUSINESS_CIRCLE_JUMP}}" serverless.yml; fi; - if [ ${{ secrets.SUPERMARKET_LOTTERY}} ]; then sed -i "/variables/a\ SUPERMARKET_LOTTERY: ${{ secrets.SUPERMARKET_LOTTERY}}" serverless.yml; fi; - if [ ${{ secrets.FRUIT_BEAN_CARD}} ]; then sed -i "/variables/a\ FRUIT_BEAN_CARD: ${{ secrets.FRUIT_BEAN_CARD}}" serverless.yml; fi; - if [ ${{ secrets.UN_SUBSCRIBES}} ]; then sed -i "/variables/a\ UN_SUBSCRIBES: ${{ secrets.UN_SUBSCRIBES}}" serverless.yml; fi; - if [ ${{ secrets.FruitShareCodes}} ]; then sed -i "/variables/a\ FruitShareCodes: ${{ secrets.FruitShareCodes}}" serverless.yml; fi; - if [ ${{ secrets.PETSHARECODES}} ]; then sed -i "/variables/a\ PETSHARECODES: ${{ secrets.PETSHARECODES}}" serverless.yml; fi; - if [ ${{ secrets.PLANT_BEAN_SHARECODES}} ]; then sed -i "/variables/a\ PLANT_BEAN_SHARECODES: ${{ secrets.PLANT_BEAN_SHARECODES}}" serverless.yml; fi; - if [ ${{ secrets.SUPERMARKET_SHARECODES}} ]; then sed -i "/variables/a\ SUPERMARKET_SHARECODES: ${{ secrets.SUPERMARKET_SHARECODES}}" serverless.yml; fi; - if [ ${{ secrets.TG_PROXY_HOST}} ]; then sed -i "/variables/a\ TG_PROXY_HOST: ${{ secrets.TG_PROXY_HOST}}" serverless.yml; fi; - if [ ${{ secrets.TG_PROXY_PORT}} ]; then sed -i "/variables/a\ TG_PROXY_PORT: ${{ secrets.TG_PROXY_PORT}}" serverless.yml; fi; + if [ $DD_BOT_TOKEN ]; then sed -i "/variables/a\ DD_BOT_TOKEN: $DD_BOT_TOKEN" serverless.yml; fi; + if [ $DD_BOT_SECRET ]; then sed -i "/variables/a\ DD_BOT_SECRET: $DD_BOT_SECRET" serverless.yml; fi; + if [ $IGOT_PUSH_KEY ]; then sed -i "/variables/a\ IGOT_PUSH_KEY: $IGOT_PUSH_KEY" serverless.yml; fi; + if [ $PET_NOTIFY_CONTROL ]; then sed -i "/variables/a\ PET_NOTIFY_CONTROL: $PET_NOTIFY_CONTROL" serverless.yml; fi; + if [ $FRUIT_NOTIFY_CONTROL ]; then sed -i "/variables/a\ FRUIT_NOTIFY_CONTROL: $FRUIT_NOTIFY_CONTROL" serverless.yml; fi; + if [ $JD_JOY_REWARD_NOTIFY ]; then sed -i "/variables/a\ JD_JOY_REWARD_NOTIFY: $JD_JOY_REWARD_NOTIFY" serverless.yml; fi; + if [ $JD_818_SHAREID_NOTIFY ]; then sed -i "/variables/a\ JD_818_SHAREID_NOTIFY: $JD_818_SHAREID_NOTIFY" serverless.yml; fi; + if [ $JOY_FEED_COUNT ]; then sed -i "/variables/a\ JOY_FEED_COUNT: $JOY_FEED_COUNT" serverless.yml; fi; + if [ $JOY_HELP_FEED ]; then sed -i "/variables/a\ JOY_HELP_FEED: $JOY_HELP_FEED" serverless.yml; fi; + if [ $JOY_RUN_FLAG ]; then sed -i "/variables/a\ JOY_RUN_FLAG: $JOY_RUN_FLAG" serverless.yml; fi; + if [ $JD_JOY_REWARD_NAME ]; then sed -i "/variables/a\ JD_JOY_REWARD_NAME: $JD_JOY_REWARD_NAME" serverless.yml; fi; + if [ $MARKET_COIN_TO_BEANS ]; then sed -i "/variables/a\ MARKET_COIN_TO_BEANS: $MARKET_COIN_TO_BEANS" serverless.yml; fi; + if [ $MARKET_REWARD_NOTIFY ]; then sed -i "/variables/a\ MARKET_REWARD_NOTIFY: $MARKET_REWARD_NOTIFY" serverless.yml; fi; + if [ $SUPERMARKET_UPGRADE ]; then sed -i "/variables/a\ SUPERMARKET_UPGRADE: $SUPERMARKET_UPGRADE" serverless.yml; fi; + if [ $BUSINESS_CIRCLE_JUMP ]; then sed -i "/variables/a\ BUSINESS_CIRCLE_JUMP: $BUSINESS_CIRCLE_JUMP" serverless.yml; fi; + if [ $SUPERMARKET_LOTTERY ]; then sed -i "/variables/a\ SUPERMARKET_LOTTERY: $SUPERMARKET_LOTTERY" serverless.yml; fi; + if [ $FRUIT_BEAN_CARD ]; then sed -i "/variables/a\ FRUIT_BEAN_CARD: $FRUIT_BEAN_CARD" serverless.yml; fi; + if [ $UN_SUBSCRIBES ]; then sed -i "/variables/a\ UN_SUBSCRIBES: $UN_SUBSCRIBES" serverless.yml; fi; + if [ $FruitShareCodes ]; then sed -i "/variables/a\ FruitShareCodes: $FruitShareCodes" serverless.yml; fi; + if [ $PETSHARECODES ]; then sed -i "/variables/a\ PETSHARECODES: $PETSHARECODES" serverless.yml; fi; + if [ $PLANT_BEAN_SHARECODES ]; then sed -i "/variables/a\ PLANT_BEAN_SHARECODES: $PLANT_BEAN_SHARECODES" serverless.yml; fi; + if [ $SUPERMARKET_SHARECODES ]; then sed -i "/variables/a\ SUPERMARKET_SHARECODES: $SUPERMARKET_SHARECODES" serverless.yml; fi; + if [ $TG_PROXY_HOST ]; then sed -i "/variables/a\ TG_PROXY_HOST: $TG_PROXY_HOST" serverless.yml; fi; + if [ $TG_PROXY_PORT ]; then sed -i "/variables/a\ TG_PROXY_PORT: $TG_PROXY_PORT" serverless.yml; fi; cat serverless.yml env - env: + env: #因为直接读取secrets里面的值很多字符不会自动转译,导致写入serverless.yml异常,所以设置到环境变量,在读取环境变量转译过的值 + JD_COOKIE: ${{ secrets.JD_COOKIE}} + JD_BEAN_STOP: ${{ secrets.JD_BEAN_STOP}} + JD_BEAN_SIGN_STOP_NOTIFY: ${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}} + JD_BEAN_SIGN_NOTIFY_SIMPLE: ${{ secrets.JD_BEAN_SIGN_NOTIFY_SIMPLE}} + JD_DEBUG: ${{ secrets.JD_DEBUG}} + 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}} + IGOT_PUSH_KEY: ${{ secrets.IGOT_PUSH_KEY}} + PET_NOTIFY_CONTROL: ${{ secrets.PET_NOTIFY_CONTROL}} + FRUIT_NOTIFY_CONTROL: ${{ secrets.FRUIT_NOTIFY_CONTROL}} + JD_JOY_REWARD_NOTIFY: ${{ secrets.JD_JOY_REWARD_NOTIFY}} + JD_818_SHAREID_NOTIFY: ${{ secrets.JD_818_SHAREID_NOTIFY}} + JOY_FEED_COUNT: ${{ secrets.JOY_FEED_COUNT}} + JOY_HELP_FEED: ${{ secrets.JOY_HELP_FEED}} + JOY_RUN_FLAG: ${{ secrets.JOY_RUN_FLAG}} + JD_JOY_REWARD_NAME: ${{ secrets.JD_JOY_REWARD_NAME}} + MARKET_COIN_TO_BEANS: ${{ secrets.MARKET_COIN_TO_BEANS}} + MARKET_REWARD_NOTIFY: ${{ secrets.MARKET_REWARD_NOTIFY}} + SUPERMARKET_UPGRADE: ${{ secrets.SUPERMARKET_UPGRADE}} + BUSINESS_CIRCLE_JUMP: ${{ secrets.BUSINESS_CIRCLE_JUMP}} + SUPERMARKET_LOTTERY: ${{ secrets.SUPERMARKET_LOTTERY}} + FRUIT_BEAN_CARD: ${{ secrets.FRUIT_BEAN_CARD}} + UN_SUBSCRIBES: ${{ secrets.UN_SUBSCRIBES}} + FruitShareCodes: ${{ secrets.FruitShareCodes}} + PETSHARECODES: ${{ secrets.PETSHARECODES}} + PLANT_BEAN_SHARECODES: ${{ secrets.PLANT_BEAN_SHARECODES}} + SUPERMARKET_SHARECODES: ${{ secrets.SUPERMARKET_SHARECODES}} + TG_PROXY_HOST: ${{ secrets.TG_PROXY_HOST}} + TG_PROXY_PORT: ${{ secrets.TG_PROXY_PORT}} - name: "部署到腾讯云函数" run: serverless deploy From 885c8e26caa646c8f8ad8861a839593f984e4ce3 Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 17:34:17 +0800 Subject: [PATCH 046/290] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 44a6eb5..04d49ab 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ - 需自行有云服务器,云函数等 - 腾讯云云函数 [快速部署教程](tencentscf.md)(免费) - 腾讯云云函数控制台使用 [教程说明](iCloud.md) - - 腾讯云云函数 [GitHub Action部署教程](tencentscf.md)(免费) + - 腾讯云云函数 [GitHub Action部署教程](tencentscf.md#github-action-部署) ### 方法三:Docker(NAS或VPS用户) From 56dbe5672b5ea5b2f3308341bb6f203bed03822c Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 17:45:27 +0800 Subject: [PATCH 047/290] Update tencentscf.md --- tencentscf.md | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/tencentscf.md b/tencentscf.md index 389abb8..e5a7084 100644 --- a/tencentscf.md +++ b/tencentscf.md @@ -1,9 +1,8 @@ # 云函数快速部署京东脚本 - -# 两种方式 -- 本地安装依赖使用serverless部署,[点这里]() -- Github Action 部署[点这里]() +> +> - 本地安装依赖使用serverless部署,[点这里](tencentscf.md#1-安装-nodejs-环境) +> - Github Action 部署[点这里](tencentscf.md#github-action-部署) ## 1. 安装 Node.js 环境 @@ -109,6 +108,14 @@ triggers: ## 2. 在这里新建一个访问密钥[新建密钥](https://console.cloud.tencent.com/cam/capi) > 将SecretId和SecretKey分别配置在仓库的secrets变量里面, TENCENT_SECRET_ID对应你的SecretId的值,TENCENT_SECRET_KEY对应你的SecretKey的值 -## 3. 配置自己需要secrets变量[参考这里](https://github.com/lxk0301/jd_scripts/blob/master/githubAction.md#%E4%B8%8B%E6%96%B9%E6%8F%90%E4%BE%9B%E4%BD%BF%E7%94%A8%E5%88%B0%E7%9A%84-secrets%E5%85%A8%E9%9B%86%E5%90%88) +## 3. 配置自己需要secrets变量[参考这里](githubAction.md#下方提供使用到的-secrets全集合) -## 4.执行action workflow进行部署,workflow未报错即部署成功 \ No newline at end of file +## 4.执行action workflow进行部署,workflow未报错即部署成功 +![image](https://user-images.githubusercontent.com/6993269/99513289-6a152980-29c5-11eb-9266-3f56ba13d3b2.png) +## 5. 查看和测试 +登录后,在 [腾讯云函数地址](https://console.cloud.tencent.com/scf/index) 点击管理控制台,查看最新部署的函数。 + +在左侧栏的日志查询中,可以查看到触发的日志,包括是否打卡成功等。 + +![测试函数](https://imgbed-bucket-1251971143.cos.ap-guangzhou.myqcloud.com/./1605263963294-test.png) +## 6. 设置触发器[看这里](iCloud.md#5设置触发器) From 55cfebf3556ecf6aa064ad272689579d07d9b7f8 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 18 Nov 2020 17:55:07 +0800 Subject: [PATCH 048/290] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_joy_reward.js | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/jd_joy_reward.js b/jd_joy_reward.js index a8f331a..c6fa4f4 100644 --- a/jd_joy_reward.js +++ b/jd_joy_reward.js @@ -1,9 +1,7 @@ /* 宠汪汪积分兑换奖品脚本, 目前脚本只兑换京豆,兑换京豆成功,才会发出通知提示,其他情况不通知。 -更新时间:2020-11-05 +更新时间:2020-11-18 兑换规则:一个账号一天只能兑换一次京豆。 -1-20级:340积分兑换20京豆, 21-25级:320积分换20京豆 -再往上的等级兑换规则目前不知,欢迎大家提供信息 兑换奖品成功后才会有系统弹窗通知 每日京豆库存会在0:00、8:00、16:00更新,经测试发现中午12:00也会有补发京豆。 支持京东双账号 @@ -141,6 +139,8 @@ async function joyReward() { } else { console.log(`兑奖异常:${JSON.stringify($.exchangeRes)}`) } + } else { + console.log(`兑换京豆异常:${JSON.stringify($.exchangeRes)}`) } } else { console.log(`兑换${rewardNum}京豆失败,原因:京豆库存不足,已抢完,请下一场再兑换`) @@ -153,7 +153,7 @@ async function joyReward() { console.log('您设置了不兑换京豆,如需兑换京豆,请去BoxJs重新设置或修改第20行代码') } } else { - console.log(`${$.name}异常,${JSON.stringify($.getExchangeRewardsRes)}`) + console.log(`${$.name}getExchangeRewards异常,${JSON.stringify($.getExchangeRewardsRes)}`) } } function getExchangeRewards() { @@ -175,10 +175,15 @@ function getExchangeRewards() { } $.get(option, (err, resp, data) => { try { - if (data) { - $.getExchangeRewardsRes = JSON.parse(data); + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) } else { - console.log(`${$.name}京豆api返回数据为空,请检查自身原因`) + if (data) { + $.getExchangeRewardsRes = JSON.parse(data); + } else { + console.log(`${$.name}api返回数据为空,请检查自身原因`) + } } } catch (e) { $.logErr(e, resp); @@ -210,11 +215,15 @@ function exchange(saleInfoId, orderSource) { } $.post(option, (err, resp, data) => { try { - // console.log('exchange', data) - if (data) { - $.exchangeRes = JSON.parse(data); + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) } else { - console.log(`${$.name}京豆api返回数据为空,请检查自身原因`) + if (data) { + $.exchangeRes = JSON.parse(data); + } else { + console.log(`${$.name}api返回数据为空,请检查自身原因`) + } } } catch (e) { $.logErr(e, resp); From 19babc2daf9b451eda03617fa227514134702c45 Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 20:12:10 +0800 Subject: [PATCH 049/290] Update index.js --- index.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index 82e1aed..cc1358f 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,10 @@ 'use strict'; exports.main_handler = async (event, context, callback) => { - require('./jd_xtg.js') //这里写你想要的脚本 - require('./jd_fruit.js') //这里写你想要的脚本 + for (const v of event["Message"].split("\r\n")) { + console.log(v); + var request = require('request'); + request('https://gitee.com/lxk0301/jd_scripts/raw/master/'+v+'.js', function (error, response, body) { + eval(response.body) + }) + } } From 35da1e53a2e9a7ea82b72f2195eb0f99378c4005 Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 20:15:40 +0800 Subject: [PATCH 050/290] Update serverless.yml --- serverless.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/serverless.yml b/serverless.yml index 393d4c1..0f64e4e 100644 --- a/serverless.yml +++ b/serverless.yml @@ -18,10 +18,16 @@ inputs: events: # 触发器 - timer: # 定时触发器 parameters: - # name: timer # 触发器名称,默认timer-${name}-${stage} + name: jd_bean_sign # 触发器名称 cronExpression: "0 0 0 */1 * * *" # 每天零点执行一次 enable: true - argument: argument # 额外的参数 + argument: jd_bean_sign # 额外的参数 + - timer: # 定时触发器 + parameters: + name: jd_blueCoin + cronExpression: "0 0 0 */1 * * *" # 每天零点执行一次 + enable: true + argument: jd_blueCoin,jd_club_lottery # 额外的参数 environment: # 环境变量 variables: # 环境变量对象 AAA: BBB # 不要删除,用来格式化对齐追加的变量的 From 845904a393dcf95e2275531b669ca96856dbac5c Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 20:18:50 +0800 Subject: [PATCH 051/290] Update serverless.yml --- serverless.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/serverless.yml b/serverless.yml index 0f64e4e..de6970e 100644 --- a/serverless.yml +++ b/serverless.yml @@ -27,7 +27,9 @@ inputs: name: jd_blueCoin cronExpression: "0 0 0 */1 * * *" # 每天零点执行一次 enable: true - argument: jd_blueCoin,jd_club_lottery # 额外的参数 + argument: + - jd_blueCoin + - jd_club_lottery # 额外的参数 environment: # 环境变量 variables: # 环境变量对象 AAA: BBB # 不要删除,用来格式化对齐追加的变量的 From 47c2aa2e999477d6b708018db9b474f498436c4a Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 20:26:09 +0800 Subject: [PATCH 052/290] Update serverless.yml --- serverless.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/serverless.yml b/serverless.yml index de6970e..3207b24 100644 --- a/serverless.yml +++ b/serverless.yml @@ -27,9 +27,7 @@ inputs: name: jd_blueCoin cronExpression: "0 0 0 */1 * * *" # 每天零点执行一次 enable: true - argument: - - jd_blueCoin - - jd_club_lottery # 额外的参数 + argument: [jd_blueCoin,jd_club_lottery] # 额外的参数 environment: # 环境变量 variables: # 环境变量对象 AAA: BBB # 不要删除,用来格式化对齐追加的变量的 From 3aab7beb8c2cdf9c9edb5e634f8f492a2867060e Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 20:29:18 +0800 Subject: [PATCH 053/290] Update serverless.yml --- serverless.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverless.yml b/serverless.yml index 3207b24..4aa6be5 100644 --- a/serverless.yml +++ b/serverless.yml @@ -27,7 +27,7 @@ inputs: name: jd_blueCoin cronExpression: "0 0 0 */1 * * *" # 每天零点执行一次 enable: true - argument: [jd_blueCoin,jd_club_lottery] # 额外的参数 + argument: jd_blueCoin jd_club_lottery,JD2&JD3|JD4 # 额外的参数 environment: # 环境变量 variables: # 环境变量对象 AAA: BBB # 不要删除,用来格式化对齐追加的变量的 From 3c13ff426de0b7065bfebc68d657fe79114ef20f Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 20:36:07 +0800 Subject: [PATCH 054/290] Update serverless.yml --- serverless.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverless.yml b/serverless.yml index 4aa6be5..04c543e 100644 --- a/serverless.yml +++ b/serverless.yml @@ -27,7 +27,7 @@ inputs: name: jd_blueCoin cronExpression: "0 0 0 */1 * * *" # 每天零点执行一次 enable: true - argument: jd_blueCoin jd_club_lottery,JD2&JD3|JD4 # 额外的参数 + argument: jd_blueCoin|jd_club_lottery|JD2\nJD3\nJD4 # 额外的参数 environment: # 环境变量 variables: # 环境变量对象 AAA: BBB # 不要删除,用来格式化对齐追加的变量的 From 4a47219ef58086f048f9b89e9ec1981d0dd4bbd4 Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 21:08:53 +0800 Subject: [PATCH 055/290] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=91=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E5=85=A5=E5=8F=A3=E6=89=A7=E8=A1=8C=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index cc1358f..3e7b6c7 100644 --- a/index.js +++ b/index.js @@ -1,10 +1,25 @@ 'use strict'; exports.main_handler = async (event, context, callback) => { - for (const v of event["Message"].split("\r\n")) { - console.log(v); - var request = require('request'); - request('https://gitee.com/lxk0301/jd_scripts/raw/master/'+v+'.js', function (error, response, body) { + try { + //如果想在一个定时触发器里面执行多个js文件需要在定时触发器的【附加信息】里面填写对应的名称,用 & 链接 + //例如我想一个定时触发器里执行jd_speed.js和jd_bean_change.js,在定时触发器的【附加信息】里面就填写 jd_speed&jd_bean_change + for (const v of event["Message"].split("&")) { + console.log(v); + var request = require('request'); + //1.执行自己上传的js文件 + //require('./'+v+'.js') + + //2.执行国内gitee远端js文件如果部署,在国内节点,选择1或2的方式 + //request('https://gitee.com/lxk0301/jd_scripts/raw/master/'+v+'.js', function (error, response, body) { + // eval(response.body) + //}) + + //3.执行github远端的js文件 + request('https://raw.githubusercontent.com/lxk0301/jd_scripts/master/'+v+'.js', function (error, response, body) { eval(response.body) - }) - } + }) + } + } catch (e) { + console.error(e) + } } From 973b362a03ba6b2ff9f771d0cb4a756bda7a2d48 Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 21:19:51 +0800 Subject: [PATCH 056/290] Update serverless.yml --- serverless.yml | 128 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 121 insertions(+), 7 deletions(-) diff --git a/serverless.yml b/serverless.yml index 04c543e..31c4ff7 100644 --- a/serverless.yml +++ b/serverless.yml @@ -16,18 +16,132 @@ inputs: memorySize: 128 # 内存大小,单位MB timeout: 900 # 超时时间,单位秒 events: # 触发器 - - timer: # 定时触发器 + - timer: # 签到 parameters: - name: jd_bean_sign # 触发器名称 - cronExpression: "0 0 0 */1 * * *" # 每天零点执行一次 + name: jd_bean_sign + cronExpression: "0 0 0,12,18 * * *" enable: true - argument: jd_bean_sign # 额外的参数 - - timer: # 定时触发器 + argument: jd_bean_sign + - timer: # 京小超兑换奖品 parameters: name: jd_blueCoin - cronExpression: "0 0 0 */1 * * *" # 每天零点执行一次 + cronExpression: "0 0 0 * * *" enable: true - argument: jd_blueCoin|jd_club_lottery|JD2\nJD3\nJD4 # 额外的参数 + argument: jd_blueCoin + - timer: # 摇京豆 + parameters: + name: jd_club_lottery + cronExpression: "0 0 0 * * *" + enable: true + argument: jd_club_lottery + - timer: # 东东农场 + parameters: + name: jd_fruit + cronExpression: "0 5 6-18/6 * * *" + enable: true + argument: jd_fruit + - timer: # 宠汪汪 + parameters: + name: jd_joy + cronExpression: "0 15 */2 * * *" + enable: true + argument: jd_joy + - timer: # 宠汪汪喂食 + parameters: + name: jd_joy_feedPets + cronExpression: "0 15 */1 * * *" + enable: true + argument: jd_joy_feedPets + - timer: # 宠汪汪积分兑换奖品 + parameters: + name: jd_joy_reward + cronExpression: "0 0 0-16/8 * * *" + enable: true + argument: jd_joy_reward + - timer: # 宠汪汪偷好友积分与狗 + parameters: + name: jd_joy_steal + cronExpression: "0 0 0,6 * * *" + enable: true + argument: jd_joy_steal + - timer: # 摇钱树 + parameters: + name: jd_moneyTree + cronExpression: "0 0 */2 * * *" + enable: true + argument: jd_moneyTree + - timer: # 东东萌宠 + parameters: + name: jd_pet + cronExpression: "0 5 6-18/6 * * *" + enable: true + argument: jd_pet + - timer: # 京东种豆得豆 + parameters: + name: jd_plantBean + cronExpression: "0 0 7-22/1 * * *" + enable: true + argument: jd_plantBean + - timer: # 京东全民开红包 + parameters: + name: jd_redPacket + cronExpression: "0 1 1 * * *" + enable: true + argument: jd_redPacket + - timer: # 进店领豆 + parameters: + name: jd_shop + cronExpression: "0 10 0 * * *" + enable: true + argument: jd_shop + - timer: # 京东天天加速 + parameters: + name: jd_speed + cronExpression: "0 8 */3 * * *" + enable: true + argument: jd_speed + - timer: # 东东超市 + parameters: + name: jd_superMarket + cronExpression: "0 11 1-23/5 * * *" + enable: true + argument: jd_superMarket + - timer: # 取关京东店铺商品 + parameters: + name: jd_unsubscribe + cronExpression: "0 55 23 * * *" + enable: true + argument: jd_unsubscribe + - timer: # 京豆变动通知 + parameters: + name: jd_bean_change + cronExpression: "0 0 10 * * *" + enable: true + argument: jd_bean_change + - timer: # 京东抽奖机 + parameters: + name: jd_lotteryMachine + cronExpression: "0 11 1 * * *" + enable: true + argument: jd_lotteryMachine + - timer: # 京东排行榜 + parameters: + name: jd_rankingList + cronExpression: "0 11 9 * * *" + enable: true + argument: jd_rankingList + - timer: # 天天提鹅 + parameters: + name: jd_daily_egg + cronExpression: "0 18 */3 * * *" + enable: true + argument: jd_daily_egg + - timer: # 金融养猪 + parameters: + name: jd_pigPet + cronExpression: "0 12 * * * *" + enable: true + argument: jd_pigPet environment: # 环境变量 variables: # 环境变量对象 AAA: BBB # 不要删除,用来格式化对齐追加的变量的 From 2e48e1e566330dae3f6f51cb605bdf569747b1b7 Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 21:43:44 +0800 Subject: [PATCH 057/290] Update serverless.yml --- serverless.yml | 100 ++++++++++--------------------------------------- 1 file changed, 20 insertions(+), 80 deletions(-) diff --git a/serverless.yml b/serverless.yml index 31c4ff7..154e3a7 100644 --- a/serverless.yml +++ b/serverless.yml @@ -16,84 +16,48 @@ inputs: memorySize: 128 # 内存大小,单位MB timeout: 900 # 超时时间,单位秒 events: # 触发器 - - timer: # 签到 + - timer: # 签到 # 摇京豆 parameters: - name: jd_bean_sign + name: jd_bean_sign&jd_club_lottery cronExpression: "0 0 0,12,18 * * *" enable: true - argument: jd_bean_sign + argument: jd_bean_sign&jd_club_lottery - timer: # 京小超兑换奖品 parameters: name: jd_blueCoin cronExpression: "0 0 0 * * *" enable: true argument: jd_blueCoin - - timer: # 摇京豆 + - timer: # 东东农场# 东东萌宠 parameters: - name: jd_club_lottery - cronExpression: "0 0 0 * * *" - enable: true - argument: jd_club_lottery - - timer: # 东东农场 - parameters: - name: jd_fruit + name: jd_fruit&jd_pet cronExpression: "0 5 6-18/6 * * *" enable: true - argument: jd_fruit - - timer: # 宠汪汪 + argument: jd_fruit&jd_pet + - timer: # 宠汪汪喂食# 宠汪汪# 摇钱树 parameters: - name: jd_joy - cronExpression: "0 15 */2 * * *" - enable: true - argument: jd_joy - - timer: # 宠汪汪喂食 - parameters: - name: jd_joy_feedPets + name: jd_joy_feedPets&jd_joy&jd_moneyTree cronExpression: "0 15 */1 * * *" enable: true - argument: jd_joy_feedPets - - timer: # 宠汪汪积分兑换奖品 + argument: jd_joy_feedPets&jd_joy&jd_moneyTree + - timer: # 宠汪汪积分兑换奖品# 宠汪汪偷好友积分与狗 parameters: - name: jd_joy_reward + name: jd_joy_reward&jd_joy_steal cronExpression: "0 0 0-16/8 * * *" enable: true - argument: jd_joy_reward - - timer: # 宠汪汪偷好友积分与狗 - parameters: - name: jd_joy_steal - cronExpression: "0 0 0,6 * * *" - enable: true - argument: jd_joy_steal - - timer: # 摇钱树 - parameters: - name: jd_moneyTree - cronExpression: "0 0 */2 * * *" - enable: true - argument: jd_moneyTree - - timer: # 东东萌宠 - parameters: - name: jd_pet - cronExpression: "0 5 6-18/6 * * *" - enable: true - argument: jd_pet + argument: jd_joy_reward&jd_joy_steal - timer: # 京东种豆得豆 parameters: name: jd_plantBean cronExpression: "0 0 7-22/1 * * *" enable: true argument: jd_plantBean - - timer: # 京东全民开红包 + - timer: # 京东全民开红包 # 进店领豆 # 取关京东店铺商品# 京东抽奖机 parameters: - name: jd_redPacket - cronExpression: "0 1 1 * * *" - enable: true - argument: jd_redPacket - - timer: # 进店领豆 - parameters: - name: jd_shop + name: jd_redPacket&jd_shop&jd_unsubscribe&jd_lotteryMachine cronExpression: "0 10 0 * * *" enable: true - argument: jd_shop + argument: jd_redPacket&jd_shop&jd_unsubscribe&jd_lotteryMachine - timer: # 京东天天加速 parameters: name: jd_speed @@ -106,42 +70,18 @@ inputs: cronExpression: "0 11 1-23/5 * * *" enable: true argument: jd_superMarket - - timer: # 取关京东店铺商品 - parameters: - name: jd_unsubscribe - cronExpression: "0 55 23 * * *" - enable: true - argument: jd_unsubscribe - - timer: # 京豆变动通知 + - timer: # 京豆变动通知 # 京东排行榜 parameters: name: jd_bean_change cronExpression: "0 0 10 * * *" enable: true - argument: jd_bean_change - - timer: # 京东抽奖机 + argument: jd_bean_change&jd_rankingList + - timer: # 金融养猪# 天天提鹅 parameters: - name: jd_lotteryMachine - cronExpression: "0 11 1 * * *" - enable: true - argument: jd_lotteryMachine - - timer: # 京东排行榜 - parameters: - name: jd_rankingList - cronExpression: "0 11 9 * * *" - enable: true - argument: jd_rankingList - - timer: # 天天提鹅 - parameters: - name: jd_daily_egg - cronExpression: "0 18 */3 * * *" - enable: true - argument: jd_daily_egg - - timer: # 金融养猪 - parameters: - name: jd_pigPet + name: jd_pigPet&jd_daily_egg cronExpression: "0 12 * * * *" enable: true - argument: jd_pigPet + argument: jd_pigPet&jd_daily_egg environment: # 环境变量 variables: # 环境变量对象 AAA: BBB # 不要删除,用来格式化对齐追加的变量的 From 7941fc0c89335f03ef285c155d7d6c59f8b3e402 Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 21:48:34 +0800 Subject: [PATCH 058/290] Update serverless.yml --- serverless.yml | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/serverless.yml b/serverless.yml index 154e3a7..d915b25 100644 --- a/serverless.yml +++ b/serverless.yml @@ -18,7 +18,7 @@ inputs: events: # 触发器 - timer: # 签到 # 摇京豆 parameters: - name: jd_bean_sign&jd_club_lottery + name: jd_bean_sign_jd_club_lottery cronExpression: "0 0 0,12,18 * * *" enable: true argument: jd_bean_sign&jd_club_lottery @@ -30,31 +30,25 @@ inputs: argument: jd_blueCoin - timer: # 东东农场# 东东萌宠 parameters: - name: jd_fruit&jd_pet + name: jd_fruit_jd_pet cronExpression: "0 5 6-18/6 * * *" enable: true argument: jd_fruit&jd_pet - - timer: # 宠汪汪喂食# 宠汪汪# 摇钱树 + - timer: # 宠汪汪喂食# 宠汪汪# 摇钱树# 京东种豆得豆 parameters: - name: jd_joy_feedPets&jd_joy&jd_moneyTree + name: jd_joy_feedPets_jd_joy_jd_moneyTree_jd_plantBean cronExpression: "0 15 */1 * * *" enable: true - argument: jd_joy_feedPets&jd_joy&jd_moneyTree + argument: jd_joy_feedPets&jd_joy&jd_moneyTree&jd_plantBean - timer: # 宠汪汪积分兑换奖品# 宠汪汪偷好友积分与狗 parameters: - name: jd_joy_reward&jd_joy_steal + name: jd_joy_reward_jd_joy_steal cronExpression: "0 0 0-16/8 * * *" enable: true argument: jd_joy_reward&jd_joy_steal - - timer: # 京东种豆得豆 - parameters: - name: jd_plantBean - cronExpression: "0 0 7-22/1 * * *" - enable: true - argument: jd_plantBean - timer: # 京东全民开红包 # 进店领豆 # 取关京东店铺商品# 京东抽奖机 parameters: - name: jd_redPacket&jd_shop&jd_unsubscribe&jd_lotteryMachine + name: jd_redPacket_jd_shop_jd_unsubscribe_jd_lotteryMachine cronExpression: "0 10 0 * * *" enable: true argument: jd_redPacket&jd_shop&jd_unsubscribe&jd_lotteryMachine @@ -78,7 +72,7 @@ inputs: argument: jd_bean_change&jd_rankingList - timer: # 金融养猪# 天天提鹅 parameters: - name: jd_pigPet&jd_daily_egg + name: jd_pigPet_jd_daily_egg cronExpression: "0 12 * * * *" enable: true argument: jd_pigPet&jd_daily_egg From 9ac87f488365913dbd45f7648167fab85797c002 Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 21:53:48 +0800 Subject: [PATCH 059/290] Update serverless.yml --- serverless.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/serverless.yml b/serverless.yml index d915b25..aa2cd7c 100644 --- a/serverless.yml +++ b/serverless.yml @@ -19,61 +19,61 @@ inputs: - timer: # 签到 # 摇京豆 parameters: name: jd_bean_sign_jd_club_lottery - cronExpression: "0 0 0,12,18 * * *" + cronExpression: "0 0 0,12,18 * * * *" enable: true argument: jd_bean_sign&jd_club_lottery - timer: # 京小超兑换奖品 parameters: name: jd_blueCoin - cronExpression: "0 0 0 * * *" + cronExpression: "0 0 0 * * * *" enable: true argument: jd_blueCoin - timer: # 东东农场# 东东萌宠 parameters: name: jd_fruit_jd_pet - cronExpression: "0 5 6-18/6 * * *" + cronExpression: "0 5 6-18/6 * * * *" enable: true argument: jd_fruit&jd_pet - timer: # 宠汪汪喂食# 宠汪汪# 摇钱树# 京东种豆得豆 parameters: name: jd_joy_feedPets_jd_joy_jd_moneyTree_jd_plantBean - cronExpression: "0 15 */1 * * *" + cronExpression: "0 15 */1 * * * *" enable: true argument: jd_joy_feedPets&jd_joy&jd_moneyTree&jd_plantBean - timer: # 宠汪汪积分兑换奖品# 宠汪汪偷好友积分与狗 parameters: name: jd_joy_reward_jd_joy_steal - cronExpression: "0 0 0-16/8 * * *" + cronExpression: "0 0 0-16/8 * * * *" enable: true argument: jd_joy_reward&jd_joy_steal - timer: # 京东全民开红包 # 进店领豆 # 取关京东店铺商品# 京东抽奖机 parameters: name: jd_redPacket_jd_shop_jd_unsubscribe_jd_lotteryMachine - cronExpression: "0 10 0 * * *" + cronExpression: "0 10 0 * * * *" enable: true argument: jd_redPacket&jd_shop&jd_unsubscribe&jd_lotteryMachine - timer: # 京东天天加速 parameters: name: jd_speed - cronExpression: "0 8 */3 * * *" + cronExpression: "0 8 */3 * * * *" enable: true argument: jd_speed - timer: # 东东超市 parameters: name: jd_superMarket - cronExpression: "0 11 1-23/5 * * *" + cronExpression: "0 11 1-23/5 * * * *" enable: true argument: jd_superMarket - timer: # 京豆变动通知 # 京东排行榜 parameters: name: jd_bean_change - cronExpression: "0 0 10 * * *" + cronExpression: "0 0 10 * * * *" enable: true argument: jd_bean_change&jd_rankingList - timer: # 金融养猪# 天天提鹅 parameters: name: jd_pigPet_jd_daily_egg - cronExpression: "0 12 * * * *" + cronExpression: "0 12 * * * * *" enable: true argument: jd_pigPet&jd_daily_egg environment: # 环境变量 From 7487087fec1d1c846a82a48c791931ab04a747e3 Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 21:58:54 +0800 Subject: [PATCH 060/290] Update serverless.yml --- serverless.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/serverless.yml b/serverless.yml index aa2cd7c..5157867 100644 --- a/serverless.yml +++ b/serverless.yml @@ -58,6 +58,12 @@ inputs: cronExpression: "0 8 */3 * * * *" enable: true argument: jd_speed + - timer: # 京东天天加速1 + parameters: + name: jd_speed1 + cronExpression: "0 8 */3 * * * *" + enable: true + argument: jd_speed - timer: # 东东超市 parameters: name: jd_superMarket From 0d108808cfc78f482738ed18dd747d7e05cc8d24 Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 18 Nov 2020 22:03:36 +0800 Subject: [PATCH 061/290] Update serverless.yml --- serverless.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/serverless.yml b/serverless.yml index 5157867..aa2cd7c 100644 --- a/serverless.yml +++ b/serverless.yml @@ -58,12 +58,6 @@ inputs: cronExpression: "0 8 */3 * * * *" enable: true argument: jd_speed - - timer: # 京东天天加速1 - parameters: - name: jd_speed1 - cronExpression: "0 8 */3 * * * *" - enable: true - argument: jd_speed - timer: # 东东超市 parameters: name: jd_superMarket From f7a8e540ad16499979af3124d569773e73ec3c7b Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 19 Nov 2020 14:22:12 +0800 Subject: [PATCH 062/290] update --- jd_daily_egg.js | 6 ++++++ jd_pigPet.js | 6 ++++++ tencentscf.md | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/jd_daily_egg.js b/jd_daily_egg.js index 60dd668..5f8dfae 100644 --- a/jd_daily_egg.js +++ b/jd_daily_egg.js @@ -1,3 +1,9 @@ +/* + * @Author: lxk0301 https://github.com/lxk0301 + * @Date: 2020-11-10 14:10:27 + * @Last Modified by: lxk0301 + * @Last Modified time: 2020-11-19 14:11:01 + */ /* 京东金融-天天提鹅 定时收鹅蛋,兑换金币 diff --git a/jd_pigPet.js b/jd_pigPet.js index 3aedd66..d535dbc 100644 --- a/jd_pigPet.js +++ b/jd_pigPet.js @@ -1,3 +1,9 @@ +/* + * @Author: lxk0301 https://github.com/lxk0301 + * @Date: 2020-11-10 14:07:07 + * @Last Modified by: lxk0301 + * @Last Modified time: 2020-11-19 14:10:19 + */ /* 京东金融养猪猪 一键开完所有的宝箱功能。耗时70秒 diff --git a/tencentscf.md b/tencentscf.md index e5a7084..394e259 100644 --- a/tencentscf.md +++ b/tencentscf.md @@ -93,7 +93,7 @@ triggers: 在左侧栏的日志查询中,可以查看到触发的日志,包括是否打卡成功等。 -![测试函数](https://imgbed-bucket-1251971143.cos.ap-guangzhou.myqcloud.com/./1605263963294-test.png) +![测试函数](https://user-images.githubusercontent.com/6993269/99628053-5a9eea80-2a70-11eb-906f-f1d5ea2bfa3a.png) > 如果需要配置永久秘钥,则可以在[访问秘钥页面](https://console.cloud.tencent.com/cam/capi)获取账号的 TENCENT_SECRET_ID,TENCENT_SECRET_KEY,并配置在代码根目录 .env 文件中。 From f47cde081bffa9c271ad09ba0978190f514d7af7 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 19 Nov 2020 15:07:31 +0800 Subject: [PATCH 063/290] =?UTF-8?q?=E5=8E=BB=E6=8E=89debug=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy_tencent_scf.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml index b7ecdd6..ef4b667 100644 --- a/.github/workflows/deploy_tencent_scf.yml +++ b/.github/workflows/deploy_tencent_scf.yml @@ -29,7 +29,6 @@ jobs: if [ $JD_BEAN_STOP ]; then sed -i "/variables/a\ JD_BEAN_STOP: $JD_BEAN_STOP" serverless.yml; fi; if [ $JD_BEAN_SIGN_STOP_NOTIFY ]; then sed -i "/variables/a\ JD_BEAN_SIGN_STOP_NOTIFY: $JD_BEAN_SIGN_STOP_NOTIFY" serverless.yml; fi; if [ $JD_BEAN_SIGN_NOTIFY_SIMPLE ]; then sed -i "/variables/a\ JD_BEAN_SIGN_NOTIFY_SIMPLE: $JD_BEAN_SIGN_NOTIFY_SIMPLE" serverless.yml; fi; - if [ $JD_DEBUG ]; then sed -i "/variables/a\ JD_DEBUG: $JD_DEBUG" serverless.yml; fi; if [ $PUSH_KEY ]; then sed -i "/variables/a\ PUSH_KEY: $PUSH_KEY" serverless.yml; fi; if [ $BARK_PUSH ]; then sed -i "/variables/a\ BARK_PUSH: $BARK_PUSH" serverless.yml; fi; if [ $BARK_SOUND ]; then sed -i "/variables/a\ BARK_SOUND: $BARK_SOUND" serverless.yml; fi; @@ -66,7 +65,6 @@ jobs: JD_BEAN_STOP: ${{ secrets.JD_BEAN_STOP}} JD_BEAN_SIGN_STOP_NOTIFY: ${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}} JD_BEAN_SIGN_NOTIFY_SIMPLE: ${{ secrets.JD_BEAN_SIGN_NOTIFY_SIMPLE}} - JD_DEBUG: ${{ secrets.JD_DEBUG}} PUSH_KEY: ${{ secrets.PUSH_KEY}} BARK_PUSH: ${{ secrets.BARK_PUSH}} BARK_SOUND: ${{ secrets.BARK_SOUND}} From 62dd659bf96ae44bce4d99cfd7d3e348a6f21c00 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 19 Nov 2020 15:16:31 +0800 Subject: [PATCH 064/290] =?UTF-8?q?jdCookie.js=E6=96=87=E4=BB=B6=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E8=85=BE=E8=AE=AF=E4=BA=91=E5=92=8Cdocker=E8=A2=AB?= =?UTF-8?q?=E8=BD=AC=E4=B9=89=E5=90=8E=E7=9A=84\\n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jdCookie.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/jdCookie.js b/jdCookie.js index 8395dec..cdc9397 100644 --- a/jdCookie.js +++ b/jdCookie.js @@ -15,8 +15,12 @@ if (process.env.JD_COOKIE) { } else if (process.env.JD_COOKIE.indexOf('\n') > -1) { console.log(`您的cookie选择的是用换行隔开\n`) CookieJDs = process.env.JD_COOKIE.split('\n'); + } else if (process.env.JD_COOKIE.indexOf('\\n') > -1) { + //环境变量兼容腾讯云和docker下\n会被转义成\\n + console.log(`您的cookie选择的是用换行隔开\\n`) + CookieJDs = process.env.JD_COOKIE.split('\\n'); } else { - CookieJDs = process.env.JD_COOKIE.split(); + CookieJDs = process.env.JD_COOKIE; } console.log(`\n====================共有${CookieJDs.length}个京东账号Cookie=========\n`); console.log(`==================脚本执行- 北京时间(UTC+8):${new Date(new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000).toLocaleString()}=====================\n`) From 772bb7eeb4e9af5dc8588ccda2e2a945b9631f60 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 19 Nov 2020 15:53:26 +0800 Subject: [PATCH 065/290] fix --- jdCookie.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jdCookie.js b/jdCookie.js index cdc9397..3cc9398 100644 --- a/jdCookie.js +++ b/jdCookie.js @@ -20,7 +20,7 @@ if (process.env.JD_COOKIE) { console.log(`您的cookie选择的是用换行隔开\\n`) CookieJDs = process.env.JD_COOKIE.split('\\n'); } else { - CookieJDs = process.env.JD_COOKIE; + CookieJDs = process.env.JD_COOKIE.split(); } console.log(`\n====================共有${CookieJDs.length}个京东账号Cookie=========\n`); console.log(`==================脚本执行- 北京时间(UTC+8):${new Date(new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000).toLocaleString()}=====================\n`) From f1e2dc1d97d83ab3496a974361acf1325effdaa2 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 19 Nov 2020 16:06:05 +0800 Subject: [PATCH 066/290] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=8E=BB=E9=87=8Dcookie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jdCookie.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jdCookie.js b/jdCookie.js index 3cc9398..4eb2bb7 100644 --- a/jdCookie.js +++ b/jdCookie.js @@ -20,8 +20,9 @@ if (process.env.JD_COOKIE) { console.log(`您的cookie选择的是用换行隔开\\n`) CookieJDs = process.env.JD_COOKIE.split('\\n'); } else { - CookieJDs = process.env.JD_COOKIE.split(); + CookieJDs = [process.env.JD_COOKIE]; } + CookieJDs = [...new Set(CookieJDs)] console.log(`\n====================共有${CookieJDs.length}个京东账号Cookie=========\n`); console.log(`==================脚本执行- 北京时间(UTC+8):${new Date(new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000).toLocaleString()}=====================\n`) // console.log(`\n==================脚本执行来自 github action=====================\n`) From 9153131fc7fbe14040a5cabf7ca6c9847b59432a Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Thu, 19 Nov 2020 17:18:48 +0800 Subject: [PATCH 067/290] Update iCloud.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加解决云函数热启动问题的说明 --- iCloud.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/iCloud.md b/iCloud.md index 1db8479..3d140c0 100644 --- a/iCloud.md +++ b/iCloud.md @@ -36,6 +36,8 @@ ```javascript 'use strict'; exports.main_handler = async (event, context, callback) => { + //解决云函数热启动问题 + delete require.cache[require.resolve('./jd_xtg1.js')]; require('./jd_xtg1.js') //这里写你想要的脚本 require('./jd_xtg2.js') //这里写你想要的脚本 require('./jd_xtg3.js') //这里写你想要的脚本 @@ -44,8 +46,7 @@ exports.main_handler = async (event, context, callback) => { ``` 此时,同一时间点下,会同时执行多个脚本,触发器触发后,index.js文件中require()下的所有脚本都会被执行 -**优点**:同一时间下可以同时执行多个脚本,适合脚本种类少的repository,对脚本数量少的repository推荐使用此方案 -**缺点**:多个脚本不同时间点运行无法满足 +**优点**:同一时间下可以同时执行多个脚本,适合脚本种类少的repository,对脚本数量少的repository推荐使用此方案
**缺点**:多个脚本不同时间点运行无法满足 方案二:同一个仓库下不同的时间点,分别执行不同的脚本(类似GitHub Action执行机制) @@ -57,6 +58,8 @@ exports.main_handler = async (event, context, callback) => { 'use strict'; exports.main_handler = async (event, context, callback) => { for (const v of event["Message"].split("\r\n")) { + //解决云函数热启动问题 + delete require.cache[require.resolve(`./${v}.js`)]; console.log(v); require(`./${v}.js`) } @@ -66,14 +69,12 @@ exports.main_handler = async (event, context, callback) => { 此时触发管理按照下图中进行设置,附加信息选择“是”,内容填写需要传递执行的具体脚本文件名,以回车键换行。触发器触发后,附加信息栏内的脚本会被执行,设置多个不同时间点的触发器达到类似GitHub Action的效果 -**优点**:可以满足个性化需求,同一个repository下只需要设置不同的触发器,可以实现不同时间点分别执行不同的脚本 -**缺点**:repository下脚本过多,如果需要设置多个触发器,实现个性化运行效果,由于云函数的限制,最多只能设置10个 +**优点**:可以满足个性化需求,同一个repository下只需要设置不同的触发器,可以实现不同时间点分别执行不同的脚本
**缺点**:repository下脚本过多,如果需要设置多个触发器,实现个性化运行效果,由于云函数的限制,最多只能设置10个 [![B20KxI.png](https://s1.ax1x.com/2020/11/05/B20KxI.png)](https://imgchr.com/i/B20KxI) [![BRCG0H.png](https://s1.ax1x.com/2020/11/05/BRCG0H.png)](https://imgchr.com/i/BRCG0H) -**注意:方案一与方案二不能混合到同一个index.js文件中使用,同一个仓库下,二者只能选择其一。目前由于云函数热启动问题的存在,频繁的触发器启动,虽然日志显示“调用成功”,但实际内容却没有执行,方案一与方案二暂时无法规避此问题,期待之后能解决** - +**注意:方案一与方案二不能混合到同一个index.js文件中使用,同一个仓库下,二者只能选择其一。感谢[issues#115](https://github.com/lxk0301/jd_scripts/issues/115)中的解决方案,目前云函数连续测试已经可以规避热启动问题了** **增加cookie** From 7a3d22dbb07671def216d3581de97d3e26bc385d Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 19 Nov 2020 17:57:12 +0800 Subject: [PATCH 068/290] update --- jd_pigPet.js | 203 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 202 insertions(+), 1 deletion(-) diff --git a/jd_pigPet.js b/jd_pigPet.js index d535dbc..522bac0 100644 --- a/jd_pigPet.js +++ b/jd_pigPet.js @@ -7,14 +7,17 @@ /* 京东金融养猪猪 一键开完所有的宝箱功能。耗时70秒 -抽奖 +大转盘抽奖 喂食 +每日签到 +完成分享任务得猪粮 12 * * * * */ const $ = new Env('金融养猪'); let cookiesArr = [], cookie = ''; const JD_API_HOST = 'https://ms.jr.jd.com/gw/generic/uc/h5/m'; +const MISSION_BASE_API = `https://ms.jr.jd.com/gw/generic/mission/h5/m`; const notify = $.isNode() ? require('./sendNotify') : ''; //Node.js用户请在jdCookie.js处填写京东ck; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; @@ -72,6 +75,8 @@ async function jdPigPet() { await pigPetOpenBox(); await pigPetLotteryIndex(); await pigPetLottery(); + await pigPetMissionList(); + await missions(); await pigPetUserBag(); } async function pigPetLottery() { @@ -410,6 +415,202 @@ function pigPetLotteryPlay() { }) }) } +async function missions() { + for (let item of $.missions) { + if (item.status === 4) { + console.log(`\n${item.missionName}任务已做完,开始领取奖励`) + await pigPetDoMission(item.mid); + } else if (item.status === 5){ + console.log(`\n${item.missionName}已领取`) + } else if (item.status === 3){ + console.log(`\n${item.missionName}未完成`) + if (item.mid === 'CPD01') { + await pigPetDoMission(item.mid); + } else { + //TODO + // await pigPetDoMission(item.mid); + // await queryMissionReceiveAfterStatus(item.mid); + // await finishReadMission(item.mid); + } + } + } +} +//领取做完任务的奖品 +function pigPetDoMission(mid) { + return new Promise(async resolve => { + const body = { + "source":0, + "channelLV":"", + "riskDeviceParam":"{}", + mid + } + $.post(taskUrl('pigPetDoMission', body), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + console.log('pigPetDoMission',data) + data = JSON.parse(data); + if (data.resultCode === 0) { + if (data.resultData.resultCode === 0) { + if (data.resultData.resultData) { + if (data.resultData.resultData.award) { + console.log(`奖励${data.resultData.resultData.award.name},数量:${data.resultData.resultData.award.count}`) + } + } + } else { + console.log(`其他情况:${JSON.stringify(data)}`) + } + } + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +//查询任务列表 +function pigPetMissionList() { + return new Promise(async resolve => { + const body = { + "source":0, + "channelLV":"", + "riskDeviceParam":"{}", + } + $.post(taskUrl('pigPetMissionList', body), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + // console.log(data) + data = JSON.parse(data); + if (data.resultCode === 0) { + if (data.resultData.resultCode === 0) { + if (data.resultData.resultData) { + $.missions = data.resultData.resultData.missions;//抽奖后剩余的抽奖次数 + } + } else { + console.log(`其他情况:${JSON.stringify(data)}`) + } + } + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function queryMissionReceiveAfterStatus(missionId) { + return new Promise(resolve => { + const body = {"missionId": missionId.toString()}; + const options = { + "url": `${MISSION_BASE_API}/queryMissionReceiveAfterStatus?reqData=%7B%2522missionId%2522:%2522${Number(missionId)}%2522%7D`, + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Connection": "keep-alive", + "Host": "ms.jr.jd.com", + "Cookie": cookie, + "Origin": "https://jdjoy.jd.com", + "Referer": "https://jdjoy.jd.com/", + "User-Agent": "jdapp;android;8.5.12;9;network/wifi;model/GM1910;addressid/1302541636;aid/ac31e03386ddbec6;oaid/;osVer/28;appBuild/73078;adk/;ads/;pap/JA2015_311210|8.5.12|ANDROID 9;osv/9;pv/117.24;jdv/0|kong|t_1000217905_|jingfen|644e9b005c8542c1ac273da7763971d8|1589905791552|1589905794;ref/com.jingdong.app.mall.WebActivity;partner/oppo;apprpd/Home_Main;Mozilla/5.0 (Linux; Android 9; GM1910 Build/PKQ1.190110.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36 Edg/86.0.4240.111" + } + } + $.get(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + console.log('queryMissionReceiveAfterStatus',data) + // data = JSON.parse(data); + // if (data.resultCode === 0) { + // if (data.resultData.resultCode === 0) { + // if (data.resultData.resultData) { + // // console.log(`当前大转盘剩余免费抽奖次数::${data.resultData.resultData.currentCount}`); + // $.currentCount = data.resultData.resultData.currentCount;//抽奖后剩余的抽奖次数 + // } + // } else { + // console.log(`其他情况:${JSON.stringify(data)}`) + // } + // } + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +//做完浏览任务发送信息API +function finishReadMission(missionId) { + return new Promise(async resolve => { + const body = {"missionId": missionId.toString(),"readTime":10}; + const options = { + "url": `${MISSION_BASE_API}/finishReadMission?reqData=%7B%2522missionId%2522:%2522${Number(missionId)}%2522,%2522readTime%2522:10%7D`, + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Connection": "keep-alive", + "Host": "ms.jr.jd.com", + "Cookie": cookie, + "Origin": "https://jdjoy.jd.com", + "Referer": "https://jdjoy.jd.com/", + "User-Agent": "jdapp;android;8.5.12;9;network/wifi;model/GM1910;addressid/1302541636;aid/ac31e03386ddbec6;oaid/;osVer/28;appBuild/73078;adk/;ads/;pap/JA2015_311210|8.5.12|ANDROID 9;osv/9;pv/117.24;jdv/0|kong|t_1000217905_|jingfen|644e9b005c8542c1ac273da7763971d8|1589905791552|1589905794;ref/com.jingdong.app.mall.WebActivity;partner/oppo;apprpd/Home_Main;Mozilla/5.0 (Linux; Android 9; GM1910 Build/PKQ1.190110.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36 Edg/86.0.4240.111" + } + } + $.get(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + console.log('finishReadMission',data) + // data = JSON.parse(data); + // if (data.resultCode === 0) { + // if (data.resultData.resultCode === 0) { + // if (data.resultData.resultData) { + // // console.log(`当前大转盘剩余免费抽奖次数::${data.resultData.resultData.currentCount}`); + // $.currentCount = data.resultData.resultData.currentCount;//抽奖后剩余的抽奖次数 + // } + // } else { + // console.log(`其他情况:${JSON.stringify(data)}`) + // } + // } + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} function TotalBean() { return new Promise(async resolve => { const options = { From b1a6cd95bd65f9e3dd5a7cf6c8bf808b5e3c8b03 Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Thu, 19 Nov 2020 19:26:49 +0800 Subject: [PATCH 069/290] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=95=99=E7=A8=8B?= =?UTF-8?q?=E6=89=80=E9=9C=80=E7=9A=84=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加教程所需的图片 --- icon/iCloud5.png | Bin 0 -> 38109 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 icon/iCloud5.png diff --git a/icon/iCloud5.png b/icon/iCloud5.png new file mode 100644 index 0000000000000000000000000000000000000000..b78f1cdf2ff7ee1c00330d9b8f64fbd69b827e53 GIT binary patch literal 38109 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%0A?_uW zYkdp-xoPTm0cfc8Y<(^WIMrU#8otJn|UEFFu2#t(Aqvar_F=xeIul{kjx6I9ZAEzJe zEg>X+qZb@hQ>o`SRNRyWm-6!u@31w~pEv9>l6gdXm0reQ+=W^U&G$4+b-rd==fPQu zV%WdB7)#n%bJQn$Ok@VuU-ym(i(38g`}IU*FOZtwuuV2MWR{B9lAIK%8y9!oXGerbLq{HnU7{sW3&`6}^@DBE znz8(3t~Rvmr`EzbBebYq*f;%zIIzi*66SJUyBV#w?aj4CjE(!iSAiNKZ88%!5Ey7t zdUM5i1EeCYxk-dQ79K1GG4QI0VBH4@>?dU=xsPIc7yF0Y!!9&eZvW-r~Mq6X#x82;M+)iKs%0u*x;Qm8JF?eltCQOYqVM#T(h3>D@OL zNmC<<-XCl_-@Q9lP84#K8j#P0ZR1;LIY8>uslgl0sOP47@rC5hw&kXs0B5K+=m_sO zYlF$iwjn&c&9i1_sk5tVL(=Leq{OncV5hKalCGpMjdKCOG5=g9jjyO#E*5+MTa|g+ zz!v{%oA})4kAd!_KgV`1(!M$+U^}tMkH2yiDD~S2xLu$Ew+ljF5SY2*h1@E(hZblu#!lxxGp7N>(V@>DA zOnJZ9sje7X9%c)FBdJ=)IG=(4N0cZ6u46E2qt>hH}r zVS0&B+dG!9+^s;D9L58v;Za!$=Cc|>hTGe3(RBgxl^j%V&?NoZAJ_&^BT?V$sVmSg z5L(KUvxe;q$JwnG-SHX43)t-;asg=oH1H7lQR^)E4?RzIvTP^01~hR;okIn?H_@@n z-3#g6V%raEm3E1&bb}rma*o*K9k3|7EW_ZIR14)1rlupL+IJ{dN-Yk2Rw6|pBj7q3 z=Px{QBMG;=%D3GiI<&UTeSw0ba)UA`UkF0X|4H+4`?#(!8DM^`JO`sLNjH=mX~;o+ zFlg%hm|N;Nc3UP3-T+l*(QLlI1v(Pl9+Q}<#d@vgL3vQf)yX1CrWw1DY5&>SY`eEz zR^;t%85jB+$lQ&ItGL1mEV=mm3OkK>=rGF6G5O*2`snnWH~aon`yb@?{S7v0*5-fj zQrQOGLlp_nxkIiF(J+E$ zd6h<#w9Yx*A|K!15SfQUqGJ6v@N+1GL!z(UMu8?K!wS^3*Z>nLDi*nGvMxhN)Y5FNt}bJC`Frg?7J`rbSzHP@!K8IX>v0 z7D1fu0D~%*hxz03))GM}E}{x*M5T=%@|8q#FnJ^|z09_fizsn_Ih@9Yd#KC-J@>yG zjg{danV8}-t|r5*CS3M9TQ3*3!`<0Tptf_*qMOyW`fH}M_-;Ypw=x!<19+uyS1WYUjg2D-TC?j^EC{Wr2zuN(}t3Ao~!uM@b8dPEATkeCL}qo2-d z1qkwM%q%Nk&qO!J)L+FT$zJ2C=!!fV1W9slK5SsAh$BAsU)1r|_~E5ww$*czNuC|Je$@Lm-<|V z5A*JhLwLJwyw~0HFJ?D?HSwlb_E5gl&`r}@d6X&E*5v;dRK$0w!!tfn8`Zoc=RYeB^r724wsfJCj9QGkxkqN&Rj(@;5?c zwsq=ZhM=S0TKHtQ{t{6#(;8BsSY8Mv^1pWp9RNrxN+jKIqILEnW&9r<11rDpYOfr* z{>|r3y8jM-^>QP@dKpLtyzu`M%>B1-P;1*EbXAKD7szVAz&4arcYVi8X;_j)1r3mS z*b>qX3~?99F}`(LovUSMhSP7n6c~gpnkHQKP?cF6EdY+#jcu{P1b>^*b<0dAii@zk z%T)r+P@z*-kkXUDgikI$rZ(~rEM4P02>3_AiBsEn5|Jxt-edk_af!AjSo>XxX1o3@?J!jQy)YaPL`lz5|MPDgmOk1KI0d6{#M_+9 zDIon?Uut-?0Hnkm*Q@Q>UQ%M;a&V%~wfV`At|c$@PlYU~XBwv=v#opPe^y4OwTi?W zOT1So9@6XfG?%nf)#&;~mC15`931w+ROF|f&$Pch9lp%C3eH$vU_by}>*GssmXWRR zW7h)*B#MG2QfC!5h>Rzbe-ICPntHnGC2=7#{{pKSh9e^60%x?-p5%-RbYLe@SusqE zzh-rOOEbetFqo{TA;qM1E{D{k!Lc}bv3w*}Dm0~A{iybey-nbgP-`JvMOr&^*6i|6 z6R4_ZP*^<*Dw)(<4TlyGd7M5AFkCjX_}4T9iN-ECM~>1H7AJ`4w20uIkJD^NDIrkCGawmwQPQ|8@+-~=>Bl6kBI{xb%}S_PsZn75*d8i!+nt| zTd@S)@U0pbeE$^yOJXv#!4dcV{DM@4;yT?3%^C%N;vs@=|(J9m%O- z4t=HOCSHT77Z|xYVz#jz^#?KI6M^`J9|^sZ{mz7e4BBxP+fMXMnI1$@EC=UC>a)xMXBp#ySG{OJM?zsPN*=+f6* zn2csiz^f}z6EehhU0Q)I%0wToE+rv~j_MpM(H^z3_c#V45DOz&|dlmtw!z z>_b0+S8~)#HWp+KjT+$R=Z!P=kj(SxH3!DpvKq)~O*p+h1+JF1p&R(uYE>kY8y+3`x;W5z@kA>FKvDh06{~F}-=g>u` z>lXTuPSPNlSn}-3T8GK$>y{R6Y}xpM+DO_3X;S@zAC9U)f@Crw$SY&En;0nN;;%iOcxbFXEtvG&zH^Wm%|_~_eT|raj!%T z0@lVCXJI8&5}FU4y)^m9QS!=TsB(Q?%kNuSQ${stsT;^)+tQjna`Y~Jl3!Z*=365{9kZ#b~oJ9@OF!yM!v#;P6 zWU=!584KBbrTO18tQPR`pEeU@?KQg-g?x^tVl!r?)Rc{Tit)HUb*r6ouKm_&<1N*} ztKcaQ#|JVWK|tE2)eVhpQgC&~3LzISVeBDN)+)XSj}u^}r%M^>?|l)%?sm&ok%i9F zvaMN!eizEvj71yGv(Wgj2pA))7Wa>f7zae#U>FW)jCk%7nUhC|La_9}@iom0iOu*K zXY2Y98@ocJL~Jn!d%ING8lefg77MRy82C_@41<29vzkpvX@Z>O$1An5@y0%7iyiAC zMY>8&HW@|Zj41BgZtJIFR7eWgcdHE#B@!n5PJ~QpGnkVVr^S1 z-%AZXur0w`;NA7&x*8Rgeg4u1%7M~G6HcZl7Vk&TaFtU15It4^m7Kba!7sd&0Cq9! z1a;6~JII<1W0-!jq)dxm#j!?JMKvXrj=<0N4nw0Is5s1(=2c*~>hphVPFz7|V#8VHi=!+D-E*`4~G_ksZEA3~c zhuttOze>ryBhoAHDwVY=;mD{}EvsaFHzS1}?b>lUKUJ7G%PAJWl)lwy3N!N=e#U{F zA)?<%*5ZN1!Ayz=g6q}zR=|)ezdmRI$@$}UmOb(Lm=vgVw1VaQ>?Otm27^Hul&_+q z)8+-}jHp3UcuP1Kllp1ebm1yQO$Pj#>N;=e_&>Z>iF@-;JWe2Y$uV3Kf5H$o@w7wK z^|Rtm(WnXXv45Q}g^$cjd$b7t1t2^x{t?H1thOunX0J z0&EUatDgS^=?E3kUW)bql&t^GhSJ#tKthWKrP;7+G7$4wfJ}z5+SC@<6H834y!UvCXWBal%!hgmVR2r#F5Kq8=2EZNqvMpzG#n z#@=`@gt`nGoR`i;sdm}`^)7O6uS|u>hnRP zqkXR0n}9eUdByf)ywp!|L(%v`LOHx(_fQ~|pqCVXm!(I+jCq*6;)9(5pX)|uo6%p7 zTi3A92nW>?eh8Ysoyi5I#YsrT$N6Tu0}Dq-E`GcuOF`$m5g+-nPaMvlc?fS_<{=!Q z!Zg}lc3IC1C0w2Fg&JkM4R_lpS%6n!?LG7?I=mY-Ajvjs4mXrlE%s1zfe>wX6Q=`0 z<_yfV5Wej(&A}ypHtD9&)RW|g%>~k{hekmmg(;J5!13qjA8*H^pk|M*>M=?yg-;BddGHP`U^lQd4zijj?-wrCFBC^{q~t14OW5N(aOJ-nhu zNZ?vvI})>ovtYYY#~-G*2#8?PP`2P72HWW27ebgBoD8)p?>ID#^A$bk-%-Q9lA=tn zFHz6b+YBXu+9#&TGPMYyDP} z9^`lioO zIIUvZmpeWE*dS;{VZiUu`rsr%xhrCWgC2z_hHbeSjF5XV={1}j*khK3q%xEFVstxw zJmBzA5H@XS_#(U?>ay|B4xo#}i92so8?mne`7G!L$Y(4pVLV|Pvux<$SeuO->|53! z%F2g>uCS(Baf9t*ao({Lga|hcmZHH@1zgI*os6aUHyqg}wQN7G-4q3Sm|;6n)Q_GVH4jP|A>V1{W&$Cv ze|aLX{4t*t?kDgSJzE9Z-?bNAw{CNG{cM|ic3 z#D6Hp(ZowHsU`n=Ku|jh(d-yXd@`bDR`uY(70+X}XlFH=)6xcP?aN)<-cm&%?Xuk@ z+CfuFmAhD+gy2c1w<$3VS@Z_zh+5xT@fTzisr%2z2x2=%xNnwrvnbLxiQhK8N1`Jp z^6bEaXj9^u6PYzLb6&TTS#i_RQlG|Jx{SO{sdIJ0;&di(ySvz})r=td*!b?*`x z0iH#YLyfU#awm^L*!HRdl5sko^Ueml4AKY)I<=ANUnAQU31<&pAKH~_jkQ@cUAg9E z+ylis)N7%yY#lTmODNXTc*KIFOfZ1hhDZw$j(2B{Ai+)JW&PtuTSV+kx@^y4)#&JV zKjbL!o3d(8(}y#yFRIJNw&g)Wa4~S;-7N1?GBm#skfj)*JzMKN5jDjxqtGB)y8zLh zS5we)Yd1jC}yYNN&WA-*aINvCwNVmCUI)V+fwR+Z+m>t6~biA|NyZjAXvd*~}W0$C}>(^nh=s#^TMkJX&x@ z5stxZQ&5)KAwHY;DM`45D%)(P0etHVt!Sx~SWeUJXU6DRPTrgk!vc9%i!W#34eGeY zz8^SdIwPS!inY_wBrCg8|BJ<3#qsQXkEz3%&UfLs90DON-_iX7j}Cm9#*OcWYkiCn1Ut7vrD#7P!tFx%8M?;L zQfe%-rzGxZNjdDmm3JNc46N_&&2^iTnoUi7sY(>lwGXly0WeLVZM~p3fn!p>=(5HK zKrjInQ#5p~PM!9%BQ;c`@NfdooAZK^Vx#PXIxu)fy*tGS7)r13g&fIYMNDZ_6jc`-j+IaG_RRTGi*MO& zzd=9+_y^NojE|b7YWsb>m+?5Z9+F}*CJl(@m^rl~Y6+RO=9F|{SQ=d+RK#3HXla+z zkf!9v0_U_6#HEL!ZLZaCQ>2R*%gk()I#;d);@O(MVIlo#RJxoGY$Ds{df5kD?gBxZ z>YR8fl~KjYe^~&S`0mG0`pD%ugGAy5l7QIbf-?tT(pZ4E$C*$9VFesDONM2K)3hVd z9Ijua#&a?D(vgcHP7jX)jd%%s+(jTbcDi`a`dy0>MVh?RH1- zpqdrB{!{EHi{u|T4W$WXrTU`g|*iN@Ba_1f)Av>-&X3i_2h)p z%Lvh5US*>)?-^8dA$CG|-FF?_fELqItKB;Yx%FW*`fMjg1}lon{)Bpf8FLaba*dSB zgynjV(8vCQPTD}x9(6g8IUhEdRa+2m%(GiJ!V=AzIqZKG1__ad4GV{i%F_0sjvHJD z@An_z#NkO=4_2F!@Pm{thf_RD+8^<~_c3EZp?$z(YqCP@E}aUVkf+fa*F_i5zdcWxawE$>)dF&foo18SVMsG&lN= z(=?0HTo-X#(GT00pWjhhCz#4N7C%P4>-o+Q@sbF-ZiNB_xegK7{jVUeX|O}>K8*}1 z)e>5uCQf5pm@3h;�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 Date: Thu, 19 Nov 2020 19:41:14 +0800 Subject: [PATCH 070/290] Update iCloud.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加云函数触发器参考设置 --- iCloud.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/iCloud.md b/iCloud.md index 3d140c0..7f9988c 100644 --- a/iCloud.md +++ b/iCloud.md @@ -111,11 +111,9 @@ let CookieJDs = [ ![iCloud2](./icon/iCloud2.png) -函数名称:可以自定义,比如为jd。 -运行环境:选择 “Nodejs 12.16”。 -创建方式:选择 “空白函数”。 +**函数名称**:可以自定义,比如为jd。
**运行环境**:选择 “Nodejs 12.16”。
**创建方式**:选择 “空白函数”。 -确保环境为Nodejs 12.16,执行方法改为:index.main_handler,提交方式建议选本地文件夹,然后从GitHub项目克隆Zip压缩包,解压成文件夹,然后点击这个上传把文件夹上传进来(记得node_modules文件夹一并上传),完了后点击下面的高级设置。 +确保环境为Nodejs 12.16,执行方法改为:index.main_handler,提交方式建议选本地文件夹,然后从GitHub项目克隆Zip压缩包,解压成文件夹,然后点击这个上传把文件夹上传进来(记得node_modules文件夹一并上传或者将node_modules文件夹上传到“层”,之后选择“函数管理”-“层管理”绑定上传好的层),完了后点击下面的高级设置。 ![iCloud3](./icon/iCloud3.png) @@ -139,8 +137,10 @@ let CookieJDs = [ 关于触发周期中的自定义触发周期,使用的是 Cron表达式,这个自行学习下吧 + [Corn文档](https://cloud.tencent.com/document/product/583/9708#cron-.E8.A1.A8.E8.BE.BE.E5.BC.8F) - +目前repo中按照每个脚本一个定时器的方式设置到云函数中,大约需要触发器10多个,由于云函数触发器限制最多10个,需要对触发器进行整合,整合后触发器共8个,以下设置仅供参考 +![iCloud5](./icon/iCloud5.png) 点击提交,所有流程就结束了。 From 3499a3d5eee2da6b6f362e2435540ce3dd1a8faa Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Thu, 19 Nov 2020 19:42:45 +0800 Subject: [PATCH 071/290] Update iCloud.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix排版 --- iCloud.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iCloud.md b/iCloud.md index 7f9988c..64ac846 100644 --- a/iCloud.md +++ b/iCloud.md @@ -140,7 +140,7 @@ let CookieJDs = [ [Corn文档](https://cloud.tencent.com/document/product/583/9708#cron-.E8.A1.A8.E8.BE.BE.E5.BC.8F) -目前repo中按照每个脚本一个定时器的方式设置到云函数中,大约需要触发器10多个,由于云函数触发器限制最多10个,需要对触发器进行整合,整合后触发器共8个,以下设置仅供参考 +目前repo中按照每个脚本一个定时器的方式设置到云函数中,大约需要触发器10多个,由于云函数触发器限制最多10个,需要对触发器进行整合,整合后触发器共8个,以下设置仅供参考
![iCloud5](./icon/iCloud5.png) 点击提交,所有流程就结束了。 From 81e7f2ae0f3c03b7bd2ecf237dabf816b5494309 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 20 Nov 2020 09:49:17 +0800 Subject: [PATCH 072/290] update --- jd_moneyTree.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/jd_moneyTree.js b/jd_moneyTree.js index 843d25a..ad429db 100644 --- a/jd_moneyTree.js +++ b/jd_moneyTree.js @@ -77,12 +77,10 @@ async function jd_moneyTree() { await sell(); await myWealth(); await stealFriendFruit() - await msgControl(); $.log(`\n${message}\n`); if (!jdNotify || jdNotify === 'false') { $.msg($.name, subTitle, message); - $.setdata('0', $.treeMsgTime); } } function user_info() { From f982ff281a77a7336aba18dce60ed739f5ee3b01 Mon Sep 17 00:00:00 2001 From: EvineDeng <30263136+EvineDeng@users.noreply.github.com> Date: Fri, 20 Nov 2020 10:38:25 +0800 Subject: [PATCH 073/290] Update bug_report.md --- .github/ISSUE_TEMPLATE/bug_report.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index d169e19..00a9d7e 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -34,15 +34,15 @@ assignees: '' ## 1.关于你要提交的问题 Q:是否搜索了issue(包括已关闭的issue) -- [ ] 没有类似的issue +- [ ] 没有类似的issue Q:是否仔细阅读了教程 -- [ ] 已仔细阅读教程 +- [ ] 已仔细阅读教程 ## 2. 你使用的哪种部署方法 - - - + + + From ac0780f93d76d2522b5bb39942fa6457eb76958b Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 20 Nov 2020 12:06:06 +0800 Subject: [PATCH 074/290] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=82=B9=E7=82=B9?= =?UTF-8?q?=E5=88=B8=E8=84=9A=E6=9C=AC=EF=BC=8C=E7=82=B9=E7=82=B9=E5=88=B8?= =?UTF-8?q?=EF=BC=8C=E5=8F=AF=E4=BB=A5=E5=85=91=E6=8D=A2=E6=97=A0=E9=97=A8?= =?UTF-8?q?=E6=A7=9B=E7=BA=A2=E5=8C=85=EF=BC=881=E5=85=83=EF=BC=8C5?= =?UTF-8?q?=E5=85=83=EF=BC=8C10=E5=85=83=EF=BC=8C100=E5=85=83=EF=BC=8C?= =?UTF-8?q?=E9=83=A8=E5=88=86=E7=BA=A2=E5=8C=85=E9=9C=80=E6=8A=A2=E8=B4=AD?= =?UTF-8?q?=EF=BC=89=20APP=E6=B4=BB=E5=8A=A8=E5=85=A5=E5=8F=A3=EF=BC=9A?= =?UTF-8?q?=E2=80=9C=E6=9C=80=E6=96=B0=E7=89=88=E6=9C=AC=E4=BA=AC=E4=B8=9C?= =?UTF-8?q?APP=20>=E9=A2=86=E5=88=B8=E4=B8=AD=E5=BF=83/=E5=88=B8=E5=90=8E9?= =?UTF-8?q?.9>=E9=A2=86=E7=82=B9=E7=82=B9=E5=88=B8=E2=80=9D=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Loon/lxk0301_LoonTask.conf | 3 + Surge/lxk0301_Task.sgmodule.sgmodule | 1 + docker/crontab_list.sh | 2 + docker/crontab_list_ts.sh | 2 + jd_necklace.js | 309 +++++++++++++++++++++++++++ 5 files changed, 317 insertions(+) create mode 100644 jd_necklace.js diff --git a/Loon/lxk0301_LoonTask.conf b/Loon/lxk0301_LoonTask.conf index 0129059..070a997 100644 --- a/Loon/lxk0301_LoonTask.conf +++ b/Loon/lxk0301_LoonTask.conf @@ -60,6 +60,9 @@ cron "1 1 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_script #京豆变动通知 cron "2 9 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_bean_change.js, tag=京豆变动通知 +#点点券 +cron "20 0,20 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_necklace.js, tag=点点券 + #京东全民营业领金币 cron "20 * * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_collectProduceScore.js, tag=京东全民营业领金币 diff --git a/Surge/lxk0301_Task.sgmodule.sgmodule b/Surge/lxk0301_Task.sgmodule.sgmodule index 15a7c19..68fbcc7 100644 --- a/Surge/lxk0301_Task.sgmodule.sgmodule +++ b/Surge/lxk0301_Task.sgmodule.sgmodule @@ -29,4 +29,5 @@ cron "15 10 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scri cron "1 1 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_redPacket.js, wake-system=1, tag=京东全民开红包 # cron "0 0 0 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_xtg.js, timeout=550, wake-system=1, tag=京东星推官 cron "2 9 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_bean_change.js, timeout=650, wake-system=1, tag=京豆变动通知 +cron "20 0,20 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_necklace.js, timeout=650, wake-system=1, tag=点点券 # cron "20 * * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_collectProduceScore.js, wake-system=1, tag=京东全民营业领金币 diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index af32d57..7be87b7 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -53,3 +53,5 @@ 18 */3 * * * node /scripts/jd_daily_egg.js >> /scripts/logs/jd_daily_egg.log 2>&1 # 金融养猪 12 13 * * * node /scripts/jd_pigPet.js >> /scripts/logs/jd_pigPet.log 2>&1 +# 点点券 +20 0,20 * * * node /scripts/jd_necklace.js >> /scripts/logs/jd_necklace.log 2>&1 diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index 449d43c..68e37d3 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -53,3 +53,5 @@ 18 */3 * * * node /scripts/jd_daily_egg.js |ts >> /scripts/logs/jd_daily_egg.log 2>&1 # 金融养猪 12 * * * * node /scripts/jd_pigPet.js |ts >> /scripts/logs/jd_pigPet.log 2>&1 +# 点点券 +20 0,20 * * * node /scripts/jd_necklace.js |ts >> /scripts/logs/jd_necklace.log 2>&1 \ No newline at end of file diff --git a/jd_necklace.js b/jd_necklace.js new file mode 100644 index 0000000..f5175b2 --- /dev/null +++ b/jd_necklace.js @@ -0,0 +1,309 @@ +/* + * @Author: lxk0301 https://github.com/lxk0301 + * @Date: 2020-11-20 11:42:03 + * @Last Modified by: lxk0301 + * @Last Modified time: 2020-11-20 11:42:03 + */ +/* +点点券,可以兑换无门槛红包(1元,5元,10元,100元,部分红包需抢购) +APP活动入口:“最新版本京东APP >领券中心/券后9.9>领点点券”页面 +网页入口:https://h5.m.jd.com/babelDiy/Zeus/41Lkp7DumXYCFmPYtU3LTcnTTXTX/index.html +已支持IOS双京东账号,Node.js支持N个京东账号 +脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js +===============Quantumultx=============== +[task_local] +#点点券 +10 0,20 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_necklace.js, tag=点点券, enabled=true + +================Loon============== +[Script] +cron "10 0,20 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_necklace.js,tag=点点券 + +===============Surge================= +点点券 = type=cron,cronexp="10 0,20 * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_necklace.js + +============小火箭========= +东东农场 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_necklace.js, cronexpr="10 0,20 * * *", timeout=200, enable=true + */ +const $ = new Env('点点券'); + +const notify = $.isNode() ? require('./sendNotify') : ''; +//Node.js用户请在jdCookie.js处填写京东ck; +const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; + +//IOS等用户直接用NobyDa的jd cookie +let cookiesArr = [], cookie = ''; +if ($.isNode()) { + Object.keys(jdCookieNode).forEach((item) => { + cookiesArr.push(jdCookieNode[item]) + }) + if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {}; +} else { + cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); +} + +const JD_API_HOST = 'https://api.m.jd.com/api'; +!(async () => { + if (!cookiesArr[0]) { + $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); + return; + } + $.temp = []; + for (let i = 0; i < cookiesArr.length; i++) { + if (cookiesArr[i]) { + cookie = cookiesArr[i]; + $.UserName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]) + $.index = i + 1; + $.isLogin = true; + $.nickName = ''; + await TotalBean(); + console.log(`\n开始【京东账号${$.index}】${$.nickName || $.UserName}\n`); + if (!$.isLogin) { + $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"}); + + if ($.isNode()) { + await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); + } else { + $.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 + } + continue + } + await JD818(); + } + } +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) +async function JD818() { + await necklace_homePage(); + await doTask(); + await necklace_homePage(); + await receiveBubbles(); + await sign(); + await necklace_homePage(); + await showMsg(); +} +function showMsg() { + return new Promise(resolve => { + $.msg($.name, '', `京东账号 ${$.index} ${$.nickName}\n当前${$.name}${$.totalScore}个`) + }) +} +async function doTask() { + for (let item of $.taskConfigVos) { + if (item.taskStage === 0) { + console.log(`${item.taskName}未完成`); + await necklace_startTask(item.id); + await $.wait(2000); + await necklace_startTask(item.id); + } else if (item.taskStage === 2) { + console.log(`${item.taskName}任务已做完,奖励未领取`); + } else if (item.taskStage === 3) { + console.log(`${item.taskName}奖励已领取`); + } + } +} +async function receiveBubbles() { + for (let item of $.bubbles) { + console.log(`开始领取点点券\n`); + await necklace_chargeScores(item.id) + } +} +async function sign() { + if ($.signInfo.todayCurrentSceneSignStatus === 1) { + await necklace_sign(); + } else { + console.log(`当前${new Date(new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000).toLocaleString()}已签到`) + } +} +//每日签到福利 +function necklace_sign() { + return new Promise(resolve => { + const body = { + currentDate: $.lastRequestTime.replace(/:/g, "%3A"), + } + $.post(taskPostUrl("necklace_sign", body), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + console.log(data); + if (safeGet(data)) { + data = JSON.parse(data); + if (data.rtn_code === 0) { + if (data.data.biz_code === 0) { + console.log(`签到成功,时间:${new Date(new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000).toLocaleString()}`) + // $.taskConfigVos = data.data.result.taskConfigVos; + // $.exchangeGiftConfigs = data.data.result.exchangeGiftConfigs; + } + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} +//领取奖励 +function necklace_chargeScores(bubleId) { + return new Promise(resolve => { + const body = { + bubleId, + currentDate: $.lastRequestTime.replace(/:/g, "%3A"), + } + $.post(taskPostUrl("necklace_chargeScores", body), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + console.log(data); + if (safeGet(data)) { + data = JSON.parse(data); + if (data.rtn_code === 0) { + if (data.data.biz_code === 0) { + // $.taskConfigVos = data.data.result.taskConfigVos; + // $.exchangeGiftConfigs = data.data.result.exchangeGiftConfigs; + } + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} +function necklace_startTask(taskId) { + return new Promise(resolve => { + const body = { + taskId, + currentDate: $.lastRequestTime.replace(/:/g, "%3A"), + } + $.post(taskPostUrl("necklace_startTask", body), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + console.log(data); + if (safeGet(data)) { + data = JSON.parse(data); + if (data.rtn_code === 0) { + if (data.data.biz_code === 0) { + // $.taskConfigVos = data.data.result.taskConfigVos; + // $.exchangeGiftConfigs = data.data.result.exchangeGiftConfigs; + } + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function necklace_homePage() { + return new Promise(resolve => { + $.post(taskPostUrl('necklace_homePage'), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.rtn_code === 0) { + if (data.data.biz_code === 0) { + $.taskConfigVos = data.data.result.taskConfigVos; + $.exchangeGiftConfigs = data.data.result.exchangeGiftConfigs; + $.lastRequestTime = data.data.result.lastRequestTime; + $.bubbles = data.data.result.bubbles; + $.signInfo = data.data.result.signInfo; + $.totalScore = data.data.result.totalScore; + } + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function taskPostUrl(function_id, body = {}) { + const time = new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000; + return { + url: `${JD_API_HOST}?functionId=${function_id}&appid=jd_mp_h5&loginType=2&client=jd_mp_h5&t=${time}&body=${escape(JSON.stringify(body))}`, + headers: { + "Cookie": cookie, + "User-Agent": `jdapp;iPhone;9.1.0;14.0;e35caf0a69be42084e3c97eef56c3af7b0262d01;network/4g;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/1;model/iPhone11,8;addressid/2005183373;hasOCPay/0;appBuild/167348;supportBestPay/0;jdSupportDarkMode/0;pv/255.2;apprpd/Home_Main;ref/JDMainPageViewController;psq/1;ads/;psn/e35caf0a69be42084e3c97eef56c3af7b0262d01|701;jdv/0|kong|t_2010957099_|jingfen|3b5422e836e74037862fea3dcf1a6802|1600647811440|1600647814;adk/;app_device/IOS;pap/JA2015_311210|9.1.0|IOS 14.0;Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1`, + } + } +} +function TotalBean() { + return new Promise(async resolve => { + const options = { + "url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`, + "headers": { + "Accept": "application/json,text/plain, */*", + "Content-Type": "application/x-www-form-urlencoded", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", + "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + data = JSON.parse(data); + if (data['retcode'] === 13) { + $.isLogin = false; //cookie过期 + return + } + $.nickName = data['base'].nickname; + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function safeGet(data) { + try { + if (typeof JSON.parse(data) == "object") { + return true; + } + } catch (e) { + console.log(e); + console.log(`京东服务器访问数据为空,请检查自身设备网络情况`); + return false; + } +} +// 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)} \ No newline at end of file From 0375adea255e2c0247414a35174ceec85a80ea14 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 20 Nov 2020 12:36:17 +0800 Subject: [PATCH 075/290] fix bug --- jd_necklace.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jd_necklace.js b/jd_necklace.js index f5175b2..9c058ab 100644 --- a/jd_necklace.js +++ b/jd_necklace.js @@ -48,7 +48,6 @@ const JD_API_HOST = 'https://api.m.jd.com/api'; $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); return; } - $.temp = []; for (let i = 0; i < cookiesArr.length; i++) { if (cookiesArr[i]) { cookie = cookiesArr[i]; @@ -89,7 +88,8 @@ async function JD818() { } function showMsg() { return new Promise(resolve => { - $.msg($.name, '', `京东账号 ${$.index} ${$.nickName}\n当前${$.name}${$.totalScore}个`) + $.msg($.name, '', `京东账号 ${$.index} ${$.nickName}\n当前${$.name}${$.totalScore}个`); + resolve() }) } async function doTask() { From bd28f0260b5afd968202bbe5aa5fd7e71f20ec46 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 20 Nov 2020 13:43:42 +0800 Subject: [PATCH 076/290] update --- jd_daily_egg.js | 8 +------- jd_joy_reward.js | 4 +--- jd_pigPet.js | 7 +------ 3 files changed, 3 insertions(+), 16 deletions(-) diff --git a/jd_daily_egg.js b/jd_daily_egg.js index 5f8dfae..07150e7 100644 --- a/jd_daily_egg.js +++ b/jd_daily_egg.js @@ -2,7 +2,7 @@ * @Author: lxk0301 https://github.com/lxk0301 * @Date: 2020-11-10 14:10:27 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-19 14:11:01 + * @Last Modified time: 2020-11-20 14:11:01 */ /* 京东金融-天天提鹅 @@ -14,7 +14,6 @@ const $ = new Env('天天提鹅'); let cookiesArr = [], cookie = ''; const JD_API_HOST = 'https://ms.jr.jd.com/gw/generic/uc/h5/m'; const notify = $.isNode() ? require('./sendNotify') : ''; -let jdNotify = false;//是否开启推送互助码 //Node.js用户请在jdCookie.js处填写京东ck; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; if ($.isNode()) { @@ -49,11 +48,6 @@ if ($.isNode()) { } continue } - message = ''; - subTitle = ''; - goodsUrl = ''; - taskInfoKey = []; - option = {}; await jdDailyEgg(); } } diff --git a/jd_joy_reward.js b/jd_joy_reward.js index c6fa4f4..7a6c1d7 100644 --- a/jd_joy_reward.js +++ b/jd_joy_reward.js @@ -1,6 +1,6 @@ /* 宠汪汪积分兑换奖品脚本, 目前脚本只兑换京豆,兑换京豆成功,才会发出通知提示,其他情况不通知。 -更新时间:2020-11-18 +更新时间:2020-11-20 兑换规则:一个账号一天只能兑换一次京豆。 兑换奖品成功后才会有系统弹窗通知 每日京豆库存会在0:00、8:00、16:00更新,经测试发现中午12:00也会有补发京豆。 @@ -57,8 +57,6 @@ const JD_API_HOST = 'https://jdjoy.jd.com'; } continue } - message = ''; - subTitle = ''; await joyReward(); // $.msg($.name, '兑换脚本暂不能使用', `请停止使用,等待后期更新\n如果新版本兑换您有兑换机会,请抓包兑换\n再把抓包数据发送telegram用户@lxk0301`); } diff --git a/jd_pigPet.js b/jd_pigPet.js index 522bac0..2578660 100644 --- a/jd_pigPet.js +++ b/jd_pigPet.js @@ -2,7 +2,7 @@ * @Author: lxk0301 https://github.com/lxk0301 * @Date: 2020-11-10 14:07:07 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-19 14:10:19 + * @Last Modified time: 2020-11-20 14:10:19 */ /* 京东金融养猪猪 @@ -52,11 +52,6 @@ if ($.isNode()) { } continue } - message = ''; - subTitle = ''; - goodsUrl = ''; - taskInfoKey = []; - option = {}; await jdPigPet(); } } From d6d9da35e9367bffd075c1e66981d96bd6f72159 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 20 Nov 2020 13:46:31 +0800 Subject: [PATCH 077/290] update --- jd_joy_run.js | 2 -- jd_unsubscribe.js | 2 -- 2 files changed, 4 deletions(-) diff --git a/jd_joy_run.js b/jd_joy_run.js index 7d1fe41..a0118ef 100644 --- a/jd_joy_run.js +++ b/jd_joy_run.js @@ -155,8 +155,6 @@ async function main() { $.inviteReward = 0; $.runReward = 0; console.log(`\n开始【京东账号${$.index}】${UserName}\n`); - message = ''; - subTitle = ''; $.jdLogin = true; $.LKYLLogin = true; console.log(`=============【开始邀请助力】===============`) diff --git a/jd_unsubscribe.js b/jd_unsubscribe.js index 3809343..1fa2cce 100644 --- a/jd_unsubscribe.js +++ b/jd_unsubscribe.js @@ -61,8 +61,6 @@ const JD_API_HOST = 'https://wq.jd.com/fav'; } continue } - message = ''; - subTitle = ''; await requireConfig(); await jdUnsubscribe(); await showMsg(); From e8684f55e9cda52cda4b8d3a61952d599a3388de Mon Sep 17 00:00:00 2001 From: shylocks Date: Fri, 20 Nov 2020 14:23:04 +0800 Subject: [PATCH 078/290] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=AC=E5=96=9C?= =?UTF-8?q?=E5=B7=A5=E5=8E=82=E9=99=A4=E9=A2=86=E7=BA=A2=E5=8C=85=E7=9A=84?= =?UTF-8?q?=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 978 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 765 insertions(+), 213 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 29b6119..1e2b59f 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -1,265 +1,817 @@ /* 京东京喜工厂 -未完,待续 */ -const $hammer = (() => { - const isRequest = "undefined" != typeof $request, - isSurge = "undefined" != typeof $httpClient, - isQuanX = "undefined" != typeof $task; - const log = (...n) => { for (let i in n) console.log(n[i]) }; - const alert = (title, body = "", subtitle = "", link = "", option) => { - if (isSurge) return $notification.post(title, subtitle, body, link); - if (isQuanX) return $notify(title, subtitle, (link && !body ? link : body), option); - log("==============📣系统通知📣=============="); - log("title:", title, "subtitle:", subtitle, "body:", body, "link:", link); + +const $ = new Env('京喜工厂'); +const JD_API_HOST = 'https://m.jingxi.com'; + +let ele, factoryId; + +let message = '', subTitle = '', option = {}; +const notify = $.isNode() ? require('./sendNotify') : ''; +let jdNotify = false;//是否关闭通知,false打开通知推送,true关闭通知推送 + +let cookiesArr = [], cookie = ''; +const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; +if ($.isNode()) { + Object.keys(jdCookieNode).forEach((item) => { + cookiesArr.push(jdCookieNode[item]) + }) + if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => { }; - const read = key => { - if (isSurge) return $persistentStore.read(key); - if (isQuanX) return $prefs.valueForKey(key); - }, - write = (key, val) => { - if (isSurge) return $persistentStore.write(key, val); - if (isQuanX) return $prefs.setValueForKey(key, val); - }; - const request = (method, params, callback) => { - /** - * - * params(): {url: , headers: , body: } | - * - * callback( - * error, - * {status: , headers: , body: } | "" - * ) - * - */ - let options = {}; - if (typeof params == "string") { - options.url = params; - } else { - options.url = params.url; - if (typeof params == "object") { - params.headers && (options.headers = params.headers); - params.body && (options.body = params.body); - } - } - method = method.toUpperCase(); - - const writeRequestErrorLog = function (m, u) { - return err => { - log("=== request error -s--"); - log(`${m} ${u}`, err); - log("=== request error -e--"); - }; - }(method, options.url); - - if (isSurge) { - const _runner = method == "GET" ? $httpClient.get : $httpClient.post; - return _runner(options, (error, response, body) => { - if (error == null || error == "") { - response.body = body; - callback("", response); - } else { - writeRequestErrorLog(error); - callback(error, ""); - } - }); - } - if (isQuanX) { - options.method = method; - $task.fetch(options).then( - response => { - response.status = response.statusCode; - delete response.statusCode; - callback("", response); - }, - reason => { - writeRequestErrorLog(reason.error); - callback(reason.error, ""); - } - ); - } - }; - const done = (value = {}) => { - if (isQuanX) return isRequest ? $done(value) : null; - if (isSurge) return isRequest ? $done(value) : $done(); - }; - return { isRequest, isSurge, isQuanX, log, alert, read, write, request, done }; -})(); - - -//京东接口地址 -const JD_API_HOST = 'https://wq.jd.com'; - -//直接用NobyDa的jd cookie -// const cookie = $hammer.read('CookieJD'); -const cookie = 'unpl=V2_ZzNtbUAHRRx0DxZVch9aBWIBRllLAhMSfQtDUnxLWVdnBhpcclRCFnQUR1JnGFUUZAMZXURcQhJFOEZVehhdDWMEGllyZ0sdGwgLVBUaMgUqTl9tQVdzFEUIQlx%252bGlwAZAAXW0tRRhZ9DU5TfRpsNWcFIl1DVkIUcgBBVnkaVDU8VnxbEgJDESFYRFNyHllQVwIiXHJWc0MbCEdVehteBmYAEhBCU0sQdghDV3gcWgxhBhFVR19EE3Y4R2R4; PPRD_P=CT.138912.3.26-UUID.1594174344038855825195; __jda=122270672.1594174344038855825195.1594174344.1594619829.1594628524.29; __jdb=122270672.4.1594174344038855825195|29.1594628524; __jdc=122270672; __jdv=122270672%7Ckong%7Ct_1000170136%7Ctuiguang%7Cnotset%7C1594569450665; __wga=1594631325352.1594630264664.1594619828892.1594619828892.3.2; _tj_rvurl=https%3A//wq.jd.com/cube/front/activePublish/dream_factory_report/380556.html%3Fptag%3D138912.3.26%26lng%3D113.321134%26lat%3D23.139617%26sid%3D6c732f3e20be25526c2e67df89e488dw%26un_area%3D19_1601_50258_51885; cid=8; mba_muid=1594174344038855825195.33.1594631325409; mba_sid=33.18; retina=1; shshshfp=3f7499d014a4f06d56edfb5378a934ee; shshshfpb=w5O9mqDoHWvVwOS9jAYB%20zg%3D%3D; shshshsID=ed6e17a13e5b4921d09de669e2b06c89_3_1594631325584; wqmnx1=MDEyNjM1M3B3am1ncmZyZHR0My4mMTImMjlzYzNlNjdld2ExMDIxNjg1NnBoOTsuNWE0ZWVjYmRla2lEQS0tLS1ENXV0ZTNVL3NpTzFlaDFkczAzaFA7dTEzcGV5ZG9yZXYxcE1HYWVKZXJDbzs0Ly9hOTBjZmEyMTswZzAwdGFvfDUwMTY7O2RlO0o1Mi5JMztsLlA7IG4gX2tjWHBiNi5LLGVrby80cEpLMWY3bjI0MllPT1UhSCU%3D; wxa_level=1; pt_key=app_openAAJfBSQbAEBjl86WMnH-4g3Is6PISRQsx5CU-pQolK0klfaTVHmW5nfZL7DkOGhtRWp6ttQKfdDSiHZ1el6DX2SEjWkotlT2; pt_pin=%E8%A2%AB%E6%8A%98%E5%8F%A0%E7%9A%84%E8%AE%B0%E5%BF%8633; pwdt_id=%E8%A2%AB%E6%8A%98%E5%8F%A0%E7%9A%84%E8%AE%B0%E5%BF%8633; sid=6c732f3e20be25526c2e67df89e488dw; wq_area=19_1601_3633%7C3; visitkey=270851475495567; jxsid=15946198288819114076; sc_width=414; webp=0; shshshfpa=b134218e-f14e-6005-fa8e-52d2bc02126f-1594364440'; -let shareCodes = [ - 'V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=', -]; -let factoryId, productionId, userTaskStatusList, dailyTask = [], produceTask = []; -const name = '京喜工厂'; -let message = ''; -let subTitle = ''; -const Task = step() -Task.next(); -function* step() { - const startTime = Date.now(); - yield userInfo(); - yield collectElectricity(); - yield investElectric(); - yield taskList(); - //yield produceTaskFun();//生产任务 - const end = ((Date.now() - startTime) / 1000).toFixed(2); - console.log(`\n完成${name}脚本耗时: ${end} 秒\n`); - $hammer.alert(name, message, subTitle); +} else { + cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]) } +!(async () => { + if (!cookiesArr[0]) { + $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); + return; + } + for (let i = 0; i < cookiesArr.length; i++) { + if (cookiesArr[i]) { + cookie = cookiesArr[i]; + $.UserName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]) + $.index = i + 1; + $.isLogin = true; + $.nickName = ''; + await TotalBean(); + console.log(`\n***********开始【京东账号${$.index}】${$.nickName || $.UserName}********\n`); + if (!$.isLogin) { + $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"}); -function produceTaskFun() { - for (let item of produceTask) { - if (item.awardStatus !== 1) { - if (item.completedTimes >= item.targetTimes) { - const url = `/newtasksys/newtasksys_front/Award?source=dreamfactory&bizCode=dream_factory&taskId=${item.taskId}&sceneval=2&g_login_type=1`; - request(url).then((res) => { - console.log(`每日任务完成结果${JSON.stringify(res)}}`); - try { - if (res.ret === 0) { - console.log(`${item.taskName}任务完成`) - } - } catch (e) { - console.log(`${item.taskName}任务异常`) - } - }) + if ($.isNode()) { + await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); + } else { + $.setdata('', `CookieJD${i ? i + 1 : ""}`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 + } + continue } + message = ''; + subTitle = ''; + goodsUrl = ''; + taskInfoKey = []; + option = {}; + await jdDreamFactory(); } } - Task.next(); +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) + +function msleep(n) { + Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, n); } +function sleep(n) { + msleep(n * 1000); +} + +async function jdDreamFactory() { + ele = 0; + await userInfo(); + await getUserElectricity(); + await taskList(); + await investElectric(); + // await assistFriend('gB99tYLjvPcEFloDgamoBw=='); + await hireAward(); + await stealFriend(); + await showMsg(); +} + + // 收取发电机的电力 -function collectElectricity() { - const url = `/dreamfactory/generator/CollectCurrentElectricity?zone=dream_factory&apptoken=&pgtimestamp=&phoneID=&factoryid=${factoryId}&doubleflag=1&sceneval=2`; - request(url).then((res) => { - try { - if (res.ret === 0) { - console.log(`成功从发电机收取${res.data.CollectElectricity}电力`); - } - Task.next(); - } catch (e) { - console.log('收集电力异常') - } - }) -} -// 投入电力 -function investElectric() { - const url = `/dreamfactory/userinfo/InvestElectric?zone=dream_factory&productionId=${productionId}&sceneval=2&g_login_type=1`; - request(url).then((res) => { - try { - if (res.ret === 0) { - console.log(`成功投入电力${res.data.investElectric}电力`); - message += `【投入电力】${res.data.investElectric}`; - } else { - console.log(`投入失败,${res.message}`); - } - Task.next(); - } catch (e) { - console.log('收集电力异常') - } - }) -} -// 初始化任务 -function taskList() { - const url = `/newtasksys/newtasksys_front/GetUserTaskStatusList?source=dreamfactory&bizCode=dream_factory&sceneval=2&g_login_type=1`; - request(url).then((res) => { - try { - //console.log(`${JSON.stringify(res)}`) - //console.log(res) - if (res.ret === 0) { - userTaskStatusList = res.data.userTaskStatusList; - for (let item of res.data.userTaskStatusList) { - if (item.dateType === 2) { - dailyTask.push(item); - } - if (item.dateType === 1) { - produceTask.push(item); +function collectElectricity(factoryId = factoryId, help = false) { + return new Promise(async resolve => { + const url = `/dreamfactory/generator/CollectCurrentElectricity?zone=dream_factory&apptoken=&pgtimestamp=&phoneID=&factoryid=${factoryId}&doubleflag=1&sceneval=2&g_login_type=1`; + + $.get(taskurl(url), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + data = JSON.parse(data); + if (data['ret'] === 0) { + if (help) { + ele += Number(data.data['loginPinCollectElectricity']) + console.log(`帮助好友收取 ${data.data['CollectElectricity']} 电力,获得 ${data.data['loginPinCollectElectricity']} 电力`); + message += `【帮助好友】帮助成功,获得 ${data.data['loginPinCollectElectricity']} 电力\n` + } else { + + ele += Number(data.data['CollectElectricity']) + console.log(`收取 ${data.data['loginPinCollectElectricity']} 电力`); + message += `【收取发电站】收取成功,获得 ${data.data['CollectElectricity']} 电力\n` + } + + } else { + // console.log(data) + } + } else { + console.log(`京东服务器返回空数据`) } } - Task.next(); + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); } - } catch (e) { - console.log('初始化任务异常') - } - }).catch((error) => { - console.log(error) + }) }) } -//初始化个人信息 + +// 投入电力 +function investElectric() { + return new Promise(async resolve => { + const url = `/dreamfactory/userinfo/InvestElectric?zone=dream_factory&productionId=${productionId}&sceneval=2&g_login_type=1`; + $.get(taskurl(url), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + // console.log(data) + data = JSON.parse(data); + if (data.ret === 0) { + console.log(`成功投入电力${data.data.investElectric}电力`); + message += `【投入电力】投入成功,共计 ${data.data.investElectric} 电力\n`; + } else { + console.log(`投入失败,${data.msg}`); + message += `【投入电力】投入失败,${data.msg}\n`; + } + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +// 初始化任务 +function taskList() { + return new Promise(async resolve => { + const url = `/newtasksys/newtasksys_front/GetUserTaskStatusList?source=dreamfactory&bizCode=dream_factory&sceneval=2&g_login_type=1`; + $.get(taskurl(url), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + // console.log(data) + data = JSON.parse(data); + let userTaskStatusList = data['data']['userTaskStatusList']; + for (let i = 0; i < userTaskStatusList.length; ++i) { + const vo = userTaskStatusList[i]; + if (vo['awardStatus'] !== 1) { + if (vo.completedTimes >= vo.targetTimes) { + console.log(`任务:${vo.description}可完成`) + await completeTask(vo.taskId, vo.taskName) + sleep(1); + } else { + switch (vo.taskType) { + case 2: // 逛一逛任务 + case 6: // 浏览商品任务 + case 9: // 开宝箱 + for (let i = vo.completedTimes; i <= vo.configTargetTimes; ++i) { + console.log(`去做任务:${vo.taskName}`) + await doTask(vo.taskId) + await completeTask(vo.taskId, vo.taskName) + sleep(1); + } + break + case 4: // 招工 + break + case 5: + // 收集类 + break + case 1: // 登陆领奖 + default: + break + } + } + } + } + console.log(`完成任务:共领取${ele}电力`) + message += `【每日任务】领奖成功,共计 ${ele} 电力\n`; + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +// 获得用户电力情况 +function getUserElectricity() { + return new Promise(async resolve => { + const url = `/dreamfactory/generator/QueryCurrentElectricityQuantity?zone=dream_factory&factoryid=${factoryId}&sceneval=2&g_login_type=1` + $.get(taskurl(url), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + // console.log(data) + data = JSON.parse(data); + if (data['ret'] === 0) { + console.log(`发电机:当前 ${data.data.currentElectricityQuantity} 电力,最大值 ${data.data.maxElectricityQuantity} 电力`) + if (data.data.currentElectricityQuantity === data.data.maxElectricityQuantity + && data.data.doubleElectricityFlag) { + console.log(`发电机:电力可翻倍并收获`) + await collectElectricity() + } else { + message += `【发电机电力】当前 ${data.data.currentElectricityQuantity} 电力,未达到收获标准\n` + } + } + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +// 收取招工电力 +function hireAward() { + return new Promise(async resolve => { + const url = `/dreamfactory/friend/HireAward?zone=dream_factory&date=${new Date().Format("yyyyMMdd")}&type=0&sceneval=2&g_login_type=1` + $.get(taskurl(url), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + data = JSON.parse(data); + if (data['ret'] === 0) { + console.log(`打工电力:收取成功`) + message += `【打工电力】:收取成功\n` + } else { + console.log(`打工电力:收取失败,${data.msg}`) + message += `【打工电力】:收取失败,${data.msg}\n` + } + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +// 帮助用户 +function assistFriend(sharepin) { + + return new Promise(async resolve => { + const url = `/dreamfactory/friend/AssistFriend?zone=dream_factory&sharepin=${sharepin}&sceneval=2&g_login_type=1` + $.get(taskurl(url), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + data = JSON.parse(data); + if (data['ret'] === 0) { + console.log(`助力朋友:${sharepin}成功`) + } else { + console.log(`助力朋友:${data.msg}`) + } + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +// 任务领奖 +function completeTask(taskId, taskName) { + return new Promise(async resolve => { + const url = `/newtasksys/newtasksys_front/Award?source=dreamfactory&bizCode=dream_factory&taskId=${taskId}&sceneval=2&g_login_type=1`; + $.get(taskurl(url), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + // console.log(data) + data = JSON.parse(data); + switch (data['data']['awardStatus']) { + case 1: + ele += Number(data['data']['prizeInfo'].replace('\\n', '')) + console.log(`领取${taskName}任务奖励成功,收获:${Number(data['data']['prizeInfo'].replace('\\n', ''))}电力`); + break + case 1013: + case 0: + console.log(`领取${taskName}任务奖励失败,任务已领奖`); + break + default: + console.log(`领取${taskName}任务奖励失败,${data['msg']}`) + break + } + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +// 完成任务 +function doTask(taskId) { + return new Promise(async resolve => { + const url = `/newtasksys/newtasksys_front/DoTask?source=dreamfactory&bizCode=dream_factory&taskId=${taskId}&sceneval=2&g_login_type=1`; + $.get(taskurl(url), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + // console.log(data) + data = JSON.parse(data); + if (data.ret === 0) { + console.log("做任务完成!") + } + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +// 初始化个人信息 function userInfo() { - const url = `/dreamfactory/userinfo/GetUserInfo?zone=dream_factory&pin=&sharePin=&shareType=&materialTuanPin=&materialTuanId=&sceneval=2`; - request(url).then((response) => { - try { - // taskInfo = res.data.result.taskInfos; - if (response.ret === 0) { - const { data } = response; - // !data.productionList && !data.factoryList + return new Promise(async resolve => { + const url = `/dreamfactory/userinfo/GetUserInfo?zone=dream_factory&pin=&sharePin=&shareType=&materialTuanPin=&materialTuanId=&sceneval=2`; + $.get(taskurl(url), (err, resp, data) => { + data = JSON.parse(data); + if (data['ret'] === 0) { + data = data['data']; if (data.factoryList && data.productionList) { const production = data.productionList[0]; const factory = data.factoryList[0]; factoryId = factory.factoryId;//工厂ID productionId = production.productionId;//商品ID subTitle = data.user.pin; - console.log(`\n我的分享码\n${data.user.encryptPin}\n`); - // console.log(`进度:${(production.investedElectric/production.needElectric).toFixed(2) * 100}%\n`); + console.log(`当前电力:${data.user.electric}`) + console.log(`分享码: ${data.user.encryptPin}`); + console.log(`生产进度:${(production.investedElectric / production.needElectric).toFixed(2) * 100}%`); message += `【生产进度】${((production.investedElectric / production.needElectric) * 100).toFixed(2)}%\n`; - Task.next(); } else { - return $hammer.alert(name, '\n【提示】此账号京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动\n'); + console.log('【提示】此账号京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动\n') } - } else { - Task.return(); } - } catch (e) { - console.log(e); - console.log('初始化任务异常'); - } + resolve() + }) }) } -//等待一下 -function sleep(s) { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve(); - }, s * 1000); + +function stealFriend() { + return new Promise(async resolve => { + const url = `//dreamfactory/friend/QueryFactoryManagerList?zone=dream_factory&sceneval=2`; + $.get(taskurl(url), (err, resp, data) => { + data = JSON.parse(data); + if (data['ret'] === 0) { + data = data['data']; + for (let i = 0; i < data.list.length; ++i) { + let pin = data.list[i]['encryptPin']; + getFactoryIdByPin(pin).then(async (facId) => { + await collectElectricity(facId,true) + }).catch(err => { + + }) + } + } + resolve() + }) }) } -async function request(url, body = {}) { - await sleep(2); //歇口气儿, 不然会报操作频繁 +function getFactoryIdByPin(pin) { return new Promise((resolve, reject) => { - $hammer.request('GET', taskurl(url, body), (error, response) => { - if(error){ - $hammer.log("Error:", error); - }else{ - //console.log(response.body) - resolve(JSON.parse(response.body)); + const url = `/dreamfactory/userinfo/GetUserInfoByPin?zone=dream_factory&pin=${pin}&sceneval=2`; + $.get(taskurl(url), (err, resp, data) => { + data = JSON.parse(data); + if (data['ret'] === 0) { + resolve(data['data']['factoryList'][0]['factoryId']) + } else { + reject() } }) }) } +async function showMsg() { + let ctrTemp; + if ($.isNode() && process.env.DREAMFACTORY_NOTIFY_CONTROL) { + ctrTemp = `${process.env.DREAMFACTORY_NOTIFY_CONTROL}` === 'false'; + } else if ($.getdata('jdDreamFactory')) { + ctrTemp = $.getdata('jdDreamFactory') === 'false'; + } else { + ctrTemp = `${jdNotify}` === 'false'; + } + if (ctrTemp) { + $.msg($.name, subTitle, message, option); + if ($.isNode()) { + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `${subTitle}\n${message}`); + } + } else { + $.log(`\n${message}\n`); + } +} + +function TotalBean() { + return new Promise(async resolve => { + const options = { + "url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`, + "headers": { + "Accept": "application/json,text/plain, */*", + "Content-Type": "application/x-www-form-urlencoded", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", + "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + data = JSON.parse(data); + if (data['retcode'] === 13) { + $.isLogin = false; //cookie过期 + return + } + $.nickName = data['base'].nickname; + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +// 生成url function taskurl(url, body) { return { url: `${JD_API_HOST}${url}`, headers: { - 'Cookie' : cookie, - 'Host': 'wq.jd.com', + 'Cookie': cookie, + 'Host': 'm.jingxi.com', 'Accept': '*/*', 'Connection': 'keep-alive', - 'User-Agent': 'jdapp;iPhone;9.0.4;13.5.1;;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', + 'User-Agent': 'jdpingou;iPhone;3.14.4;14.0;ae75259f6ca8378672006fc41079cd8c90c53be8;network/wifi;model/iPhone10,2;appBuild/100351;ADID/00000000-0000-0000-0000-000000000000;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/1;hasOCPay/0;supportBestPay/0;session/62;pap/JA2015_311210;brand/apple;supportJDSHWK/1;Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148', 'Accept-Language': 'zh-cn', 'Referer': 'https://wqsd.jd.com/pingou/dream_factory/index.html', 'Accept-Encoding': 'gzip, deflate, br', } } -} \ No newline at end of file +} + +Date.prototype.Format = function (fmt) { //author: meizz + var o = { + "M+": this.getMonth() + 1, //月份 + "d+": this.getDate(), //日 + "h+": this.getHours(), //小时 + "m+": this.getMinutes(), //分 + "s+": this.getSeconds(), //秒 + "q+": Math.floor((this.getMonth() + 3) / 3), //季度 + "S": this.getMilliseconds() //毫秒 + }; + if (/(y+)/.test(fmt)) + fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); + for (var k in o) + if (new RegExp("(" + k + ")").test(fmt)) + fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); + return fmt; +} + +// 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, o) => { + 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.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 o = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); + o = o ? 1 * o : 20, o = e && e.timeout ? e.timeout : o; + const [r, h] = i.split("@"), a = { + url: `http://${h}/v1/scripting/evaluate`, + body: {script_text: t, mock_type: "cron", timeout: o}, + headers: {"X-Key": r, 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), o = JSON.stringify(this.data); + s ? this.fs.writeFileSync(t, o) : i ? this.fs.writeFileSync(e, o) : this.fs.writeFileSync(t, o) + } + } + + lodash_get(t, e, s) { + const i = e.replace(/\[(\d+)\]/g, ".$1").split("."); + let o = t; + for (const t of i) if (o = Object(o)[t], void 0 === o) return s; + return o + } + + 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), o = s ? this.getval(s) : ""; + if (o) try { + const t = JSON.parse(o); + e = t ? this.lodash_get(t, i, "") : e + } catch (t) { + e = "" + } + } + return e + } + + setdata(t, e) { + let s = !1; + if (/^@/.test(e)) { + const [, i, o] = /^@(.*?)\.(.*?)$/.exec(e), r = this.getval(i), h = i ? "null" === r ? null : r || "{}" : "{}"; + try { + const e = JSON.parse(h); + this.lodash_set(e, o, t), s = this.setval(JSON.stringify(e), i) + } catch (e) { + const r = {}; + this.lodash_set(r, o, t), s = this.setval(JSON.stringify(r), 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() ? $httpClient.get(t, (t, s, i) => { + !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) + }) : this.isQuanX() ? $task.fetch(t).then(t => { + const {statusCode: s, statusCode: i, headers: o, body: r} = t; + e(null, {status: s, statusCode: i, headers: o, body: r}, r) + }, t => e(t)) : this.isNode() && (this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { + try { + 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: o, body: r} = t; + e(null, {status: s, statusCode: i, headers: o, body: r}, r) + }, t => e(t))) + } + + 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()) $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", $task.fetch(t).then(t => { + const {statusCode: s, statusCode: i, headers: o, body: r} = t; + e(null, {status: s, statusCode: i, headers: o, body: r}, r) + }, 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: o, body: r} = t; + e(null, {status: s, statusCode: i, headers: o, body: r}, r) + }, t => e(t)) + } + } + + 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 = "", o) { + const r = t => { + if (!t || !this.isLoon() && this.isSurge()) return t; + if ("string" == typeof t) return this.isLoon() ? t : this.isQuanX() ? {"open-url": t} : void 0; + if ("object" == typeof t) { + if (this.isLoon()) { + let e = t.openUrl || t["open-url"], s = t.mediaUrl || t["media-url"]; + return {openUrl: e, mediaUrl: s} + } + if (this.isQuanX()) { + let e = t["open-url"] || t.openUrl, s = t["media-url"] || t.mediaUrl; + return {"open-url": e, "media-url": s} + } + } + }; + this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, r(o)) : this.isQuanX() && $notify(e, s, i, r(o))); + 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 154a3fda242dea325daa5dfcd594fc8c0337f7f7 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 20 Nov 2020 15:04:56 +0800 Subject: [PATCH 079/290] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 1e2b59f..e4bb3a3 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -85,7 +85,7 @@ async function jdDreamFactory() { // 收取发电机的电力 -function collectElectricity(factoryId = factoryId, help = false) { +function collectElectricity(help = false) { return new Promise(async resolve => { const url = `/dreamfactory/generator/CollectCurrentElectricity?zone=dream_factory&apptoken=&pgtimestamp=&phoneID=&factoryid=${factoryId}&doubleflag=1&sceneval=2&g_login_type=1`; From daddc44a1f947d71685d4c712ec967c7c5b2815b Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 20 Nov 2020 16:01:00 +0800 Subject: [PATCH 080/290] update --- jd_dreamFactory.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index e4bb3a3..d7f7362 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -85,9 +85,9 @@ async function jdDreamFactory() { // 收取发电机的电力 -function collectElectricity(help = false) { +function collectElectricity(facId = factoryId, help = false) { return new Promise(async resolve => { - const url = `/dreamfactory/generator/CollectCurrentElectricity?zone=dream_factory&apptoken=&pgtimestamp=&phoneID=&factoryid=${factoryId}&doubleflag=1&sceneval=2&g_login_type=1`; + const url = `/dreamfactory/generator/CollectCurrentElectricity?zone=dream_factory&apptoken=&pgtimestamp=&phoneID=&factoryid=${facId}&doubleflag=1&sceneval=2&g_login_type=1`; $.get(taskurl(url), (err, resp, data) => { try { From c387fcad0f3db630a32daf9bfcb35be40c7cf884 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 20 Nov 2020 16:16:48 +0800 Subject: [PATCH 081/290] =?UTF-8?q?docker=20crontab=5Flist.sh=E5=92=8C=20c?= =?UTF-8?q?rontab=5Flist=5Fts.sh=E6=B7=BB=E5=8A=A0=E4=BA=AC=E5=96=9C?= =?UTF-8?q?=E5=B7=A5=E5=8E=82=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/crontab_list.sh | 3 +++ docker/crontab_list_ts.sh | 4 +++- jd_dreamFactory.js | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index 7be87b7..6734381 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -55,3 +55,6 @@ 12 13 * * * node /scripts/jd_pigPet.js >> /scripts/logs/jd_pigPet.log 2>&1 # 点点券 20 0,20 * * * node /scripts/jd_necklace.js >> /scripts/logs/jd_necklace.log 2>&1 + +# 京喜工厂 +20 * * * * node /scripts/jd_dreamFactory.js >> /scripts/logs/jd_dreamFactory.log 2>&1 \ No newline at end of file diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index 68e37d3..369d294 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -54,4 +54,6 @@ # 金融养猪 12 * * * * node /scripts/jd_pigPet.js |ts >> /scripts/logs/jd_pigPet.log 2>&1 # 点点券 -20 0,20 * * * node /scripts/jd_necklace.js |ts >> /scripts/logs/jd_necklace.log 2>&1 \ No newline at end of file +20 0,20 * * * node /scripts/jd_necklace.js |ts >> /scripts/logs/jd_necklace.log 2>&1 +# 京喜工厂 +20 * * * * node /scripts/jd_dreamFactory.js |ts >> /scripts/logs/jd_dreamFactory.log 2>&1 \ No newline at end of file diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index d7f7362..8a2c265 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -1,5 +1,6 @@ /* 京东京喜工厂 +cron 15 * * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js */ From 3bbcaeff25d2cf2ee17eb7d29f03a226fe610f30 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 20 Nov 2020 16:36:17 +0800 Subject: [PATCH 082/290] =?UTF-8?q?=E5=85=BC=E5=AE=B9=E5=BB=B6=E8=BF=9F?= =?UTF-8?q?=E7=AD=89=E5=BE=85=E5=86=99=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 8a2c265..ceb6701 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -7,7 +7,7 @@ cron 15 * * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_d const $ = new Env('京喜工厂'); const JD_API_HOST = 'https://m.jingxi.com'; -let ele, factoryId; +let ele, factoryId, productionId; let message = '', subTitle = '', option = {}; const notify = $.isNode() ? require('./sendNotify') : ''; @@ -64,13 +64,6 @@ if ($.isNode()) { $.done(); }) -function msleep(n) { - Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, n); -} - -function sleep(n) { - msleep(n * 1000); -} async function jdDreamFactory() { ele = 0; @@ -179,7 +172,7 @@ function taskList() { if (vo.completedTimes >= vo.targetTimes) { console.log(`任务:${vo.description}可完成`) await completeTask(vo.taskId, vo.taskName) - sleep(1); + await $.wait(1000);//延迟等待一秒 } else { switch (vo.taskType) { case 2: // 逛一逛任务 @@ -189,7 +182,7 @@ function taskList() { console.log(`去做任务:${vo.taskName}`) await doTask(vo.taskId) await completeTask(vo.taskId, vo.taskName) - sleep(1); + await $.wait(1000);//延迟等待一秒 } break case 4: // 招工 From 468effe8e1a30f44b3ab1a2dc62dd4e2c02fe9d8 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 20 Nov 2020 16:42:03 +0800 Subject: [PATCH 083/290] =?UTF-8?q?=E5=85=BC=E5=AE=B9iOS=E3=80=82=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=9C=AA=E5=BC=80=E5=90=AF=E4=BA=AC=E5=96=9C=E5=B7=A5?= =?UTF-8?q?=E5=8E=82=E6=B4=BB=E5=8A=A8=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C?= =?UTF-8?q?iOS=E5=B9=B6=E5=BC=B9=E7=AA=97=E6=8F=90=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index ceb6701..acd5c7c 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -68,6 +68,7 @@ if ($.isNode()) { async function jdDreamFactory() { ele = 0; await userInfo(); + if ($.unActive) return await getUserElectricity(); await taskList(); await investElectric(); @@ -398,7 +399,9 @@ function userInfo() { console.log(`生产进度:${(production.investedElectric / production.needElectric).toFixed(2) * 100}%`); message += `【生产进度】${((production.investedElectric / production.needElectric) * 100).toFixed(2)}%\n`; } else { - console.log('【提示】此账号京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动\n') + $.unActive = true;//标记是否开启了此活动 + console.log('【提示】此账号京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动\n'); + $.msg($.name, '', `【提示】此账号[${$.nickName}]京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动`); } } resolve() From b66345ab0ed5165f191afac8c64e810163b40e1b Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 20 Nov 2020 19:05:09 +0800 Subject: [PATCH 084/290] =?UTF-8?q?=E4=B8=80=E5=B0=8F=E6=97=B6=E8=B7=91?= =?UTF-8?q?=E4=B8=80=E6=AC=A1=E9=80=9A=E7=9F=A5=E6=9C=89=E7=82=B9=E9=A2=91?= =?UTF-8?q?=E7=B9=81,=E5=85=88=E9=BB=98=E8=AE=A4=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index acd5c7c..9bec884 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -11,7 +11,7 @@ let ele, factoryId, productionId; let message = '', subTitle = '', option = {}; const notify = $.isNode() ? require('./sendNotify') : ''; -let jdNotify = false;//是否关闭通知,false打开通知推送,true关闭通知推送 +let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 let cookiesArr = [], cookie = ''; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; From 84cd98f39bf508abc0f072f41b8cb7282275b8c5 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 20 Nov 2020 19:17:33 +0800 Subject: [PATCH 085/290] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E5=85=A5=E5=8F=A3=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 9bec884..3630285 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -1,5 +1,7 @@ /* 京东京喜工厂 +活动入口 :京东APP->游戏与互动->查看更多->京喜工厂 +或者: 京东APP首页搜索 "玩一玩" ,造物工厂即可 cron 15 * * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js */ From 7ff8cbbd62b19a17b75a470fceca69a047c25277 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 21 Nov 2020 16:09:33 +0800 Subject: [PATCH 086/290] =?UTF-8?q?=E4=B8=BA=E9=98=B2=E6=AD=A2=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E5=AF=BC=E8=87=B4server=E9=85=B1=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E8=A2=AB=E5=B0=81,=E6=95=85=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E5=A2=9E=E5=8A=A02100=E6=AF=AB=E7=A7=92=E7=9A=84?= =?UTF-8?q?=E5=BB=B6=E8=BF=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sendNotify.js | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/sendNotify.js b/sendNotify.js index 6a7d86c..99c30e1 100644 --- a/sendNotify.js +++ b/sendNotify.js @@ -81,7 +81,7 @@ async function sendNotify(text, desp, params = {}) { await iGotNotify(text, desp, params); } -function serverNotify(text, desp) { +function serverNotify(text, desp, timeout = 2100) { return new Promise(resolve => { if (SCKEY) { //微信server酱推送通知一个\n不会换行,需要两个\n才能换行,故做此替换 @@ -93,25 +93,29 @@ function serverNotify(text, desp) { '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') + setTimeout(() => { + $.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') + } else { + console.log(`server酱发送通知消息异常\n${JSON.stringify(data)}`) + } } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); } - } catch (e) { - $.logErr(e, resp); - } finally { - resolve(data); - } - }) + }) + }, timeout) } else { console.log('\n您未提供server酱的SCKEY,取消微信推送消息通知\n'); resolve() From 3c00f9193196f7b14c6e749b26eec867d770cb50 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 21 Nov 2020 16:38:16 +0800 Subject: [PATCH 087/290] update --- jd_pet.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jd_pet.js b/jd_pet.js index 3c1f9e1..3a8157f 100644 --- a/jd_pet.js +++ b/jd_pet.js @@ -1,6 +1,6 @@ /* 东东萌宠 更新地址: https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_pet.js -更新时间:2020-11-07 +更新时间:2020-11-21 已支持IOS双京东账号,Node.js支持N个京东账号 脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js @@ -93,7 +93,7 @@ async function jdPet() { goodsUrl = $.petInfo.goodsInfo && $.petInfo.goodsInfo.goodsUrl; // option['media-url'] = goodsUrl; // console.log(`初始化萌宠信息完成: ${JSON.stringify(petInfo)}`); - if ($.petInfo.petStatus === 5 && $.petInfo.showHongBaoExchangePop) { + if ($.petInfo.petStatus === 5 || $.petInfo.petStatus === 6) { await slaveHelp();//可以兑换而没有去兑换,也能继续助力好友 option['open-url'] = "openApp.jdMobile://"; $.msg($.name, `【提醒⏰】${$.petInfo.goodsInfo.goodsName}已可领取`, '请去京东APP或微信小程序查看', option); From 06bc1a742770a5b58f60d00a438e185c7503afa4 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 21 Nov 2020 16:44:07 +0800 Subject: [PATCH 088/290] update --- jd_pet.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/jd_pet.js b/jd_pet.js index 3a8157f..cdbd7f4 100644 --- a/jd_pet.js +++ b/jd_pet.js @@ -93,7 +93,7 @@ async function jdPet() { goodsUrl = $.petInfo.goodsInfo && $.petInfo.goodsInfo.goodsUrl; // option['media-url'] = goodsUrl; // console.log(`初始化萌宠信息完成: ${JSON.stringify(petInfo)}`); - if ($.petInfo.petStatus === 5 || $.petInfo.petStatus === 6) { + if ($.petInfo.petStatus === 5) { await slaveHelp();//可以兑换而没有去兑换,也能继续助力好友 option['open-url'] = "openApp.jdMobile://"; $.msg($.name, `【提醒⏰】${$.petInfo.goodsInfo.goodsName}已可领取`, '请去京东APP或微信小程序查看', option); @@ -101,6 +101,14 @@ async function jdPet() { await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName || $.UserName}奖品已可领取`, `京东账号${$.index} ${$.nickName}\n${$.petInfo.goodsInfo.goodsName}已可领取`); } return + } else if ($.petInfo.petStatus === 6) { + await slaveHelp();//已领取红包,但未领养新的,也能继续助力好友 + option['open-url'] = "openApp.jdMobile://"; + $.msg($.name, `【提醒⏰】已领取红包,但未继续领养新的物品`, '请去京东APP或微信小程序继续领养', option); + if ($.isNode()) { + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName || $.UserName}奖品已可领取`, `京东账号${$.index} ${$.nickName}\n已领取红包,但未继续领养新的物品`); + } + return } console.log(`\n【您的互助码shareCode】 ${$.petInfo.shareCode}\n`); await taskInit(); From 9e7524fdf011579e40607629360084045d1c902c Mon Sep 17 00:00:00 2001 From: Sirius2s <53803920+Sirius2s@users.noreply.github.com> Date: Sat, 21 Nov 2020 23:17:07 +0800 Subject: [PATCH 089/290] =?UTF-8?q?=E4=BA=91=E5=87=BD=E6=95=B0=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E4=BB=BB=E5=8A=A1=E6=94=AF=E6=8C=81=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 支持新增的点点券、京喜工厂 --- serverless.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/serverless.yml b/serverless.yml index aa2cd7c..bfb95d9 100644 --- a/serverless.yml +++ b/serverless.yml @@ -42,10 +42,10 @@ inputs: argument: jd_joy_feedPets&jd_joy&jd_moneyTree&jd_plantBean - timer: # 宠汪汪积分兑换奖品# 宠汪汪偷好友积分与狗 parameters: - name: jd_joy_reward_jd_joy_steal + name: jd_joy_reward_jd_joy_steal_jd_necklace cronExpression: "0 0 0-16/8 * * * *" enable: true - argument: jd_joy_reward&jd_joy_steal + argument: jd_joy_reward&jd_joy_steal&jd_necklace - timer: # 京东全民开红包 # 进店领豆 # 取关京东店铺商品# 京东抽奖机 parameters: name: jd_redPacket_jd_shop_jd_unsubscribe_jd_lotteryMachine @@ -72,10 +72,10 @@ inputs: argument: jd_bean_change&jd_rankingList - timer: # 金融养猪# 天天提鹅 parameters: - name: jd_pigPet_jd_daily_egg + name: jd_pigPet_jd_daily_egg_jd_dreamFactory cronExpression: "0 12 * * * * *" enable: true - argument: jd_pigPet&jd_daily_egg + argument: jd_pigPet&jd_daily_egg&jd_dreamFactory environment: # 环境变量 variables: # 环境变量对象 AAA: BBB # 不要删除,用来格式化对齐追加的变量的 From 049a3b9b57e764a97f017f756ffd07f2a067ef79 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sun, 22 Nov 2020 08:23:50 +0800 Subject: [PATCH 090/290] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=AC=E5=B0=8F?= =?UTF-8?q?=E8=B6=85=E8=84=9A=E6=9C=AC=E5=9B=A0=E4=BA=AC=E4=B8=9C=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=99=A8=E8=BF=94=E5=9B=9E=E6=95=B0=E6=8D=AE=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E5=AF=BC=E8=87=B4=E8=84=9A=E6=9C=AC=E6=8A=A5=E9=94=99?= =?UTF-8?q?=E4=B8=AD=E6=96=AD=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_superMarket.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jd_superMarket.js b/jd_superMarket.js index f01bc3f..a3a9862 100644 --- a/jd_superMarket.js +++ b/jd_superMarket.js @@ -2,7 +2,7 @@ * @Author: lxk0301 https://github.com/lxk0301 * @Date: 2020-08-16 18:54:16 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-11 18:54:37 + * @Last Modified time: 2020-11-22 08:22:37 */ /* 京小超(活动入口:京东APP-》首页-》京东超市-》底部东东超市) @@ -366,8 +366,8 @@ async function businessCircleActivity() { } } else if (joinStatus === 1) { console.log(`我邀请的人数:${inviteCount}\n`) - console.log(`\n我方战队战队 [${currentUserPkInfo.teamName}]/【${currentUserPkInfo.teamCount}】`); - console.log(`对方战队战队 [${pkUserPkInfo.teamName}]/【${pkUserPkInfo.teamCount}】\n`); + console.log(`\n我方战队战队 [${currentUserPkInfo && currentUserPkInfo.teamName}]/【${currentUserPkInfo && currentUserPkInfo.teamCount}】`); + console.log(`对方战队战队 [${pkUserPkInfo && pkUserPkInfo.teamName}]/【${pkUserPkInfo && pkUserPkInfo.teamCount}】\n`); } if (pkStatus === 1) { console.log(`商圈PK进行中`) From 0e6f1a7ead1923b669a5f8c276bebd8b6a445916 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sun, 22 Nov 2020 09:30:40 +0800 Subject: [PATCH 091/290] =?UTF-8?q?jd=5FblueCoin.js=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E5=B7=B2=E6=94=B9=E4=B8=BA=E9=BB=98=E8=AE=A4=E5=85=91=E6=8D=A2?= =?UTF-8?q?20=E4=BA=AC=E8=B1=86(=E4=B9=8B=E5=89=8D=E6=98=AF=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E4=B8=8D=E5=85=91=E6=8D=A2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_blueCoin.js | 217 +++++++++++++++++++++++++++++-------------------- 1 file changed, 130 insertions(+), 87 deletions(-) diff --git a/jd_blueCoin.js b/jd_blueCoin.js index 352e39c..908919e 100644 --- a/jd_blueCoin.js +++ b/jd_blueCoin.js @@ -1,7 +1,7 @@ /* 京小超兑换奖品 脚本地址:https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_blueCoin.js 感谢@yangtingxiao提供PR -更新时间:2020-11-05 +更新时间:2020-11-22 支持京东多个账号 脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js ======================quantumultx=============== @@ -18,7 +18,7 @@ const $ = new Env('京小超兑换奖品'); const notify = $.isNode() ? require('./sendNotify') : ''; //Node.js用户请在jdCookie.js处填写京东ck; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; -let coinToBeans = $.getdata('coinToBeans') || 0; //兑换多少数量的京豆(20或者1000),0默认兑换不兑换,如需兑换把0改成20或者1000,或者'商品名称'(商品名称放到单引号内)即可 +let coinToBeans = $.getdata('coinToBeans') || 20; //兑换多少数量的京豆(20或者1000),0表示不兑换,默认兑换20京豆,如需兑换把0改成20或者1000,或者'商品名称'(商品名称放到单引号内)即可 let jdNotify = false;//是否开启静默运行,默认false关闭(即:奖品兑换成功后会发出通知提示) //IOS等用户直接用NobyDa的jd cookie let cookiesArr = [], cookie = ''; @@ -55,6 +55,7 @@ const JD_API_HOST = `https://api.m.jd.com/api?appid=jdsupermarket`; $.nickName = ''; await TotalBean(); console.log(`\n开始【京东账号${$.index}】${$.nickName || $.UserName}\n`); + console.log(`目前暂无兑换酒类的奖品功能,即使输入酒类名称,脚本也会提示下架\n`) if (!$.isLogin) { $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"}); @@ -73,7 +74,7 @@ const JD_API_HOST = `https://api.m.jd.com/api?appid=jdsupermarket`; } if (`${coinToBeans}` !== '0') { await smtgHome();//查询蓝币数量,是否满足兑换的条件 - await smtg_queryPrize(); + await PrizeIndex(); } else { console.log('查询到您设置的是不兑换京豆选项,现在为您跳过兑换京豆。如需兑换,请去BoxJs设置或者修改脚本coinToBeans\n') } @@ -83,7 +84,131 @@ const JD_API_HOST = `https://api.m.jd.com/api?appid=jdsupermarket`; })() .catch((e) => $.logErr(e)) .finally(() => $.done()) - +async function PrizeIndex() { + await smtg_queryPrize(); + // await smtg_materialPrizeIndex();//兑换酒类奖品,此兑换API与之前的兑换京豆类的不一致,故目前无法进行 + // const prizeList = [...$.queryPrizeData, ...$.materialPrizeIndex]; + const prizeList = [...$.queryPrizeData]; + if (`${coinToBeans}` === '1000') { + if (prizeList[1].beanType === 'BeanPackage') { + console.log(`查询换${prizeList[1].title}ID成功,ID:${prizeList[1].prizeId}`) + $.title = prizeList[1].title; + $.blueCost = prizeList[1].blueCost; + } else { + console.log(`查询换1000京豆ID失败`) + $.beanerr = `东哥今天不给换`; + return ; + } + if (prizeList[1].inStock === 506) { + $.beanerr = `失败,1000京豆领光了,请明天再来`; + return ; + } + if (prizeList[1].targetNum === prizeList[1].finishNum) { + $.beanerr = `${prizeList[1].subTitle}`; + return ; + } + //兑换1000京豆 + if ($.totalBlue > $.blueCost) { + await smtg_obtainPrize(prizeList[1].prizeId); + } else { + console.log(`兑换失败,您目前蓝币${$.totalBlue}个,不足以兑换${$.title}所需的${$.blueCost}个`); + $.beanerr = `兑换失败,您目前蓝币${$.totalBlue}个,不足以兑换${$.title}所需的${$.blueCost}个`; + } + } else if (`${coinToBeans}` === '20') { + if (prizeList[0].beanType === 'Bean') { + console.log(`查询换${prizeList[0].title}ID成功,ID:${prizeList[0].prizeId}`) + $.title = prizeList[0].title; + $.blueCost = prizeList[0].blueCost; + } else { + console.log(`查询换万能的京豆ID失败`) + $.beanerr = `东哥今天不给换`; + return ; + } + if (prizeList[0].inStock === 506) { + console.log(`失败,万能的京豆领光了,请明天再来`); + $.beanerr = `失败,万能的京豆领光了,请明天再来`; + return ; + } + if (prizeList[0].targetNum === prizeList[0].finishNum) { + $.beanerr = `${prizeList[0].subTitle}`; + return ; + } + //兑换万能的京豆(1-20京豆) + if ($.totalBlue > $.blueCost) { + await smtg_obtainPrize(prizeList[0].prizeId,1000); + } else { + console.log(`兑换失败,您目前蓝币${$.totalBlue}个,不足以兑换${$.title}所需的${$.blueCost}个`); + $.beanerr = `兑换失败,您目前蓝币${$.totalBlue}个,不足以兑换${$.title}所需的${$.blueCost}个`; + } + } else { + //自定义输入兑换 + let prizeId = '', i; + for (let index = 0; index < prizeList.length; index ++) { + if (prizeList[index].title.indexOf(coinToBeans) > -1) { + prizeId = prizeList[index].prizeId; + i = index; + $.title = prizeList[index].title; + $.blueCost = prizeList[index].blueCost; + } + } + if (prizeId) { + if (prizeList[i].inStock === 506 || prizeList[i].inStock === -1) { + console.log(`失败,您输入设置的${coinToBeans}领光了,请明天再来`); + $.beanerr = `失败,您输入设置的${coinToBeans}领光了,请明天再来`; + return ; + } + if ((prizeList[i].targetNum) && prizeList[i].targetNum === prizeList[i].finishNum) { + $.beanerr = `${prizeList[0].subTitle}`; + return ; + } + if ($.totalBlue < $.blueCost) { + await smtg_obtainPrize(prizeId); + } else { + console.log(`兑换失败,您目前蓝币${$.totalBlue}个,不足以兑换${$.title}所需的${$.blueCost}个`); + $.beanerr = `兑换失败,您目前蓝币${$.totalBlue}个,不足以兑换${$.title}所需的${$.blueCost}个`; + } + } else { + console.log(`奖品兑换列表[${coinToBeans}]已下架,请检查APP是否存在此商品,如存在请检查您的输入是否正确`); + $.beanerr = `奖品兑换列表[${coinToBeans}]已下架`; + } + } +} +//查询白酒类奖品列表API +function smtg_materialPrizeIndex(timeout = 0) { + return new Promise((resolve) => { + setTimeout( ()=>{ + let url = { + url : `${JD_API_HOST}&functionId=smtg_materialPrizeIndex&clientVersion=8.0.0&client=m&body=%7B%22channel%22:%221%22%7D&t=${Date.now()}`, + headers : { + 'Origin' : `https://jdsupermarket.jd.com`, + 'Cookie' : cookie, + 'Connection' : `keep-alive`, + 'Accept' : `application/json, text/plain, */*`, + 'Referer' : `https://jdsupermarket.jd.com/game/?tt=1597540727225`, + 'Host' : `api.m.jd.com`, + 'Accept-Encoding' : `gzip, deflate, br`, + 'Accept-Language' : `zh-cn` + } + } + $.post(url, async (err, resp, data) => { + try { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.data.bizCode !== 0) { + $.beanerr = `${data.data.bizMsg}`; + return + } + $.materialPrizeIndex = data.data.result.prizes || []; + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve() + } + }) + },timeout) + }) +} //查询任务 function smtg_queryPrize(timeout = 0){ return new Promise((resolve) => { @@ -112,89 +237,7 @@ function smtg_queryPrize(timeout = 0){ } if (data.data.bizCode === 0) { const { prizeList } = data.data.result; - if (`${coinToBeans}` === '1000') { - if (prizeList[1].beanType === 'BeanPackage') { - console.log(`查询换${prizeList[1].title}ID成功,ID:${prizeList[1].prizeId}`) - $.title = prizeList[1].title; - $.blueCost = prizeList[1].blueCost; - } else { - console.log(`查询换1000京豆ID失败`) - $.beanerr = `东哥今天不给换`; - return ; - } - if (prizeList[1].inStock === 506) { - $.beanerr = `失败,1000京豆领光了,请明天再来`; - return ; - } - if (prizeList[1].targetNum === prizeList[1].finishNum) { - $.beanerr = `${prizeList[1].subTitle}`; - return ; - } - //兑换1000京豆 - if ($.totalBlue > $.blueCost) { - await smtg_obtainPrize(prizeList[1].prizeId); - } else { - console.log(`兑换失败,您目前蓝币${$.totalBlue}个,不足以兑换${$.title}所需的${$.blueCost}个`); - $.beanerr = `兑换失败,您目前蓝币${$.totalBlue}个,不足以兑换${$.title}所需的${$.blueCost}个`; - } - } else if (`${coinToBeans}` === '20') { - if (prizeList[0].beanType === 'Bean') { - console.log(`查询换${prizeList[0].title}ID成功,ID:${prizeList[0].prizeId}`) - $.title = prizeList[0].title; - $.blueCost = prizeList[0].blueCost; - } else { - console.log(`查询换万能的京豆ID失败`) - $.beanerr = `东哥今天不给换`; - return ; - } - if (prizeList[0].inStock === 506) { - console.log(`失败,万能的京豆领光了,请明天再来`); - $.beanerr = `失败,万能的京豆领光了,请明天再来`; - return ; - } - if (prizeList[0].targetNum === prizeList[0].finishNum) { - $.beanerr = `${prizeList[0].subTitle}`; - return ; - } - //兑换万能的京豆(1-20京豆) - if ($.totalBlue > $.blueCost) { - await smtg_obtainPrize(prizeList[0].prizeId,1000); - } else { - console.log(`兑换失败,您目前蓝币${$.totalBlue}个,不足以兑换${$.title}所需的${$.blueCost}个`); - $.beanerr = `兑换失败,您目前蓝币${$.totalBlue}个,不足以兑换${$.title}所需的${$.blueCost}个`; - } - } else { - //自定义输入兑换 - let prizeId = '', i; - for (let index = 0; index < prizeList.length; index ++) { - if (prizeList[index].title.indexOf(coinToBeans) > -1) { - prizeId = prizeList[index].prizeId; - i = index; - $.title = prizeList[index].title; - $.blueCost = prizeList[index].blueCost; - } - } - if (prizeId) { - if (prizeList[i].inStock === 506) { - console.log(`失败,您输入设置的${coinToBeans}领光了,请明天再来`); - $.beanerr = `失败,您输入设置的${coinToBeans}领光了,请明天再来`; - return ; - } - if (prizeList[i].targetNum === prizeList[i].finishNum) { - $.beanerr = `${prizeList[0].subTitle}`; - return ; - } - if ($.totalBlue > $.blueCost) { - await smtg_obtainPrize(prizeId); - } else { - console.log(`兑换失败,您目前蓝币${$.totalBlue}个,不足以兑换${$.title}所需的${$.blueCost}个`); - $.beanerr = `兑换失败,您目前蓝币${$.totalBlue}个,不足以兑换${$.title}所需的${$.blueCost}个`; - } - } else { - console.log(`奖品兑换列表[${coinToBeans}]已下架,请检查APP是否存在此商品,如存在请检查您的输入是否正确`); - $.beanerr = `奖品兑换列表[${coinToBeans}]已下架`; - } - } + $.queryPrizeData = data.data.result.prizeList || []; } } } catch (e) { From cba46c1ffb6c3c793fbb3fca30fc242682d9e31b Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sun, 22 Nov 2020 10:23:45 +0800 Subject: [PATCH 092/290] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=9A=84=E6=91=87=E4=B8=80=E6=91=87=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E5=8C=85=E6=8B=AC=E9=A2=86=E5=8F=96=E4=B8=80=E6=AC=A1?= =?UTF-8?q?=E5=85=8D=E8=B4=B9=E7=9A=84=E6=9C=BA=E4=BC=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_club_lottery.js | 118 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 116 insertions(+), 2 deletions(-) diff --git a/jd_club_lottery.js b/jd_club_lottery.js index d21a5a2..762cc6c 100644 --- a/jd_club_lottery.js +++ b/jd_club_lottery.js @@ -78,6 +78,8 @@ const JD_API_HOST = 'https://api.m.jd.com/client.action'; async function clubLottery() { await doTasks();//做任务 await getFreeTimes();//获取摇奖次数 + await vvipclub_receive_lottery_times();//新版:领取一次免费的机会 + await vvipclub_shaking_info();//新版:查询多少次摇奖次数 await shaking();//开始摇奖 } async function doTasks() { @@ -133,6 +135,19 @@ async function shaking() { } } } + for (let i = 0; i < new Array($.leftShakingTimes).fill('').length; i++) { + console.log(`开始新版-摇奖`) + await $.wait(2000); + const newShakeBeanRes = await vvipclub_shaking_lottery(); + if (newShakeBeanRes.success) { + console.log(`新版-剩余摇奖次数:${newShakeBeanRes.data.remainLotteryTimes}`) + if (newShakeBeanRes.data && newShakeBeanRes.data.rewardBeanAmount) { + $.prizeBeanCount += newShakeBeanRes.data.rewardBeanAmount; + } else { + console.log(`未中奖`) + } + } + } } function showMsg() { if ($.prizeBeanCount) { @@ -140,6 +155,105 @@ function showMsg() { } } //====================API接口================= +//查询剩余摇奖次数API +function vvipclub_shaking_info() { + return new Promise(resolve => { + const options = { + url: `https://api.m.jd.com/?t=${Date.now()}&appid=sharkBean&functionId=vvipclub_shaking_info`, + headers: { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "accept-language": "zh-CN,zh;q=0.9", + "cookie": cookie, + "origin": "https://skuivip.jd.com", + "referer": "https://skuivip.jd.com/", + "user-agent": "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0" + } + } + $.get(options, (err, resp, data) => { + try { + if (err) { + console.log(`\n${$.name}: API查询请求失败 ‼️‼️`) + $.logErr(err); + } else { + // console.log(data) + data = JSON.parse(data); + if (data.success) { + $.leftShakingTimes = data.data.leftShakingTimes;//剩余抽奖次数 + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + }) +} +//新版摇奖API +function vvipclub_shaking_lottery() { + return new Promise(resolve => { + const options = { + url: `https://api.m.jd.com/?t=${Date.now()}&appid=sharkBean&functionId=vvipclub_shaking_lottery&body=%7B%7D`, + headers: { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "accept-language": "zh-CN,zh;q=0.9", + "cookie": cookie, + "origin": "https://skuivip.jd.com", + "referer": "https://skuivip.jd.com/", + "user-agent": "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0" + } + } + $.get(options, (err, resp, data) => { + try { + if (err) { + console.log(`\n${$.name}: API查询请求失败 ‼️‼️`) + $.logErr(err); + } else { + // console.log(data) + data = JSON.parse(data); + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + }) +} +//领取新版本摇一摇一次免费的次数 +function vvipclub_receive_lottery_times() { + return new Promise(resolve => { + const options = { + url: `https://api.m.jd.com/?t=${Date.now()}&appid=sharkBean&functionId=vvipclub_receive_lottery_times`, + headers: { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "accept-language": "zh-CN,zh;q=0.9", + "cookie": cookie, + "origin": "https://skuivip.jd.com", + "referer": "https://skuivip.jd.com/", + "user-agent": "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0" + } + } + $.get(options, (err, resp, data) => { + try { + if (err) { + console.log(`\n${$.name}: API查询请求失败 ‼️‼️`) + $.logErr(err); + } else { + // console.log(data) + data = JSON.parse(data); + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + }) +} //查询多少次机会 function getFreeTimes() { return new Promise(resolve => { @@ -261,9 +375,9 @@ function TotalBean() { }) }) } -function taskUrl(function_id, body = {}) { +function taskUrl(function_id, body = {}, appId = 'vip_h5') { return { - url: `${JD_API_HOST}?functionId=${function_id}&appid=vip_h5&body=${escape(JSON.stringify(body))}&_=${Date.now()}`, + url: `${JD_API_HOST}?functionId=${function_id}&appid=${appId}&body=${escape(JSON.stringify(body))}&_=${Date.now()}`, headers: { 'Cookie': cookie, 'Host': 'api.m.jd.com', From dfd62c37067aa92ad4ed4182ac7a4275fd6abf49 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sun, 22 Nov 2020 10:27:33 +0800 Subject: [PATCH 093/290] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E4=B8=AD=E5=A5=96=E6=89=93=E5=8D=B0=EF=BC=8C=E5=87=8F=E5=B0=91?= =?UTF-8?q?=E6=91=87=E5=A5=96=E9=97=B4=E9=9A=94(=E5=BB=B6=E8=BF=9F?= =?UTF-8?q?=E6=97=B6=E9=97=B4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_club_lottery.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/jd_club_lottery.js b/jd_club_lottery.js index 762cc6c..7d81c63 100644 --- a/jd_club_lottery.js +++ b/jd_club_lottery.js @@ -137,14 +137,15 @@ async function shaking() { } for (let i = 0; i < new Array($.leftShakingTimes).fill('').length; i++) { console.log(`开始新版-摇奖`) - await $.wait(2000); + await $.wait(1000); const newShakeBeanRes = await vvipclub_shaking_lottery(); if (newShakeBeanRes.success) { console.log(`新版-剩余摇奖次数:${newShakeBeanRes.data.remainLotteryTimes}`) if (newShakeBeanRes.data && newShakeBeanRes.data.rewardBeanAmount) { $.prizeBeanCount += newShakeBeanRes.data.rewardBeanAmount; + console.log(`恭喜你,中奖了,获得${newShakeBeanRes.data.rewardBeanAmount}京豆\n`) } else { - console.log(`未中奖`) + console.log(`未中奖\n`) } } } From 6ef5399528f2bbb8d8b4331e9b0a737e494f52cc Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sun, 22 Nov 2020 10:37:26 +0800 Subject: [PATCH 094/290] =?UTF-8?q?=E7=BB=8F=E6=B5=8B=E8=AF=95=EF=BC=8C?= =?UTF-8?q?=E5=8E=BB=E6=8E=89=E6=8A=BD=E5=A5=96=E5=BB=B6=E8=BF=9F=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E4=B9=9F=E6=AD=A3=E5=B8=B8=EF=BC=8C=E6=95=85=E5=8E=BB?= =?UTF-8?q?=E6=8E=89=E5=BB=B6=E8=BF=9F=E6=97=B6=E9=97=B4=EF=BC=8C=E5=87=8F?= =?UTF-8?q?=E5=B0=91=E8=84=9A=E6=9C=AC=E8=BF=90=E8=A1=8C=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_club_lottery.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/jd_club_lottery.js b/jd_club_lottery.js index 7d81c63..25f8636 100644 --- a/jd_club_lottery.js +++ b/jd_club_lottery.js @@ -123,6 +123,20 @@ async function doTasks() { } } async function shaking() { + for (let i = 0; i < new Array($.leftShakingTimes).fill('').length; i++) { + console.log(`开始新版-摇奖`) + // await $.wait(500); + const newShakeBeanRes = await vvipclub_shaking_lottery(); + if (newShakeBeanRes.success) { + console.log(`新版-剩余摇奖次数:${newShakeBeanRes.data.remainLotteryTimes}`) + if (newShakeBeanRes.data && newShakeBeanRes.data.rewardBeanAmount) { + $.prizeBeanCount += newShakeBeanRes.data.rewardBeanAmount; + console.log(`恭喜你,中奖了,获得${newShakeBeanRes.data.rewardBeanAmount}京豆\n`) + } else { + console.log(`未中奖\n`) + } + } + } for (let i = 0; i < new Array($.freeTimes).fill('').length; i++) { console.log(`开始摇奖`) await $.wait(1000); @@ -135,20 +149,6 @@ async function shaking() { } } } - for (let i = 0; i < new Array($.leftShakingTimes).fill('').length; i++) { - console.log(`开始新版-摇奖`) - await $.wait(1000); - const newShakeBeanRes = await vvipclub_shaking_lottery(); - if (newShakeBeanRes.success) { - console.log(`新版-剩余摇奖次数:${newShakeBeanRes.data.remainLotteryTimes}`) - if (newShakeBeanRes.data && newShakeBeanRes.data.rewardBeanAmount) { - $.prizeBeanCount += newShakeBeanRes.data.rewardBeanAmount; - console.log(`恭喜你,中奖了,获得${newShakeBeanRes.data.rewardBeanAmount}京豆\n`) - } else { - console.log(`未中奖\n`) - } - } - } } function showMsg() { if ($.prizeBeanCount) { From db2522e843a75a56de8fdaa952a0abca1385f01b Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sun, 22 Nov 2020 10:47:38 +0800 Subject: [PATCH 095/290] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=A1=B6=E9=83=A8?= =?UTF-8?q?=E6=B3=A8=E9=87=8A=E6=9B=B4=E6=96=B0=E7=9A=84=E6=97=A5=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_club_lottery.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jd_club_lottery.js b/jd_club_lottery.js index 25f8636..eb40de7 100644 --- a/jd_club_lottery.js +++ b/jd_club_lottery.js @@ -2,7 +2,7 @@ * @Author: lxk0301 * @Date: 2020-11-03 20:35:07 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-10-12 20:37:10 + * @Last Modified time: 2020-11-22 20:37:10 摇京豆(京东APP首页-领京豆-摇京豆) 更新时间:2020-10-12 Modified from https://github.com/Zero-S1/JD_tools/blob/master/JD_vvipclub.py @@ -181,6 +181,7 @@ function vvipclub_shaking_info() { data = JSON.parse(data); if (data.success) { $.leftShakingTimes = data.data.leftShakingTimes;//剩余抽奖次数 + console.log(`新版——摇奖次数${$.leftShakingTimes}`); } } } catch (e) { From 12df19de0e408edcca4bea7250f9d28c2b6281fe Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sun, 22 Nov 2020 16:37:15 +0800 Subject: [PATCH 096/290] =?UTF-8?q?=E6=9B=B4=E6=96=B0readme=EF=BC=8C?= =?UTF-8?q?=E4=BA=AC=E5=B0=8F=E8=B6=85=E6=94=B9=E5=90=8D=E4=B8=BA=E4=B8=9C?= =?UTF-8?q?=E4=B8=9C=E8=B6=85=E5=B8=82=EF=BC=8Cdocker=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E4=B8=80=E6=96=B0=E5=A2=9E=E4=B8=9C=E4=B8=9C=E5=B0=8F=E7=AA=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Loon/lxk0301_LoonTask.conf | 2 + README.md | 6 +- docker/crontab_list.sh | 5 +- docker/crontab_list_ts.sh | 4 +- jd_necklace.js | 2 +- jd_small_home.js | 688 +++++++++++++++++++++++++++++++++++++ jd_superMarket.js | 43 ++- 7 files changed, 722 insertions(+), 28 deletions(-) create mode 100644 jd_small_home.js diff --git a/Loon/lxk0301_LoonTask.conf b/Loon/lxk0301_LoonTask.conf index 070a997..56aa670 100644 --- a/Loon/lxk0301_LoonTask.conf +++ b/Loon/lxk0301_LoonTask.conf @@ -63,6 +63,8 @@ cron "2 9 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_script #点点券 cron "20 0,20 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_necklace.js, tag=点点券 +#东东小窝 +cron "16 0 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_small_home.js, tag=东东小窝 #京东全民营业领金币 cron "20 * * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_collectProduceScore.js, tag=京东全民营业领金币 diff --git a/README.md b/README.md index 04d49ab..a7d21d9 100644 --- a/README.md +++ b/README.md @@ -34,13 +34,15 @@ 11. 宠汪汪赛跑助力([jd_joy_run.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js)) 12. 宠汪汪聚宝盆辅助脚本([jd_petTreasureBox.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_petTreasureBox.js)) 13. 取关京东店铺和商品([jd_unsubscribe.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_unsubscribe.js)) -14. 京小超([jd_superMarket.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_superMarket.js)) -15. 京小超兑换奖品([jd_blueCoin.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_blueCoin.js)) +14. 东东超市([jd_superMarket.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_superMarket.js)) +15. 东东超市兑换奖品([jd_blueCoin.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_blueCoin.js)) 16. 进店领豆([jd_shop.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_shop.js)) 17. 摇京豆([jd_club_lottery.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_club_lottery.js)) 18. 全名开红包([jd_redPacket.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_redPacket.js)) 19. 京东多合一签到([jd_bean_sign.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_bean_sign.js)) 【可N个京东账号,Node.js专用,核心脚本是JD_DailyBonus.js, IOS软件用户请使用NobyDa的 [JD_DailyBonus.js](https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js) 】 20. 京豆变动通知([jd_bean_change.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_bean_change.js)) +21. 京喜工厂([jd_dreamFactory.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js)) +22. 东东超市([jd_small_home.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_small_home.js)) 21. 以及其他一部分在特定时间可用的薅京豆脚本,如 [手机狂欢城](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_818.js) 、[星推官](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_xtg.js) 等。 **脚本兼容: [QuantumultX](https://apps.apple.com/us/app/quantumult-x/id1443988620), [Surge](https://apps.apple.com/us/app/surge-4/id1442620678), [Loon](https://apps.apple.com/us/app/loon/id1373567447), 小火箭, JSBox, Node.js** diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index 6734381..512a389 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -55,6 +55,7 @@ 12 13 * * * node /scripts/jd_pigPet.js >> /scripts/logs/jd_pigPet.log 2>&1 # 点点券 20 0,20 * * * node /scripts/jd_necklace.js >> /scripts/logs/jd_necklace.log 2>&1 - # 京喜工厂 -20 * * * * node /scripts/jd_dreamFactory.js >> /scripts/logs/jd_dreamFactory.log 2>&1 \ No newline at end of file +20 * * * * node /scripts/jd_dreamFactory.js >> /scripts/logs/jd_dreamFactory.log 2>&1 +# 东东小窝 +20 * * * * node /scripts/jd_small_home.js >> /scripts/logs/jd_small_home.log 2>&1 \ No newline at end of file diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index 369d294..879a87b 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -56,4 +56,6 @@ # 点点券 20 0,20 * * * node /scripts/jd_necklace.js |ts >> /scripts/logs/jd_necklace.log 2>&1 # 京喜工厂 -20 * * * * node /scripts/jd_dreamFactory.js |ts >> /scripts/logs/jd_dreamFactory.log 2>&1 \ No newline at end of file +20 * * * * node /scripts/jd_dreamFactory.js |ts >> /scripts/logs/jd_dreamFactory.log 2>&1 +# 东东小窝 +20 * * * * node /scripts/jd_small_home.js |ts >> /scripts/logs/jd_small_home.log 2>&1 \ No newline at end of file diff --git a/jd_necklace.js b/jd_necklace.js index 9c058ab..10edc5f 100644 --- a/jd_necklace.js +++ b/jd_necklace.js @@ -23,7 +23,7 @@ cron "10 0,20 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_sc 点点券 = type=cron,cronexp="10 0,20 * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_necklace.js ============小火箭========= -东东农场 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_necklace.js, cronexpr="10 0,20 * * *", timeout=200, enable=true +点点券 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_necklace.js, cronexpr="10 0,20 * * *", timeout=200, enable=true */ const $ = new Env('点点券'); diff --git a/jd_small_home.js b/jd_small_home.js new file mode 100644 index 0000000..8f34fd9 --- /dev/null +++ b/jd_small_home.js @@ -0,0 +1,688 @@ +/* + * @Author: lxk0301 https://github.com/lxk0301 + * @Date: 2020-11-12 11:42:12 + * @Last Modified by: lxk0301 + * @Last Modified time: 2020-11-22 15:42:12 + */ +/* +东东小窝 https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_small_home.js +现有功能: +做日常任务任务,每日抽奖(有机会活动京豆,使用的是免费机会,不消耗WO币) +助力好友:一个账号一天只能助力一次(即:每个人助力机会只有一次) +后期有空优化相互助力功能 +TODO;装扮领京豆(使用WO币购买装饰品可以获得京豆,分别可获得5,20,50,100,200,400,700,1200京豆) + +注:目前使用此脚本会给脚本内置的两个码进行助力,请知晓 + +APP活动入口: +京东APP首页 ->搜索 玩一玩 -> DIY理想家 +或 京东APP -> 我的-> 游戏与更多 - > 东东小窝 +微信小程序入口: +来客有礼 - > 首页 -> 东东小窝 +网页入口(注:进入后不能再此刷新,否则会有问题,需重新输入此链接进入) +https://h5.m.jd.com/babelDiy/Zeus/2HFSytEAN99VPmMGZ6V4EYWus1x/index.html + +已支持IOS双京东账号,Node.js支持N个京东账号 +脚本兼容: QuantumultX, Surge, Loon, 小火箭,JSBox, Node.js +===============Quantumultx=============== +[task_local] +#东东小窝 +16 0 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_small_home.js, tag=东东小窝, enabled=true + +================Loon============== +[Script] +cron "16 0 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_small_home.js, tag=东东小窝 + +===============Surge================= +东东小窝 = type=cron,cronexp="16 0 * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_small_home.js + +============小火箭========= +东东小窝 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_small_home.js, cronexpr="16 0 * * *", timeout=200, enable=true + */ +const $ = new Env('东东小窝'); +const notify = $.isNode() ? require('./sendNotify') : ''; +//Node.js用户请在jdCookie.js处填写京东ck; +const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; + +//IOS等用户直接用NobyDa的jd cookie +let cookiesArr = [], cookie = '', message = ''; +if ($.isNode()) { + Object.keys(jdCookieNode).forEach((item) => { + cookiesArr.push(jdCookieNode[item]) + }) + if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {}; +} else { + cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); +} + +const JD_API_HOST = 'https://lkyl.dianpusoft.cn/api'; +const inviteCodes = ['1330186694770339842', '1330185661529935874']; +!(async () => { + if (!cookiesArr[0]) { + $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); + return; + } + for (let i = 0; i < cookiesArr.length; i++) { + if (cookiesArr[i]) { + cookie = cookiesArr[i]; + $.UserName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]) + $.index = i + 1; + $.isLogin = true; + $.nickName = ''; + message = ''; + await TotalBean(); + console.log(`\n*******开始【京东账号${$.index}】${$.nickName || $.UserName}********\n`); + if (!$.isLogin) { + $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"}); + + if ($.isNode()) { + await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); + } else { + $.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 + } + continue + } + await smallHome(); + } + } +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) +async function smallHome() { + await loginHome(); + await ssjjRooms(); + await helpFriends(); + if (!$.isUnLock) return; + await createInviteUser(); + await queryDraw(); + await lottery(); + await doAllTask(); + await queryByUserId(); + await showMsg(); +} +function showMsg() { + return new Promise(resolve => { + $.msg($.name, '', `【京东账号${$.index}】${$.nickName}\n${message}`); + resolve() + }) +} +async function lottery() { + if ($.freeDrawCount > 0) { + await drawRecord($.lotteryId); + } +} +//获取详情 +function queryByUserId() { + return new Promise(resolve => { + $.get(taskUrl(`ssjj-wo-home-info/queryByUserId/2`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.head.code === 200) { + if (data.body) { + message += `【小窝名】${data.body.name}\n`; + message += `【当前WO币】${data.body.woB}\n`; + } + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} +async function doChannelsListTask(taskId) { + await queryChannelsList(taskId); + for (let item of $.queryChannelsList) { + if (item.showOrder !== 1) { + await $.wait(1000) + await followChannel(taskId, item.id) + await queryDoneTaskRecord(taskId); + } + } +} +async function helpFriends() { + for (let item of inviteCodes) { + if (!item) continue + await createAssistUser(item, $.createAssistUserID || "1318106976846299138"); + } +} +async function doAllTask() { + await queryAllTaskInfo();//获取任务详情列表$.taskList + for (let item of $.taskList) { + if (item.ssjjTaskInfo.type === 1) { + //邀请好友助力自己 + // await createAssistUser('1330186694770339842', item.ssjjTaskInfo.id) + $.createAssistUserID = item.ssjjTaskInfo.id; + console.log(`助力您的好友:${item.doneNum}人`) + } + if (item.ssjjTaskInfo.type === 2) { + //每日打卡 + if (item.doneNum === (item.ssjjTaskInfo.awardOfDayNum || 1)) { + console.log(`${item.ssjjTaskInfo.name}已完成(${item.doneNum}/${item.ssjjTaskInfo.awardOfDayNum || 1})`) + continue + } + await clock(item.ssjjTaskInfo.id, item.ssjjTaskInfo.awardWoB) + } + // 限时连连看 + if (item.ssjjTaskInfo.type === 3) { + if (item.doneNum === item.ssjjTaskInfo.awardOfDayNum) { + console.log(`${item.ssjjTaskInfo.name}已完成[${item.doneNum}/${item.ssjjTaskInfo.awardOfDayNum}]`) + continue + } + for (let i = 0; i < new Array(item.ssjjTaskInfo.awardOfDayNum || 1).fill('').length; i++) { + await game(item.ssjjTaskInfo.id, item.doneNum); + } + // await game(item.ssjjTaskInfo.id, item.doneNum); + // await doAllTask(); + } + + if (item.ssjjTaskInfo.type === 6) { + //关注4个频道 + if (item.doneNum === item.ssjjTaskInfo.awardOfDayNum) { + console.log(`${item.ssjjTaskInfo.name}已完成[${item.doneNum}/${item.ssjjTaskInfo.awardOfDayNum}]`) + continue + } + await doChannelsListTask(item.ssjjTaskInfo.id) + } + if (item.ssjjTaskInfo.type === 7) { + //浏览3个频道 + if (item.doneNum === item.ssjjTaskInfo.awardOfDayNum) { + console.log(`${item.ssjjTaskInfo.name}已完成[${item.doneNum}/${item.ssjjTaskInfo.awardOfDayNum}]`) + continue + } + for (let i = 0; i < new Array(item.ssjjTaskInfo.awardOfDayNum || 1).fill('').length; i++) { + await browseChannels('browseChannels', item.ssjjTaskInfo.id, item.browseId); + } + // await browseChannels('browseChannels', item.ssjjTaskInfo.id, item.browseId); + // await doAllTask(); + } + if (item.ssjjTaskInfo.type === 11) { + //浏览会场 + if (item.doneNum === item.ssjjTaskInfo.awardOfDayNum) { + console.log(`${item.ssjjTaskInfo.name}已完成[${item.doneNum}/${item.ssjjTaskInfo.awardOfDayNum}]`) + continue + } + for (let i = 0; i < new Array(item.ssjjTaskInfo.awardOfDayNum || 1).fill('').length; i++) { + await browseChannels('browseMeetings' ,item.ssjjTaskInfo.id, item.browseId); + } + // await browseChannels('browseMeetings' ,item.ssjjTaskInfo.id, item.browseId); + // await doAllTask(); + } + } +} +//获取需要关注的频道列表 +function queryChannelsList(taskId) { + return new Promise(resolve => { + $.get(taskUrl(`ssjj-task-channels/queryChannelsList/${taskId}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.head.code === 200) { + if (data.body) { + $.queryChannelsList = data.body; + } + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} +//浏览频道,浏览会场API +function browseChannels(functionID ,taskId, browseId) { + return new Promise(resolve => { + $.get(taskUrl(`/ssjj-task-record/${functionID}/${taskId}/${browseId}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + console.log(`${functionID === 'browseChannels' ? '浏览频道' : '浏览会场'}`, data) + data = JSON.parse(data); + if (data.head.code === 200) { + if (data.body) { + // message += `【限时连连看】成功,活动${awardWoB}WO币\n`; + } + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} +//记录已关注的频道 +function queryDoneTaskRecord(taskId) { + return new Promise(resolve => { + $.get(taskUrl(`/ssjj-task-record/queryDoneTaskRecord/6/${taskId}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.head.code === 200) { + if (data.body) { + // message += `【限时连连看】成功,活动${awardWoB}WO币\n`; + } + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} +//关注频道API +function followChannel(taskId, channelId) { + return new Promise(async resolve => { + $.get(taskUrl(`/ssjj-task-record/followChannel/${channelId}/${taskId}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.head.code === 200) { + if (data.body) { + // message += `【限时连连看】成功,活动${awardWoB}WO币\n`; + } + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} +function createInviteUser() { + return new Promise(resolve => { + $.get(taskUrl(`/ssjj-task-record/createInviteUser`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.head.code === 200) { + if (data.body) { + if (data.body.id) { + console.log(`\n您的${$.name}shareCode:【${data.body.id}】\n`); + $.shareCode = data.body.id; + } + } + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} + +function createAssistUser(inviteId, taskId) { + return new Promise(resolve => { + $.get(taskUrl(`/ssjj-task-record/createAssistUser/${inviteId}/${taskId}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.head.code === 200) { + if (data.body) { + console.log(`\n给好友${data.body.inviteId}:【${data.head.msg}】\n`) + } + } else { + console.log(`助力失败${JSON.stringify(data)}}`); + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} +function game(taskId, index, awardWoB = 100) { + return new Promise(resolve => { + $.get(taskUrl(`/ssjj-task-record/game/${index}/${taskId}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.head.code === 200) { + if (data.body) { + message += `【限时连连看】成功,活动${awardWoB}WO币\n`; + } + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} +function clock(taskId, awardWoB) { + return new Promise(resolve => { + $.get(taskUrl(`/ssjj-task-record/clock/${taskId}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.head.code === 200) { + if (data.body) { + message += `【每日打卡】成功,活动${awardWoB}WO币\n`; + } + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} +function queryAllTaskInfo() { + return new Promise(resolve => { + $.get(taskUrl(`ssjj-task-info/queryAllTaskInfo/2`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.head.code === 200) { + if (data.body) { + $.taskList = data.body; + } + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +//免费抽奖 +function drawRecord(id) { + return new Promise(resolve => { + $.get(taskUrl(`ssjj-draw-record/draw/${id}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.head.code === 200) { + if (data.body) { + message += `【免费抽奖】获得:${data.body.name}\n`; + } else { + message += `【免费抽奖】未中奖\n`; + } + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} +//查询免费抽奖机会 +function queryDraw() { + return new Promise(resolve => { + $.get(taskUrl("ssjj-draw-center/queryDraw"), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.head.code === 200) { + $.freeDrawCount = data.body.freeDrawCount;//免费抽奖次数 + $.lotteryId = data.body.center.id; + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} +//查询是否开启了此活动 +function ssjjRooms() { + return new Promise(resolve => { + $.get(taskUrl("ssjj-rooms/info/%E5%AE%A2%E5%8E%85"), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.head.code === 200) { + $.isUnLock = data.body.isUnLock; + if (!$.isUnLock) { + console.log(`京东账号${$.index}${$.nickName}未开启此活动\n`); + $.msg($.name, '', `京东账号${$.index}${$.nickName}未开启此活动\n点击弹窗去开启此活动( ̄▽ ̄)"`, {"open-url": "openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2HFSytEAN99VPmMGZ6V4EYWus1x/index.html%22%20%7D"}); + } + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} +function loginHome() { + return new Promise(resolve => { + const options = { + "url": "https://jdhome.m.jd.com/saas/framework/encrypt/pin?appId=6d28460967bda11b78e077b66751d2b0", + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Content-Length": "0", + "Content-Type": "application/json", + "Cookie": cookie, + "Host": "jdhome.m.jd.com", + "Origin": "https://jdhome.m.jd.com", + "Referer": "https://jdhome.m.jd.com/dist/taro/index.html/", + "User-Agent": "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0", + } + } + $.post(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + await login(data.data); + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve() + } + }) + }) +} +function login(userName) { + return new Promise(resolve => { + const body = { + "body": { + "client": 2, + userName + } + }; + const options = { + "url": `${JD_API_HOST}/user-info/login`, + "body": JSON.stringify(body), + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Content-Type": "application/json", + "Host": "lkyl.dianpusoft.cn", + "Origin": "https://lkyl.dianpusoft.cn", + "Referer": "https://h5.m.jd.com/babelDiy/Zeus/2HFSytEAN99VPmMGZ6V4EYWus1x/index.html", + "User-Agent": "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0", + } + } + $.post(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + data = JSON.parse(data); + if (data.head.code === 200) { + $.token = data.head.token; + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} +function taskUrl(url, body = {}) { + return { + url: `${JD_API_HOST}/${url}?body=${escape(body)}`, + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Connection": "keep-alive", + "content-type": "application/json", + "Host": "lkyl.dianpusoft.cn", + "Referer": "https://h5.m.jd.com/babelDiy/Zeus/2HFSytEAN99VPmMGZ6V4EYWus1x/index.html", + "token": $.token, + "User-Agent": "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0" + } + } +} +function TotalBean() { + return new Promise(async resolve => { + const options = { + "url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`, + "headers": { + "Accept": "application/json,text/plain, */*", + "Content-Type": "application/x-www-form-urlencoded", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", + "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['retcode'] === 13) { + $.isLogin = false; //cookie过期 + return + } + $.nickName = data['base'].nickname; + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function safeGet(data) { + try { + if (typeof JSON.parse(data) == "object") { + return true; + } + } catch (e) { + console.log(e); + console.log(`京东服务器访问数据为空,请检查自身设备网络情况`); + return false; + } +} + +// 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)} \ No newline at end of file diff --git a/jd_superMarket.js b/jd_superMarket.js index a3a9862..eb0b15c 100644 --- a/jd_superMarket.js +++ b/jd_superMarket.js @@ -5,23 +5,22 @@ * @Last Modified time: 2020-11-22 08:22:37 */ /* -京小超(活动入口:京东APP-》首页-》京东超市-》底部东东超市) -现有功能:每日签到,日常任务(分享游戏,逛会场,关注店铺,卖货能手),收取金币,收取蓝币,商圈活动 +东东超市(活动入口:京东APP-》首页-》京东超市-》底部东东超市) Some Functions Modified From https://github.com/Zero-S1/JD_tools/blob/master/JD_superMarket.py 支持京东双账号 京小超兑换奖品请使用此脚本 https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_blueCoin.js 脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js // QuantumultX [task_local] -#京小超 -11 1-23/5 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_superMarket.js, tag=京小超, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jxc.png, enabled=true +#东东超市 +11 1-23/5 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_superMarket.js, tag=东东超市, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jxc.png, enabled=true // Loon [Script] -cron "11 1-23/5 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_superMarket.js,tag=京小超 +cron "11 1-23/5 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_superMarket.js,tag=东东超市 // Surge -京小超 = type=cron,cronexp="11 1-23/5 * * *",wake-system=1,timeout=320,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_superMarket.js +东东超市 = type=cron,cronexp="11 1-23/5 * * *",wake-system=1,timeout=320,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_superMarket.js */ -const $ = new Env('京小超'); +const $ = new Env('东东超市'); //Node.js用户请在jdCookie.js处填写京东ck; //IOS等用户直接用NobyDa的jd cookie let cookiesArr = [], cookie = '', jdSuperMarketShareArr = [], notify, newShareCodes; @@ -311,18 +310,13 @@ async function businessCircleActivity() { const smtg_getTeamPkDetailInfoRes = await smtg_getTeamPkDetailInfo(); if (smtg_getTeamPkDetailInfoRes && smtg_getTeamPkDetailInfoRes.data.bizCode === 0) { const { joinStatus, pkStatus, inviteCount, inviteCode, currentUserPkInfo, pkUserPkInfo, prizeInfo, pkActivityId, teamId } = smtg_getTeamPkDetailInfoRes.data.result; - console.log(`joinStatus:${joinStatus}`); - console.log(`pkStatus:${pkStatus}`); - console.log(`inviteCode: [${inviteCode}]`); - console.log(`PK队伍teamId: [${teamId}]`); - console.log(`PK队伍名称: [${currentUserPkInfo && currentUserPkInfo.teamName}]`); - await updatePkActivityId(); - if (!$.updatePkActivityIdRes) await updatePkActivityIdCDN(); - console.log(`\nupdatePkActivityId[pkActivityId]:::${$.updatePkActivityIdRes.pkActivityId}`); - console.log(`\n京东服务器返回的[pkActivityId] ${pkActivityId}`); + console.log(`\njoinStatus:${joinStatus}`); + console.log(`pkStatus:${pkStatus}\n`); if (joinStatus === 0) { await updatePkActivityId(); if (!$.updatePkActivityIdRes) await updatePkActivityIdCDN(); + console.log(`\nupdatePkActivityId[pkActivityId]:::${$.updatePkActivityIdRes.pkActivityId}`); + console.log(`\n京东服务器返回的[pkActivityId] ${pkActivityId}`); if ($.updatePkActivityIdRes && ($.updatePkActivityIdRes.pkActivityId === pkActivityId)) { let Teams = [ { @@ -365,12 +359,17 @@ async function businessCircleActivity() { console.log('\nupdatePkActivityId请求返回的pkActivityId与京东服务器返回不一致,暂时不加入战队') } } else if (joinStatus === 1) { - console.log(`我邀请的人数:${inviteCount}\n`) - console.log(`\n我方战队战队 [${currentUserPkInfo && currentUserPkInfo.teamName}]/【${currentUserPkInfo && currentUserPkInfo.teamCount}】`); - console.log(`对方战队战队 [${pkUserPkInfo && pkUserPkInfo.teamName}]/【${pkUserPkInfo && pkUserPkInfo.teamCount}】\n`); + if (teamId) { + console.log(`inviteCode: [${inviteCode}]`); + console.log(`PK队伍teamId: [${teamId}]`); + console.log(`PK队伍名称: [${currentUserPkInfo && currentUserPkInfo.teamName}]`); + console.log(`我邀请的人数:${inviteCount}\n`) + console.log(`\n我方战队战队 [${currentUserPkInfo && currentUserPkInfo.teamName}]/【${currentUserPkInfo && currentUserPkInfo.teamCount}】`); + console.log(`对方战队战队 [${pkUserPkInfo && pkUserPkInfo.teamName}]/【${pkUserPkInfo && pkUserPkInfo.teamCount}】\n`); + } } if (pkStatus === 1) { - console.log(`商圈PK进行中`) + console.log(`商圈PK进行中\n`) } else if (pkStatus === 2) { console.log(`商圈PK结束了`) if (prizeInfo.pkPrizeStatus === 2) { @@ -391,10 +390,10 @@ async function businessCircleActivity() { } } } else if (prizeInfo.pkPrizeStatus === 1) { - console.log(`商圈PK奖励已经领取`) + console.log(`商圈PK奖励已经领取\n`) } } else if (pkStatus === 3) { - console.log(`商圈PK暂停中`) + console.log(`商圈PK暂停中\n`) } } return From 2a4098e9b570f609ae03de48b35609de7933ae22 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sun, 22 Nov 2020 16:38:54 +0800 Subject: [PATCH 097/290] =?UTF-8?q?=E4=BF=AE=E6=94=B9docker=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E4=B8=80cron=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/crontab_list.sh | 2 +- docker/crontab_list_ts.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index 512a389..3367232 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -58,4 +58,4 @@ # 京喜工厂 20 * * * * node /scripts/jd_dreamFactory.js >> /scripts/logs/jd_dreamFactory.log 2>&1 # 东东小窝 -20 * * * * node /scripts/jd_small_home.js >> /scripts/logs/jd_small_home.log 2>&1 \ No newline at end of file +16 0 * * * node /scripts/jd_small_home.js >> /scripts/logs/jd_small_home.log 2>&1 \ No newline at end of file diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index 879a87b..d9d6091 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -58,4 +58,4 @@ # 京喜工厂 20 * * * * node /scripts/jd_dreamFactory.js |ts >> /scripts/logs/jd_dreamFactory.log 2>&1 # 东东小窝 -20 * * * * node /scripts/jd_small_home.js |ts >> /scripts/logs/jd_small_home.log 2>&1 \ No newline at end of file +16 0 * * * node /scripts/jd_small_home.js |ts >> /scripts/logs/jd_small_home.log 2>&1 \ No newline at end of file From de40ccab36efb0208c20eb1cbaa7e977078ae3a4 Mon Sep 17 00:00:00 2001 From: 0xff1 <74048348+0xff1@users.noreply.github.com> Date: Sun, 22 Nov 2020 16:42:13 +0800 Subject: [PATCH 098/290] Update jd_superMarket.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix:修复东东超市环境变量 SUPERMARKET_LOTTERY 未被正确读取的BUG. --- jd_superMarket.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jd_superMarket.js b/jd_superMarket.js index eb0b15c..0df2a8f 100644 --- a/jd_superMarket.js +++ b/jd_superMarket.js @@ -112,8 +112,8 @@ function showMsg() { async function drawLottery() { console.log(`\n注意⚠:京小超抽奖已改版,花费500蓝币抽奖一次,现在脚本默认已关闭抽奖功能\n`); drawLotteryFlag = $.getdata('jdSuperMarketLottery') ? $.getdata('jdSuperMarketLottery') : drawLotteryFlag; - if ($.isNode() && process.env.jdSuperMarketLottery) { - drawLotteryFlag = process.env.jdSuperMarketLottery; + if ($.isNode() && process.env.SUPERMARKET_LOTTERY) { + drawLotteryFlag = process.env.SUPERMARKET_LOTTERY; } if (`${drawLotteryFlag}` === 'true') { const smtg_lotteryIndexRes = await smtg_lotteryIndex(); From eb552eb5a001e838ce670a718f3b81b6d6780008 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sun, 22 Nov 2020 16:47:15 +0800 Subject: [PATCH 099/290] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_small_home.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/jd_small_home.js b/jd_small_home.js index 8f34fd9..caad336 100644 --- a/jd_small_home.js +++ b/jd_small_home.js @@ -113,6 +113,8 @@ function showMsg() { async function lottery() { if ($.freeDrawCount > 0) { await drawRecord($.lotteryId); + } else { + console.log(`免费抽奖机会今日已使用\n`) } } //获取详情 From ae7896f8871ec4afd5158004f65bfac4665a93b8 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sun, 22 Nov 2020 16:54:47 +0800 Subject: [PATCH 100/290] update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a7d21d9..86cec92 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ 19. 京东多合一签到([jd_bean_sign.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_bean_sign.js)) 【可N个京东账号,Node.js专用,核心脚本是JD_DailyBonus.js, IOS软件用户请使用NobyDa的 [JD_DailyBonus.js](https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js) 】 20. 京豆变动通知([jd_bean_change.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_bean_change.js)) 21. 京喜工厂([jd_dreamFactory.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js)) -22. 东东超市([jd_small_home.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_small_home.js)) +22. 东东小窝([jd_small_home.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_small_home.js)) 21. 以及其他一部分在特定时间可用的薅京豆脚本,如 [手机狂欢城](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_818.js) 、[星推官](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_xtg.js) 等。 **脚本兼容: [QuantumultX](https://apps.apple.com/us/app/quantumult-x/id1443988620), [Surge](https://apps.apple.com/us/app/surge-4/id1442620678), [Loon](https://apps.apple.com/us/app/loon/id1373567447), 小火箭, JSBox, Node.js** From 796a5c4997abffe86448fc0900a16ce0b2f30778 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sun, 22 Nov 2020 22:30:09 +0800 Subject: [PATCH 101/290] =?UTF-8?q?=E4=BC=98=E5=8C=96=20jd=5Funsubscribe.j?= =?UTF-8?q?s=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_unsubscribe.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jd_unsubscribe.js b/jd_unsubscribe.js index 1fa2cce..0919fc1 100644 --- a/jd_unsubscribe.js +++ b/jd_unsubscribe.js @@ -1,6 +1,6 @@ /* 脚本:取关京东店铺和商品 -更新时间:2020-11-03 +更新时间:2020-11-22 因种豆得豆和宠汪汪以及NobyDa大佬的京东签到脚本会关注店铺和商品,故此脚本用来取消已关注的店铺和商品 默认每运行一次脚本取消关注10个商品,10个店铺。可结合boxjs自定义取消多少个(目前测试通过最大数量是一次性取消300个商品无异常,大于300请自行测试,建议尽量不要一次性全部取消以免出现问题)。 建议此脚本运行时间在 种豆得豆和宠汪汪脚本运行之后 再执行 @@ -102,7 +102,7 @@ function unsubscribeGoods() { console.log(`是否匹配::${item.commTitle.indexOf(stopGoods.replace(/\ufffc|\s*/g, ''))}`) - if (stopGoods && item.commTitle.indexOf(stopGoods.replace(/\ufffc|\s*/g, '')) === 0) { + if (stopGoods && item.commTitle.indexOf(stopGoods.replace(/\ufffc|\s*/g, '')) > -1) { console.log(`匹配到了您设定的商品--${stopGoods},不在进行取消关注商品`) break; } From 0d6484368709995ae973a75e483e089da5e75bf2 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 23 Nov 2020 09:18:17 +0800 Subject: [PATCH 102/290] =?UTF-8?q?=E4=BF=AE=E6=94=B9secret=E9=9B=86?= =?UTF-8?q?=E5=90=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- githubAction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/githubAction.md b/githubAction.md index 45aaa30..2b8f97f 100644 --- a/githubAction.md +++ b/githubAction.md @@ -104,7 +104,7 @@ | `SUPERMARKET_LOTTERY` | 京小超抽奖 | 非必须 | 每天运行脚本是否使用金币去抽奖,`true`表示抽奖,`false`表示不抽奖 | | `FRUIT_BEAN_CARD` | 农场使用水滴换豆卡 | 非必须 | 农场使用水滴换豆卡(如果出现限时活动时100g水换20豆,此时比浇水划算,推荐换豆),`true`表示换豆(不浇水),`false`表示不换豆(继续浇水),脚本默认是浇水 | | `UN_SUBSCRIBES` | jd_unsubscribe.js | 非必须 | 共四个参数,换行隔开. 四个参数分别表示`取关商品数量`,`取关店铺数量`,`遇到此商品不再进行取关`, `遇到此店铺不再进行取关`,[具体使用往下看](#取关店铺secret的说明)| -| `FruitShareCodes` | 东东农场互助码 | 非必须 | 填写规则请看 [jdFruitShareCodes.js](https://github.com/lxk0301/jd_scripts/blob/master/jdFruitShareCodes.js) 或见下方[互助码的填写规则](#互助码的填写规则) | +| `FRUITSHARECODES` | 东东农场互助码 | 非必须 | 填写规则请看 [jdFruitShareCodes.js](https://github.com/lxk0301/jd_scripts/blob/master/jdFruitShareCodes.js) 或见下方[互助码的填写规则](#互助码的填写规则) | | `PETSHARECODES` | 东东萌宠互助码 | 非必须 | 填写规则请看 [jdPetShareCodes.js](https://github.com/lxk0301/jd_scripts/blob/master/jdPetShareCodes.js) 或见下方[互助码的填写规则](#互助码的填写规则) | | `PLANT_BEAN_SHARECODES` | 种豆得豆互助码 | 非必须 | 填写规则请看 [jdPlantBeanShareCodes.js](https://github.com/lxk0301/jd_scripts/blob/master/jdPlantBeanShareCodes.js) 或见下方[互助码的填写规则](#互助码的填写规则) | | `SUPERMARKET_SHARECODES`| 京小超商圈互助码 | 非必须 | 填写规则请看 [jdSuperMarketShareCodes.js](https://github.com/lxk0301/jd_scripts/blob/master/jdSuperMarketShareCodes.js) 或见下方[互助码的填写规则](#互助码的填写规则) | From c7da39792d48918776f216a43a4d7a873199c0c9 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 23 Nov 2020 09:24:48 +0800 Subject: [PATCH 103/290] =?UTF-8?q?=E4=BF=AE=E5=A4=8Daction=E8=BD=AC?= =?UTF-8?q?=E8=85=BE=E8=AE=AF=E4=BA=91=E5=87=BD=E6=95=B0=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=86=9C=E5=9C=BA=E5=8A=A9=E5=8A=9B=E7=A0=81?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy_tencent_scf.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml index ef4b667..0810a75 100644 --- a/.github/workflows/deploy_tencent_scf.yml +++ b/.github/workflows/deploy_tencent_scf.yml @@ -52,7 +52,7 @@ jobs: if [ $SUPERMARKET_LOTTERY ]; then sed -i "/variables/a\ SUPERMARKET_LOTTERY: $SUPERMARKET_LOTTERY" serverless.yml; fi; if [ $FRUIT_BEAN_CARD ]; then sed -i "/variables/a\ FRUIT_BEAN_CARD: $FRUIT_BEAN_CARD" serverless.yml; fi; if [ $UN_SUBSCRIBES ]; then sed -i "/variables/a\ UN_SUBSCRIBES: $UN_SUBSCRIBES" serverless.yml; fi; - if [ $FruitShareCodes ]; then sed -i "/variables/a\ FruitShareCodes: $FruitShareCodes" serverless.yml; fi; + if [ $FRUITSHARECODES ]; then sed -i "/variables/a\ FRUITSHARECODES: $FruitShareCodes" serverless.yml; fi; if [ $PETSHARECODES ]; then sed -i "/variables/a\ PETSHARECODES: $PETSHARECODES" serverless.yml; fi; if [ $PLANT_BEAN_SHARECODES ]; then sed -i "/variables/a\ PLANT_BEAN_SHARECODES: $PLANT_BEAN_SHARECODES" serverless.yml; fi; if [ $SUPERMARKET_SHARECODES ]; then sed -i "/variables/a\ SUPERMARKET_SHARECODES: $SUPERMARKET_SHARECODES" serverless.yml; fi; @@ -88,7 +88,7 @@ jobs: SUPERMARKET_LOTTERY: ${{ secrets.SUPERMARKET_LOTTERY}} FRUIT_BEAN_CARD: ${{ secrets.FRUIT_BEAN_CARD}} UN_SUBSCRIBES: ${{ secrets.UN_SUBSCRIBES}} - FruitShareCodes: ${{ secrets.FruitShareCodes}} + FRUITSHARECODES: ${{ secrets.FRUITSHARECODES}} PETSHARECODES: ${{ secrets.PETSHARECODES}} PLANT_BEAN_SHARECODES: ${{ secrets.PLANT_BEAN_SHARECODES}} SUPERMARKET_SHARECODES: ${{ secrets.SUPERMARKET_SHARECODES}} From 9b466517174c5c54db7c198fd99ead4f0cc41dbd Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 23 Nov 2020 09:30:53 +0800 Subject: [PATCH 104/290] update --- .github/workflows/deploy_tencent_scf.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml index 0810a75..a259d30 100644 --- a/.github/workflows/deploy_tencent_scf.yml +++ b/.github/workflows/deploy_tencent_scf.yml @@ -52,7 +52,7 @@ jobs: if [ $SUPERMARKET_LOTTERY ]; then sed -i "/variables/a\ SUPERMARKET_LOTTERY: $SUPERMARKET_LOTTERY" serverless.yml; fi; if [ $FRUIT_BEAN_CARD ]; then sed -i "/variables/a\ FRUIT_BEAN_CARD: $FRUIT_BEAN_CARD" serverless.yml; fi; if [ $UN_SUBSCRIBES ]; then sed -i "/variables/a\ UN_SUBSCRIBES: $UN_SUBSCRIBES" serverless.yml; fi; - if [ $FRUITSHARECODES ]; then sed -i "/variables/a\ FRUITSHARECODES: $FruitShareCodes" serverless.yml; fi; + if [ $FRUITSHARECODES ]; then sed -i "/variables/a\ FRUITSHARECODES: $FRUITSHARECODES" serverless.yml; fi; if [ $PETSHARECODES ]; then sed -i "/variables/a\ PETSHARECODES: $PETSHARECODES" serverless.yml; fi; if [ $PLANT_BEAN_SHARECODES ]; then sed -i "/variables/a\ PLANT_BEAN_SHARECODES: $PLANT_BEAN_SHARECODES" serverless.yml; fi; if [ $SUPERMARKET_SHARECODES ]; then sed -i "/variables/a\ SUPERMARKET_SHARECODES: $SUPERMARKET_SHARECODES" serverless.yml; fi; From a93f994d77f68ae20bd14a6b920a3e79b351ef4c Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 23 Nov 2020 09:42:51 +0800 Subject: [PATCH 105/290] =?UTF-8?q?BoxJs=E6=B7=BB=E5=8A=A0=E5=A4=9A?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7cookie=E7=AE=A1=E7=90=86=E5=99=A8=E7=9A=84?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JD_extra_cookie.js | 2 +- lxk0301.boxjs.json | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/JD_extra_cookie.js b/JD_extra_cookie.js index 10fbcae..f1eed49 100644 --- a/JD_extra_cookie.js +++ b/JD_extra_cookie.js @@ -3,7 +3,7 @@ Author: 2Ya -Github: https://github.com/domping +Github: https://github.com/dompling =================== 特别说明: diff --git a/lxk0301.boxjs.json b/lxk0301.boxjs.json index e309512..545cb2d 100644 --- a/lxk0301.boxjs.json +++ b/lxk0301.boxjs.json @@ -9,6 +9,11 @@ "id": "JD_Cookies", "name": "京东多账号 Ck 管理", "keys": ["CookiesJD"], + "descs_html": [ + "请勿随意在输入框修改内容,建议通过脚本去获取cookie,若要修改,请按照JSON 格式修改。", + "脚本地址【京东多 CK获取】,并按照此脚本注释进行配置", + "使用方式【个人中心】获取对应的数据Code" + ], "settings": [ { "id": "CookiesJD", From 5109e4f4bf3423d3f9c5712ec1dda9e1ec874fec Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 23 Nov 2020 09:48:48 +0800 Subject: [PATCH 106/290] =?UTF-8?q?=E5=BA=93=E9=87=8C=E9=9D=A2=E6=89=80?= =?UTF-8?q?=E6=9C=89=E4=BA=AC=E4=B8=9C=E7=B3=BB=E5=88=97=E7=9A=84=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=EF=BC=8C=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?User-Agent=E5=8A=9F=E8=83=BD=EF=BC=8C=E4=B8=8D=E6=87=82?= =?UTF-8?q?=E4=B8=8D=E4=BC=9A=E4=B8=8D=E7=9F=A5UA=E7=9A=84=E4=B8=8D?= =?UTF-8?q?=E8=A6=81=E4=B9=B1=E8=87=AA=E5=AE=9A=E4=B9=89=EF=BC=8C=E5=9B=A0?= =?UTF-8?q?=E6=94=B9=E5=8A=A8=E4=BA=86UA=EF=BC=8C=E5=A6=82=E5=8F=91?= =?UTF-8?q?=E7=8E=B0=E5=BC=82=E5=B8=B8=E8=AF=B7=E6=8F=90issue=EF=BC=8C?= =?UTF-8?q?=E5=A6=82=E6=9C=89=E6=BC=8F=E7=BD=91=E4=B9=8B=E9=B1=BC=E4=B9=9F?= =?UTF-8?q?=E8=AF=B7=E6=8C=87=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_818.js | 12 ++++++------ jd_bean_change.js | 4 ++-- jd_bean_sign.js | 2 +- jd_blueCoin.js | 4 ++-- jd_club_lottery.js | 8 ++++---- jd_collectProduceScore.js | 2 +- jd_daily_egg.js | 4 ++-- jd_fruit.js | 6 +++--- jd_joy.js | 6 +++--- jd_joy_feedPets.js | 6 +++--- jd_joy_reward.js | 6 +++--- jd_joy_run.js | 2 +- jd_joy_steal.js | 8 ++++---- jd_mohe.js | 4 ++-- jd_moneyTree.js | 4 ++-- jd_necklace.js | 6 +++--- jd_pet.js | 4 ++-- jd_pigPet.js | 6 +++--- jd_plantBean.js | 4 ++-- jd_redPacket.js | 4 ++-- jd_shop.js | 6 +++--- jd_small_home.js | 10 +++++----- jd_speed.js | 2 +- jd_superMarket.js | 4 ++-- jd_unsubscribe.js | 10 +++++----- jd_xtg.js | 10 +++++----- 26 files changed, 72 insertions(+), 72 deletions(-) diff --git a/jd_818.js b/jd_818.js index 7fbeb49..314be49 100644 --- a/jd_818.js +++ b/jd_818.js @@ -2,7 +2,7 @@ * @Author: lxk0301 https://github.com/lxk0301 * @Date: 2020-11-03 09:25:47 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-02 09:26:12 + * @Last Modified time: 2020-11-22 23:07:00 */ /* 京东手机狂欢城活动,每日可获得30+以上京豆(其中20京豆是往期奖励,需第一天参加活动后,第二天才能拿到) @@ -633,7 +633,7 @@ function toHelp(code) { "Cookie": cookie, "Connection": "keep-alive", "Accept": "application/json, text/plain, */*", - "User-Agent": "jdapp;iPhone;9.1.0;14.0;e35caf0a69be42084e3c97eef56c3af7b0262d01;network/4g;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/1;model/iPhone11,8;addressid/2005183373;hasOCPay/0;appBuild/167348;supportBestPay/0;jdSupportDarkMode/0;pv/252.3;apprpd/Home_Main;ref/JDWebViewController;psq/2;ads/;psn/e35caf0a69be42084e3c97eef56c3af7b0262d01|695;jdv/0|kong|t_2010957099_|jingfen|3b5422e836e74037862fea3dcf1a6802|1600647811440|1600647814;adk/;app_device/IOS;pap/JA2015_311210|9.1.0|IOS 14.0;Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Referer": "https://rdcseason.m.jd.com/", "Content-Length": "44", "Accept-Language": "zh-cn" @@ -665,7 +665,7 @@ function getHelp() { "Accept": "application/json, text/plain, */*", "Connection": "keep-alive", "Cookie": cookie, - "User-Agent": "jdapp;iPhone;9.1.0;14.0;e35caf0a69be42084e3c97eef56c3af7b0262d01;network/4g;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/1;model/iPhone11,8;addressid/2005183373;hasOCPay/0;appBuild/167348;supportBestPay/0;jdSupportDarkMode/0;pv/255.2;apprpd/Home_Main;ref/JDMainPageViewController;psq/1;ads/;psn/e35caf0a69be42084e3c97eef56c3af7b0262d01|701;jdv/0|kong|t_2010957099_|jingfen|3b5422e836e74037862fea3dcf1a6802|1600647811440|1600647814;adk/;app_device/IOS;pap/JA2015_311210|9.1.0|IOS 14.0;Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Accept-Language": "zh-cn", "Referer": "https://rdcseason.m.jd.com", "Accept-Encoding": "gzip, deflate, br" @@ -726,7 +726,7 @@ function getListJbean() { "Accept": "application/json, text/plain, */*", "Connection": "keep-alive", "Cookie": cookie, - "User-Agent": "jdapp;iPhone;9.1.0;14.0;e35caf0a69be42084e3c97eef56c3af7b0262d01;network/4g;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/1;model/iPhone11,8;addressid/2005183373;hasOCPay/0;appBuild/167348;supportBestPay/0;jdSupportDarkMode/0;pv/255.2;apprpd/Home_Main;ref/JDMainPageViewController;psq/1;ads/;psn/e35caf0a69be42084e3c97eef56c3af7b0262d01|701;jdv/0|kong|t_2010957099_|jingfen|3b5422e836e74037862fea3dcf1a6802|1600647811440|1600647814;adk/;app_device/IOS;pap/JA2015_311210|9.1.0|IOS 14.0;Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Accept-Language": "zh-cn", "Referer": "https://rdcseason.m.jd.com", "Accept-Encoding": "gzip, deflate, br" @@ -761,7 +761,7 @@ function getListIntegral() { "Accept": "application/json, text/plain, */*", "Connection": "keep-alive", "Cookie": cookie, - "User-Agent": "jdapp;iPhone;9.1.0;14.0;e35caf0a69be42084e3c97eef56c3af7b0262d01;network/4g;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/1;model/iPhone11,8;addressid/2005183373;hasOCPay/0;appBuild/167348;supportBestPay/0;jdSupportDarkMode/0;pv/255.2;apprpd/Home_Main;ref/JDMainPageViewController;psq/1;ads/;psn/e35caf0a69be42084e3c97eef56c3af7b0262d01|701;jdv/0|kong|t_2010957099_|jingfen|3b5422e836e74037862fea3dcf1a6802|1600647811440|1600647814;adk/;app_device/IOS;pap/JA2015_311210|9.1.0|IOS 14.0;Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Accept-Language": "zh-cn", "Referer": "https://rdcseason.m.jd.com", "Accept-Encoding": "gzip, deflate, br" @@ -797,7 +797,7 @@ function getListRank() { "Accept": "application/json, text/plain, */*", "Connection": "keep-alive", "Cookie": cookie, - "User-Agent": "jdapp;iPhone;9.1.0;14.0;e35caf0a69be42084e3c97eef56c3af7b0262d01;network/4g;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/1;model/iPhone11,8;addressid/2005183373;hasOCPay/0;appBuild/167348;supportBestPay/0;jdSupportDarkMode/0;pv/255.2;apprpd/Home_Main;ref/JDMainPageViewController;psq/1;ads/;psn/e35caf0a69be42084e3c97eef56c3af7b0262d01|701;jdv/0|kong|t_2010957099_|jingfen|3b5422e836e74037862fea3dcf1a6802|1600647811440|1600647814;adk/;app_device/IOS;pap/JA2015_311210|9.1.0|IOS 14.0;Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Accept-Language": "zh-cn", "Referer": "https://rdcseason.m.jd.com", "Accept-Encoding": "gzip, deflate, br" diff --git a/jd_bean_change.js b/jd_bean_change.js index 731870f..f5448a7 100644 --- a/jd_bean_change.js +++ b/jd_bean_change.js @@ -138,7 +138,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { @@ -175,7 +175,7 @@ function getJingBeanBalanceDetail(page) { "url": `https://api.m.jd.com/client.action?functionId=getJingBeanBalanceDetail`, "body": `body=${escape(JSON.stringify({"pageSize": "20", "page": page.toString()}))}&appid=ld`, "headers": { - 'User-Agent': 'JD4iPhone/167169 (iPhone; iOS 13.4.1; Scale/3.00)', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Host': 'api.m.jd.com', 'Content-Type': 'application/x-www-form-urlencoded', 'Cookie': cookie, diff --git a/jd_bean_sign.js b/jd_bean_sign.js index 9a76a58..80c119a 100644 --- a/jd_bean_sign.js +++ b/jd_bean_sign.js @@ -161,7 +161,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { diff --git a/jd_blueCoin.js b/jd_blueCoin.js index 908919e..8d61399 100644 --- a/jd_blueCoin.js +++ b/jd_blueCoin.js @@ -364,7 +364,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { @@ -407,7 +407,7 @@ function taskUrl(function_id, body = {}) { return { url: `${JD_API_HOST}&functionId=${function_id}&clientVersion=8.0.0&client=m&body=${escape(JSON.stringify(body))}&t=${Date.now()}`, headers: { - 'User-Agent': 'jdapp;iPhone;9.0.8;13.6;Mozilla/5.0 (iPhone; CPU iPhone OS 13_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Host': 'api.m.jd.com', 'Cookie': cookie, 'Referer': 'https://jdsupermarket.jd.com/game', diff --git a/jd_club_lottery.js b/jd_club_lottery.js index eb40de7..b40db49 100644 --- a/jd_club_lottery.js +++ b/jd_club_lottery.js @@ -2,7 +2,7 @@ * @Author: lxk0301 * @Date: 2020-11-03 20:35:07 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-22 20:37:10 + * @Last Modified time: 2020-11-22 23:07:04 摇京豆(京东APP首页-领京豆-摇京豆) 更新时间:2020-10-12 Modified from https://github.com/Zero-S1/JD_tools/blob/master/JD_vvipclub.py @@ -168,7 +168,7 @@ function vvipclub_shaking_info() { "cookie": cookie, "origin": "https://skuivip.jd.com", "referer": "https://skuivip.jd.com/", - "user-agent": "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.get(options, (err, resp, data) => { @@ -204,7 +204,7 @@ function vvipclub_shaking_lottery() { "cookie": cookie, "origin": "https://skuivip.jd.com", "referer": "https://skuivip.jd.com/", - "user-agent": "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.get(options, (err, resp, data) => { @@ -236,7 +236,7 @@ function vvipclub_receive_lottery_times() { "cookie": cookie, "origin": "https://skuivip.jd.com", "referer": "https://skuivip.jd.com/", - "user-agent": "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.get(options, (err, resp, data) => { diff --git a/jd_collectProduceScore.js b/jd_collectProduceScore.js index a49766f..b34f2c5 100644 --- a/jd_collectProduceScore.js +++ b/jd_collectProduceScore.js @@ -124,7 +124,7 @@ function taskPostUrl(functionId, body = {}) { url: `${JD_API_HOST}?functionId=${functionId}`, body: `functionId=${functionId}&body=${escape(JSON.stringify(body))}&client=wh5&clientVersion=1.0.0`, headers: { - 'User-Agent': 'jdapp;iPhone;9.2.0;14.1;;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'api.m.jd.com', 'Cookie': cookie, diff --git a/jd_daily_egg.js b/jd_daily_egg.js index 07150e7..b19ac6b 100644 --- a/jd_daily_egg.js +++ b/jd_daily_egg.js @@ -175,7 +175,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { @@ -215,7 +215,7 @@ function taskUrl(function_id, body) { 'Content-Type' : `application/x-www-form-urlencoded;charset=UTF-8`, 'Host' : `ms.jr.jd.com`, 'Connection' : `keep-alive`, - 'User-Agent' : `jdapp;iPhone;9.0.0;13.4.1;e35caf0a69be42084e3c97eef56c3af7b0262d01;network/4g;ADID/F75E8AED-CB48-4EAC-A213-E8CE4018F214;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/1;model/iPhone11,8;addressid/2005183373;hasOCPay/0;appBuild/167237;supportBestPay/0;jdSupportDarkMode/0;pv/1287.19;apprpd/MyJD_GameMain;ref/https%3A%2F%2Fuua.jr.jd.com%2Fuc-fe-wxgrowing%2Fmoneytree%2Findex%2F%3Fchannel%3Dyxhd%26lng%3D113.325843%26lat%3D23.204628%26sid%3D2d98e88cf7d182f60d533476c2ce777w%26un_area%3D19_1601_50258_51885;psq/1;ads/;psn/e35caf0a69be42084e3c97eef56c3af7b0262d01|3485;jdv/0|kong|t_1000170135|tuiguang|notset|1593059927172|1593059927;adk/;app_device/IOS;pap/JA2015_311210|9.0.0|IOS 13.4.1;Mozilla/5.0 (iPhone; CPU iPhone OS 13_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1`, + 'User-Agent' : $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Referer' : `https://uua.jr.jd.com/uc-fe-wxgrowing/moneytree/index`, 'Accept-Language' : `zh-cn` } diff --git a/jd_fruit.js b/jd_fruit.js index 471d3c9..efe3ee2 100644 --- a/jd_fruit.js +++ b/jd_fruit.js @@ -1141,7 +1141,7 @@ async function initForFarm() { "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-site", - "user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Content-Type": "application/x-www-form-urlencoded" } }; @@ -1328,7 +1328,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { @@ -1396,7 +1396,7 @@ function taskUrl(function_id, body = {}) { url: `${JD_API_HOST}?functionId=${function_id}&appid=wh5&body=${escape(JSON.stringify(body))}`, headers: { Cookie: cookie, - UserAgent: `Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1`, + UserAgent: $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), } } } diff --git a/jd_joy.js b/jd_joy.js index 163025e..7df3fff 100644 --- a/jd_joy.js +++ b/jd_joy.js @@ -693,7 +693,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { @@ -731,7 +731,7 @@ function taskUrl(url, Host, reqSource) { 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Referer': 'https://jdjoy.jd.com/pet/index', - 'User-Agent': 'jdapp;iPhone;8.5.8;13.4.1;9b812b59e055cd226fd60ebb5fd0981c4d0d235d;network/wifi;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/0;model/iPhone9,2;addressid/138109592;hasOCPay/0;appBuild/167169;supportBestPay/0;jdSupportDarkMode/0;pv/200.75;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/29;ads/;psn/9b812b59e055cd226fd60ebb5fd0981c4d0d235d|608;jdv/0|direct|-|none|-|1587263154256|1587263330;adk/;app_device/IOS;pap/JA2015_311210|8.5.8|IOS 13.4.1;Mozilla/5.0 (iPhone; CPU iPhone OS 13_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Accept-Language': 'zh-cn', 'Accept-Encoding': 'gzip, deflate, br', } @@ -743,7 +743,7 @@ function taskPostUrl(url, body, reqSource, Host, ContentType) { body: body, headers: { 'Cookie': cookie, - 'User-Agent': `Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1`, + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'reqSource': reqSource, 'Content-Type': ContentType, 'Host': Host, diff --git a/jd_joy_feedPets.js b/jd_joy_feedPets.js index 77ce1bc..1e497cb 100644 --- a/jd_joy_feedPets.js +++ b/jd_joy_feedPets.js @@ -104,7 +104,7 @@ function feedPets(feedNum) { 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Referer': 'https://jdjoy.jd.com/pet/index', - 'User-Agent': 'jdapp;iPhone;8.5.8;13.4.1;9b812b59e055cd226fd60ebb5fd0981c4d0d235d;network/wifi;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/0;model/iPhone9,2;addressid/138109592;hasOCPay/0;appBuild/167169;supportBestPay/0;jdSupportDarkMode/0;pv/200.75;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/29;ads/;psn/9b812b59e055cd226fd60ebb5fd0981c4d0d235d|608;jdv/0|direct|-|none|-|1587263154256|1587263330;adk/;app_device/IOS;pap/JA2015_311210|8.5.8|IOS 13.4.1;Mozilla/5.0 (iPhone; CPU iPhone OS 13_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Accept-Language': 'zh-cn', 'Accept-Encoding': 'gzip, deflate, br', } @@ -162,7 +162,7 @@ function ThreeMeals() { 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Referer': 'https://jdjoy.jd.com/pet/index', - 'User-Agent': 'jdapp;iPhone;8.5.8;13.4.1;9b812b59e055cd226fd60ebb5fd0981c4d0d235d;network/wifi;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/0;model/iPhone9,2;addressid/138109592;hasOCPay/0;appBuild/167169;supportBestPay/0;jdSupportDarkMode/0;pv/200.75;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/29;ads/;psn/9b812b59e055cd226fd60ebb5fd0981c4d0d235d|608;jdv/0|direct|-|none|-|1587263154256|1587263330;adk/;app_device/IOS;pap/JA2015_311210|8.5.8|IOS 13.4.1;Mozilla/5.0 (iPhone; CPU iPhone OS 13_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Accept-Language': 'zh-cn', 'Accept-Encoding': 'gzip, deflate, br', } @@ -207,7 +207,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { diff --git a/jd_joy_reward.js b/jd_joy_reward.js index 7a6c1d7..1f5749c 100644 --- a/jd_joy_reward.js +++ b/jd_joy_reward.js @@ -165,7 +165,7 @@ function getExchangeRewards() { "reqSource": "h5", "Connection": "keep-alive", "Accept": "*/*", - "User-Agent": "jdapp;iPhone;9.0.4;13.5.1;e35caf0a69be42084e3c97eef56c3af7b0262d01;network/4g;ADID/3B3AD5BC-B5E6-4A08-B32A-030CD805B5DD;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/1;model/iPhone11,8;addressid/2005183373;hasOCPay/0;appBuild/167283;supportBestPay/0;jdSupportDarkMode/1;pv/169.3;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/2;ads/;psn/e35caf0a69be42084e3c97eef56c3af7b0262d01|638;jdv/0|iosapp|t_335139774|appshare|CopyURL|1596547194976|1596547198;adk/;app_device/IOS;pap/JA2015_311210|9.0.4|IOS 13.5.1;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Referer": "https://jdjoy.jd.com/pet/index", "Accept-Language": "zh-cn", "Accept-Encoding": "gzip, deflate, br" @@ -205,7 +205,7 @@ function exchange(saleInfoId, orderSource) { "Origin": "https://jdjoy.jd.com", "reqSource": "h5", "Connection": "keep-alive", - "User-Agent": "jdapp;iPhone;9.0.4;13.5.1;e35caf0a69be42084e3c97eef56c3af7b0262d01;network/4g;ADID/3B3AD5BC-B5E6-4A08-B32A-030CD805B5DD;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/1;model/iPhone11,8;addressid/2005183373;hasOCPay/0;appBuild/167283;supportBestPay/0;jdSupportDarkMode/1;pv/169.3;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/2;ads/;psn/e35caf0a69be42084e3c97eef56c3af7b0262d01|638;jdv/0|iosapp|t_335139774|appshare|CopyURL|1596547194976|1596547198;adk/;app_device/IOS;pap/JA2015_311210|9.0.4|IOS 13.5.1;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Referer": "https://jdjoy.jd.com/pet/index", "Content-Length": "10", "Cookie": cookie @@ -243,7 +243,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { diff --git a/jd_joy_run.js b/jd_joy_run.js index a0118ef..cfefcc5 100644 --- a/jd_joy_run.js +++ b/jd_joy_run.js @@ -55,7 +55,7 @@ const headers = { 'Lottery-Access-Signature' : '', 'Content-Type' : 'application/json', 'reqSource' : 'weapp', - 'User-Agent' : 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.15(0x17000f2d) NetType/4G Language/zh_CN', + 'User-Agent' : $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Cookie' : '', 'openId' : '', 'Host' : 'draw.jdfcloud.com', diff --git a/jd_joy_steal.js b/jd_joy_steal.js index 2a00493..c17d16d 100644 --- a/jd_joy_steal.js +++ b/jd_joy_steal.js @@ -228,7 +228,7 @@ function getFriends(currentPage = '1') { 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Referer': 'https://jdjoy.jd.com/pet/index', - 'User-Agent': 'jdapp;iPhone;8.5.8;13.4.1;9b812b59e055cd226fd60ebb5fd0981c4d0d235d;network/wifi;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/0;model/iPhone9,2;addressid/138109592;hasOCPay/0;appBuild/167169;supportBestPay/0;jdSupportDarkMode/0;pv/200.75;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/29;ads/;psn/9b812b59e055cd226fd60ebb5fd0981c4d0d235d|608;jdv/0|direct|-|none|-|1587263154256|1587263330;adk/;app_device/IOS;pap/JA2015_311210|8.5.8|IOS 13.4.1;Mozilla/5.0 (iPhone; CPU iPhone OS 13_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Accept-Language': 'zh-cn', 'Accept-Encoding': 'gzip, deflate, br', } @@ -404,7 +404,7 @@ function getCoinChanges() { 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Referer': 'https://jdjoy.jd.com/pet/index', - 'User-Agent': 'jdapp;iPhone;8.5.8;13.4.1;9b812b59e055cd226fd60ebb5fd0981c4d0d235d;network/wifi;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/0;model/iPhone9,2;addressid/138109592;hasOCPay/0;appBuild/167169;supportBestPay/0;jdSupportDarkMode/0;pv/200.75;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/29;ads/;psn/9b812b59e055cd226fd60ebb5fd0981c4d0d235d|608;jdv/0|direct|-|none|-|1587263154256|1587263330;adk/;app_device/IOS;pap/JA2015_311210|8.5.8|IOS 13.4.1;Mozilla/5.0 (iPhone; CPU iPhone OS 13_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Accept-Language': 'zh-cn', 'Accept-Encoding': 'gzip, deflate, br', } @@ -475,7 +475,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { @@ -513,7 +513,7 @@ function taskUrl(functionId, friendPin) { 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Referer': 'https://jdjoy.jd.com/pet/index', - 'User-Agent': 'jdapp;iPhone;8.5.8;13.4.1;9b812b59e055cd226fd60ebb5fd0981c4d0d235d;network/wifi;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/0;model/iPhone9,2;addressid/138109592;hasOCPay/0;appBuild/167169;supportBestPay/0;jdSupportDarkMode/0;pv/200.75;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/29;ads/;psn/9b812b59e055cd226fd60ebb5fd0981c4d0d235d|608;jdv/0|direct|-|none|-|1587263154256|1587263330;adk/;app_device/IOS;pap/JA2015_311210|8.5.8|IOS 13.4.1;Mozilla/5.0 (iPhone; CPU iPhone OS 13_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Accept-Language': 'zh-cn', 'Accept-Encoding': 'gzip, deflate, br', } diff --git a/jd_mohe.js b/jd_mohe.js index 3bc8f5c..600221c 100644 --- a/jd_mohe.js +++ b/jd_mohe.js @@ -387,7 +387,7 @@ function lottery() { "content-type": "application/x-www-form-urlencoded", "cookie": cookie, "referer": "https://blindbox.jd.com/", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1 Edg/84.0.4147.125" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.get(options, (err, resp, data) => { @@ -414,7 +414,7 @@ function taskurl(url) { "content-type": "application/x-www-form-urlencoded", "cookie": cookie, "referer": "https://blindbox.jd.com/", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1 Edg/84.0.4147.125" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } } diff --git a/jd_moneyTree.js b/jd_moneyTree.js index ad429db..e299d6b 100644 --- a/jd_moneyTree.js +++ b/jd_moneyTree.js @@ -567,7 +567,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { @@ -632,7 +632,7 @@ function taskurl(function_id, body) { 'Content-Type' : `application/x-www-form-urlencoded;charset=UTF-8`, 'Host' : `ms.jr.jd.com`, 'Connection' : `keep-alive`, - 'User-Agent' : `jdapp;iPhone;9.0.0;13.4.1;e35caf0a69be42084e3c97eef56c3af7b0262d01;network/4g;ADID/F75E8AED-CB48-4EAC-A213-E8CE4018F214;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/1;model/iPhone11,8;addressid/2005183373;hasOCPay/0;appBuild/167237;supportBestPay/0;jdSupportDarkMode/0;pv/1287.19;apprpd/MyJD_GameMain;ref/https%3A%2F%2Fuua.jr.jd.com%2Fuc-fe-wxgrowing%2Fmoneytree%2Findex%2F%3Fchannel%3Dyxhd%26lng%3D113.325843%26lat%3D23.204628%26sid%3D2d98e88cf7d182f60d533476c2ce777w%26un_area%3D19_1601_50258_51885;psq/1;ads/;psn/e35caf0a69be42084e3c97eef56c3af7b0262d01|3485;jdv/0|kong|t_1000170135|tuiguang|notset|1593059927172|1593059927;adk/;app_device/IOS;pap/JA2015_311210|9.0.0|IOS 13.4.1;Mozilla/5.0 (iPhone; CPU iPhone OS 13_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1`, + 'User-Agent' : $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Referer' : `https://uua.jr.jd.com/uc-fe-wxgrowing/moneytree/index/?channel=yxhd&lng=113.325896&lat=23.204600&sid=2d98e88cf7d182f60d533476c2ce777w&un_area=19_1601_50258_51885`, 'Accept-Language' : `zh-cn` } diff --git a/jd_necklace.js b/jd_necklace.js index 10edc5f..781b058 100644 --- a/jd_necklace.js +++ b/jd_necklace.js @@ -1,8 +1,8 @@ /* * @Author: lxk0301 https://github.com/lxk0301 * @Date: 2020-11-20 11:42:03 - * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-20 11:42:03 + * @Last Modified by: lxk0301 + * @Last Modified time: 2020-11-22 23:07:14 */ /* 点点券,可以兑换无门槛红包(1元,5元,10元,100元,部分红包需抢购) @@ -250,7 +250,7 @@ function taskPostUrl(function_id, body = {}) { url: `${JD_API_HOST}?functionId=${function_id}&appid=jd_mp_h5&loginType=2&client=jd_mp_h5&t=${time}&body=${escape(JSON.stringify(body))}`, headers: { "Cookie": cookie, - "User-Agent": `jdapp;iPhone;9.1.0;14.0;e35caf0a69be42084e3c97eef56c3af7b0262d01;network/4g;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/1;model/iPhone11,8;addressid/2005183373;hasOCPay/0;appBuild/167348;supportBestPay/0;jdSupportDarkMode/0;pv/255.2;apprpd/Home_Main;ref/JDMainPageViewController;psq/1;ads/;psn/e35caf0a69be42084e3c97eef56c3af7b0262d01|701;jdv/0|kong|t_2010957099_|jingfen|3b5422e836e74037862fea3dcf1a6802|1600647811440|1600647814;adk/;app_device/IOS;pap/JA2015_311210|9.1.0|IOS 14.0;Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1`, + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), } } } diff --git a/jd_pet.js b/jd_pet.js index cdbd7f4..af0bc9a 100644 --- a/jd_pet.js +++ b/jd_pet.js @@ -544,7 +544,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { @@ -598,7 +598,7 @@ function taskUrl(function_id, body = {}) { url: `${JD_API_HOST}?functionId=${function_id}&appid=wh5&loginWQBiz=pet-town&body=${escape(JSON.stringify(body))}`, headers: { Cookie: cookie, - UserAgent: `Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1`, + UserAgent: $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), } }; } diff --git a/jd_pigPet.js b/jd_pigPet.js index 2578660..034e1a0 100644 --- a/jd_pigPet.js +++ b/jd_pigPet.js @@ -2,7 +2,7 @@ * @Author: lxk0301 https://github.com/lxk0301 * @Date: 2020-11-10 14:07:07 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-20 14:10:19 + * @Last Modified time: 2020-11-22 23:07:16 */ /* 京东金融养猪猪 @@ -523,7 +523,7 @@ function queryMissionReceiveAfterStatus(missionId) { "Cookie": cookie, "Origin": "https://jdjoy.jd.com", "Referer": "https://jdjoy.jd.com/", - "User-Agent": "jdapp;android;8.5.12;9;network/wifi;model/GM1910;addressid/1302541636;aid/ac31e03386ddbec6;oaid/;osVer/28;appBuild/73078;adk/;ads/;pap/JA2015_311210|8.5.12|ANDROID 9;osv/9;pv/117.24;jdv/0|kong|t_1000217905_|jingfen|644e9b005c8542c1ac273da7763971d8|1589905791552|1589905794;ref/com.jingdong.app.mall.WebActivity;partner/oppo;apprpd/Home_Main;Mozilla/5.0 (Linux; Android 9; GM1910 Build/PKQ1.190110.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36 Edg/86.0.4240.111" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.get(options, (err, resp, data) => { @@ -572,7 +572,7 @@ function finishReadMission(missionId) { "Cookie": cookie, "Origin": "https://jdjoy.jd.com", "Referer": "https://jdjoy.jd.com/", - "User-Agent": "jdapp;android;8.5.12;9;network/wifi;model/GM1910;addressid/1302541636;aid/ac31e03386ddbec6;oaid/;osVer/28;appBuild/73078;adk/;ads/;pap/JA2015_311210|8.5.12|ANDROID 9;osv/9;pv/117.24;jdv/0|kong|t_1000217905_|jingfen|644e9b005c8542c1ac273da7763971d8|1589905791552|1589905794;ref/com.jingdong.app.mall.WebActivity;partner/oppo;apprpd/Home_Main;Mozilla/5.0 (Linux; Android 9; GM1910 Build/PKQ1.190110.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36 Edg/86.0.4240.111" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.get(options, (err, resp, data) => { diff --git a/jd_plantBean.js b/jd_plantBean.js index b69b893..2be8f7c 100644 --- a/jd_plantBean.js +++ b/jd_plantBean.js @@ -651,7 +651,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { @@ -711,7 +711,7 @@ function taskUrl(function_id, body) { 'Host': 'api.m.jd.com', 'Accept': '*/*', 'Connection': 'keep-alive', - 'User-Agent': 'JD4iPhone/167249 (iPhone;iOS 13.6.1;Scale/3.00)', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Accept-Language': 'zh-Hans-CN;q=1,en-CN;q=0.9', 'Accept-Encoding': 'gzip, deflate, br', 'Content-Type': "application/x-www-form-urlencoded" diff --git a/jd_redPacket.js b/jd_redPacket.js index 07c8348..efcaae3 100644 --- a/jd_redPacket.js +++ b/jd_redPacket.js @@ -2,7 +2,7 @@ * @Author: lxk0301 * @Date: 2020-11-03 18:12:38 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-10-30 20:37:24 + * @Last Modified time: 2020-11-22 23:07:18 */ /* 京东全民开红包(京东app->主页->领券->抢红包(在底部)) @@ -309,7 +309,7 @@ function taskUrl(function_id, body) { "Cookie": cookie, "Connection": "keep-alive", "Accept": "*/*", - "User-Agent": "jdapp;iPhone;9.0.2;13.5.1;e35caf0a69be42084e3c97eef56c3af7b0262d01;network/wifi;ADID/3B3AD5BC-B5E6-4A08-B32A-030CD805B5DD;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/1;model/iPhone11,8;addressid/;hasOCPay/0;appBuild/167249;supportBestPay/0;jdSupportDarkMode/0;pv/2.76;apprpd/CouponCenter;ref/NewCouponCenterViewController;psq/0;ads/;psn/e35caf0a69be42084e3c97eef56c3af7b0262d01|28;jdv/0|;adk/;app_device/IOS;pap/JA2015_311210|9.0.2|IOS 13.5.1;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Referer": "https://happy.m.jd.com/babelDiy/zjyw/3ugedFa7yA6NhxLN5gw2L3PF9sQC/index.html", "Content-Length": "36", "Accept-Language": "zh-cn" diff --git a/jd_shop.js b/jd_shop.js index b145fae..fe62485 100644 --- a/jd_shop.js +++ b/jd_shop.js @@ -109,7 +109,7 @@ function doTask(taskId) { url: `${JD_API_HOST}`, body: `functionId=takeTask&body=${escape(JSON.stringify(body))}&appid=ld`, headers: { - 'User-Agent': 'JD4iPhone/167169 (iPhone; iOS 13.4.1; Scale/3.00)', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Host': 'api.m.jd.com', 'Content-Type': 'application/x-www-form-urlencoded', 'Cookie': cookie, @@ -138,7 +138,7 @@ function getTask(body = {}) { url: `${JD_API_HOST}`, body: `functionId=queryTaskIndex&body=${escape(JSON.stringify(body))}&appid=ld`, headers: { - 'User-Agent': 'JD4iPhone/167169 (iPhone; iOS 13.4.1; Scale/3.00)', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Host': 'api.m.jd.com', 'Content-Type': 'application/x-www-form-urlencoded', 'Cookie': cookie, @@ -173,7 +173,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { diff --git a/jd_small_home.js b/jd_small_home.js index caad336..9f8448a 100644 --- a/jd_small_home.js +++ b/jd_small_home.js @@ -1,8 +1,8 @@ /* * @Author: lxk0301 https://github.com/lxk0301 * @Date: 2020-11-12 11:42:12 - * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-22 15:42:12 + * @Last Modified by: lxk0301 + * @Last Modified time: 2020-11-22 23:07:19 */ /* 东东小窝 https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_small_home.js @@ -556,7 +556,7 @@ function loginHome() { "Host": "jdhome.m.jd.com", "Origin": "https://jdhome.m.jd.com", "Referer": "https://jdhome.m.jd.com/dist/taro/index.html/", - "User-Agent": "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), } } $.post(options, async (err, resp, data) => { @@ -598,7 +598,7 @@ function login(userName) { "Host": "lkyl.dianpusoft.cn", "Origin": "https://lkyl.dianpusoft.cn", "Referer": "https://h5.m.jd.com/babelDiy/Zeus/2HFSytEAN99VPmMGZ6V4EYWus1x/index.html", - "User-Agent": "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), } } $.post(options, async (err, resp, data) => { @@ -632,7 +632,7 @@ function taskUrl(url, body = {}) { "Host": "lkyl.dianpusoft.cn", "Referer": "https://h5.m.jd.com/babelDiy/Zeus/2HFSytEAN99VPmMGZ6V4EYWus1x/index.html", "token": $.token, - "User-Agent": "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } } diff --git a/jd_speed.js b/jd_speed.js index 322a9ca..45dde7a 100644 --- a/jd_speed.js +++ b/jd_speed.js @@ -96,7 +96,7 @@ function jDSpeedUp(sourceId, doubleKey) { 'Host': 'api.m.jd.com', 'Accept': '*/*', 'Connection': 'keep-alive', - 'User-Agent': 'jdapp;iPhone;8.5.5;13.4;9b812b59e055cd226fd60ebb5fd0981c4d0d235d;network/wifi;supportApplePay/3;hasUPPay/0;pushNoticeIsOpen/0;model/iPhone9,2;addressid/138109592;hasOCPay/0;appBuild/167121;supportBestPay/0;jdSupportDarkMode/0;pv/104.43;apprpd/MyJD_GameMain;ref/MyJdGameEnterPageController;psq/9;ads/;psn/9b812b59e055cd226fd60ebb5fd0981c4d0d235d|272;jdv/0|direct|-|none|-|1583449735697|1583796810;adk/;app_device/IOS;pap/JA2015_311210|8.5.5|IOS 13.4;Mozilla/5.0 (iPhone; CPU iPhone OS 13_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Accept-Language': 'zh-cn', 'Referer': 'https://h5.m.jd.com/babelDiy/Zeus/6yCQo2eDJPbyPXrC3eMCtMWZ9ey/index.html?lng=116.845095&lat=39.957701&sid=ea687233c5e7d226b30940ed7382c5cw&un_area=5_274_49707_49973', 'Accept-Encoding': 'gzip, deflate, br' diff --git a/jd_superMarket.js b/jd_superMarket.js index 0df2a8f..15bfdfb 100644 --- a/jd_superMarket.js +++ b/jd_superMarket.js @@ -1389,7 +1389,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { @@ -1421,7 +1421,7 @@ function taskUrl(function_id, body = {}) { return { url: `${JD_API_HOST}?functionId=${function_id}&appid=jdsupermarket&clientVersion=8.0.0&client=m&body=${escape(JSON.stringify(body))}&t=${Date.now()}`, headers: { - 'User-Agent': 'jdapp;iPhone;9.0.8;13.6;Mozilla/5.0 (iPhone; CPU iPhone OS 13_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Host': 'api.m.jd.com', 'Cookie': cookie, 'Referer': 'https://jdsupermarket.jd.com/game', diff --git a/jd_unsubscribe.js b/jd_unsubscribe.js index 0919fc1..7e04f0a 100644 --- a/jd_unsubscribe.js +++ b/jd_unsubscribe.js @@ -136,7 +136,7 @@ function getFollowGoods() { "Accept": "*/*", "Connection": "keep-alive", "Cookie": cookie, - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Accept-Language": "zh-cn", "Referer": "https://wqs.jd.com/my/fav/goods_fav.shtml?ptag=37146.4.1&sceneval=2&jxsid=15963530166144677970", "Accept-Encoding": "gzip, deflate, br" @@ -163,7 +163,7 @@ function unsubscribeGoodsFun(commId) { "Host": "wq.jd.com", "Accept": "*/*", "Connection": "keep-alive", - 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Referer': 'https://wqs.jd.com/my/fav/goods_fav.shtml?ptag=37146.4.1&sceneval=2&jxsid=15963530166144677970', 'Cookie': cookie, "Accept-Language": "zh-cn", @@ -227,7 +227,7 @@ function getFollowShops() { "Accept": "*/*", "Connection": "keep-alive", "Cookie": cookie, - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Accept-Language": "zh-cn", "Referer": "https://wqs.jd.com/my/fav/shop_fav.shtml?sceneval=2&jxsid=15963530166144677970&ptag=7155.1.9", "Accept-Encoding": "gzip, deflate, br" @@ -253,7 +253,7 @@ function unsubscribeShopsFun(shopId) { "Host": "wq.jd.com", "Accept": "*/*", "Connection": "keep-alive", - 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Referer': 'https://wqs.jd.com/my/fav/shop_fav.shtml?sceneval=2&jxsid=15960121319555534107&ptag=7155.1.9', 'Cookie': cookie, "Accept-Language": "zh-cn", @@ -283,7 +283,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { diff --git a/jd_xtg.js b/jd_xtg.js index ffc150f..4621585 100644 --- a/jd_xtg.js +++ b/jd_xtg.js @@ -278,7 +278,7 @@ function doSupport(shareId) { "Cookie": cookie, "Host": "urvsaggpt.m.jd.com", "Referer": "https://urvsaggpt.m.jd.com/static/index.html", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { @@ -310,7 +310,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { @@ -352,7 +352,7 @@ function getDayPrizeStatus(prizeType, prizeId, status) { "Cookie": cookie, "Host": "urvsaggpt.m.jd.com", "Referer": "https://urvsaggpt.m.jd.com/static/index.html", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { @@ -385,7 +385,7 @@ function taskPostUrl(type, id, status) { "Cookie": cookie, "Host": "urvsaggpt.m.jd.com", "Referer": "https://urvsaggpt.m.jd.com/static/index.html", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } } @@ -411,7 +411,7 @@ function taskUrl(function_id) { "Cookie": cookie, "Host": "urvsaggpt.m.jd.com", "Referer": "https://urvsaggpt.m.jd.com/static/index.html", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } } From ed65ee5e65b9b248e5c2f7e6f8056c1080327de9 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 23 Nov 2020 10:03:04 +0800 Subject: [PATCH 107/290] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89UA=E3=80=82=E6=9B=B4=E6=96=B0=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E5=8F=98=E9=87=8F/secrets=E9=9B=86=E5=90=88=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E8=87=AA=E5=AE=9A=E4=B9=89UA=E3=80=82BoxJs=E6=96=B0?= =?UTF-8?q?=E5=A2=9EUA=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- githubAction.md | 1 + lxk0301.boxjs.json | 89 ++++++++++++---------------------------------- 2 files changed, 24 insertions(+), 66 deletions(-) diff --git a/githubAction.md b/githubAction.md index 2b8f97f..ea59e4a 100644 --- a/githubAction.md +++ b/githubAction.md @@ -77,6 +77,7 @@ | Name | 归属 | 属性 | 说明 | | :---------------------: | :----------: | --------- | ------------------------------------------------------------ | | `JD_COOKIE` | 京东 | 必须 | 京东cookie,多个账号的cookie使用`&`隔开或者换行。具体获取参考[浏览器获取京东cookie教程](https://github.com/lxk0301/jd_scripts/blob/master/backUp/GetJdCookie.md) 或者 [插件获取京东cookie教程](https://github.com/lxk0301/jd_scripts/blob/master/backUp/GetJdCookie2.md) | +| `JD_USER_AGENT` | 京东 | 非必须 | 自定义此库里京东系列脚本的UserAgent,不懂不知不会UserAgent的请不要随意填写内容。具体获取参考此[issue](https://github.com/lxk0301/jd_scripts/issues/127) | | `JD_BEAN_STOP` | 京东 | 非必须 | 自定义延迟签到,单位毫秒. 默认分批并发无延迟. 延迟作用于每个签到接口, 如填入延迟则切换顺序签到(耗时较长),如需填写建议输入数字`1` | | `JD_BEAN_SIGN_STOP_NOTIFY`| 京东 | 非必须 | `jd_bean_sign.js`脚本运行后不推送签到结果通知,默认推送,填`true`表示不发送通知 | | `JD_BEAN_SIGN_NOTIFY_SIMPLE`| 京东 | 非必须 | `jd_bean_sign.js`脚本运行后推送签到结果简洁版通知,默认推送全部签到结果,填`true`表示推送简洁通知,[效果图](./icon/bean_sign_simple.jpg) | diff --git a/lxk0301.boxjs.json b/lxk0301.boxjs.json index 545cb2d..f1b244d 100644 --- a/lxk0301.boxjs.json +++ b/lxk0301.boxjs.json @@ -33,6 +33,28 @@ "repo": "https://github.com/dompling/Script", "script": "https://raw.githubusercontent.com/dompling/Script/master/jd/JD_extra.js" }, + { + "id": "JD_UA", + "name": "自定义京东脚本的UserAgent", + "keys": [ + "JDUA" + ], + "settings": [ + { + "id": "JDUA", + "name": "自定义京东脚本的UserAgent", + "val": "", + "type": "text", + "desc": "不懂不知不会UserAgent的请不要随意填写内容" + } + ], + "author": "@lxk0301", + "repo": "https://github.com/lxk0301/jd_scripts", + "icons": [ + "https://raw.githubusercontent.com/Orz-3/mini/master/jd.png", + "https://raw.githubusercontent.com/Orz-3/task/master/jd.png" + ] + }, { "id": "jd_fruit", "name": "东东农场", @@ -631,16 +653,7 @@ { "id": "jd_SuperMarket", "name": "京小超", - "keys": [ - "jd_supermarket_name", - "jd_supermarket1", - "jd_supermarket2", - "jd_supermarket3", - "j2_supermarket_name", - "jd2_supermarket1", - "jd2_supermarket2", - "jd2_supermarket3" - ], + "keys": [], "settings": [ { "id": "jdSuperMarketNotify", @@ -669,62 +682,6 @@ "val": false, "type": "boolean", "desc": "运行脚本消耗金币进行抽奖,默认抽奖" - }, - { - "id": "jd_supermarket_name", - "name": "京东账号一昵称", - "val": "", - "type": "text", - "desc": "京东账号昵称,用于区分自己的京东账号(非必填,建议多个京东账号使用)" - }, - { - "id": "jd_supermarket1", - "name": "京东账号一互助码1", - "val": "", - "type": "text", - "desc": "京小超商圈互助码" - }, - { - "id": "jd_supermarket2", - "name": "京东账号一互助码2", - "val": "", - "type": "text", - "desc": "京小超商圈互助码" - }, - { - "id": "jd_supermarket3", - "name": "京东账号一互助码3", - "val": "", - "type": "text", - "desc": "京小超商圈互助码" - }, - { - "id": "jd2_supermarket_name", - "name": "京东账号二昵称", - "val": "", - "type": "text", - "desc": "京东账号昵称,用于区分自己的京东账号(非必填,建议多个京东账号使用)" - }, - { - "id": "jd2_supermarket1", - "name": "京东账号二互助码1", - "val": "", - "type": "text", - "desc": "京小超商圈互助码" - }, - { - "id": "jd2_supermarket2", - "name": "京东账号二互助码2", - "val": "", - "type": "text", - "desc": "京小超商圈互助码" - }, - { - "id": "jd2_supermarket3", - "name": "京东账号二互助码3", - "val": "", - "type": "text", - "desc": "京小超商圈互助码" } ], "author": "@lxk0301", From f8dba84cb3f78aef3fd3b74751277ed525c29c09 Mon Sep 17 00:00:00 2001 From: Sirius2s <53803920+Sirius2s@users.noreply.github.com> Date: Mon, 23 Nov 2020 10:08:37 +0800 Subject: [PATCH 108/290] Update index.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 解决云函数部分脚本报错;本地运行选项备用代码更新。 --- index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index 3e7b6c7..e1d82f6 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,4 @@ -'use strict'; +//'use strict'; exports.main_handler = async (event, context, callback) => { try { //如果想在一个定时触发器里面执行多个js文件需要在定时触发器的【附加信息】里面填写对应的名称,用 & 链接 @@ -8,7 +8,9 @@ exports.main_handler = async (event, context, callback) => { var request = require('request'); //1.执行自己上传的js文件 //require('./'+v+'.js') - + //delete require.cache[require.resolve('./'+v+'.js')]; + //require('./'+v+'.js') + //2.执行国内gitee远端js文件如果部署,在国内节点,选择1或2的方式 //request('https://gitee.com/lxk0301/jd_scripts/raw/master/'+v+'.js', function (error, response, body) { // eval(response.body) From cae6d7ad6160261f95a3149a69a6a75b7868f7f1 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 23 Nov 2020 10:31:13 +0800 Subject: [PATCH 109/290] update --- githubAction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/githubAction.md b/githubAction.md index ea59e4a..4f9fe02 100644 --- a/githubAction.md +++ b/githubAction.md @@ -78,7 +78,7 @@ | :---------------------: | :----------: | --------- | ------------------------------------------------------------ | | `JD_COOKIE` | 京东 | 必须 | 京东cookie,多个账号的cookie使用`&`隔开或者换行。具体获取参考[浏览器获取京东cookie教程](https://github.com/lxk0301/jd_scripts/blob/master/backUp/GetJdCookie.md) 或者 [插件获取京东cookie教程](https://github.com/lxk0301/jd_scripts/blob/master/backUp/GetJdCookie2.md) | | `JD_USER_AGENT` | 京东 | 非必须 | 自定义此库里京东系列脚本的UserAgent,不懂不知不会UserAgent的请不要随意填写内容。具体获取参考此[issue](https://github.com/lxk0301/jd_scripts/issues/127) | -| `JD_BEAN_STOP` | 京东 | 非必须 | 自定义延迟签到,单位毫秒. 默认分批并发无延迟. 延迟作用于每个签到接口, 如填入延迟则切换顺序签到(耗时较长),如需填写建议输入数字`1` | +| `JD_BEAN_STOP` | 京东 | 非必须 | jd_bean_sign.js自定义延迟签到,单位毫秒. 默认分批并发无延迟. 延迟作用于每个签到接口, 如填入延迟则切换顺序签到(耗时较长),如需填写建议输入数字`1`,详见[此处说明](https://github.com/NobyDa/Script/blob/master/JD-DailyBonus/JD_DailyBonus.js#L93) | | `JD_BEAN_SIGN_STOP_NOTIFY`| 京东 | 非必须 | `jd_bean_sign.js`脚本运行后不推送签到结果通知,默认推送,填`true`表示不发送通知 | | `JD_BEAN_SIGN_NOTIFY_SIMPLE`| 京东 | 非必须 | `jd_bean_sign.js`脚本运行后推送签到结果简洁版通知,默认推送全部签到结果,填`true`表示推送简洁通知,[效果图](./icon/bean_sign_simple.jpg) | | `JD_DEBUG` | 脚本打印log | 非必须 | 运行脚本时,是否显示log,默认显示。改成false表示不显示,注重隐私的人可以在设置secret -> `Name:JD_DEBUG,Value:false` | From fb6ac21faff09c9fd9865122c6d1792826f74671 Mon Sep 17 00:00:00 2001 From: layne Date: Mon, 23 Nov 2020 11:04:44 +0800 Subject: [PATCH 110/290] =?UTF-8?q?=E6=91=87=E9=92=B1=E6=A0=91=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E9=85=8D=E7=BD=AE=E6=98=AF=E5=90=A6=E5=8D=96=E5=87=BA?= =?UTF-8?q?=E9=87=91=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- githubAction.md | 2 +- jd_moneyTree.js | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/githubAction.md b/githubAction.md index 4f9fe02..5a12edb 100644 --- a/githubAction.md +++ b/githubAction.md @@ -111,7 +111,7 @@ | `SUPERMARKET_SHARECODES`| 京小超商圈互助码 | 非必须 | 填写规则请看 [jdSuperMarketShareCodes.js](https://github.com/lxk0301/jd_scripts/blob/master/jdSuperMarketShareCodes.js) 或见下方[互助码的填写规则](#互助码的填写规则) | | `TG_PROXY_HOST` | Telegram 代理的 IP | 非必须 | 代理类型为 http。例子:http代理 http://127.0.0.1:1080 则填写 127.0.0.1 | | `TG_PROXY_PORT` | Telegram 代理的端口 | 非必须 | 例子:http代理 http://127.0.0.1:1080 则填写 1080 | - +| `MONEY_TREE_SELL_FRUIT` | 摇钱树是否卖出金果 | 非必须 | 控制摇钱树脚本是否自动卖出金果兑换成金币,`true`卖出,`false`不卖出,默认`true` | ##### 互助码的填写规则 diff --git a/jd_moneyTree.js b/jd_moneyTree.js index e299d6b..b2f5cc4 100644 --- a/jd_moneyTree.js +++ b/jd_moneyTree.js @@ -257,6 +257,12 @@ function sell() { } params.riskDeviceParam = JSON.stringify(params.riskDeviceParam);//这一步,不可省略,否则提交会报错(和login接口一样) console.log(`目前金果数量${fruitTotal}`) + if ($.isNode()) { + if (process.env.MONEY_TREE_SELL_FRUIT && process.env.MONEY_TREE_SELL_FRUIT === 'false') { + rs() + return + } + } if (fruitTotal > 380) { request('sell', params).then((sellRes) => { console.log(`卖出金果结果:${JSON.stringify(sellRes)}\n`) From 5594f3348a4cc10376bcb3012c81fb20a760454a Mon Sep 17 00:00:00 2001 From: Sirius2s <53803920+Sirius2s@users.noreply.github.com> Date: Mon, 23 Nov 2020 11:15:04 +0800 Subject: [PATCH 111/290] Update serverless.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1、云函数定时任务增加[东东小窝] 2、[京喜工厂]调整为三次,对应“巡厂”任务时段 3、参照crontab_list微调任务执行时间 --- serverless.yml | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/serverless.yml b/serverless.yml index bfb95d9..223ae39 100644 --- a/serverless.yml +++ b/serverless.yml @@ -16,48 +16,48 @@ inputs: memorySize: 128 # 内存大小,单位MB timeout: 900 # 超时时间,单位秒 events: # 触发器 - - timer: # 签到 # 摇京豆 + - timer: # 签到 parameters: - name: jd_bean_sign_jd_club_lottery + name: jd_bean_sign cronExpression: "0 0 0,12,18 * * * *" enable: true - argument: jd_bean_sign&jd_club_lottery - - timer: # 京小超兑换奖品 + argument: jd_bean_sign + - timer: # 京小超兑换奖品# 摇京豆 parameters: - name: jd_blueCoin + name: jd_blueCoin_jd_club_lottery cronExpression: "0 0 0 * * * *" enable: true - argument: jd_blueCoin - - timer: # 东东农场# 东东萌宠 + argument: jd_blueCoin&jd_club_lottery + - timer: # 东东农场# 东东萌宠# 京喜工厂 parameters: - name: jd_fruit_jd_pet + name: jd_fruit_jd_pet_jd_dreamFactory cronExpression: "0 5 6-18/6 * * * *" enable: true - argument: jd_fruit&jd_pet + argument: jd_fruit&jd_pet&jd_dreamFactory - timer: # 宠汪汪喂食# 宠汪汪# 摇钱树# 京东种豆得豆 parameters: name: jd_joy_feedPets_jd_joy_jd_moneyTree_jd_plantBean cronExpression: "0 15 */1 * * * *" enable: true argument: jd_joy_feedPets&jd_joy&jd_moneyTree&jd_plantBean - - timer: # 宠汪汪积分兑换奖品# 宠汪汪偷好友积分与狗 + - timer: # 宠汪汪积分兑换奖品# 宠汪汪偷好友积分与狗# 点点券 parameters: name: jd_joy_reward_jd_joy_steal_jd_necklace cronExpression: "0 0 0-16/8 * * * *" enable: true argument: jd_joy_reward&jd_joy_steal&jd_necklace - - timer: # 京东全民开红包 # 进店领豆 # 取关京东店铺商品# 京东抽奖机 + - timer: # 京东全民开红包 # 进店领豆 # 取关京东店铺商品# 京东抽奖机# 东东小窝 parameters: - name: jd_redPacket_jd_shop_jd_unsubscribe_jd_lotteryMachine + name: jd_redPacket_jd_shop_jd_unsubscribe_jd_lotteryMachine_jd_small_home cronExpression: "0 10 0 * * * *" enable: true - argument: jd_redPacket&jd_shop&jd_unsubscribe&jd_lotteryMachine - - timer: # 京东天天加速 + argument: jd_redPacket&jd_shop&jd_unsubscribe&jd_lotteryMachine&jd_small_home + - timer: # 京东天天加速# 天天提鹅 parameters: - name: jd_speed + name: jd_speed_jd_daily_egg cronExpression: "0 8 */3 * * * *" enable: true - argument: jd_speed + argument: jd_speed&jd_daily_egg - timer: # 东东超市 parameters: name: jd_superMarket @@ -66,16 +66,16 @@ inputs: argument: jd_superMarket - timer: # 京豆变动通知 # 京东排行榜 parameters: - name: jd_bean_change + name: jd_bean_change_jd_rankingList cronExpression: "0 0 10 * * * *" enable: true argument: jd_bean_change&jd_rankingList - - timer: # 金融养猪# 天天提鹅 + - timer: # 金融养猪 parameters: - name: jd_pigPet_jd_daily_egg_jd_dreamFactory - cronExpression: "0 12 * * * * *" + name: jd_pigPet + cronExpression: "0 12 13 * * * *" enable: true - argument: jd_pigPet&jd_daily_egg&jd_dreamFactory + argument: jd_pigPet environment: # 环境变量 variables: # 环境变量对象 AAA: BBB # 不要删除,用来格式化对齐追加的变量的 From c020257dab1441c0b675e901a2a3a7a805d95f0c Mon Sep 17 00:00:00 2001 From: Sirius2s <53803920+Sirius2s@users.noreply.github.com> Date: Mon, 23 Nov 2020 12:07:24 +0800 Subject: [PATCH 112/290] Update serverless.yml run jd_dreamFactory /1 hours --- serverless.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/serverless.yml b/serverless.yml index 223ae39..3bb684b 100644 --- a/serverless.yml +++ b/serverless.yml @@ -28,18 +28,18 @@ inputs: cronExpression: "0 0 0 * * * *" enable: true argument: jd_blueCoin&jd_club_lottery - - timer: # 东东农场# 东东萌宠# 京喜工厂 + - timer: # 东东农场# 东东萌宠 parameters: - name: jd_fruit_jd_pet_jd_dreamFactory + name: jd_fruit_jd_pet cronExpression: "0 5 6-18/6 * * * *" enable: true - argument: jd_fruit&jd_pet&jd_dreamFactory - - timer: # 宠汪汪喂食# 宠汪汪# 摇钱树# 京东种豆得豆 + argument: jd_fruit&jd_pet + - timer: # 宠汪汪喂食# 宠汪汪# 摇钱树# 京东种豆得豆# 京喜工厂 parameters: - name: jd_joy_feedPets_jd_joy_jd_moneyTree_jd_plantBean + name: jd_joy_feedPets_jd_joy_jd_moneyTree_jd_plantBean_jd_dreamFactory cronExpression: "0 15 */1 * * * *" enable: true - argument: jd_joy_feedPets&jd_joy&jd_moneyTree&jd_plantBean + argument: jd_joy_feedPets&jd_joy&jd_moneyTree&jd_plantBean&jd_dreamFactory - timer: # 宠汪汪积分兑换奖品# 宠汪汪偷好友积分与狗# 点点券 parameters: name: jd_joy_reward_jd_joy_steal_jd_necklace From 3ec7dda6480ddd5263bfcbc15639324ca205514e Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 23 Nov 2020 12:30:06 +0800 Subject: [PATCH 113/290] =?UTF-8?q?=E5=A4=84=E7=90=86=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89UA=E8=A2=AB=E9=81=97=E6=BC=8F=E7=9A=84=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_818.js | 26 +++++++++++++------------- jd_club_lottery.js | 6 +++--- jd_necklace.js | 4 ++-- jd_pigPet.js | 4 ++-- jd_redPacket.js | 4 ++-- jd_small_home.js | 4 ++-- jd_speed.js | 2 +- 7 files changed, 25 insertions(+), 25 deletions(-) diff --git a/jd_818.js b/jd_818.js index 314be49..ae635a2 100644 --- a/jd_818.js +++ b/jd_818.js @@ -2,7 +2,7 @@ * @Author: lxk0301 https://github.com/lxk0301 * @Date: 2020-11-03 09:25:47 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-22 23:07:00 + * @Last Modified time: 2020-11-23 12:27:07 */ /* 京东手机狂欢城活动,每日可获得30+以上京豆(其中20京豆是往期奖励,需第一天参加活动后,第二天才能拿到) @@ -140,7 +140,7 @@ function listMeeting() { 'Accept': 'application/json, text/plain, */*', 'Connection':' keep-alive', 'Cookie': cookie, - 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.14(0x17000e2a) NetType/4G Language/zh_CN', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Accept-Language': 'zh-cn', 'Referer': `https://rdcseason.m.jd.com/?reloadWQPage=t_${Date.now()}`, 'Accept-Encoding': 'gzip, deflate, br' @@ -187,7 +187,7 @@ function listGoods() { 'Accept': 'application/json, text/plain, */*', 'Connection':' keep-alive', 'Cookie': cookie, - 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.14(0x17000e2a) NetType/4G Language/zh_CN', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Accept-Language': 'zh-cn', 'Referer': `https://rdcseason.m.jd.com/?reloadWQPage=t_${Date.now()}`, 'Accept-Encoding': 'gzip, deflate, br' @@ -233,7 +233,7 @@ function shopInfo() { 'Accept': 'application/json, text/plain, */*', 'Connection':' keep-alive', 'Cookie': cookie, - 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.14(0x17000e2a) NetType/4G Language/zh_CN', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Accept-Language': 'zh-cn', 'Referer': `https://rdcseason.m.jd.com/?reloadWQPage=t_${Date.now()}`, 'Accept-Encoding': 'gzip, deflate, br' @@ -286,7 +286,7 @@ function browseGoods(id) { "Accept": "application/json, text/plain, */*", "Connection": "keep-alive", "Cookie": cookie, - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Accept-Language": "zh-cn", "Referer": "https://rdcseason.m.jd.com/", "Accept-Encoding": "gzip, deflate, br" @@ -320,7 +320,7 @@ function getGoodsPrize(id) { "Accept": "application/json, text/plain, */*", "Connection": "keep-alive", "Cookie": cookie, - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Accept-Language": "zh-cn", "Referer": "https://rdcseason.m.jd.com/", "Accept-Encoding": "gzip, deflate, br" @@ -353,7 +353,7 @@ function browseShop(id) { "Accept": "application/json, text/plain, */*", "Connection": "keep-alive", "Cookie": cookie, - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Accept-Language": "zh-cn", "Referer": "https://rdcseason.m.jd.com/", "Accept-Encoding": "gzip, deflate, br" @@ -386,7 +386,7 @@ function getShopPrize(id) { "Accept": "application/json, text/plain, */*", "Connection": "keep-alive", "Cookie": cookie, - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Accept-Language": "zh-cn", "Referer": "https://rdcseason.m.jd.com/", "Accept-Encoding": "gzip, deflate, br" @@ -420,7 +420,7 @@ function browseMeeting(id) { "Accept": "application/json, text/plain, */*", "Connection": "keep-alive", "Cookie": cookie, - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Accept-Language": "zh-cn", "Referer": "https://rdcseason.m.jd.com/", "Accept-Encoding": "gzip, deflate, br" @@ -453,7 +453,7 @@ function getMeetingPrize(id) { "Accept": "application/json, text/plain, */*", "Connection": "keep-alive", "Cookie": cookie, - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Accept-Language": "zh-cn", "Referer": "https://rdcseason.m.jd.com/", "Accept-Encoding": "gzip, deflate, br" @@ -486,7 +486,7 @@ function myRank() { "Accept": "application/json, text/plain, */*", "Connection": "keep-alive", "Cookie": cookie, - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Accept-Language": "zh-cn", "Referer": "https://rdcseason.m.jd.com/", "Accept-Encoding": "gzip, deflate, br" @@ -549,7 +549,7 @@ function saveJbean(id) { "Accept": "application/json, text/plain, */*", "Connection": "keep-alive", "Cookie": cookie, - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Accept-Language": "zh-cn", "Referer": "https://rdcseason.m.jd.com/", "Accept-Encoding": "gzip, deflate, br" @@ -879,7 +879,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { diff --git a/jd_club_lottery.js b/jd_club_lottery.js index b40db49..bf13da4 100644 --- a/jd_club_lottery.js +++ b/jd_club_lottery.js @@ -2,7 +2,7 @@ * @Author: lxk0301 * @Date: 2020-11-03 20:35:07 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-22 23:07:04 + * @Last Modified time: 2020-11-23 12:27:09 摇京豆(京东APP首页-领京豆-摇京豆) 更新时间:2020-10-12 Modified from https://github.com/Zero-S1/JD_tools/blob/master/JD_vvipclub.py @@ -349,7 +349,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { @@ -383,7 +383,7 @@ function taskUrl(function_id, body = {}, appId = 'vip_h5') { headers: { 'Cookie': cookie, 'Host': 'api.m.jd.com', - 'User-Agent': `Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1`, + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Referer': 'https://vip.m.jd.com/newPage/reward/123dd/slideContent?page=focus', } } diff --git a/jd_necklace.js b/jd_necklace.js index 781b058..b641b76 100644 --- a/jd_necklace.js +++ b/jd_necklace.js @@ -2,7 +2,7 @@ * @Author: lxk0301 https://github.com/lxk0301 * @Date: 2020-11-20 11:42:03 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-22 23:07:14 + * @Last Modified time: 2020-11-23 12:27:14 */ /* 点点券,可以兑换无门槛红包(1元,5元,10元,100元,部分红包需抢购) @@ -266,7 +266,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { diff --git a/jd_pigPet.js b/jd_pigPet.js index 034e1a0..e71c979 100644 --- a/jd_pigPet.js +++ b/jd_pigPet.js @@ -2,7 +2,7 @@ * @Author: lxk0301 https://github.com/lxk0301 * @Date: 2020-11-10 14:07:07 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-22 23:07:16 + * @Last Modified time: 2020-11-23 12:27:16 */ /* 京东金融养猪猪 @@ -618,7 +618,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { diff --git a/jd_redPacket.js b/jd_redPacket.js index efcaae3..c72f8b9 100644 --- a/jd_redPacket.js +++ b/jd_redPacket.js @@ -2,7 +2,7 @@ * @Author: lxk0301 * @Date: 2020-11-03 18:12:38 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-22 23:07:18 + * @Last Modified time: 2020-11-23 12:27:18 */ /* 京东全民开红包(京东app->主页->领券->抢红包(在底部)) @@ -268,7 +268,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { diff --git a/jd_small_home.js b/jd_small_home.js index 9f8448a..5d52df1 100644 --- a/jd_small_home.js +++ b/jd_small_home.js @@ -2,7 +2,7 @@ * @Author: lxk0301 https://github.com/lxk0301 * @Date: 2020-11-12 11:42:12 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-22 23:07:19 + * @Last Modified time: 2020-11-23 12:27:20 */ /* 东东小窝 https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_small_home.js @@ -648,7 +648,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { diff --git a/jd_speed.js b/jd_speed.js index 45dde7a..176230f 100644 --- a/jd_speed.js +++ b/jd_speed.js @@ -485,7 +485,7 @@ function TotalBean() { "Connection": "keep-alive", "Cookie": cookie, "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") } } $.post(options, (err, resp, data) => { From e4b63d544a82b59c9b2ad3e3a2bef3dc33697cd9 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 23 Nov 2020 12:40:57 +0800 Subject: [PATCH 114/290] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_blueCoin.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jd_blueCoin.js b/jd_blueCoin.js index 8d61399..34a85a9 100644 --- a/jd_blueCoin.js +++ b/jd_blueCoin.js @@ -1,7 +1,7 @@ /* 京小超兑换奖品 脚本地址:https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_blueCoin.js 感谢@yangtingxiao提供PR -更新时间:2020-11-22 +更新时间:2020-11-23 支持京东多个账号 脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js ======================quantumultx=============== @@ -161,7 +161,7 @@ async function PrizeIndex() { $.beanerr = `${prizeList[0].subTitle}`; return ; } - if ($.totalBlue < $.blueCost) { + if ($.totalBlue > $.blueCost) { await smtg_obtainPrize(prizeId); } else { console.log(`兑换失败,您目前蓝币${$.totalBlue}个,不足以兑换${$.title}所需的${$.blueCost}个`); From bf3e8e243d89abc41045dc819a23f937a1964d7a Mon Sep 17 00:00:00 2001 From: Sirius2s <53803920+Sirius2s@users.noreply.github.com> Date: Mon, 23 Nov 2020 15:24:48 +0800 Subject: [PATCH 115/290] Update index.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 删除多余代码 --- index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/index.js b/index.js index e1d82f6..3dcf74d 100644 --- a/index.js +++ b/index.js @@ -7,7 +7,6 @@ exports.main_handler = async (event, context, callback) => { console.log(v); var request = require('request'); //1.执行自己上传的js文件 - //require('./'+v+'.js') //delete require.cache[require.resolve('./'+v+'.js')]; //require('./'+v+'.js') From 98664c0d6c1da089dc9710f4cefded5d7d36ba3a Mon Sep 17 00:00:00 2001 From: Akira Date: Mon, 23 Nov 2020 15:25:52 +0800 Subject: [PATCH 116/290] =?UTF-8?q?=E6=9B=B4=E6=96=B0readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tencentscf.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tencentscf.md b/tencentscf.md index 394e259..2035838 100644 --- a/tencentscf.md +++ b/tencentscf.md @@ -109,6 +109,13 @@ triggers: > 将SecretId和SecretKey分别配置在仓库的secrets变量里面, TENCENT_SECRET_ID对应你的SecretId的值,TENCENT_SECRET_KEY对应你的SecretKey的值 ## 3. 配置自己需要secrets变量[参考这里](githubAction.md#下方提供使用到的-secrets全集合) +### __重要的说三遍__ +### 如果涉及一个变量配置多个值,如多个cookie,多个取消订阅关键字,去掉里面的 *__[空格]()__* 和 __*[换行]()*__ 使用 `&` 连接 +### 如果涉及一个变量配置多个值,如多个cookie,多个取消订阅关键字,去掉里面的 *__[空格]()__* 和 __*[换行]()*__ 使用 `&` 连接 +### 如果涉及一个变量配置多个值,如多个cookie,多个取消订阅关键字,去掉里面的 *__[空格]()__* 和 __*[换行]()*__ 使用 `&` 连接 +> 排查问题第一步先看自己[腾讯云函数](https://console.cloud.tencent.com/scf/list-detail?rid=5&ns=default&id=scf-jdscript)那边的环境变量跟自己在仓库配置的 `secrets` 是否一致 +![image](https://user-images.githubusercontent.com/6993269/99937191-06617680-2da0-11eb-99ea-033f2c655683.png) + ## 4.执行action workflow进行部署,workflow未报错即部署成功 ![image](https://user-images.githubusercontent.com/6993269/99513289-6a152980-29c5-11eb-9266-3f56ba13d3b2.png) From 00babac10f90bf2f7de895b57278380b212a66f4 Mon Sep 17 00:00:00 2001 From: Sirius2s <53803920+Sirius2s@users.noreply.github.com> Date: Mon, 23 Nov 2020 15:28:21 +0800 Subject: [PATCH 117/290] Update serverless.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复因云函数定时器名称超过60位导致的异常 --- serverless.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/serverless.yml b/serverless.yml index 3bb684b..caff6ff 100644 --- a/serverless.yml +++ b/serverless.yml @@ -36,7 +36,7 @@ inputs: argument: jd_fruit&jd_pet - timer: # 宠汪汪喂食# 宠汪汪# 摇钱树# 京东种豆得豆# 京喜工厂 parameters: - name: jd_joy_feedPets_jd_joy_jd_moneyTree_jd_plantBean_jd_dreamFactory + name: joy_feedPets_joy_moneyTree_plantBean_dreamFactory cronExpression: "0 15 */1 * * * *" enable: true argument: jd_joy_feedPets&jd_joy&jd_moneyTree&jd_plantBean&jd_dreamFactory @@ -48,7 +48,7 @@ inputs: argument: jd_joy_reward&jd_joy_steal&jd_necklace - timer: # 京东全民开红包 # 进店领豆 # 取关京东店铺商品# 京东抽奖机# 东东小窝 parameters: - name: jd_redPacket_jd_shop_jd_unsubscribe_jd_lotteryMachine_jd_small_home + name: redPacket_shop_unsubscribe_lotteryMachine_small_home cronExpression: "0 10 0 * * * *" enable: true argument: jd_redPacket&jd_shop&jd_unsubscribe&jd_lotteryMachine&jd_small_home From 4f28e73248b4d80dd45dacceafe8d168ee10d578 Mon Sep 17 00:00:00 2001 From: Akira Date: Mon, 23 Nov 2020 15:32:20 +0800 Subject: [PATCH 118/290] =?UTF-8?q?=E6=9B=B4=E6=96=B0readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tencentscf.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tencentscf.md b/tencentscf.md index 2035838..30c04ca 100644 --- a/tencentscf.md +++ b/tencentscf.md @@ -124,5 +124,5 @@ triggers: 在左侧栏的日志查询中,可以查看到触发的日志,包括是否打卡成功等。 -![测试函数](https://imgbed-bucket-1251971143.cos.ap-guangzhou.myqcloud.com/./1605263963294-test.png) -## 6. 设置触发器[看这里](iCloud.md#5设置触发器) +![测试函数](https://user-images.githubusercontent.com/6993269/99628053-5a9eea80-2a70-11eb-906f-f1d5ea2bfa3a.png) +## 6. 设置触发器[看这里](iCloud.md#5设置触发器) 或者看这里的[注释说明](https://github.com/iouAkira/jd_scripts/blob/patch-1/index.js#L4) From 528ba52317fb13b8e79fc9149ef7c7974b74f3fe Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 23 Nov 2020 17:56:04 +0800 Subject: [PATCH 119/290] =?UTF-8?q?=E5=81=9A=E5=AE=8C=E4=BB=8A=E5=A4=A9?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=9A=84=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_small_home.js | 99 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 85 insertions(+), 14 deletions(-) diff --git a/jd_small_home.js b/jd_small_home.js index 5d52df1..44738a5 100644 --- a/jd_small_home.js +++ b/jd_small_home.js @@ -27,7 +27,7 @@ https://h5.m.jd.com/babelDiy/Zeus/2HFSytEAN99VPmMGZ6V4EYWus1x/index.html ===============Quantumultx=============== [task_local] #东东小窝 -16 0 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_small_home.js, tag=东东小窝, enabled=true +16 0 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_small_home.js, tag=东东小窝, img-url=https://raw.githubusercontent.com/58xinian/icon/master/ddxw.png enabled=true ================Loon============== [Script] @@ -46,6 +46,7 @@ const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; //IOS等用户直接用NobyDa的jd cookie let cookiesArr = [], cookie = '', message = ''; +let isPurchaseShops = false;//是否一键加购商品到购物车,默认不加购 if ($.isNode()) { Object.keys(jdCookieNode).forEach((item) => { cookiesArr.push(jdCookieNode[item]) @@ -144,13 +145,13 @@ function queryByUserId() { }) }) } -async function doChannelsListTask(taskId) { +async function doChannelsListTask(taskId, taskType) { await queryChannelsList(taskId); for (let item of $.queryChannelsList) { if (item.showOrder !== 1) { await $.wait(1000) await followChannel(taskId, item.id) - await queryDoneTaskRecord(taskId); + await queryDoneTaskRecord(taskId, taskType); } } } @@ -162,12 +163,16 @@ async function helpFriends() { } async function doAllTask() { await queryAllTaskInfo();//获取任务详情列表$.taskList + console.log(` 任务名称 完成进度 `) + for (let item of $.taskList) { + console.log(`${item.ssjjTaskInfo.name} ${item.doneNum}/${item.ssjjTaskInfo.awardOfDayNum || 1}`) + } for (let item of $.taskList) { if (item.ssjjTaskInfo.type === 1) { //邀请好友助力自己 // await createAssistUser('1330186694770339842', item.ssjjTaskInfo.id) $.createAssistUserID = item.ssjjTaskInfo.id; - console.log(`助力您的好友:${item.doneNum}人`) + console.log(`\n\n助力您的好友:${item.doneNum}人`) } if (item.ssjjTaskInfo.type === 2) { //每日打卡 @@ -186,17 +191,35 @@ async function doAllTask() { for (let i = 0; i < new Array(item.ssjjTaskInfo.awardOfDayNum || 1).fill('').length; i++) { await game(item.ssjjTaskInfo.id, item.doneNum); } - // await game(item.ssjjTaskInfo.id, item.doneNum); - // await doAllTask(); } - + if (item.ssjjTaskInfo.type === 4) { + //关注店铺 + if (item.doneNum === item.ssjjTaskInfo.awardOfDayNum) { + console.log(`${item.ssjjTaskInfo.name}已完成[${item.doneNum}/${item.ssjjTaskInfo.awardOfDayNum}]`) + continue + } + for (let i = 0; i < new Array(item.ssjjTaskInfo.awardOfDayNum).fill('').length; i++) { + await followShops('followShops', item.ssjjTaskInfo.id);//一键关注店铺 + await queryDoneTaskRecord(item.ssjjTaskInfo.id, item.ssjjTaskInfo.type); + } + } + if (item.ssjjTaskInfo.type === 5) { + //浏览店铺 + if (item.doneNum === item.ssjjTaskInfo.awardOfDayNum) { + console.log(`${item.ssjjTaskInfo.name}已完成[${item.doneNum}/${item.ssjjTaskInfo.awardOfDayNum}]`) + continue + } + for (let i = 0; i < new Array(item.ssjjTaskInfo.awardOfDayNum).fill('').length; i++) { + await browseChannels('browseShops', item.ssjjTaskInfo.id, item.browseId); + } + } if (item.ssjjTaskInfo.type === 6) { //关注4个频道 if (item.doneNum === item.ssjjTaskInfo.awardOfDayNum) { console.log(`${item.ssjjTaskInfo.name}已完成[${item.doneNum}/${item.ssjjTaskInfo.awardOfDayNum}]`) continue } - await doChannelsListTask(item.ssjjTaskInfo.id) + await doChannelsListTask(item.ssjjTaskInfo.id, item.ssjjTaskInfo.type) } if (item.ssjjTaskInfo.type === 7) { //浏览3个频道 @@ -207,8 +230,28 @@ async function doAllTask() { for (let i = 0; i < new Array(item.ssjjTaskInfo.awardOfDayNum || 1).fill('').length; i++) { await browseChannels('browseChannels', item.ssjjTaskInfo.id, item.browseId); } - // await browseChannels('browseChannels', item.ssjjTaskInfo.id, item.browseId); - // await doAllTask(); + } + isPurchaseShops = $.isNode() ? (process.env.PURCHASE_SHOPS ? process.env.PURCHASE_SHOPS : isPurchaseShops) : ($.getdata("isPurchaseShops") ? $.getdata("isPurchaseShops") : isPurchaseShops); + if (isPurchaseShops && item.ssjjTaskInfo.type === 9) { + //加购商品 + if (item.doneNum === item.ssjjTaskInfo.awardOfDayNum) { + console.log(`${item.ssjjTaskInfo.name}已完成[${item.doneNum}/${item.ssjjTaskInfo.awardOfDayNum}]`) + continue + } + for (let i = 0; i < new Array(item.ssjjTaskInfo.awardOfDayNum).fill('').length; i++) { + await followShops('purchaseCommodities', item.ssjjTaskInfo.id);//一键加购商品 + await queryDoneTaskRecord(item.ssjjTaskInfo.id, item.ssjjTaskInfo.type); + } + } + if (item.ssjjTaskInfo.type === 10) { + //浏览商品 + if (item.doneNum === item.ssjjTaskInfo.awardOfDayNum) { + console.log(`${item.ssjjTaskInfo.name}已完成[${item.doneNum}/${item.ssjjTaskInfo.awardOfDayNum}]`) + continue + } + for (let i = 0; i < new Array(item.ssjjTaskInfo.awardOfDayNum).fill('').length; i++) { + await browseChannels('browseCommodities', item.ssjjTaskInfo.id, item.browseId); + } } if (item.ssjjTaskInfo.type === 11) { //浏览会场 @@ -250,7 +293,8 @@ function queryChannelsList(taskId) { }) }) } -//浏览频道,浏览会场API + +//浏览频道,浏览会场,浏览商品,浏览店铺API function browseChannels(functionID ,taskId, browseId) { return new Promise(resolve => { $.get(taskUrl(`/ssjj-task-record/${functionID}/${taskId}/${browseId}`), (err, resp, data) => { @@ -260,7 +304,7 @@ function browseChannels(functionID ,taskId, browseId) { console.log(`${$.name} API请求失败,请检查网路重试`) } else { if (safeGet(data)) { - console.log(`${functionID === 'browseChannels' ? '浏览频道' : '浏览会场'}`, data) + console.log(`${functionID === 'browseChannels' ? '浏览频道' : functionID === 'browseMeetings' ? '浏览会场' : functionID === 'browseShops' ? '浏览店铺' : '浏览商品'}`, data) data = JSON.parse(data); if (data.head.code === 200) { if (data.body) { @@ -278,9 +322,9 @@ function browseChannels(functionID ,taskId, browseId) { }) } //记录已关注的频道 -function queryDoneTaskRecord(taskId) { +function queryDoneTaskRecord(taskId, taskType) { return new Promise(resolve => { - $.get(taskUrl(`/ssjj-task-record/queryDoneTaskRecord/6/${taskId}`), (err, resp, data) => { + $.get(taskUrl(`/ssjj-task-record/queryDoneTaskRecord/${taskType}/${taskId}`), (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) @@ -303,6 +347,33 @@ function queryDoneTaskRecord(taskId) { }) }) } +//一键关注店铺,一键加购商品API +function followShops(functionID, taskId) { + return new Promise(async resolve => { + $.get(taskUrl(`/ssjj-task-record/${functionID}/${taskId}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.head.code === 200) { + if (data.body) { + console.log(`${functionID === 'followShops'? '一键关注店铺': '一键加购商品'}结果:${data.head.msg}`); + // message += `【限时连连看】成功,活动${awardWoB}WO币\n`; + } + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} //关注频道API function followChannel(taskId, channelId) { return new Promise(async resolve => { From e112b5a1112c87d8061ebd95996448209675fd0a Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 23 Nov 2020 20:03:42 +0800 Subject: [PATCH 120/290] =?UTF-8?q?Update=20jd=5Ffruit.js=20=E5=9B=A0iOS?= =?UTF-8?q?=E6=89=8B=E6=9C=BA=E7=AB=AF=E9=9A=8F=E6=9C=BA=E5=8F=9620?= =?UTF-8?q?=E4=B8=AA=E4=BA=92=E5=8A=A9=E7=A0=81=E8=B7=91=E8=B5=B7=E6=9D=A5?= =?UTF-8?q?=E6=9C=89=E7=82=B9=E8=B4=B9=E6=97=B6=E9=97=B4=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E9=83=A8=E5=88=86=E4=BB=A3=E7=90=86=E8=BD=AF=E4=BB=B6=E5=9B=A0?= =?UTF-8?q?timeout=E6=97=B6=E9=97=B4=E4=B8=8D=E5=A4=9F=EF=BC=8C=E4=B8=8D?= =?UTF-8?q?=E8=BF=90=E8=A1=8C=E7=AC=AC=E4=BA=8C=E4=B8=AA=E4=BA=AC=E4=B8=9C?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=EF=BC=8C=E6=95=85=E7=8E=B0=E6=89=8B=E6=9C=BA?= =?UTF-8?q?=E7=AB=AF=E8=BF=90=E8=A1=8C=E8=84=9A=E6=9C=AC=E5=B7=B2=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E9=9A=8F=E6=9C=BA=E5=8F=965=E4=B8=AA=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_fruit.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jd_fruit.js b/jd_fruit.js index efe3ee2..effe09f 100644 --- a/jd_fruit.js +++ b/jd_fruit.js @@ -37,7 +37,7 @@ let message = '', subTitle = '', option = {}, isFruitFinished = false; const retainWater = 100;//保留水滴大于多少g,默认100g; let jdNotify = false;//是否关闭通知,false打开通知推送,true关闭通知推送 let jdFruitBeanCard = false;//农场使用水滴换豆卡(如果出现限时活动时100g水换20豆,此时比浇水划算,推荐换豆),true表示换豆(不浇水),false表示不换豆(继续浇水),脚本默认是浇水 -let randomCount = 20; +let randomCount = $.isNode() ? 20 : 5; const JD_API_HOST = 'https://api.m.jd.com/client.action'; const urlSchema = `openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/3KSjXqQabiTuD1cJ28QskrpWoBKT/index.html%22%20%7D`; !(async () => { From 61f7a341bc42b2994bb643bd3139851ba725b626 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 23 Nov 2020 20:04:14 +0800 Subject: [PATCH 121/290] Update jd_pet.js --- jd_pet.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jd_pet.js b/jd_pet.js index af0bc9a..19d3888 100644 --- a/jd_pet.js +++ b/jd_pet.js @@ -38,7 +38,7 @@ let message = '', subTitle = '', option = {}; let jdNotify = false;//是否关闭通知,false打开通知推送,true关闭通知推送 const JD_API_HOST = 'https://api.m.jd.com/client.action'; let goodsUrl = '', taskInfoKey = []; -let randomCount = 20; +let randomCount = $.isNode() ? 20 : 5; !(async () => { await requireConfig(); if (!cookiesArr[0]) { From ea11e98cc085ec0b145f70937328128485749a8e Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 23 Nov 2020 20:04:40 +0800 Subject: [PATCH 122/290] Update jd_plantBean.js --- jd_plantBean.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jd_plantBean.js b/jd_plantBean.js index 2be8f7c..5a14323 100644 --- a/jd_plantBean.js +++ b/jd_plantBean.js @@ -42,7 +42,7 @@ let currentRoundId = null;//本期活动id let lastRoundId = null;//上期id let roundList = []; let awardState = '';//上期活动的京豆是否收取 -let randomCount = 20; +let randomCount = $.isNode() ? 20 : 5; !(async () => { await requireConfig(); if (!cookiesArr[0]) { From 58c4f942db5fe4ab3d0ef5f230f55b18e1aea35b Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Mon, 23 Nov 2020 22:58:36 +0800 Subject: [PATCH 123/290] Delete iCloud5.png --- icon/iCloud5.png | Bin 38109 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 icon/iCloud5.png diff --git a/icon/iCloud5.png b/icon/iCloud5.png deleted file mode 100644 index b78f1cdf2ff7ee1c00330d9b8f64fbd69b827e53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38109 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%0A?_uW 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�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 Date: Mon, 23 Nov 2020 22:59:57 +0800 Subject: [PATCH 124/290] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=95=99=E7=A8=8B?= =?UTF-8?q?=E6=89=80=E9=9C=80=E7=9A=84=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加教程所需的图片 --- icon/iCloud5.png | Bin 0 -> 50792 bytes icon/iCloud6.png | Bin 0 -> 52881 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 icon/iCloud5.png create mode 100644 icon/iCloud6.png diff --git a/icon/iCloud5.png b/icon/iCloud5.png new file mode 100644 index 0000000000000000000000000000000000000000..9f11de909778d1f3b618cea123558b90082141b9 GIT binary patch literal 50792 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

!Gr{u)Wn z(*4%Pw+i|V(^+<4oD2q#^_dG;=0Ya{9Aaj>pG^W@SWmi{IS=U@An~E%17tm|mn$*_ zAy)y0jbDyi)yta?v`+0QcB_JFuI8^Ef32RmD(hX*N4d)&>miL8UCZnA#fu}y3T38O z2?9LQZY^{6yK!U9IxGI;_5CwJI@)}rWSU&gxTRi7W=GjEc(EA`_K%cufgzJ{6$R)H zM@85(3Y|M+diLPy=f-izKn5mo2gW$>iz%R#-1Xb~@5-*94;OZ3H?= z^B#sSb+el0FWzsCjA9DHzx(KS{4RG8x+DCD^Kj0*-YbVA`yS}>WfBiNwLU9N7mJL8 z76zNf;7)WB?O4u0cW)4X5Ow4B#Lq-|7XOGaRq#RkbTm6iyyF!q*0Vn6hSIy4S8X}b zT^y@JiS-9*eEvb2xH8)B2H(=PrE4YDR$nVB$DEk~YLFX(*lmY^({DFK72G%P4SW)ZhmNqYUB}XbNl`g+g@hp z(i01X&cvMg<`WJk!g5dQ2!D)pJx;dLu3@RXQ3H53F)Mu6*0Nb6x!vGL-N?7`lHU7w|(1WV37@C&i9=fT$P0dArF>xgvqyW{av|(gQ|niO|oDh z-{`>xYWM#0mdVYI8}vG9l+&m9xi0ob>N}ygs@qb0h(vk`%`jX$9Xe5X#Qvz0>4cnN zvWt#R%D`I?FB!9jkYQhi!YHXsEw@!A&I)k}aLN#t zVDO@L{bgygI+`;O1NTKt&$ZCgheUP|DG>Eop@s(|!x$&E<61+k=dU8zVvbZOLP(TW z9n+WTdyHtG-%po03E&e^yh&UpCM5g?_l*R~b2a5QcM#7l21^p$C(>4B`qP0@=UnmR zUP)%+;5Me&^|T@U!rSjtmzGT(?JR+6I(9YTI1xku;}Cv!r$b6*rC~% zUNiWN*ROw9(1TBhZu(KF9kkj!+g34;8HQ~L`n>36PQ0c7Ax*I}Yb2I+{HA$RwT!4P zImpI+jfI(Lz=MDU5T{Bsz!Gx!9)2zkvWl)Pw&FKh#R?g-YOBeGY5OtFgBwD)WYE6@ zTI7$86=u{F?3f$Kj`Nj)(e_E_Z->ZM>V3(vv?(J|!$#_!7tjay<%ZlvvHhk~Z?rNj z4`AX%0iFr_wF3&*b%#8KV63>V{?2ZP>!2VWjWqLIQa-cvSD%(HxXB5!YR-DLz}X&6vQ)Tqdwjs6J-Zn#?AA7_dGZ+$6n z6^D}QPB`&Kt75?$D1Yt>1Yhup{zS!y{2$Fu&*}sk+p~$m$T~boFnO{OBlQGb4rZ+Y zCkl?JQxL@3#7+7ZjotrIvygoZMSOkP;UgMEeu;0EhD4z~Xp&E`2(M-T=F4^S@$V&u zUq&%?59kE6CoP7EUd;#&F2HVXsn02D7Y~m(0={9!k@{t;$h%|q!~F^~8wro+IBZb#v6WAkp*uqfZym+|JC$~vrO4UiBO-DO|OYziL+M(h+bsGUHyS}q z;Lx-F%QnPjC5_6OzEyUyF}TF~QZ zL}H$(!3qtT3V@Ex!+ecGZpSgotf}w<@x5t)6%$*&N8eI3t`Tp(b=+4BYO0fiFVb3` zoiL9}Z;1yz6p!YKIEZv(_=Gc3db6>ZDiRWy0(Vdh`%u<&l}oLxAO%tw0d!}6sE=)y z<%obK>x_J7(mIpOmZ7S(gpIU-zbEXo5>>Yqqd?&b+p8eg=X$Bv>5ao>Z znR8b_1lEn6{rY9H`97y+G)%acneS2NoB`$jN3JCrjG6M#nozhI(?NW@>Lorug}vaT z13>BjT`zMR$(PV~`#X$fGAxWB#J`yjxPj1TUJ)AXH1pZ(3FrW7$$TPa$(13o`69z4 zvULIJj-HU)37H@y@6f$PHsh!u5kEVLNl1Cun*l~xc^sQDjpTqZrsV^DHYI0!rvZy% zoe)_z(ki|(18$Wvt0qpqDdpV}fKh907D2ShT~Kt*Fkv9#+>UsfDJueyd6nDAzH3y$ z+kyr&7RcD9*BuDnnVhnT<#e+W*>s-+cEBRFcBqk@sbF96{r#>I;ry5D2!Kae1RBAP zMtvky=&md-DWys~)Un-2avkWYUu2v?NO+@r;Ee@WTz=o}7 z2B1Ic#lM&V5o|FRXneNG_Gt&Hc}|KZdP^Lc{=heUz27l+W_yK(_B3Ke0jYH}>BEz* zM3S5Oicqk}D5|o1RU-5o`F26w-oZH@Zn~= z{hI{V?Tz@sNNz9uQWz=i&Uy7C37kxn>Fdm!@-0EaSfILopFtKW3bC=~WFq{CXb9ZlB{Kv894% z+4ksYg|c8}aS;KXJP%(;-tHCO{>_vBZJ<6q|CoM}y_m18U z>M`qrGdfjg0B$`Im>&%gqz74}e`d&sYuJ~Iimv({Npouur%+(KInMhj^8r1rzETH# zbHrxMpK|~vxv0e;Y&~;rRK9Y5wpz9-`htc+7gM-*IB22EQx6tyG;9mmneq~~H9_LS zX%P236BuW@JMS5U{zZK+NIUeNm&!`Jt|q)0^?_)qF=R6L>$|DO(6+8e{pXax3*@Kc z{g`UG+OgRT5u^mvuP{Z#Kc)%0KXh-|XTDvORtg{;RHIVx@vbTwN=SsI=uptP3RTFS zb8G7@0uC||Y>4al6-uTvByn|vnVx0HS#Bh*#Q8M&=a}-OvF?dGt6#U1`fOu zSEw8E`T|OkPEv$Nag{}|b8-jyG}wT^0w#@pMV#@xlNHl9wV8~=z3r#uJRYd74p{ue z+^l7V_TaM_;&yh+<5=&`w@GpcH~77jN4C`)8OjqSV_YRKjrS5i%nUbd2~#)hhc7PX zPCtc_2l<1}UmO%XK^MS%tiuU;8aK(OAg0}}*UKZ*E*T_%?A4ZthUuqkzKOS7orUDeoDcGXe6Z*qjSgCO3gdT?6D5gwztpsjO&KbTFNMoc*`) z@333+-~(-qj`&+`Haes1v&r61R=pLg=lR1^DjH{^8sQxjclDFUVF8SZm-RbA6Gr}D zNaB^;{NydXQ*z?gp@QsPZay95NT%DCxY1uSPGvF*WvbtCOE8b=v9!n z@=>A6_t8%#z{6P;zvz-ct zDdbJf1HJ=%O~-;FJ&pt3bdN2KFE&45t4PD61SZw}2n@ld-Xb&p?B|MXq}*;!YO2{5 zg_#wV!udh4%4XxYqzLdPNKUfH7O%So(D%-;j}`V&G&@BMLV?F zjdMEq_&%<%(aSfQiLb^TfWO92zJ`2&kd_8oZD9ROT2w#gViaqhb}p*q<6iDH-sr$j zI9rl~eB)QAdRghjE%$UWIK!k9`|&43a6AnYrh%NnTaWv*w6~3ZhLj`jV~8&I{v3aM zFZ-rp?l79UPVDf$6Sa#2xvOJ>*S7BTxoieYbI#~K`?$1?vnBabETzfZmfDb&6$EF! zMd-PGAh;Z!BHq=n+eb*NrkL15$zK#^sw`Oqv$;8)q}&DgLPAN_|F$X|Y>{2F zVD@GTCfff3|%W&1dAI8+?Rslatt7jtkScM4(len){7!zM5o#)QL#O4y4%n z%e!X&w|AZ=sBw|jr=T|aDr+G_{KjRDOPP!N8h&WT3L$P1TOp~!1kI_O_GU8gfH=s? zL2rzewZ6|N5;t}orX}j`4A#Jbn^aOZoAk8c6OM%>a^{TuMCalj#Rewf58$i1kiy6x`tMuXE??b5tEc&`usKNKSjxwqXoJ5!+!_XU7m z3Zi>9G@LfBDHl-2N%oBw;p;q{QnOQ>fnJ(!{;9v-conj|Nk$PCOd939HYP6OH_Uw! z+s*}5Qg-ydEDP)v%L)s|h+aL{XA|iA=Q4BB^1}j7oA9z$@0b z4GiqKe?1)3{{xdybw7pl78jPhP}y6w;SZ-THX+9ebv@t=h;u;g2YTz z$Asr_foE~MM7qCw^Q?;jV>M25Ug+ipN%2j_85Rx!nw<-4q;q`T%QW@ztcKpz5+5`3hOiHAj)g?sg z&+I0I79Qz`0@SQf02zb{1N}}vbWViq1jOfIi47jtPpx)eL@&0NH~47DUOD#H*U~ox z12)#k`k1`V;y?0OS*<=S+bO|0ZgdwU=&F}D2W_*m(ArmMH!FHJ@911!d-L?RPtB~O zg?F3rda5bBKWrf8YGsk(^2QdOlAp3;$#2NPYif=qO_{W|XzvhT@DtyLG+bcUdovOMsKZ6roMZ+gSU@t)nOZ^k|;l0!QG129FzNBw+<{5Fjc)Tcd z=)~bIjEs05So{2KYAmnmT+3KC=ufXZ+co=dTU&XB89yB=7+8xdzAUQ*w6LG-peWSF z*}H%}OJ=##+GVWc3?0B=-*)i1+UzQdWj$?-4ci}x@c`TbCSVZ)-OseAxaze`V|1SK z=2EDtnvv4`3r`$3HgS<)*ml!c4YP%o2WJOHz23IDpseAppNlAL#Zo(lRDhk162iE3 zxI5y}+FdOm!9_+6Jf6Z10p81i8pyPz`99@53SyU6z36REk2YiMy)+#7Hkq%Fgb50q z6PPdKFvpSz!SVuUv^kcCKbRA6m&QE^1;(pY*B&@h^^pX_Q~0(skilPz%v>St%H4>e}B1K*Vf7A4AA0b$16)}Ee5s>czENC%7vJ@nz5;NF#f2fSC zFmeKq-d2}d5J1X^S*t@{O}vPR`)(jPL(efEyFS8Qk;!OQp_6=(CxPukyOVU6aX+1{ zEFy8|QLNR?`F<>R)Vr?o#|YyOmfxLwvDKrgU?}-UKdFvKAqu7eF6C2j+%MzTYx3;a zI*a&hMon%$68Ph>QyXc;xq5bh8a<4dwCX5b{IFRPSvO;6>8!^7R|x4A8k2;l(Sw4S zSee!O?-8!M1Lj1S<7IZ+-gdzv`Qo7o-zswW@ET`!K0?q_Q_OnB9=Lx>4xlqh(~at@2&;mhyEb(u7{FjA2RF${HzM#zx{UprK*3EI}^d3SJh zbhKrRtw55a=<7zIV14K6NK@E8lRpS5%c8<^CL1h~s>!Ng-{BSMdKYPR#k#hIH{n4? z4@uAfa-L3o_I%(o&*0J#y0A-fk|0Iq{jSCOryZxLnxMDdWn!ZwVT@R?z7~-y#oz!O zdVWXU9BGw4>+2 zi0U8bX)WWG970=k!bCO$wauE)E_3K_zrX3;A>??Xh@j9}^L;TnsI^^1+@Nv7Z;1sMh(kuUi&3Xa+`;AT4|QXO<7X#-%td zm^m7os{dQ55=N-sJkN&K%4R((Z|LZl0WdMr2wZb$d?J^@ z@MgQ_(dOB+N4`tw3NGcQJNlnxNy^KgIRrewA zcwiEVa|*|l1QPaGdMqMc7TS&lqHY7>t{dRAYj&a&p7_ajS!j+WP^M)UuJ0Gkq2-G`lc!Xamx zNOL+h-L&J7&_|L@% z1_DrP-%VA`-raN~TbX>_&b}P$1Z5=xD3`e=IJ8`J+_e1NdX!^}BvVE2$3m}~5vaEK znnyR6vm<*8j`mmr0rRG0tX53(uyh>tx^F)b25obY-6jRH3)g@q`in+FlS2+?cVN$P zmi=*kN&o>4ZIwpM-Th}}hffvzy&m7VFC$Rc_M~PM+q5I4vvPYg;aIZQCW_kl$B6+A z2&6nuzxuIcI?A#ySSAc|Gvj1*wazCE((jyo{xKT*LN8`a6|m-%x;V`>%t zWZAIS^)pdZcksGSI`g)tDvh~1$qsyOh`j-?>^^tv^YsI@y$)-|tG4(zTk@OB0w!hC zR5>7zVGH#*C*uuCUTw`9B+=(@M855lKy0%}KJ)hDwb=Obh>4-_t?PjyNR&|#Xi@9W zW4_ywxas?kO|*t!y3QTKM*`n|a!P$Ywi%g74>gl?Pj|EKI%+T(D{HXhD#KD=FS|<>DaHK?;6fV<{e(N`UZF|li+yc z6=;aGaAYKjn_Xva0IlRlC)>~W-F=@6v$SN=^v*|3?DhTKuno!W(;G=-F_Ls*Z=D?t~>YpUBOdScW)~jUPU3bwVw_qZl4w z$W2uGndHPd#@B>}zmPa7tV&*My+?N)k_a6V+|c0%1Up$U5=rcY@Ujg4hh8rL-!(bA zHAI(DQ9Uv5<{q%z@b_EWvpD`-7B2*od*`G4jNbatKirUT-y;9R;JRPR8=<)H z0B_0W!tDmC)8{p?ug4KvFf-ZxLNj*u35gpq9K2?E!08A4NesGn6+CrO+CUOm@)!yCpjhMyn+k>0wy=Vz_Z_DSyfS>QjM zF->J@gB1&smSwDcm;8F5Aymh|e44t3zKvjR?lT2ys`ZA~Rb|5BJCKmB>{WnK@sLrY zFKaZ-7IS`r;xWyMuMun235pBd_CrKcgwdOo+~prJB(3z9Hb;a%^P0KZXDWugji+D2 zPn+nF-W%w>AEe4-oBHH1DXkeI`J+}7oKo%vE&A8^p*6|A^*P@OAejh}U;^ht+jk>I zp8P(epASW+daZp0Q+}`HiuipaCSY(^LQIFZ#`3aBCj01az?9P?>2!An*KHuu9VbTJ zyVqx1h|%#`v|%oXivkn`N30|)smlehPBCm4>Pj2U0T(Y#FO%@?EdSUd{>c+|{seuU z%_3bt&opZ_HU{Y~Mc{K&*)TJ{0|DL*OAG5djIHG>Q7j!2yKr?tSMdXMl^^(N(-wgP zbuD9$jm=m?#4n^MumP3jqk$lR_Y4-vx^ zKLCD9JC|5ItC?yx&LCR}w$b(vr|u%EHGpDWDS@FeNM(ChIdK+W@5)c#KHdcpau-B3 z%+5J1Xz>Sxg|nr{&EvDB_zTi2N(=Hb1Xx9drRl3pC{Mb0R6Ku$2oOR_U~U&oXq|h_ z6@=^`-QwTXC=0Kp_yN!MQBs*%ml#dw(aJ}M@({g7sr@JLhI9TAi5pJ*v;?uP)}$V$ z{dcoZ)lYq_xZyRgPUQb?O*QuZbfye^e>bF31K-pHeI#1uhL(MWB0p_*}@sW_*x z8&S%<2mF__eJZ4G98vA`OuC3icu)BmI`&FoAWq`|2o1Ahydu~T?S-$C4_mWpxp_dw1HG{!Fk}$EFeK2V_&mz z3R<6V6KZ?0O6<+f7t>)zsAY&X8_yW_KmAC~$e$I2gMgHQf&pQM#bcE@2^#z3yH&Ar z)^{QIntL5XZvm#(wdb@6q%eB{z)F+lMYTnaJCVAbC8yZ@`SI6#Jb*ahSV~HiaiIA?Y zm)g({O&ec23i&#t(-RP)yjr!wq{BjLW8^J3X>BHQp|BDee2gqNEJ+wrrn@aY8P?Tw z@)!2s2_m^v%>X0r(Ju2Dp)drG`t+$$x@(mez1a)hwbISMWZxgZ|0_HkYOS1YlsX;4 zpFdu(tY5V=-_oahZY*%sEeo@d8+hkr#OjP()G+XY6o8YFo^FPzXbnDVN3&BQUSar{ zt^ZuuwP?4Km_j&BEZ3mv{t<_VS_vf(T?=`?256ppS`7z&wB#ACRF3=JWMO-JTy65S zj)KP=!+V)c;x_YiuJLAtDICepq?!n@_V|W%clq%JOPtJpLZo7&c0L^_e&tg4HhK5# zHTYDLG0P;meqjk0`0{9?ZY&B6sAdq#HbCWM>N4Z1yQ_T3C^*>SZp3@L)dtwD*m5+$ z*RcW9STNa@w?;1d6)GYFr*>M6r8h=?^Iy4IZgbgagihN?-8R7wGfb$5Ic?q&ub6$z z9+(QFb)Az6of;5}4A}qDx$_4s&6poq5ZG)}kZ(76bCAmw?Vy*crTYHERiX1ZO@~Tx zhWYoF*U}BijL_Oc@ZKo|7gLt_F)m`_F(gxE0W8bmGr9lVM-XdE2`77S{>a4j6x5%C zDc*^F;dSPOdse1m`dIiL>ix@S1_vi$G=qzZJROQ7dENHsYnFPtoKZ81|4U)q^(?Y# zV>;w99~(b!n7~_U4*grry`dYth8M>!4OkLjBJ=u$s5*IXB2)il)t2fS3UBjL-mc!A z>)aV!HQue?9sU2>#egyczsG<0oc}JC1HiTqR#z9asbLrh>3Dp&V)UHYg;m#}MJEWj z#|5Hr%R=6%iX0!=#rR`?%S>+zfxb6I3VOGqFuWGwDY3drzZ4Z&ot-FOK}?s#-_5y; z1|tGny6J=){Migrr8AS!<>u#dB!s4yTJvFmisTP4~+7&g;Ey&Vk z*RC#6UoITX>!7Mt#P4r-O3ZuTqAIV{7#RjL@y#4q8A<5@?^+;iQNU3}g+xf^*0&_O zwt<2qATtLM9Kfx#Ii9nS-`IWL)D^&STfl2OWUgdaJ7z>me&_rFEJt_S5W2y!#|EIq z@*_2coEVpG-={_j&X5_vW4|tikOsl^;$-eTm*=Cd-SM*i~9YV$yp>Ni6 zQsfqC&>LQjB)L1NST7PY8Y2j#bV~I-t3d!J`rePp5Bs9+Y4#ueVOV|(8dz;gRQOY#8gss(7?;WHBt5s78kLA3T9y8`5Pm%d-{$p z1b`8LdUhctj^D!dfR?%mh-S~#dq87cN|7*Ja^Oh&CJ(3d>*tXxgmCUyy}m~#x?Ym^ z;J}#ePNeT;07pbR`gJ(;!u4o%D@ZwLT>eiRJmb&HC|$UQfYC4ne=EIQl>j^W$kx*C z)c%?yf1E(VGWHKeDNgjJ7Z-9lJ3-9~V(5UQE|fbj^^$+K8nV4VAtcv(oea3aG%p)X zR`a|c8cWPjqj%I?5wa6;8cG=y1>qX7>0EV#$~w?3WzM34LxYrgSzc-$ci&r}8P+&V z&)Tnky}kJJr?UrnGwWm$w=g_oxsd0;u9B^4RJ&sRxz#m>b`s_S=m@py;4lBR`JL-h zNiAtDxA>a{7+*?aU*dpR`i3Z55T@U}P9`wYm7P!0lBrisZ^9TrEZ^IM97z&`B-&^yyIJI;&F z`BuJXA9^Ix(^bLx)i>h_G`$^%A-VVbOqKsTuo9%O4-{z{g?zCOjmRA>ZdeNDk_gu=ImN|!m?!$emSNq z7vJO5-WouNwm>=n4}~xz^`=e{Sk%{Z_BdGvV+J;tnzQpdmRr9j4IajQ59Py}pW!8P zG)pA+M3u2>`x=-?B&Gj@15)KX`f8#{kE#%eoP*k)sLO;#7rhZQn1iy!Of1Xx=ep49CyIqv$p%plA1n=iTiek*f}e#AfoH%@)28aLohD!) zu%kiLvc8w4T>;PZ-Hpgyic00Z0PZXJ_3pN4`mWme%vjvVh? z8YiyzHq@fS9E3Z7s1ZS=Y+g}8(lWtoO&zO}IZ5q!T%`Eq0${m0gj+~Z6c!F!28;pC zUW6OI_u_UUveEWb`Kx7OE`yYxyX+iYM{w%{AGPr*4SOH6wOi>`6#Gjpz44;CY%M)N zL^*i`@C{U0t!}@jR!PWUZ}z81aJBOAFzT_i~C`a5D%lr(70t zf#a?pp174i>0TVXj0=7!^VRx@UWiLUb7$B*<~>4v_w8q4VyUx89m$^kh5c3DHYgC{ zao`F&T2bwi?nPebNR&g3e$MyQJ*(C`V#6$t#@b0t3ZVZ5R9w9;4Qs@w7JqV^);jUy z(!1nt!zC83ds#-Y{3G1uoaxZh3nnNK(eXSZg~^ijwaC+sZ7v11DLA??s!xR+!G99Fe~kn06Y@lU-Fmn5)q!KOgYL&4AlZ zSQIz@EHMLh(=qZ~!oM`6A?!hI38+mBJ0+XcE#;Z<%rI2Qe^5pY|BB7Fx>h2VYV`5j z{Y>df)u*Ed$^sN_Hlr@2rd)KfO7`q_73vkA1|PG}CTa$B4tg~Sc+3K<>T?=SZG^dU zf1O)EbjNOkbIQa3{FRPY&qCpX_fp2b2S*{3^j@rLW`J=UKTIv|CyzJOW6Zm8ZNOvBA+$s@lCTuuOEl(+Yh7MvaPJuA6RbXm;uT{JYtGh3(>R zWjK^?-dV_dqAJE&1m)GdKD^90yNCVlwghKtukX#%Q#W&+O9cDcti+QL+Df>|>|m3N z#ij2X7WA+<4m51~keto(;&_0A6-ZN<{RHNwtNZkw{k1SfHlf9sYW<<7u1jJ#{;gkw zQGEt{k;#wyWjx(@MUAPIa?37ljn(iJ?opoTIE~=2dLeDK&MD-^(Pdx%Mlin_>yeM$ zC$Hxwy0`lP32(_G5ul~_`B7QZhX|dH>g+z?cv&1fjD0Q^ejtEHtLV{V{h`N)v$CW@ z!-PV!_7e&ghuo{EZMr=zN-Cpg&J!K=vr-1lG=CB}1W9uH+_IYKjb8(5PabG?cv-;C zUhI~IG*CT2=sVe?_SLgaQkHdA=nZHkbY`Q8R%@w~XCl@9&VUtjzN5samMMK1?-%4^)v^|CTVs^Q$!PbHpo zDcuKNQfBJ6w75R3j;nQ-b7m(%KHsui3T98gjY-A=oVCwZ^}aogPI@bP4~SM{RQwDk z9x*m$SUjseBJmeHaS-ds_3%;5fexqZR~>V*2qlbFqzQ%&-tq+ADHBp`L-ERedxGz83phhr+RDgQ{?TO9HNU5es5_-&F$^FN$=5ebV&2)xfIp^ zW-Mb*;4x&(DkBGEBZPk`(GOOy;d*)399Nk#&13LJF&ZMh{r0u_Xwkb$p-wsEu=vsndJ9{ zp#2AFH+x?n7JBrih;zenNExR*grQH;op`J^j5N4+M%J%x!YlbTj3@)5me*cq{U=%i z|6~_2ON8Avu;YNwOz!j^n>>*$woGHHhugRQFAZH!)Vh5*go0J>L%-&2{ew-X&Ucv3 zm|%`V279rtYC-l@#^+(-kg~rLlp=uyrCfG5ec0%K@Fb)D-azfmu+ZGQyES}V$=P)lT%UZOG86GOLO8D)(UA71&4M`}w>Pv2i65F!Ui;l5VK z5`2!y^_&O5G08wWbp!qHWwZd0XRwdgdvwtTK6eSE<>b_QE*(-HG6sP>t;n|y0x!Q1 zC4DF|MpjsigBNMSs5b0v_Y(s8)q#MbYN=CyEK%gZ?K!QJv3t-1RyV~V z=2P_Y!!JkDf_Yosh<#)PtMJKdoWSvz+*3@l?D$wij!CeSCByiBTQR`5LLw!3wuDJ!gJSUJi&=`5xiP%X;z7^g!#) zANt*@GmT?9wT#Q2Sl2E!!7=M?dnD;geohC_j8mRFLX80O_B?ql^=kZ6mpK=V*0jr< z8Jg!`O9W1BC9cccxE#5{0ma)1s;pkzey4sFb$7P6o%N)stohy4$>Im3`AqwBjGF!$EyfbNa$2-m&UhF(WmUH$<#*670Q&8CJR8YBRaCyHE+jM2bs z*h6UK<#->zpbo?@K*w>3vU)Gf9pw4iP$v9J))$k=Lg6=d(E*y?|0^hH_K#Qg-|U6| z3B1EwNfb=NA|Few$GUJEQC*&cTSPMhoMkNNF0Or(@A*bTnYI4iSfn)@6U)MijHzBWq}LwvtJ>ya^INS{m%F{ zI3#`Wnr3th#`O{2;B#Asgn&Ny-Mdz)Ii|jSsFIan06eMM){kc>zIhV9{vbsW2Va;f zEW=GkE6GnH<(7KU8@N+3X(*6@NFArWwZ%nkOZAryr1GSB_m-jesb(xRy{dNcXfLzf z$pXoGf?=-18S5**kyZ07M@q<*FFZ?$(ZYv{m0_5C0~pR<0^MQ(k)%sfW!HM(u;f$3a0^*F10IjcK*4hHvdrD zkOMovYN#IBCpSdpu%aLa#;xHiL5)C~mGQ6NzQz5{zl?}$y2Z5bihy znow7jL-^~Ebz|O`W8#Jb7=yG_+BsG&uKwA1W_mH~mY>y`ELbQTmi5^8e+)n3*RI;p zyxDy)_vE_46ae80D)oeF>V4ZHqP{kn&jxPYM61DHXp8^mz94_P)1Q z_DcK6&zl&o+dPZ%VPR-1EDAfjd9kxz=wj3-2S{b;LrLNe<|FN|d$W0c!vz3?Qu=&M zGCW62;b(vmwn$~r;&zW#-9-0;d$PKRwL`8MS=u?GRd3ZUd~yol>y{s^4nRja)RYp$ zurx|aR#T~O<5}K z%1P+Vouz*y{BfhSr)n*ZUbS;+gbu}-X8xg(AZt|*?CX%K?J~5=?8Jow1C7))v;>zfU&~|?^z3(i?_nKo+A?fS%FpK8Pv54-*^9t^QZ5{0UB58yNblu?z%a@-JSl7g(v9 z?iq`Z8&l?entt33pj&zXIB+I$vyD;5w2Jg@Un^FgXw=~EP_}&aAOMrzfhfXloNIr_ zgn|by4TF>N2U5u9HX*ai3jWI`I&zMk(v|KLBeDCydQzq_$}x@Qtr}!ns_W_gvrhl9Y#t0+j!_QMAbjOM_HZ5>bn$uKBbtHtjm(eG^l0$kT(+LOW z;C6ktn+VCJ$ylQko)S11?Ur*U%RL^A!fpXlQ>Mkjc%_LL=-r`2mLE@pj0(P2x?(q}0%PgkoR z)djSyZ{G;9$b9~KN?E#26fB)-fwxVQtVUX;6=uA4`QmGobm-!x6s3OFzJQ|PmRl(Y zZszVRw*RO^op)k`Rd7@|v@N+=;bck8&9{!3Tn1fNP@uoIlvI>3Gy;EAxuUKuB<~Gu zjzL~b^Si&RzNB)s{6!fQG# zti-gH&ZC-EEtn9$S`$HpP+ZLz+@R~Zbx>ZqJyS78yC}|KK6rC{yi&h%;%J`edreSU z6sPW%f+DI-qL!c1$QgJygV;;PvZ3rUrOj-+V%+IF2}-Z_TsU29&j)>jU2*5{5*W}D z7ir}sH8L4>CP-9}^=9>Ed(^77Ep;A+;?RnS^>g+6WZl%?6s@+aXeM>$0T&C=(K$aq zcRqcIe8KrK%LAA6sQQb%9&Nsb3yk&a?Csgkn`^w}+WNkq{h~ZJi3JPVwG%sfI5REq zcKHI|;;we=rDvg_3)5|K3;mm)r4mxoKI{xRS>pmk!#M8%n`z8O+>6YH7#6wtz^2R@ ztI8B1O!(}N4HJ7z0QZnK!b3P+n4=j)e+G2z&KUkNk=8LO{gIMyU;Xm~Tkb(O1-QH} zz1=rhkrDN1?h^hQsPGqQ@rC)YFSK}NFr(+x!6wJ*r|jmw*R+Njw5)B&)z7I&UHbyo zttDLJVu|_aSoZl{-fAl>y1M?tzzh&uTBo`!k|7!+>qaveWX=IkOr`kNvDr=)2cYI> zVX~bII}argME{;;HQ8}`S{u6J2uuFB=t?h0IAap#9nO6HqyIMJY;$Y<8r|ER%i3q9)W@FttX>kl z*RJ~9ufzq`gbBQ7I;W*Y5}dBS2VE!?w$)?f7&KOR-HNE6bzME{1ot4N&U=yEK0KXm zuxX?-N=G=-rMB1l1#LFtju2E;dQ-Nl3$pZJedP~fkltIP#c$x!ZxBw%#yU8r%Rl^4 zT>jJ4-Mm87p20|%%0zCa^4s0*0&M)?Ez8-Z(1DUh?kRJrzJPhNEs(Bbe~=ALqW?i)HR`Ggv%==3$ECr?U^ ze>)@h+6@W8<#}fjcQqO*r?lUI7_?hJUS+6>q;(N5sD11XguxX(_G3NPqKn!SwKLB5 zeX6tFnB>n8ev&PMLeM^ub`EnjC7=54_yK;DPf;A%T_vCC5N3k8k$OjS?UZ`N<$Uv` zA0|s{t(tZEVru4{v(@oX&6M#^j~@fJnjY~hgR8F!CmV&=+Jxx&A+Q1;+e7SSPqtHw zjNJ(%F}Y6LL=!A;yoFCtN;?#zt>G@RJaTj$#6owCQX`t{SqjoX~r7KqrY}lC(OCW9hG{`otGGQ7nRq%;_mR0olJ)2&XR~zbQ`@oOlShAy}S}Q z%s>@4{UvViNc-2;X1^6j2)zOSDptgQ5>Tj@Pw*RbmIJ9LIH)I0uh%)Tg>?=U zYF>M~ur3qRE}`x(61$^92D5I9uvE8ScC={grJa--yhrYCP1ehY-B9g+vk)VY{5{6b zp;+SLXDAlQ6T2ZW`qE$B?8oX3YlYbq-&BYHEPI`!E zJ+i!=o1e`RljrdCc6OO=&~ZHP8dtNBx~h(N2iT^PmpS6(sRMVuc@e=77*Ea)%e5~X z6FqAUCz4u>XJyDs(0qQ}MQhCgpAeHCrd-zml=cgtw9CAzZ*+AHZLZ4s>}Y*sP=8KW z>@9F&`Z@Mf^b3`%-{qS>4z%Xl3xp+5YO5xXzfm8?q*NKVW`x>j6+eCeDj9N^g%vx3 z8S|&GnK~DgNmhh+h?!4LYbCp8B4|mIP|&l3^ekKh>Qx`5XH+lO2@AL*weShO-+E>( z{RB_=?u1*&;-#Nmu!dq5>t(`HVV~-lli*9NS{1Zo z1_K_PGgOP%MdKvLsl0CDfJxxm#&N^-4X##Ybn)G!&Js@GQ~KnFGOyMGuCAo7j;fiC zap7pCM(Lr$b~Kb?_E`kI-cvRzJD-}3ue-?u)9yxzvDz9z- z`GGO>K+4G!h_q;F@5U(-17G{?t$!8DPZRQNucZbGdsm(!gP)wN--2ld7=G zR(BzXJdBQ3E=>WIl4`{oUgR&oCS*pvFHON3^26M>X2t@l_2q6SUdhM};d6%0hLI^N1219iZJDAoANWIZ{~ly_yo?+A zD#!ROWJ22p2Q2mLO3rbg8j~uz@#Mi5+e}W{>ulv-WO{ubQZKSJS*(G02 z_<>CB9_rWkDxxad)ujx2t4XIP^J+TF@MV+mH3N`A}7$GB%s|3ByvvFk~buI|e zGbF`Qd4A;HM@A7pV2M7ne!Jt_&+oMBaPyQmnSITC?QBJ8{L!0Nkm{p`LP3)RVP2T- zsX5xlUAkkKQq&EmY~Ht(v{cmZEJ(HHM@Cbyw@(UHoZpOj$Abo3HV>!cdfRlYUt`=o zaJAC$@KLbSq>Kly^s3k_{2oI4Fh=2g!>Y{L;>O9J||CnCi{#-^xG`lzX>NV)`QY5*ocM>OLzU z`&dbJ5luzF#NNSlUYkT>*HyT*hEK)+!lj9i-ViOD@0&8+NfVy1{|qU4|E8k@9isZc zUeyn5`>L@p5*e*KVYIuG&`OaJ?q{EM`i{Ix$RyToZDdGI8(t5HVa07*>+PkpgHFDVRmwp5b|ptoP@6L4E0uQgLf>0&|j!k1A00TC{8 zeE-Eel?LLZ4Dg9NU&CCdyV19gT7LUK`PB1kKbKqrC35@=b>ZxyAQwjVN77A5wx4lL zYg=3!3yHlu(01_@&61cJHnT|;?pk)O= z<{t=og)&(6)6&%=7L%lEnM2>%4z{YCMzap-NEQzInBaxdyP2tXTqFbU`1*C!Tit)g z0<;6PumK7IdV@Dw6>fNW$~aRUM$cSubDbMXZ)j#oSh%n!fKz2x=v}D&)w!gaf{~w` z_U((A4PYvWwnRRW?etU=F5!Bxy{5o`;OggBMD)Rp_JxAabIGNKi5^_RFmom$ti4lz zBbae5WH3Iwv$)f3t4a4WYc9Xax^BGZC(T!%_83wUh9a7~LtOhyRch{LLtk{_r`DjR z6!o6{ddWcDQ&3L(G(9emHbG?qN3Bpl^wu9tmq#lfJmAx8Q&ZJgKjQH65MNoU>6L3X zZEZ!6Ul!qDWX*`xLE>_PDPp1d_rY$2Vw2*r{W_p&MD65rcDkhVJ1R0TZ2uL*!e%@3 zSwEBzvPLv1>e6z$hJbcs6iZrZamV*DlU@$G7b>%_;_B~tUBBepT2?J~YghL(LI3ZDlU57vM-Gt-e0e1%t56Ml zsUyA%;eUsPZ@B`VQFwQi*Va7+u+k&ZrFZ?I@o~#YR+QR(V91L`oz`h9cIC*!$#T^V zg{ed12$s%L{NK4yR)P{|8w&i(t1+2TK~r_^(?-k+a$84=B1zPvlM}zNurL!WpKuWb zqb=SN_7o-}eC3v&So-}hUAvxx6yn5!AlLZZ?|v3NuQZzLoeHK}pI7vEjpmN10?wRk z%!)fL(>M{87f l6Uf#w3H!5eyvDvmcyVWSPPl2H@&NcJB_S(bD60GA{{eL~R9yf7 literal 0 HcmV?d00001 diff --git a/icon/iCloud6.png b/icon/iCloud6.png new file mode 100644 index 0000000000000000000000000000000000000000..8210a7f3065eb7ab62d85a06c401d60e2e726f25 GIT binary patch literal 52881 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

h%#|-`pv}^G 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 z z^)1e3$C|=XHAZDwCGTHugLn=UEE!z07vvA8oQ|L@fV&2XP7yHy8&}EF+>quN z3wRQ|9p2>{<8adlnml^JH)%T;;Nodp8$|n*-^gbv!Fg<*3i>I}RlPQ0eXQr2bnPL% z{VhA1K?VQa5}vs`*C-y8@cp}?B|%F)S}6Nivqfo=XrAkF+;`L9_C zp{oh|Jb5VSRWs8XqH{&A(QTMk)AnunR$vywYn$}C&^^}vA2`*5Uu$&a<>uZ$WWFl_ z$fHeJ)S=CB($I7%j(O1>yKK=24D|h-?jMKNy31^1bH1Id9c#zBBm+HFUpPA#A$J4j zZBrPS_j(7+BimpALINj^I?-_2?cmFp(JxOr1A*wE82YYxX7#9yC)d{{%ez_OGFve( zAYcfol`TssDryHxU=K;Fe6Nh#E-tw|g0i1CR~j@giCD;01oU6perpS9TLaCbN0y-c zu2D}B$}eZ`tLiYA$5Utzd9a7GIs}|KiI7nxiR*@pMvU^YeFzgKgtB=S;Jo6XgiRc^ z7I{bA_k6AkK(C3^M|#!nfm6iOJ66@e zj0UiZrgbCJr5`c~V84@W6uPc9?jk-@(5({Fx7i!y_BN-bn7NC*tX$}kFA_C7>zfXDvrS_Asq zvAh4=aR1Zp_vSqGi^>ENDXTdq@$#t)Rm)8^PFs%ypj+c78&s!wU%!9x}tfzu1Ie>D=z+o3}MLh@F#%ugB}mw{4=ZP{Ps2j z{qT1E8>q0El!dMf15zxYjQ**R`Ile2gh7DkO7c=?y1&xE$v!ZR`DY>WZ{O0tJJxpk zDR>#!m;cN*{cF2A06+UL*XY5%ILKiJnWtds7Sn%WKt)oay(2{gGUfrUs~4ywrCwbA zLOWLyH;)0+)(f~a45Xm4r2=?0VU**1l%>hGx`5>?o7EyZZy3?gz6Ns!b4OuXsF#vPRCAy zxH5{}pHxrU<`YMc4)C%Mh|oKmG~0!8eqO80fX?}6lE{5U@F(M zwAe2^{I)ij9)OlKAr==FQbhcJ9*~rfaQy~FlcvW(;5$kXD{Y>^L8{7PE6rjf4SPH7 zo#Ml#0IMYw3=%kB!*R0gFBMcyFo=D?FpG660h^hPPvDoddQXhuq?OovA(c8MWn`{m z{Wj&mmtY5T4TMS%f}O3uVt#C*OK&t|%WXidK!MCMT9IbM-XJ!xJbA~(%=wuV%;1xt zIS>_cIS@Y#oEbkLk!;gz`5#*Q;Zg#=AZVZuKzk>KEG7?gFHr)vShtD|wpwO6KHQZ{ z_(D4ZuH`s%=k%u(M4foA>-2v3oQ2Nf8%iv4;s&ao`Qu$Zsa&mM*|&pODDA+i0aO zoRb^5uCaUFkp=%y68n(=tYX!ecfs8C&Z2ML?(Q>~2!8jOi11x4lfG1r#p3)6z z{H4;}W*7u>pox9CM69?xGEh|@RI9>{-Xg_vr zy5Aa!^e7wfHtr`%(HQ}Mei{mpT&xftqGD<`ZkE4p3Mv+Q+N0a`W91 zX_;Df?<&hqJ;kQ;w?Xs~M^JPcm3G*-g8apjoQ;>w%bP1Ik;CeFf!CPUH*VZ`H%AM# zr~7a1)N+FEqREhbA$Ry?@E4Majj1fwwV9s74Wxzpd2bX+A-`_0MtO}ru==7~pCkE~ z|8OkOe@9g)klNP7iIaU_tyI!C1#LFmwr+F-2}*P@a3wH!x3bt&+E|)vZ85W;5%ke+ zg@PMI8NjNJn%f#ztiIn`v;VkYJvL^kBW?4d$3N~!X;8rv?P|ppG0;)b|>-TA7<>U%EfpwGua0=D#|nHSW6 z-d$J2if#t5w@QI911FpbXZD4ZvX%vS3eZH2i)fYDY##+|1K*d7``%ZOkZ8>xJpMJ1NEz&8#N z*J7PL@XNU;j6n8GZSz9UiOXs9I-^iVCPm`9@(R%DmU~@+Urp6X0K8}xHevHqrAN;LB|T65Rb;GV&_%(}1iq7Z4;a2xR+7_qOQt*rt{eHm?En}#K zArZN6*|huG{BGjp+RFU}Tt*MN5REAtqw+SSOvc&3X~~IN4Zl8#=Q2eTo_W4hlN*a~ zrKIu17zsNf9P_-at%~HCH*_n$()J^6WFi0iKptMBH%}l$*d3E6xudl|l_z=janryb zk1x$W?mE@OBo+NQ_m;O)E`h6`rQ;lIx_c41(FVQEzYgWgzVMQ1g?p4#TAQt4Mgx-N z)Fr}HJ*nLcq6OMmKCPhi-ICiObOYsNs9$cgppBPD_A}3`8I9lLC2687i8{N7)JWV8*&lgy;me3nXEh=n>Ez>)3z&{I5p2MnIuc~6iVV= z4pK@`vT;lcPAoJW<1GEtuK}Z_lKM;%FNpE$T3z8mu1u%_f}Tpo6mXs5yLKmYOdWvVp2`-OR(I-L4~r0~(dh@+ zbYyJKoOaqo!!3*0gJ@dP5lyq9$o_HwmmTIn;@)r~?yY+M(AFs2`}|$E?Vdc&!tu#Z zmi*)72n9tEj=>L(vGv#|9DOnaq3-boC6Y9sPR(7uDf~nf3aW z+=3Xgv0&=11Wb_^X)#@?HwECoYm!^svkEPMJYz0MB}8`Xn$ zi~ilO`bVSM^A&{E3u-0CyQ-B^TqNON@E6I7Dr!RNbN7?CYMSm|Rr6eanVMESiZ=GJ z;Ytcxep>nsN3ulpEL%E|fvpqid1GYY=Ut|=r6C6O)I&*AnnYrZ9-x+tU+%|cK51)E zw<&E?KnV0bqdN6f;Dzuwue-X4o-rytPIpydWBh&=To2WFN@@IcL5sM!_BME}^j-nboF~v`BPHAy(njj? zLf0EYf0P$g$pw!?S`pF@0?Nez>5&+(xdp7}M?B=xlZD7?y`fI?Mi zoT;A5&9t@UOTK86?|0ol&0e%@7p4}~w2;sO^u{dt*N5?47#ovZ(L927I*AZM4Owc6 z+YP58*d0BOk}NSjdp7D5`eyHcTfuuxpJlnyRj5|p$vhe#Tb6rwk(b7g6EgQTK4KGO zx7E0ulb?^O(Nm~-%9b;%1Rvd5eDiFVCEVPvHqzZmvH1&vUmuI&yj~lx2XaxuqIqT4 zuX~T?ed2RoiBfDsTVT3?dudB&f4(%g)rD2JgGUuj>DPfD(565-?#QblgfliT$1+1O zpU-0cT`SLX)(2uv;HXsDK>K8nO+O7jAtcfxb7*VBDQWfMv^DA!HilE4e`Ts_ZK)tM zg;P5@`OcRG+A}mgoFzWcaUQ^9eEVM2X}i1;6_P&dx?Xd0>9!fTww4$~=(A3B zCglCgeOhm!tr=-u-Tt+^JXZSlc&Dtrp@2x7XRU3Z?bx^A!dfd+k$X>{*0H+Ez1+yS z$)6uSFkFm+!;(lfr%#rX9M&&XNUxk>hVj}HA03#}p&LgRC=S(^8EPdwnPcF7Pc2(l z|9QkHbc(Q9jUwF?qxGp1Z$%E>eq$mdI(|BN-l3EKxlFN(wUTSIpsRzy(Zc4yZtKjS z3S_i%_=9~nIz)$Yi{_=T@A~tYdhX{J*(J_rCYVkS;*ZVtEY9pZ4o}IRKj!)%Sagz| z>H`dmWii+k6n`!5;!9q-f$L-Lm#7m)P3c&Jvz(xx-alkXc5`L(vvHUe?BEP5ST; zO!_r@WXoPUZsKRvKCGY;*`mcvWk^PUoUE>U&G~$49Glk`4v##@ZB$nqmQVUVO_D6( z*&QC@-Z)=nUQC{zFlg`_eR5{NX}9J(^|`H_1<+7HWj+b})6d64uAVxX_|*M7hon0z z>MH&7p*HG|Rtint;|huLtbmg(&SA8x)Tiw+Nz)zC7qzv>AILF#Qh+jbG$~n}D5gV0 z7Wba4K6XR%jfMg;KrBTytt9cLCNT!nQ>_k4qM78?m4>nqcQRY(y)>MyQ<~+4`@4!J zIN}iL@Ao&ip2N*w34NPqWE2)XA&KT&n*~9hcvgDtX*l=ljkCdMgz@HeL}2F!v*Xz8 zn_@U}-ou9XZc+UgfTpZ7eJdn(9U8MySrDs}k*O1XbEyxg{w>BnM8hf@ifw~qFFpQjgD@l z=Q0SYwH$bi`%FWYNJ;S8Pn*rhLLTGgclIYFDe1&GfY}AB3Q8U*x5T^LOEY{rD>x-~ zOu*TPkg~g9bTaX75%(kY8ZD`_y}_p15xCZig9&U8Z|Wmo&A&mJn1cYq(5=&D=Ca}{ zuSG#VebH*4*N61<&%s&!0^Gs1H11$AhM}ccdUmU&;8{{j zB5pE#$BX{V1#1uq%5?(@a_rU3R6pVdZF)|uyLkEoVC(&eP)?X++G{J~q7Mf21>v{y0gi)jEclSlj^W!LVigN-p~ z#)mAhZ`p*=Gw!aJu5N@4y)%d@!QsbAWQqOdfIqXS$zbCab;m}$@Op57TPR{|XccA@ z_DI8kZtj=fccv=@eh5e>tG!2(bj}HPV5B^aJBnw!Q4*qqJP0OGOpzzP^<6bPJ`mdbDWLUsSir>Vs(j}KDFTc9~+HE$MIoS#}>xi?jNNMYsU^uV1% zA2z1RT{y`ZzdYQYhbY~Na(@5%L<&u>ti^QN}6MUNV6uHck9)e-y1#X;?{=PG-n@qk?gHK%gJ`>RKyGJK&6ATq zhYhTLx8pwVTk!C8xiEP|eeO32fo@%^j+!`fI;R{%h;K<2YOCT5^f!o4*>?E}|BXe_?*SSb%tZC=Oe?sAI6+Xyh;ywSY9n}*zh z;z}ghzjJH!t+$0u?g1#&B{AXsA7(7uGvu6I?{<5Yz75?cV}OSSmIDYp^KV)S!jQa$ z{~LrIdJ^_OAyNM~kp2HBFZeh3MzI2^2hKJ`_m6uIorcJlII0x_K?T-~Sujhi7^HrG zTb}K60I&`bXudIKZaZMkDW9^(JhdlcufL}G0!D@o2!zb{?@s|*rE!~+kOHCefNq4K zRU%OKU77>qWZE~b;p{2Aq8jc1jv)dikab8%71yk^ZTU@oef{$#YIZ6>mkQEoQdHuJ zc0IoUBIKzs>mHqybR-ZE0W{3S(o{zS#M}ufdEF!jOT&&~eg$aho9#t;LMXI!E5|*c zjc~Wzn+;UsXI{PNe6XoYV2AEaZ0XWr8XrGrs{M98Dqs<5#SkgTOlC% z@gaz&G3K%&fiZL~Xn**Jfp2kVXewxzCBDw7QXMg@iH2W0k@H!QzUaL@y}%SHym5be~+4_$6gUG3y>dH5}Tbnw!}!%4U);1`xlR`V}{oRBVal3K2< zAA42a0R~=%UP^evRtDnX`T+m?dYIx;ABFN|@;Z3=~(Izi!@9asu6MXv}lP0wtI>aBxZLrLbF^piaeftgdv@Mxr zPAT=0R*)Be4QbyMZ!uH)2@u&OzvRh1nF4x~kxJOB}X&e4#l@P6AxZEXcWbVw+h?|J{gv>+l*(D}w#rb{;> zJo63)jzs~!+!*^hz)Gfb5wF6lEY{<0IYH1YA92&X%l*bAbpa2Mk7Tt7eV;0$suX3)T zpsAEo8tb9CQp1}xaOu`KPyrmlBjjm7C^Y#xA}mSbP;hBxHrNo~A4(-vN`uUMx=_%= z7_etumr=i?;2GP8-11yr$25loB;1&z*lJLpCz-I)qM0dMQpH;fkNZ@q&8aKF4JBoA zKr$OL62jrXG7>3-Pty#of?Sum=xP>iZs6G;O;%s)z@L*bY6ty)fSA(vbdGe^JF+A! z-G(AlZ@wcX=Y;f1s?Hg798Ze|PP#bY=d~qU17+`@k0C*kZ-I*tpQk>_ljuVq94dL z8&l$eo!{Q3N+jW3z^1C{-DKIgLu-P#RGnyo-(uoAjDOf|{cvA$jzRD&dU+)KTjR{6Q_KaTy-H3 z9o+EN*uXrY`(~My<|P`B;=ukJ2Ox8NNe^(hm^2p=q>EtQLVwo`pPPTEjI2I7KNYg+ z`)4GVg~N^UH9B4h{M1)1Wh8x1qq8t{UWwKRye0+$6qjYIXjOsKzOIE^gAg)a7ENS_ zZIfp}shOKRUBA^ozxLZks6LD9x#mRWAI0LfuXlH{k~U&AF}A9zJJ~%#SDWl-K?hjmDl&n~<4gBU5ZBfR` zV`%Q21xr4%H|wUfQd1s@?0Qs1{h}}A!|xc38$MS6e6)s@LqM%71ehz1lpPORAkr8- zhMg6xOqS=Tw2Ku}Wdk>g?*Mg`XHD5lYEF_VQP@PoEin2jGesZ{c~>2MA6}Y*WBlA8 zF&S&j=c)1e4ZsBr1Mt^l*V*d%d8=kvIwm6f%jp&?5lD{kxvEJerxAPn1&f0b?g-!qc|^|ZfV zMnwmV{RC(D;2E^)0}7PO=-g8>JJJ{&6#DV$w!d#iuqZpaoF8B zf+BhK(N9&*Uk9HY78Qj4$7|@sw4!P&czu&oNU?O0kyxn%*U|E;)q90y%$beF!UoM6 z{V9bNhyJ+N^LTXJ1^+2s6~Y@~EmZ1{O=5vq;Hmb6L*FLa^zX`D`qfvit)5?gtQF5% zv#niDz0y0byI1vkT;Ue^>ujTVabR}IufM=cz>osa>TZ)mAP|AfwGZTK(qzz*x^B ztLvyfpdqw;W_F=Y%1s9RKZ-D<{he%=kd&kYS(bwL&&EdP)2OI?U{@zPHXTj|+c_5< zBykH@&`0W~T-w08=>ec%kHPVl@rcQ$HZYz;jL^@_VixYzElNv)Q$sMWsg;#WxZo1W zR?j2fs)Ya_eynU8(7K5A;T&#xs~mSfd35wP(2QW3IBDTE$)s-p80uMDrqAe9q^kSO zY{}!Iq*;b1P95+w)wsADx!OBpJ%B`aznPg`&_&RPbAMh(D`LH^&|yI24D;6a+z?}f zP5NFO97xxWu*D95Y&@s5;N?UR4KBS@McSU>G}a=X4sGoqsa}2%PQv0NHP!1DZsh5H5XK**)F6lkhiDY5SU~InTlBU0@iWigDEnmD zWS@toH$B;&-ef3NwKB?8rUs%fsa3(`_}8!dfmjuaSOf({;oC&L(fO&@?qGbA@hM%> z?+BaCnTKg-b>u!6D8IyGsURS&tGhd^JNE)q(n){X4n*b} z1>rdpY?VN}TaoSwCJjjcAk&G|0bj`KKSo1ioG!Fxzep^|%;TMo;ws)kpBTWFmdmyZ zkIgC~3Nns^LufIz!PKR6;{|@7BTmvv#(Ag11cBFdW_O-Pr<4^i9CkZz0j+S~D{+f! zGhk|yWIPK0GO4fB#RSptE0LE~OFh4>bNIUyk~VSp4y71^RFE`l41iiecEZaUqKe=A z%`%f%+!XMk-boAHtjH_3(8^8+4(+K8+nmg}&DEYF#EJbBvHUe#4c7_ZiV=o*&yD z`!2nW7IM`Xie^4+$ZRT+?io<~J{v*1n=O5ZY_K8dotxnAo4yw1kwd!aI94>HIulVI z9VpXVlVmMKDNCTKt*J2WWYZm9Ljt*<2cZowc8u}1w_W{@tx^K_?8}%kg_JV&1{ue} zla~D19z%mcgLD?%urhf78qC+o4lR&BmEav4v|hK~HV(AE`hde~L$wL zGpmLA?0m4tI%UwxwzmUqgV(@(#XYw#YGv9N?(8b{q~35?pl>GsIY};U-(JltPT#xv zTQ+3prIx_)skAS&UFjWdr?}bK**(0^VWmLFOt}$y%Pu5_q2fN=f9B*x+6@s*6Sly2YtrQ5i zxJh0Q#w91iTSLh6q~Y_mRA~Q0LP|ZD^Os0;^e=3x*hbHjafu%5{z`cX)X8UH;n%`! zi;Zp{;+`nNXEs?X_t?fmQXfhpw4gmu=o)y>+joVt?d81mCn#MXr4M~R$E-%QOv5v5 zy^>!)^xg&8*e8v)H=krT7kOk>PoHITTQk&w(sn?Hf2>c`Ms^lGw0E+Gx-``GXPk~K zLCsc-+m#tC+4|6-mQe+Yy?{9@_8jRn%=%t2-i?*-p+h&tB=`1<&t}$sx-yb-u?sIh ztpt9o<+Sb9>W3?Ip%RHtac{T?_ZaHniS)efO^r^F*G{pQF{u>zavh4^pLE@RnMh|t zvop=?-p}O0$vj{@gz6pC8}|s6YW$u4P3zN9;8$TPl90fRl3{(YbCq8C+H!RJVj9Mj z1347TyR~$;OMlFMs8FIEfI Date: Mon, 23 Nov 2020 23:07:45 +0800 Subject: [PATCH 125/290] Update iCloud.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新云函数教程 --- iCloud.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/iCloud.md b/iCloud.md index 64ac846..4066d16 100644 --- a/iCloud.md +++ b/iCloud.md @@ -74,7 +74,10 @@ exports.main_handler = async (event, context, callback) => { [![B20KxI.png](https://s1.ax1x.com/2020/11/05/B20KxI.png)](https://imgchr.com/i/B20KxI) [![BRCG0H.png](https://s1.ax1x.com/2020/11/05/BRCG0H.png)](https://imgchr.com/i/BRCG0H) -**注意:方案一与方案二不能混合到同一个index.js文件中使用,同一个仓库下,二者只能选择其一。感谢[issues#115](https://github.com/lxk0301/jd_scripts/issues/115)中的解决方案,目前云函数连续测试已经可以规避热启动问题了** +**注意:**
+Ⅰ方案一与方案二不能混合到同一个index.js文件中使用,同一个仓库下,二者只能选择其一。
+Ⅱ感谢[issues#115](https://github.com/lxk0301/jd_scripts/issues/115)中的解决方案,目前云函数连续测试已经可以规避热启动问题了。
+Ⅲ在确保完全按照本教程设置的情况下测试云函数运行情况,对于部分人运行日志中出现某些脚本运行失败其他正常,并且错误提示带有strict字样的,请自行删除index.js中的```'use strict';```,再做测试
**增加cookie** @@ -131,7 +134,11 @@ let CookieJDs = [ ![BcGvM4.png](https://s1.ax1x.com/2020/11/04/BcGvM4.png) -![UTOOLS1604471299130.png](https://img01.sogoucdn.com/app/a/100520146/f8d70ea4f8e08d9e87ec8c13474f22c3) +创建触发器 + +![iCloud6](./icon/iCloud6.png) + +触发方式默认“**定时触发**”,定时任务名称随便起个名字,触发周期根据自己需要自行设置。 想进阶使用触发器的自行查看本文中方案一和方案二中的说明 @@ -140,7 +147,8 @@ let CookieJDs = [ [Corn文档](https://cloud.tencent.com/document/product/583/9708#cron-.E8.A1.A8.E8.BE.BE.E5.BC.8F) -目前repo中按照每个脚本一个定时器的方式设置到云函数中,大约需要触发器10多个,由于云函数触发器限制最多10个,需要对触发器进行整合,整合后触发器共8个,以下设置仅供参考
+目前repo中按照每个脚本一个定时器的方式设置到云函数中,大约需要触发器10多个,由于云函数触发器限制最多10个,需要对触发器进行整合,整合后触发器保持在10个以内,以下设置仅供参考
+ ![iCloud5](./icon/iCloud5.png) 点击提交,所有流程就结束了。 From 24f23bfa07a043ba651e259f47677284e61cff3a Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Tue, 24 Nov 2020 10:16:50 +0800 Subject: [PATCH 126/290] update --- docker/crontab_list.sh | 4 ++-- docker/crontab_list_ts.sh | 4 ++-- jd_small_home.js | 45 +++++++++++++++++++++++++++++++++++---- jd_superMarket.js | 4 +++- 4 files changed, 48 insertions(+), 9 deletions(-) diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index 3367232..9affe99 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -50,7 +50,7 @@ # 京东排行榜 11 9 * * * node /scripts/jd_rankingList.js >> /scripts/logs/jd_rankingList.log 2>&1 # 天天提鹅 -18 */3 * * * node /scripts/jd_daily_egg.js >> /scripts/logs/jd_daily_egg.log 2>&1 +18 * * * * node /scripts/jd_daily_egg.js >> /scripts/logs/jd_daily_egg.log 2>&1 # 金融养猪 12 13 * * * node /scripts/jd_pigPet.js >> /scripts/logs/jd_pigPet.log 2>&1 # 点点券 @@ -58,4 +58,4 @@ # 京喜工厂 20 * * * * node /scripts/jd_dreamFactory.js >> /scripts/logs/jd_dreamFactory.log 2>&1 # 东东小窝 -16 0 * * * node /scripts/jd_small_home.js >> /scripts/logs/jd_small_home.log 2>&1 \ No newline at end of file +16 6 * * * node /scripts/jd_small_home.js >> /scripts/logs/jd_small_home.log 2>&1 \ No newline at end of file diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index d9d6091..d329368 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -50,7 +50,7 @@ # 京东排行榜 11 9 * * * node /scripts/jd_rankingList.js |ts >> /scripts/logs/jd_rankingList.log 2>&1 # 天天提鹅 -18 */3 * * * node /scripts/jd_daily_egg.js |ts >> /scripts/logs/jd_daily_egg.log 2>&1 +18 * * * * node /scripts/jd_daily_egg.js |ts >> /scripts/logs/jd_daily_egg.log 2>&1 # 金融养猪 12 * * * * node /scripts/jd_pigPet.js |ts >> /scripts/logs/jd_pigPet.log 2>&1 # 点点券 @@ -58,4 +58,4 @@ # 京喜工厂 20 * * * * node /scripts/jd_dreamFactory.js |ts >> /scripts/logs/jd_dreamFactory.log 2>&1 # 东东小窝 -16 0 * * * node /scripts/jd_small_home.js |ts >> /scripts/logs/jd_small_home.log 2>&1 \ No newline at end of file +16 6 * * * node /scripts/jd_small_home.js |ts >> /scripts/logs/jd_small_home.log 2>&1 \ No newline at end of file diff --git a/jd_small_home.js b/jd_small_home.js index 44738a5..0386d08 100644 --- a/jd_small_home.js +++ b/jd_small_home.js @@ -57,7 +57,7 @@ if ($.isNode()) { } const JD_API_HOST = 'https://lkyl.dianpusoft.cn/api'; -const inviteCodes = ['1330186694770339842', '1330185661529935874']; + !(async () => { if (!cookiesArr[0]) { $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); @@ -156,7 +156,9 @@ async function doChannelsListTask(taskId, taskType) { } } async function helpFriends() { - for (let item of inviteCodes) { + await updateInviteCode(); + if (!$.updatePkActivityIdRes) await updateInviteCodeCDN(); + for (let item of $.inviteCodes.inviteCode) { if (!item) continue await createAssistUser(item, $.createAssistUserID || "1318106976846299138"); } @@ -165,7 +167,7 @@ async function doAllTask() { await queryAllTaskInfo();//获取任务详情列表$.taskList console.log(` 任务名称 完成进度 `) for (let item of $.taskList) { - console.log(`${item.ssjjTaskInfo.name} ${item.doneNum}/${item.ssjjTaskInfo.awardOfDayNum || 1}`) + console.log(`${item.ssjjTaskInfo.name} ${item.doneNum}/${item.ssjjTaskInfo.awardOfDayNum || (item.ssjjTaskInfo.type === 1 ? 4: 1)}`) } for (let item of $.taskList) { if (item.ssjjTaskInfo.type === 1) { @@ -413,7 +415,7 @@ function createInviteUser() { if (data.head.code === 200) { if (data.body) { if (data.body.id) { - console.log(`\n您的${$.name}shareCode:【${data.body.id}】\n`); + console.log(`\n您的${$.name}shareCode(每天都是变化的):【${data.body.id}】\n`); $.shareCode = data.body.id; } } @@ -691,6 +693,41 @@ function login(userName) { }) }) } +function updateInviteCode(url = 'https://raw.githubusercontent.com/lxk0301/updateTeam/master/jd_updateSmallHomeInviteCode.json') { + return new Promise(resolve => { + $.get({url}, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + } else { + $.inviteCodes = JSON.parse(data); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function updateInviteCodeCDN(url = 'https://cdn.jsdelivr.net/gh/lxk0301/updateTeam@master/jd_updateSmallHomeInviteCode.json') { + return new Promise(resolve => { + $.get({url}, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + $.inviteCodes = JSON.parse(data); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} function taskUrl(url, body = {}) { return { url: `${JD_API_HOST}/${url}?body=${escape(body)}`, diff --git a/jd_superMarket.js b/jd_superMarket.js index 15bfdfb..f5a08dc 100644 --- a/jd_superMarket.js +++ b/jd_superMarket.js @@ -2,7 +2,7 @@ * @Author: lxk0301 https://github.com/lxk0301 * @Date: 2020-08-16 18:54:16 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-22 08:22:37 + * @Last Modified time: 2020-11-24 08:22:37 */ /* 东东超市(活动入口:京东APP-》首页-》京东超市-》底部东东超市) @@ -395,6 +395,8 @@ async function businessCircleActivity() { } else if (pkStatus === 3) { console.log(`商圈PK暂停中\n`) } + } else { + console.log(`\n${JSON.stringify(smtg_getTeamPkDetailInfoRes)}\n`) } return const businessCirclePKDetailRes = await smtg_businessCirclePKDetail(); From c6af7a8a3e1d39068154cfc6b2fdc0677cffce29 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 25 Nov 2020 09:55:51 +0800 Subject: [PATCH 127/290] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 30 ++++++++++++++++++++++++------ jd_small_home.js | 2 +- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 3630285..3d45d47 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -16,6 +16,7 @@ const notify = $.isNode() ? require('./sendNotify') : ''; let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 let cookiesArr = [], cookie = ''; +const inviteCodes = ['gB99tYLjvPcEFloDgamoBw==', 'V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=']; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; if ($.isNode()) { Object.keys(jdCookieNode).forEach((item) => { @@ -70,6 +71,7 @@ if ($.isNode()) { async function jdDreamFactory() { ele = 0; await userInfo(); + await helpFriends(inviteCodes) if ($.unActive) return await getUserElectricity(); await taskList(); @@ -282,7 +284,13 @@ function hireAward() { }) }) } - +async function helpFriends(codes) { + for (let code of codes) { + if (code) { + await assistFriend(code); + } + } +} // 帮助用户 function assistFriend(sharepin) { @@ -421,11 +429,16 @@ function stealFriend() { data = data['data']; for (let i = 0; i < data.list.length; ++i) { let pin = data.list[i]['encryptPin']; - getFactoryIdByPin(pin).then(async (facId) => { - await collectElectricity(facId,true) - }).catch(err => { + if (data.list[i]['collectFlag'] === 1) { + //只有collectFlag为1的时候,才能偷取好友电力 + getFactoryIdByPin(pin).then(async (facId) => { + if (facId) await collectElectricity(facId,true) + }).catch(err => { - }) + }) + } else { + console.log(`此好友[${pin}]暂不能被你收取电力`) + } } } resolve() @@ -439,7 +452,12 @@ function getFactoryIdByPin(pin) { $.get(taskurl(url), (err, resp, data) => { data = JSON.parse(data); if (data['ret'] === 0) { - resolve(data['data']['factoryList'][0]['factoryId']) + if (data.data.factoryList) { + //做此判断,有时候返回factoryList为null + resolve(data['data']['factoryList'][0]['factoryId']) + } else { + resolve(); + } } else { reject() } diff --git a/jd_small_home.js b/jd_small_home.js index 0386d08..e991d08 100644 --- a/jd_small_home.js +++ b/jd_small_home.js @@ -148,7 +148,7 @@ function queryByUserId() { async function doChannelsListTask(taskId, taskType) { await queryChannelsList(taskId); for (let item of $.queryChannelsList) { - if (item.showOrder !== 1) { + if (item.showOrder === 1) { await $.wait(1000) await followChannel(taskId, item.id) await queryDoneTaskRecord(taskId, taskType); From cdb10e106f210c7ff2e4abc6fe9d236407755a32 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 25 Nov 2020 11:14:13 +0800 Subject: [PATCH 128/290] update --- backUp/jd_joy_help2.js | 33 ++------------------------------- 1 file changed, 2 insertions(+), 31 deletions(-) diff --git a/backUp/jd_joy_help2.js b/backUp/jd_joy_help2.js index e908adf..67f67bc 100644 --- a/backUp/jd_joy_help2.js +++ b/backUp/jd_joy_help2.js @@ -1,38 +1,9 @@ /** 宠汪汪强制为别人助力(助力一个好友你自己可以获得30积分,一天上限是帮助3个好友,自己获得90积分,不管助力是否成功,对方都会成为你的好友) -更新地址:https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js -更新时间:2020-08-28 -目前提供了304位好友的friendPin供使用。脚本随机从里面获取一个,助力成功后,退出小程序重新点击进去开始助力新的好友 -欢迎大家使用 https://jdjoy.jd.com/pet/getFriends?itemsPerPage=20¤tPage=1 (currentPage=1表示第一页好友,=2表示第二页好友) -提供各自账号列表的friendPin给我 -如果想设置固定好友,那下载下来放到本地使用,可以修改friendPin换好友(助力一好友后,更换一次friendPin里面的内容) -感谢github @Zero-S1提供 -使用方法: -①设置好相应软件的重写 -②从京东APP宠汪汪->领狗粮->邀请好友助力,分享给你小号微信或者微信的文件传输助手。 自己再打开刚才的分享,助力成功后,退出小程序重新进去刚才分享的小程序即可 -③如提示好友人气旺,说明此好友已满了三人助力,需重新进出小程序,重新进入来客有礼-宠汪汪。 -[MITM] -hostname = draw.jdfcloud.com -surge -[Script] -宠汪汪强制为别人助力= type=http-request,pattern=(^https:\/\/draw\.jdfcloud\.com\/\/pet\/enterRoom\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com\/\/pet\/helpFriend\?friendPin),requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js - -圈x -[rewrite_local] -^https:\/\/draw\.jdfcloud\.com\/\/pet\/enterRoom\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com\/\/pet\/helpFriend\?friendPin url script-request-header https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js - - LOON: -[Script] -http-request ^https:\/\/draw\.jdfcloud\.com\/\/pet\/enterRoom\?reqSource=weapp&invitePin=.*+(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?|^https:\/\/draw\.jdfcloud\.com\/\/pet\/helpFriend\?friendPin script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_help.js -, requires-body=true, timeout=10, tag=宠汪汪强制为别人助力 - - -你也可从下面链接拿好友的friendPin(复制链接到有京东ck的浏览器打开即可) - -https://jdjoy.jd.com/pet/getFriends?itemsPerPage=20¤tPage=1 +自用 **/ let url = $request.url -const friendsArr = ["jd_136833sjn","jd_131335rbv","jd_4f044bdd67a3f","jd_176968gwf","jd_136744uks","jd_139559isq","jd_151698nhe","jd_182775ekl","jd_139643ldl","jd_159166edm","jd_157100apb","jd_131843tvo","jd_152554vhs","jd_134283prpb","jd_139988mgfo","jd_133590dtg","jd_63636969e55cb","jd_135565fsg","jd_189071npd","jd_138430zvw","jd_139582hlp","jd_815411720","jd_157642zjc","jd_177753pzb","jd_137918wwl","jd_188675alaf","jd_186718otu","jd_139139bew","jd_180436ggd","jd_52315d900a88a","jd_137689rjx","jd_151106nxb","jd_153879dzp","jd_185840vwq","jd_6194e9ae2cebf","jd_186221rph","jd_153810ylu","jd_189288egp","jd_158791okv","jd_139132erd","jd_159304acn","jd_138899zum","jd_187182akf","jd_136324bjqi","jd_131616wdo","jd_155384iof","jd_186326vtm","jd_zoezhu","jd_135075ahc","jd_138141ill","jd_139773zbm","jd_158416jwas","jd_182328ujc","jd_135999wrw","jd_181325tmk","jd_188254zgv","jd_3712425","jd_153711hhx","jd_176020ylg","jd_136436iuk","jd_180430yxp","jd_159958jmr","jd_155382wjy","jd_135819ueh","jd_132125ish","jd_181196mrhz","jd_138403wnm","jd_181568lrk","jd_155785zic","jd_150712koi","jd_137012gwu","jd_137638siy","jd_183011sph","jd_158224asm","jd_1652541161","jd_137332lgt","jd_181991fgs","jd_189347opuc","jd_181898rlw","jd_136526chs","jd_152616rsg","jd_151410rti","jd_139657jxa","jd_187978fdq","jd_136039csx","jd_186029urn","jd_138681pjy","jd_138204hpd","jd_138246wgz","jd_131177aol","jd_182100ofj","jd_282335851","jd_180210xwj","jd_139400bou","jd_189751xfv","jd_133781olg","jd_155229qbl","jd_dady_a","jd_183890opj","jd_136830xsh","jd_138731rkth","jd_135476kin","jd_3302023","jd_suns932","jd_158958xju","jd_688050784","jd_177467uaf","jd_138950cao","jd_181726mer","jd_138194nvx","jd_2010wwk","jd_139295gxw","jd_173931eeb","jd_189713iss","jd_139894msf","jd_158767vct","jd_159210nml","jd_133230bpy","jd_150771igh","jd_4c9dced2ff301","jd_133025pjb","jd_184751jlf","jd_139379bhj","jd_4900071","jd_137188nnv","jd_153678kxr","jd_6b04334c27336","jd_185217cfd","jd_155892hhe","jd_gxq721","jd_duqing821","jd_185087idh","jd_181528ojs","jd_136778wigm","jd_137903zfgq","jd_134785qjj","jd_159536nii","jd_188492aqx","jd_152226ypk","jd_183815eio","jd_139250pva","jd_151739nli","jd_135202pbl","jd_138201yhi","jd_137642nzw","jd_136600ysr","jd_138220eom","jd_178595cqf","jd_186682kjk","jd_136205srq","jd_138820xtj","jd_152322tkj","jd_150225ipi","jd_133287tje","jd_guba01","jd_187568qui","jd_158753hfl","jd_159816boe","jd_139297psw","jd_138564ibo","jd_188105wjm","jd_180199ekd","jd_134164zgp","jd_181547miy","jd_137030gdm","jd_183197ekf","jd_155187jhm","jd_158363nbzh","jd_151335bxo","jd_139616ywb","jd_156600kfm","jd_352215391","jd_620475312","jd_137997ole","jd_186060jol","jd_7824770b3d748","jd_6b8ba51989353","jd_152712oax","jd_177413lgq","jd_134172lqw","jd_135035dya","jd_135388arv","jd_135013mbs","jd_150897xln","jd_133827ois","jd_133307ffi","jd_138326tzrx","jd_186639utz","jd_Thin779","jd_137173yni","jd_159843fjq","jd_152590bui","jd_180225wpx","jd_187579piq","jd_156758shb","jd_139960nex","jd_138817fsp","jd_181696mtg","jd_137911aamo","jd_135891nxk","jd_177761izc","jd_153337fyq","jd_114559761","jd_Xsgfsj","jd_139965zpe","jd_185459vvx","jd_189214its","jd_151615dmb","jd_138460bsc","jd_138618yqc","jd_187290mur","jd_151318bht","jd_155344pmg","jd_137302fjz","jd_182505eyw","jd_136416nan","jd_151651ncw","jd_137131dya","jd_133471mru","jd_181116wrh","jd_139819ahg","jd_138219eja","jd_136695iqb","jd_158215wjb","jd_107071797","jd_155664eni","jd_182384yok","jd_139611sco","jd_157652hlh","jd_137036vhs","jd_188476ctf","jd_178651ldby","jd_158107bvn","jd_150342aox","jd_150283rncu","jd_131367qhs","jd_133052bem","jd_189317gau","jd_134186sbh","jd_138637pbp","jd_glwang2","jd_189557iiq","jd_138906xlbm","jd_152360yuk","jd_134551yla","jd_135832apl","jd_155448yab","jd_138388paz","jd_1352513187","jd_135464sqz","jd_153298yxo","jd_139208nicz","jd_136608wyr","jd_133053kbn","jd_135034bbx","jd_2133952","jd_187382exm","jd_135063kvb","jd_130844lme","jd_137295ajrg","jd_136810xds","jd_182771zcmi","jd_qwertag13568370gf","jd_189200fiu","jd_159871grf","jd_q105946","jd_182028tnj","jd_153718opj","jd_136850dhv","jd_159162dxb","jd_155267dkh","jd_152763ghe","jd_137104jyuf","jd_136426poa","jd_153920qlg","jd_159715spj","jd_135772nxy","jd_321051","jd_fanm537","jd_137104vuum","jd_177212uid","jd_150312pgc","jd_152569xgz","jd_136994ddl","jd_186223kew","jd_139779ovt","jd_181193dok","jd_189461sem","jd_138245yum","jd_134136kgip","jd_189543hpt","jd_132180xif","jd_182857oox","jd_186245aal","jd_3555750","jd_188502cqy","jd_186910cwu","jd_182829qbch","jd_182297xcme","jd_159708cng","jd_133330ift","jd_131904zwu","jd_182801xpy","jd_150075wud","jd_156874jup","jd_189964qzl","jd_158132cle","jd_sun723","jd_182176mee","jd_188503acjo","jd_158537jdm","jd_159485zvu","jd_180011ejj","jd_135829xzp","jd_136921jpe","jd_152629pmx","jd_189710eck","jd_189397oeo","jd_189592sul","jd_150576adh","jd_159411rzd","jd_134601izn","jd_180053tsa","jd_138226cmgb","jd_183757gbgp","jd_139289bij","jd_lx_a","jd_138562oek","jd_183691xyg","jd_151429qhv","jd_139804lhb","jd_136042bzg","jd_138102ldq","jd_135986nkf","jd_truman","jd_181700kju","jd_151064dhx","jd_150907ahj","jd_186652jxh","jd_418fef3fab12f","jd_159527gqz","jd_138237dcn","jd_134119thub","jd_wrrr0","jd_180498ozp","jd_138531irs","jd_131136fru","jd_185228tkh","jd_131910jzm","jd_151063mhz","jd_58096918e5234","jd_187187rvl","jd_157537jpe","jd_6cebe25400109","jd_1175189","jd_42a743e0b8651","jd_153063yds","jd_177692lwq","jd_152020gzy","jd_138898puv","jd_155525lpff","jd_151123xea","jd_2672389178","jd_178258cff","jd_158191ansh","jd_153280zoy","jd_hl31450","jd_150416qyl","jd_152315mcm","jd_135648axo","jd_4cfd4439d158f","jd_134815cgd","jd_135087ela","jd_180921pam","jd_135610gth","jd_156973ipc","jd_188112gxw","jd_188110wps","jd_173589vmd","jd_135604ngz","jd_158219erd","jd_158449aru","jd_166312hcv","jd_151360sty","jd_183282vqt","jd_139208bac","jd_139276cex","jd_626010305","jd_158181bbe","jd_134339ytdb","jd_139206mkrh","jd_181579uxd","jd_137015nmi","jd_511064173","jd_182924yvbk","jd_137378axvd","jd_157351ype","jd_135161rmsc","jd_188425wum","jd_135315ofn","jd_131160xix","jd_186339gil","jd_150862gpa","jd_132385iqb","jd_138132znr","jd_384180113","jd_1362103","jd_139409xbn","jd_133146qwv","jd_132661jmj","jd_158676edk","jd_133316lld","jd_188714irz","jd_159103vma","jd_131148pkg","jd_152769boe","jd_138846yad","jd_132036kqj","jd_183813dsf","jd_189617vkq","jd_185715pgz","jd_159905euu","jd_134631ehy","jd_176278mmr","jd_5161d94861016","jd_135466mil","jd_177287yyr","jd_139720epl","jd_132037mat","jd_139830uaz","jd_138988jgl","jd_137222hds","jd_177038fca","jd_137096jyx","jd_189081vhx","jd_189985hzh","jd_151927ufa","jd_135145znf","jd_139306rrn","jd_130650d","jd_134321vtn","jd_151515epa","jd_135137jaia","jd_137164augj","jd_130024lmi","jd_139602byf","jd_183766qfi","jd_139705lek","jd_133834qau","jd_180157euk","jd_139111kud","jd_155116pea","jd_159626fgnc","jd_185154lww","jd_177435tuc","jd_137292pwe","jd_177395xqs","jd_133053jus","jd_151339jhx","jd_135087ljd","jd_53b1c5c35ac9a","jd_qiuche549","jd_158164uel","jd_138107wud","jd_199771clu","jd_186753jcs","jd_187150ylk","jd_138974rxt","jd_103433211","jd_185821hfr","jd_139502ycf","jd_137713uyd","jd_187698feo","jd_136089okg","jd_4352325","jd_139639yoj","jd_979798715","jd_131321aoc","jd_185224kzc","jd_151639rszh","jd_185669lfi","jd_lideguang_2011","jd_138725hyc","jd_qaa011","jd_135928ucx","jd_649f9eae0be6c","jd_155229vlt","jd_139885sgt","jd_136220wqh","jd_130741cki","jd_151611ebv","jd_189756rue","jd_5e95dcfd762f4","jd_6261731","jd_135495gbf","jd_150042iil","jd_137894frb","jd_135873xqmi","jd_138593nkp","jd_175412852","jd_139690dad","jd_43a2e9c6537f8","jd_138175wuk","jd_131716dfh","jd_138556pnn","jd_5020276315","jd_177316iqo","jd_181375rvj","jd_229003983","jd_180789bug","jd_150682yxz","jd_152181wlw","jd_224275759","jd_136102svi","jd_9929897714","jd_139691wvgh","jd_189305xgc","jd_133211nev","jd_138697wdw","jd_189314rid","jd_182520tcmf","jd_184399ypg","jd_156312gqm","jd_183257kbc","jd_8745170","jd_151758sra","jd_136000dfw","jd_138337tbg","jd_xishuwulu","jd_189shijz","jd_182257jvd","jd_156983msp","jd_316882724","jd_135808jxz","jd_135557shtf","jd_233102237","jd_186099qlx","jd_185263tir","jd_406bfe50a3525","jd_180669zge","jd_6402aba2128d9","jd_181335kmh","jd_137378ult","jd_150022yxf","jd_188540les","jd_133774erh","jd_138784rjl","jd_182817gcd","jd_134724ief","jd_132536dsy","jd_136604veq","jd_189715ich","jd_182876ynp","jd_177737trf","jd_186552tmg","jd_152104bbn","jd_136219qpt","jd_138262kmx","jd_176204injl","jd_183772tnk","jd_152150ixc","jd_139291nono","jd_186430qkb","jd_183182ynu","jd_135980gkl","jd_158520qfph","jd_135592ugy","jd_139445whz","jd_151308una","jd_150849jbh","jd_655789303","jd_136906lqt","jd_156206yfx","jd_137619mem","jd_152667dao","jd_138597bto","jd_189315etn","jd_151132kre","jd_239626183","jd_sdwh1","jd_136817uwz","jd_187119rqc","jd_yzztt","jd_157563ywzn","jd_zran012","jd_178280jig","jd_070889622","jd_132865tfs","jd_137098qlp","jd_159314ahj","jd_135530jsi","jd_156985tlp","jd_182109kiy","jd_183501fyv","jd_151668vpv","jd_138155ahi","jd_zwh082","jd_135647kui","jd_139149ipt","jd_186993pyi","jd_159524eku","jd_135392iff","jd_177019dfk","jd_185008kmg","jd_18259236618"]; +const friendsArr = ["jd_136833sjn","jd_131335rbv","jd_4f044bdd67a3f","jd_176968gwf","jd_136744uks","jd_139559isq","jd_151698nhe","jd_182775ekl","jd_139643ldl","jd_159166edm","jd_157100apb","jd_131843tvo","jd_152554vhs","jd_134283prpb","jd_139988mgfo","jd_133590dtg","jd_63636969e55cb","jd_135565fsg","jd_189071npd","jd_138430zvw","jd_139582hlp","jd_815411720","jd_157642zjc","jd_177753pzb","jd_137918wwl","jd_188675alaf","jd_186718otu","jd_139139bew","jd_180436ggd","jd_52315d900a88a","jd_137689rjx","jd_151106nxb","jd_153879dzp","jd_185840vwq","jd_6194e9ae2cebf","jd_186221rph","jd_153810ylu","jd_189288egp","jd_158791okv","jd_139132erd","jd_159304acn","jd_138899zum","jd_187182akf","jd_136324bjqi","jd_131616wdo","jd_155384iof","jd_186326vtm","jd_zoezhu","jd_135075ahc","jd_138141ill","jd_139773zbm","jd_158416jwas","jd_182328ujc","jd_135999wrw","jd_181325tmk","jd_188254zgv","jd_3712425","jd_153711hhx","jd_176020ylg","jd_136436iuk","jd_180430yxp","jd_159958jmr","jd_155382wjy","jd_135819ueh","jd_132125ish","jd_181196mrhz","jd_138403wnm","jd_181568lrk","jd_155785zic","jd_150712koi","jd_137012gwu","jd_137638siy","jd_183011sph","jd_158224asm","jd_1652541161","jd_137332lgt","jd_181991fgs","jd_189347opuc","jd_181898rlw","jd_136526chs","jd_152616rsg","jd_151410rti","jd_139657jxa","jd_187978fdq","jd_136039csx","jd_186029urn","jd_138681pjy","jd_138204hpd","jd_138246wgz","jd_131177aol","jd_182100ofj","jd_282335851","jd_180210xwj","jd_139400bou","jd_189751xfv","jd_133781olg","jd_155229qbl","jd_dady_a","jd_183890opj","jd_136830xsh","jd_138731rkth","jd_135476kin","jd_3302023","jd_suns932","jd_158958xju","jd_688050784","jd_177467uaf","jd_138950cao","jd_181726mer","jd_138194nvx","jd_2010wwk","jd_139295gxw","jd_173931eeb","jd_189713iss","jd_139894msf","jd_158767vct","jd_159210nml","jd_133230bpy","jd_150771igh","jd_4c9dced2ff301","jd_133025pjb","jd_184751jlf","jd_139379bhj","jd_4900071","jd_137188nnv","jd_153678kxr","jd_6b04334c27336","jd_185217cfd","jd_155892hhe","jd_gxq721","jd_duqing821","jd_185087idh","jd_181528ojs","jd_136778wigm","jd_137903zfgq","jd_134785qjj","jd_159536nii","jd_188492aqx","jd_152226ypk","jd_183815eio","jd_139250pva","jd_151739nli","jd_135202pbl","jd_138201yhi","jd_137642nzw","jd_136600ysr","jd_138220eom","jd_178595cqf","jd_186682kjk","jd_136205srq","jd_138820xtj","jd_152322tkj","jd_150225ipi","jd_133287tje","jd_guba01","jd_187568qui","jd_158753hfl","jd_159816boe","jd_139297psw","jd_138564ibo","jd_188105wjm","jd_180199ekd","jd_134164zgp","jd_181547miy","jd_137030gdm","jd_183197ekf","jd_155187jhm","jd_158363nbzh","jd_151335bxo","jd_139616ywb","jd_156600kfm","jd_352215391","jd_620475312","jd_137997ole","jd_186060jol","jd_7824770b3d748","jd_6b8ba51989353","jd_152712oax","jd_177413lgq","jd_134172lqw","jd_135035dya","jd_135388arv","jd_135013mbs","jd_150897xln","jd_133827ois","jd_133307ffi","jd_138326tzrx","jd_186639utz","jd_Thin779","jd_137173yni","jd_159843fjq","jd_152590bui","jd_180225wpx","jd_187579piq","jd_156758shb","jd_139960nex","jd_138817fsp","jd_181696mtg","jd_137911aamo","jd_135891nxk","jd_177761izc","jd_153337fyq","jd_114559761","jd_Xsgfsj","jd_139965zpe","jd_185459vvx","jd_189214its","jd_151615dmb","jd_138460bsc","jd_138618yqc","jd_187290mur","jd_151318bht","jd_155344pmg","jd_137302fjz","jd_182505eyw","jd_136416nan","jd_151651ncw","jd_137131dya","jd_133471mru","jd_181116wrh","jd_139819ahg","jd_138219eja","jd_136695iqb","jd_158215wjb","jd_107071797","jd_155664eni","jd_182384yok","jd_139611sco","jd_157652hlh","jd_137036vhs","jd_188476ctf","jd_178651ldby","jd_158107bvn","jd_150342aox","jd_150283rncu","jd_131367qhs","jd_133052bem","jd_189317gau","jd_134186sbh","jd_138637pbp","jd_glwang2","jd_189557iiq","jd_138906xlbm","jd_152360yuk","jd_134551yla","jd_135832apl","jd_155448yab","jd_138388paz","jd_1352513187","jd_135464sqz","jd_153298yxo","jd_139208nicz","jd_136608wyr","jd_133053kbn","jd_135034bbx","jd_2133952","jd_187382exm","jd_135063kvb","jd_130844lme","jd_137295ajrg","jd_136810xds","jd_182771zcmi","jd_qwertag13568370gf","jd_189200fiu","jd_159871grf","jd_q105946","jd_182028tnj","jd_153718opj","jd_136850dhv","jd_159162dxb","jd_155267dkh","jd_152763ghe","jd_137104jyuf","jd_136426poa","jd_153920qlg","jd_159715spj","jd_135772nxy","jd_321051","jd_fanm537","jd_137104vuum","jd_177212uid","jd_150312pgc","jd_152569xgz","jd_136994ddl","jd_186223kew","jd_139779ovt","jd_181193dok","jd_189461sem","jd_138245yum","jd_134136kgip","jd_189543hpt","jd_132180xif","jd_182857oox","jd_186245aal","jd_3555750","jd_188502cqy","jd_186910cwu","jd_182829qbch","jd_182297xcme","jd_159708cng","jd_133330ift","jd_131904zwu","jd_182801xpy","jd_150075wud","jd_156874jup","jd_189964qzl","jd_158132cle","jd_sun723","jd_182176mee","jd_188503acjo","jd_158537jdm","jd_159485zvu","jd_180011ejj","jd_135829xzp","jd_136921jpe","jd_152629pmx","jd_189710eck","jd_189397oeo","jd_189592sul","jd_150576adh","jd_159411rzd","jd_134601izn","jd_180053tsa","jd_138226cmgb","jd_183757gbgp","jd_139289bij","jd_lx_a","jd_138562oek","jd_183691xyg","jd_151429qhv","jd_139804lhb","jd_136042bzg","jd_138102ldq","jd_135986nkf","jd_truman","jd_181700kju","jd_151064dhx","jd_150907ahj","jd_186652jxh","jd_418fef3fab12f","jd_159527gqz","jd_138237dcn","jd_134119thub","jd_wrrr0","jd_180498ozp","jd_138531irs","jd_131136fru","jd_185228tkh","jd_131910jzm","jd_151063mhz","jd_58096918e5234","jd_187187rvl","jd_157537jpe","jd_6cebe25400109","jd_1175189","jd_42a743e0b8651","jd_153063yds","jd_177692lwq","jd_152020gzy","jd_138898puv","jd_155525lpff","jd_151123xea","jd_2672389178","jd_178258cff","jd_158191ansh","jd_153280zoy","jd_hl31450","jd_150416qyl","jd_152315mcm","jd_135648axo","jd_4cfd4439d158f","jd_134815cgd","jd_135087ela","jd_180921pam","jd_135610gth","jd_156973ipc","jd_188112gxw","jd_188110wps","jd_173589vmd","jd_135604ngz","jd_158219erd","jd_158449aru","jd_166312hcv","jd_151360sty","jd_183282vqt","jd_139208bac","jd_139276cex","jd_626010305","jd_158181bbe","jd_134339ytdb","jd_139206mkrh","jd_181579uxd","jd_137015nmi","jd_511064173","jd_182924yvbk","jd_137378axvd","jd_157351ype","jd_135161rmsc","jd_188425wum","jd_135315ofn","jd_131160xix","jd_186339gil","jd_150862gpa","jd_132385iqb","jd_138132znr","jd_384180113","jd_1362103","jd_139409xbn","jd_133146qwv","jd_132661jmj","jd_158676edk","jd_133316lld","jd_188714irz","jd_159103vma","jd_131148pkg","jd_152769boe","jd_138846yad","jd_132036kqj","jd_183813dsf","jd_189617vkq","jd_185715pgz","jd_159905euu","jd_134631ehy","jd_176278mmr","jd_5161d94861016","jd_135466mil","jd_177287yyr","jd_139720epl","jd_132037mat","jd_139830uaz","jd_138988jgl","jd_137222hds","jd_177038fca","jd_137096jyx","jd_189081vhx","jd_189985hzh","jd_151927ufa","jd_135145znf","jd_139306rrn","jd_130650d","jd_134321vtn","jd_151515epa","jd_135137jaia","jd_137164augj","jd_130024lmi","jd_139602byf","jd_183766qfi","jd_139705lek","jd_133834qau","jd_180157euk","jd_139111kud","jd_155116pea","jd_159626fgnc","jd_185154lww","jd_177435tuc","jd_137292pwe","jd_177395xqs","jd_133053jus","jd_151339jhx","jd_135087ljd","jd_53b1c5c35ac9a","jd_qiuche549","jd_158164uel","jd_138107wud","jd_199771clu","jd_186753jcs","jd_187150ylk","jd_138974rxt","jd_103433211","jd_185821hfr","jd_139502ycf","jd_137713uyd","jd_187698feo","jd_136089okg","jd_4352325","jd_139639yoj","jd_979798715","jd_131321aoc","jd_185224kzc","jd_151639rszh","jd_185669lfi","jd_lideguang_2011","jd_138725hyc","jd_qaa011","jd_135928ucx","jd_649f9eae0be6c","jd_155229vlt","jd_139885sgt","jd_136220wqh","jd_130741cki","jd_151611ebv","jd_189756rue","jd_5e95dcfd762f4","jd_6261731","jd_135495gbf","jd_150042iil","jd_137894frb","jd_135873xqmi","jd_138593nkp","jd_175412852","jd_139690dad","jd_43a2e9c6537f8","jd_138175wuk","jd_131716dfh","jd_138556pnn","jd_5020276315","jd_177316iqo","jd_181375rvj","jd_229003983","jd_180789bug","jd_150682yxz","jd_152181wlw","jd_224275759","jd_136102svi","jd_9929897714","jd_139691wvgh","jd_189305xgc","jd_133211nev","jd_138697wdw","jd_189314rid","jd_182520tcmf","jd_184399ypg","jd_156312gqm","jd_183257kbc","jd_8745170","jd_151758sra","jd_136000dfw","jd_138337tbg","jd_xishuwulu","jd_189shijz","jd_182257jvd","jd_156983msp","jd_316882724","jd_135808jxz","jd_135557shtf","jd_233102237","jd_186099qlx","jd_185263tir","jd_406bfe50a3525","jd_180669zge","jd_6402aba2128d9","jd_181335kmh","jd_137378ult","jd_150022yxf","jd_188540les","jd_133774erh","jd_138784rjl","jd_182817gcd","jd_134724ief","jd_132536dsy","jd_136604veq","jd_189715ich","jd_182876ynp","jd_177737trf","jd_186552tmg","jd_152104bbn","jd_136219qpt","jd_138262kmx","jd_176204injl","jd_183772tnk","jd_152150ixc","jd_139291nono","jd_186430qkb","jd_183182ynu","jd_135980gkl","jd_158520qfph","jd_135592ugy","jd_139445whz","jd_151308una","jd_150849jbh","jd_655789303","jd_136906lqt","jd_156206yfx","jd_137619mem","jd_152667dao","jd_138597bto","jd_189315etn","jd_151132kre","jd_239626183","jd_sdwh1","jd_136817uwz","jd_187119rqc","jd_yzztt","jd_157563ywzn","jd_zran012","jd_178280jig","jd_070889622","jd_132865tfs","jd_137098qlp","jd_159314ahj","jd_135530jsi","jd_156985tlp","jd_182109kiy","jd_183501fyv","jd_151668vpv","jd_138155ahi","jd_zwh082","jd_135647kui","jd_139149ipt","jd_186993pyi","jd_159524eku","jd_135392iff","jd_177019dfk","jd_185008kmg","jd_18259236618","jd_151227rgpa","jd_4b3c0be45543e","jd_158968lou","jd_150389hzqg","jd_136861rdw","jd_155046rli","jd_136773sqft","jd_zgybon","jd_131035lcq","jd_150342zqz","jd_2402232","jd_136718hfu","jd_176455kih","jd_188621xuu","jd_138719eld","jd_150670lziv","jd_135854sbe","jd_135262oos","jd_188161shx","jd_180136kfc","jd_189843kbz","jd_186041eon","jd_134570eqc","jd_180796xlc","jd_136923ucb","jd_182633vxt","jd_nmge","jd_183208ouaf","jd_155310zrn","jd_157188fmac","jd_158257chj","jd_177727lrh","jd_135397spe","jd_185124djb","jd_183860rvq","jd_157059kmd","jd_180922bpt","jd_183309nqe","jd_188510uou","jd_135909yhz","jd_138438ems","jd_136111kka","jd_138178ifs","jd_137646lxd","jd_188091hsj","jd_138226rqe","jd_159780lcxu","jd_139609eib","jd_135855xcw","jd_138531zvu","jd_186653hgl","jd_187269vtx","jd_138651nbt","jd_jwh788","jd_133387vpc","jd_188293qlb","jd_150403hbmm","jd_Yuton","jd_184wdz","jd_wyxgz","jd_186372kcz","jd_151600bmg","jd_151121uvgb","jd_137789qwb","jd_837751791","jd_153201xmi","jd_189562krx","jd_182519hniq","jd_188254mlj","jd_136893llq","jd_181322mkf","jd_132625cpe","jd_139609gwt","jd_188967afm","jd_136128fuyn","jd_153732jlpo","jd_221890978","jd_183184wfpz","jd_158304rms","jd_133010ltt","jd_135162chg","jd_158170msu","jd_135101jzrs","jd_155335qzm","jd_5701f57639cfe","jd_139502lkx","jd_cloi","jd_151948etv","jd_185502ypm","jd_186915dcn","jd_133672hlv"]; //随机生成m(小)到n(大)的数,包含m和n function randomFriendPin(m,n) { return Math.round(Math.random()*(n - m) + m); From 24c3969f9db9f51a4a0012e5db9e226d2ad28261 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 25 Nov 2020 11:28:30 +0800 Subject: [PATCH 129/290] update --- index.js | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/index.js b/index.js index 3dcf74d..be67f30 100644 --- a/index.js +++ b/index.js @@ -1,26 +1,26 @@ //'use strict'; exports.main_handler = async (event, context, callback) => { try { - //如果想在一个定时触发器里面执行多个js文件需要在定时触发器的【附加信息】里面填写对应的名称,用 & 链接 - //例如我想一个定时触发器里执行jd_speed.js和jd_bean_change.js,在定时触发器的【附加信息】里面就填写 jd_speed&jd_bean_change - for (const v of event["Message"].split("&")) { - console.log(v); - var request = require('request'); - //1.执行自己上传的js文件 - //delete require.cache[require.resolve('./'+v+'.js')]; - //require('./'+v+'.js') - - //2.执行国内gitee远端js文件如果部署,在国内节点,选择1或2的方式 - //request('https://gitee.com/lxk0301/jd_scripts/raw/master/'+v+'.js', function (error, response, body) { - // eval(response.body) - //}) + //如果想在一个定时触发器里面执行多个js文件需要在定时触发器的【附加信息】里面填写对应的名称,用 & 链接 + //例如我想一个定时触发器里执行jd_speed.js和jd_bean_change.js,在定时触发器的【附加信息】里面就填写 jd_speed&jd_bean_change + for (const v of event["Message"].split("&")) { + console.log(v); + var request = require('request'); + //1.执行自己上传的js文件 + //delete require.cache[require.resolve('./'+v+'.js')]; + //require('./'+v+'.js') - //3.执行github远端的js文件 - request('https://raw.githubusercontent.com/lxk0301/jd_scripts/master/'+v+'.js', function (error, response, body) { - eval(response.body) - }) - } - } catch (e) { + //2.执行国内gitee远端js文件如果部署,在国内节点,选择1或2的方式 + //request('https://gitee.com/lxk0301/jd_scripts/raw/master/'+v+'.js', function (error, response, body) { + // eval(response.body) + //}) + + //3.执行github远端的js文件(因github的raw类型的文件被墙,此方法云函数非) + request('https://raw.githubusercontent.com/lxk0301/jd_scripts/master/' + v + '.js', function (error, response, body) { + eval(response.body) + }) + } + } catch (e) { console.error(e) - } + } } From 064f13ef13c86e1798ec0a2027cde875117275aa Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 25 Nov 2020 18:21:09 +0800 Subject: [PATCH 130/290] =?UTF-8?q?=E4=B8=9C=E4=B8=9C=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E6=98=AF=E4=BA=AC=E5=96=9C=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=20=E7=9B=AE=E5=89=8D=E4=B8=8D=E7=9F=A5=E5=85=8D=E8=B4=B9?= =?UTF-8?q?=E4=BA=A7=E7=94=9F=E7=9A=84=E7=94=B5=E9=87=8F=E7=93=B6=E9=A2=88?= =?UTF-8?q?=E6=98=AF=E5=A4=9A=E5=B0=91=E3=80=82=20=E6=95=85=E5=BB=BA?= =?UTF-8?q?=E8=AE=AE5=E5=B0=8F=E6=97=B6=E8=BF=90=E8=A1=8C=E4=B8=80?= =?UTF-8?q?=E6=AC=A1=20=E5=BC=80=E4=BC=9A=E5=91=98=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=92=8C=E5=8E=BB=E4=BA=AC=E4=B8=9C=E9=A6=96=E9=A1=B5=E7=82=B9?= =?UTF-8?q?=E5=87=BB=E2=80=9C=E6=95=B0=E7=A0=81=E7=94=B5=E5=99=A8=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E7=9B=AE=E5=89=8D=E6=9C=AA=E5=81=9A=20=E4=B8=8D?= =?UTF-8?q?=E4=BC=9A=E6=AF=8F=E6=AC=A1=E8=BF=90=E8=A1=8C=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E9=83=BD=E6=8A=95=E5=85=A5=E7=94=B5=E5=8A=9B=20=E5=8F=AA?= =?UTF-8?q?=E6=9C=89=E5=BD=93=E5=BF=83=E4=BB=AA=E7=9A=84=E5=95=86=E5=93=81?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=EF=BC=8C=E5=B9=B6=E4=B8=94=E6=94=B6=E9=9B=86?= =?UTF-8?q?=E8=B5=B7=E6=9D=A5=E7=9A=84=E7=94=B5=E9=87=8F=E6=BB=A1=E8=B6=B3?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E5=95=86=E5=93=81=E6=89=80=E9=9C=80=E7=94=B5?= =?UTF-8?q?=E5=8A=9B=EF=BC=8C=E6=89=8D=E6=8A=95=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/crontab_list.sh | 4 +- docker/crontab_list_ts.sh | 4 +- jd_jdfactory.js | 522 ++++++++++++++++++++++++++++++++++++++ jd_necklace.js | 4 +- 4 files changed, 530 insertions(+), 4 deletions(-) create mode 100644 jd_jdfactory.js diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index 9affe99..fdae93c 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -58,4 +58,6 @@ # 京喜工厂 20 * * * * node /scripts/jd_dreamFactory.js >> /scripts/logs/jd_dreamFactory.log 2>&1 # 东东小窝 -16 6 * * * node /scripts/jd_small_home.js >> /scripts/logs/jd_small_home.log 2>&1 \ No newline at end of file +16 6 * * * node /scripts/jd_small_home.js >> /scripts/logs/jd_small_home.log 2>&1 +# 东东工厂 +36 2 * * * node /scripts/jd_jdfactory.js >> /scripts/logs/jd_jdfactory.log 2>&1 \ No newline at end of file diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index d329368..eeeff0a 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -58,4 +58,6 @@ # 京喜工厂 20 * * * * node /scripts/jd_dreamFactory.js |ts >> /scripts/logs/jd_dreamFactory.log 2>&1 # 东东小窝 -16 6 * * * node /scripts/jd_small_home.js |ts >> /scripts/logs/jd_small_home.log 2>&1 \ No newline at end of file +16 6 * * * node /scripts/jd_small_home.js |ts >> /scripts/logs/jd_small_home.log 2>&1 +# 东东工厂 +36 2 * * * node /scripts/jd_jdfactory.js |ts >> /scripts/logs/jd_jdfactory.log 2>&1 \ No newline at end of file diff --git a/jd_jdfactory.js b/jd_jdfactory.js new file mode 100644 index 0000000..4f5fc35 --- /dev/null +++ b/jd_jdfactory.js @@ -0,0 +1,522 @@ +/* + * @Author: lxk0301 https://github.com/lxk0301 + * @Date: 2020-11-25 18:19:21 + * @Last Modified by: lxk0301 + * @Last Modified time: 2020-11-25 18:20:02 + */ +/* +东东工厂,不是京喜工厂 +目前不知免费产生的电量瓶颈是多少。 +故建议5小时运行一次 +开会员任务和去京东首页点击“数码电器任务目前未做 +不会每次运行脚本都投入电力 +只有当心仪的商品存在,并且收集起来的电量满足当前商品所需电力,才投入 + */ +const $ = new Env('东东工厂'); + +const notify = $.isNode() ? require('./sendNotify') : ''; +//Node.js用户请在jdCookie.js处填写京东ck; +const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; +let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 +//IOS等用户直接用NobyDa的jd cookie +let cookiesArr = [], cookie = '', message; +if ($.isNode()) { + Object.keys(jdCookieNode).forEach((item) => { + cookiesArr.push(jdCookieNode[item]) + }) + if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {}; +} else { + cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); +} +const wantProduct = `便携式手持风扇`;//心仪商品名称 +const JD_API_HOST = 'https://api.m.jd.com/client.action'; +const inviteCodes = [`P04z54XCjVWnYaS5u2ak7ZCdan1Bdd2GGiWvC6_uERj`, 'P04z54XCjVWnYaS5m9cZ2ariXVJwHf0bgkG7Uo']; +!(async () => { + if (!cookiesArr[0]) { + $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); + return; + } + for (let i = 0; i < cookiesArr.length; i++) { + if (cookiesArr[i]) { + cookie = cookiesArr[i]; + $.UserName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]) + $.index = i + 1; + $.isLogin = true; + $.nickName = ''; + message = ''; + await TotalBean(); + console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`); + if (!$.isLogin) { + $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"}); + + if ($.isNode()) { + await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); + } else { + $.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 + } + continue + } + await jdFactory() + } + } +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) +async function jdFactory() { + await jdfactory_getHomeData(); + await helpFriends(inviteCodes); + if ($.newUser === 1 || ($.newUser !==1 && $.haveProduct === 2)) return + await jdfactory_collectElectricity();//收集产生的电量 + await jdfactory_getTaskDetail(); + await doTask(); + await algorithm();//投入电力逻辑 + await showMsg(); +} +function showMsg() { + return new Promise(resolve => { + if (!jdNotify) { + $.msg($.name, '', `${message}`); + } else { + $.log(message); + } + resolve() + }) +} +async function algorithm() { + // 当心仪的商品存在,并且收集起来的电量满足当前商品所需,就投入 + return new Promise(resolve => { + $.post(taskPostUrl('jdfactory_getHomeData'), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.data.bizCode === 0) { + $.haveProduct = data.data.result.haveProduct; + $.userName = data.data.result.userName; + $.newUser = data.data.result.newUser; + if (data.data.result.factoryInfo) { + const { totalScore, useScore, produceScore, remainScore, couponCount, name } = data.data.result.factoryInfo + console.log(`\n已选商品:${name}`); + console.log(`当前已投入电量/所需电量:${useScore}/${totalScore}`); + console.log(`已选商品剩余量:${couponCount}`); + console.log(`当前蓄电池电量:${remainScore}`); + console.log(`当前完成度:${((remainScore * 1 + useScore * 1)/(totalScore * 1)).toFixed(2) * 100}%\n`); + message += `京东账号${$.index} ${$.nickName}\n`; + message += `已选商品:${name}\n`; + message += `当前已投入电量/所需电量:${useScore}/${totalScore}\n`; + message += `已选商品剩余量:${couponCount}\n`; + message += `当前蓄电池电量:${remainScore}\n`; + message += `当前完成度:${((remainScore * 1 + useScore * 1)/(totalScore * 1)).toFixed(2) * 100}%\n`; + if (((remainScore * 1 + useScore * 1) >= totalScore * 1) && (couponCount * 1 > 0)) { + console.log(`\n所选商品${name}目前数量:${couponCount},且当前总电量为:${remainScore * 1 + useScore * 1},【满足】兑换此商品所需总电量:${$.totalScore}`); + console.log(`下面开始投入电量\n`); + await jdfactory_addEnergy(); + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `所选商品${name}目前数量:${couponCount}\n当前总电量为:${remainScore * 1 + useScore * 1}\n【满足】兑换此商品所需总电量:${$.totalScore}\n请去活动页面查看`); + } else { + console.log(`\n所选商品${name}目前数量:${couponCount},且当前总电量为:${remainScore * 1 + useScore * 1},【不满足】兑换此商品所需总电量:${$.totalScore}`) + console.log(`故不一次性投入电力,一直放到蓄电池累计\n`); + } + } + } else { + console.log(`异常:${JSON.stringify(data)}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +async function helpFriends(inviteCodes) { + for (let code of inviteCodes) { + if (!code) continue + await jdfactory_collectScore(code); + } +} +async function doTask() { + for (let item of $.taskVos) { + if (item.taskType === 1) { + //关注店铺任务 + if (item.status === 1) { + console.log(`准备做此任务:${item.taskName}`); + for (let task of item.followShopVo) { + if (task.status === 1) { + await jdfactory_collectScore(task.taskToken); + } + } + } else { + console.log(`${item.taskName}已做完`) + } + } + if (item.taskType === 2) { + //看看商品任务 + if (item.status === 1) { + console.log(`准备做此任务:${item.taskName}`); + for (let task of item.productInfoVos) { + if (task.status === 1) { + await jdfactory_collectScore(task.taskToken); + } + } + } else { + console.log(`${item.taskName}已做完`) + } + } + if (item.taskType === 3) { + //逛会场任务 + if (item.status === 1) { + console.log(`准备做此任务:${item.taskName}`); + for (let task of item.shoppingActivityVos) { + if (task.status === 1) { + await jdfactory_collectScore(task.taskToken); + } + } + } else { + console.log(`${item.taskName}已做完`) + } + } + if (item.taskType === 10) { + if (item.status === 1) { + if (item.threeMealInfoVos.status === 1) { + //可以做此任务 + console.log(`准备做此任务:${item.taskName}`); + await jdfactory_collectScore(item.threeMealInfoVos.taskToken); + } else if (item.threeMealInfoVos.status === 0) { + console.log(`${item.taskName} 任务已错过时间`) + } + } else if (item.status === 2){ + console.log(`${item.taskName}已完成`); + } + } + if (item.taskType === 21) { + //开通会员任务 + if (item.status === 1) { + console.log(`此任务:${item.taskName},跳过`); + // for (let task of item.brandMemberVos) { + // if (task.status === 1) { + // await jdfactory_collectScore(task.taskToken); + // } + // } + } else { + console.log(`${item.taskName}已做完`) + } + } + if (item.taskType === 13) { + //每日打卡 + if (item.status === 1) { + console.log(`准备做此任务:${item.taskName}`); + await jdfactory_collectScore(item.simpleRecordInfoVo.taskToken); + } else { + console.log(`${item.taskName}已完成`); + } + } + if (item.taskType === 14) { + //好友助力 + if (item.status === 1) { + console.log(`准备做此任务:${item.taskName}`); + // await jdfactory_collectScore(item.simpleRecordInfoVo.taskToken); + } else { + console.log(`${item.taskName}已完成`); + } + } + if (item.taskType === 23) { + //从数码电器首页进入 + if (item.status === 1) { + console.log(`准备做此任务:${item.taskName}`); + // await jdfactory_collectScore(item.simpleRecordInfoVo.taskToken); + } else { + console.log(`${item.taskName}已完成`); + } + } + } +} + +//领取做完任务的奖励 +function jdfactory_collectScore(taskToken) { + return new Promise(resolve => { + $.post(taskPostUrl("jdfactory_collectScore", { taskToken }, "jdfactory_collectScore"), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.data.bizCode === 0) { + $.taskVos = data.data.result.taskVos;//任务列表 + console.log(`领取做完任务的奖励:${JSON.stringify(data.data.result)}`); + } else { + console.log(JSON.stringify(data)) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +//给商品投入电量 +function jdfactory_addEnergy() { + return new Promise(resolve => { + $.post(taskPostUrl("jdfactory_addEnergy"), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.data.bizCode === 0) { + console.log(`给商品投入电量:${JSON.stringify(data.data.result)}`) + // $.taskConfigVos = data.data.result.taskConfigVos; + // $.exchangeGiftConfigs = data.data.result.exchangeGiftConfigs; + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} + +//收集电量 +function jdfactory_collectElectricity() { + return new Promise(resolve => { + $.post(taskPostUrl("jdfactory_collectElectricity"), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.data.bizCode === 0) { + console.log(`成功收集${data.data.result.electricityValue}电量,当前蓄电池总电量:${data.data.result.batteryValue}\n`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} +//获取任务列表 +function jdfactory_getTaskDetail() { + return new Promise(resolve => { + $.post(taskPostUrl("jdfactory_getTaskDetail", {}, "jdfactory_getTaskDetail"), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.data.bizCode === 0) { + $.taskVos = data.data.result.taskVos;//任务列表 + $.taskVos.map(item => { + if (item.taskType === 14) { + console.log(`\n您的${$.name}好友助力邀请码:${item.assistTaskDetailVo.taskToken}\n`) + } + }) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +//选择一件商品,只能在 $.newUser !== 1 && $.haveProduct === 2 并且 sellOut === 0的时候可用 +function jdfactory_makeProduct(skuId) { + return new Promise(resolve => { + $.post(taskPostUrl('jdfactory_makeProduct', { skuId }), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.data.bizCode === 0) { + console.log(`选购商品成功:${JSON.stringify(data)}`); + } else { + console.log(`异常:${JSON.stringify(data)}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +//查询当前商品列表 +function jdfactory_getProductList() { + return new Promise(resolve => { + $.post(taskPostUrl('jdfactory_getProductList'), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.data.bizCode === 0) { + $.canMakeList = data.data.result.canMakeList;//当前可选商品列表 sellOut:1为已抢光,0为目前可选择 + console.log(`商品名称 可选状态 剩余量`) + for (let item of $.canMakeList) { + console.log(`${item.name.slice(-4)} ${item.sellOut === 1 ? '已抢光':'可选'} ${item.couponCount}`); + if (item.name.indexOf(wantProduct) > -1 && item.couponCount > 0 && item.sellOut === 0) { + await jdfactory_makeProduct(item.skuId); + } + } + } else { + console.log(`异常:${JSON.stringify(data)}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function jdfactory_getHomeData() { + return new Promise(resolve => { + $.post(taskPostUrl('jdfactory_getHomeData'), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.data.bizCode === 0) { + $.haveProduct = data.data.result.haveProduct; + $.userName = data.data.result.userName; + $.newUser = data.data.result.newUser; + if (data.data.result.factoryInfo) { + $.totalScore = data.data.result.factoryInfo.totalScore;//选中的商品,一共需要的电量 + $.userScore = data.data.result.factoryInfo.userScore;//已使用电量 + $.produceScore = data.data.result.factoryInfo.produceScore;//此商品已投入电量 + $.remainScore = data.data.result.factoryInfo.remainScore;//当前蓄电池电量 + $.couponCount = data.data.result.factoryInfo.couponCount;//已选中商品当前剩余量 + $.hasProduceName = data.data.result.factoryInfo.name;//已选中商品当前剩余量 + } + if ($.newUser === 1) { + console.log(`此京东账号${$.index}${$.nickName}暂未开启${$.name}活动\n`); + $.msg($.name, '暂未开启活动', `京东账号${$.index}${$.nickName}暂未开启${$.name}活动\n请去京东APP->搜索'玩一玩'->东东工厂->开启\n或点击弹窗即可到达${$.name}活动`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); + } + if ($.newUser !== 1 && $.haveProduct === 2) { + console.log(`此京东账号${$.index}${$.nickName}暂未选购商品\n`); + $.msg($.name, '暂未选购商品', `京东账号${$.index}${$.nickName}暂未选购商品\n请去京东APP->搜索'玩一玩'->东东工厂->选购一件商品\n或点击弹窗即可到达${$.name}活动`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); + // await jdfactory_getProductList();//选购心仪的商品 + } + } else { + console.log(`异常:${JSON.stringify(data)}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function taskPostUrl(function_id, body = {}, function_id2) { + let url = `${JD_API_HOST}`; + if (function_id2) { + url += `?functionId=${function_id2}`; + } + return { + url, + body: `functionId=${function_id}&body=${escape(JSON.stringify(body))}&client=wh5&clientVersion=9.1.0`, + headers: { + "Cookie": cookie, + "origin": "https://h5.m.jd.com", + "referer": "https://h5.m.jd.com/", + 'Content-Type': 'application/x-www-form-urlencoded', + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), + } + } +} +function TotalBean() { + return new Promise(async resolve => { + const options = { + "url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`, + "headers": { + "Accept": "application/json,text/plain, */*", + "Content-Type": "application/x-www-form-urlencoded", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + data = JSON.parse(data); + if (data['retcode'] === 13) { + $.isLogin = false; //cookie过期 + return + } + $.nickName = data['base'].nickname; + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function safeGet(data) { + try { + if (typeof JSON.parse(data) == "object") { + return true; + } + } catch (e) { + console.log(e); + console.log(`京东服务器访问数据为空,请检查自身设备网络情况`); + return false; + } +} +// 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)} \ No newline at end of file diff --git a/jd_necklace.js b/jd_necklace.js index b641b76..c6cb87d 100644 --- a/jd_necklace.js +++ b/jd_necklace.js @@ -67,7 +67,7 @@ const JD_API_HOST = 'https://api.m.jd.com/api'; } continue } - await JD818(); + await jd_necklace(); } } })() @@ -77,7 +77,7 @@ const JD_API_HOST = 'https://api.m.jd.com/api'; .finally(() => { $.done(); }) -async function JD818() { +async function jd_necklace() { await necklace_homePage(); await doTask(); await necklace_homePage(); From afb0d4d2343b95b09bf272c3a8c81ac9f416be6a Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 25 Nov 2020 18:23:31 +0800 Subject: [PATCH 131/290] =?UTF-8?q?=E4=BF=AE=E6=94=B9cron?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/crontab_list.sh | 2 +- docker/crontab_list_ts.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index fdae93c..e0b534b 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -60,4 +60,4 @@ # 东东小窝 16 6 * * * node /scripts/jd_small_home.js >> /scripts/logs/jd_small_home.log 2>&1 # 东东工厂 -36 2 * * * node /scripts/jd_jdfactory.js >> /scripts/logs/jd_jdfactory.log 2>&1 \ No newline at end of file +36 * * * * node /scripts/jd_jdfactory.js >> /scripts/logs/jd_jdfactory.log 2>&1 \ No newline at end of file diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index eeeff0a..aa6fc2b 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -60,4 +60,4 @@ # 东东小窝 16 6 * * * node /scripts/jd_small_home.js |ts >> /scripts/logs/jd_small_home.log 2>&1 # 东东工厂 -36 2 * * * node /scripts/jd_jdfactory.js |ts >> /scripts/logs/jd_jdfactory.log 2>&1 \ No newline at end of file +36 * * * * node /scripts/jd_jdfactory.js |ts >> /scripts/logs/jd_jdfactory.log 2>&1 \ No newline at end of file From f27281e2db9ef2b8ea9deaf2b1cde1e889d5a910 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 25 Nov 2020 19:51:39 +0800 Subject: [PATCH 132/290] Update lxk0301_LoonTask.conf --- Loon/lxk0301_LoonTask.conf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Loon/lxk0301_LoonTask.conf b/Loon/lxk0301_LoonTask.conf index 56aa670..6bb5c2d 100644 --- a/Loon/lxk0301_LoonTask.conf +++ b/Loon/lxk0301_LoonTask.conf @@ -65,6 +65,10 @@ cron "20 0,20 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_sc #东东小窝 cron "16 0 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_small_home.js, tag=东东小窝 + +#京喜工厂 +cron "26 * * * *" script-path= https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js, tag=京喜工厂 + #京东全民营业领金币 cron "20 * * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_collectProduceScore.js, tag=京东全民营业领金币 From 0c6b98a4dcfc89ce8a84eb7ae3a668137622cbcd Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 25 Nov 2020 22:29:54 +0800 Subject: [PATCH 133/290] Update jd_dreamFactory.js --- jd_dreamFactory.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 3d45d47..e525e7b 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -2,7 +2,25 @@ 京东京喜工厂 活动入口 :京东APP->游戏与互动->查看更多->京喜工厂 或者: 京东APP首页搜索 "玩一玩" ,造物工厂即可 -cron 15 * * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js + + +已支持IOS双京东账号,Node.js支持N个京东账号 +脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js +============Quantumultx=============== +[task_local] +#京喜工厂 +10 * * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js, tag=京喜工厂, enabled=true + +================Loon============== +[Script] +cron "10 * * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js,tag=京喜工厂 + +===============Surge================= +京喜工厂 = type=cron,cronexp="10 * * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js + +============小火箭========= +京喜工厂 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js, cronexpr="10 * * * *", timeout=200, enable=true + */ From 6412295f8d556d7fd66724adb0edaa741aaaa106 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 25 Nov 2020 22:58:33 +0800 Subject: [PATCH 134/290] Update lxk0301_LoonTask.conf --- Loon/lxk0301_LoonTask.conf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Loon/lxk0301_LoonTask.conf b/Loon/lxk0301_LoonTask.conf index 6bb5c2d..e6014ee 100644 --- a/Loon/lxk0301_LoonTask.conf +++ b/Loon/lxk0301_LoonTask.conf @@ -69,6 +69,10 @@ cron "16 0 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scrip #京喜工厂 cron "26 * * * *" script-path= https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js, tag=京喜工厂 +#东东工厂 +cron "10 * * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jdfactory.js,tag=东东工厂 + + #京东全民营业领金币 cron "20 * * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_collectProduceScore.js, tag=京东全民营业领金币 From bd61d355fcba1060278badd766f8252b6a907512 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 25 Nov 2020 23:34:08 +0800 Subject: [PATCH 135/290] Update serverless.yml --- serverless.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/serverless.yml b/serverless.yml index caff6ff..f489fa8 100644 --- a/serverless.yml +++ b/serverless.yml @@ -34,12 +34,12 @@ inputs: cronExpression: "0 5 6-18/6 * * * *" enable: true argument: jd_fruit&jd_pet - - timer: # 宠汪汪喂食# 宠汪汪# 摇钱树# 京东种豆得豆# 京喜工厂 + - timer: # 宠汪汪喂食# 宠汪汪# 摇钱树# 京东种豆得豆# 京喜工厂 #东东工厂 parameters: - name: joy_feedPets_joy_moneyTree_plantBean_dreamFactory + name: joy_feedPets_joy_moneyTree_plantBean_dreamFactory_jd_jdfactory cronExpression: "0 15 */1 * * * *" enable: true - argument: jd_joy_feedPets&jd_joy&jd_moneyTree&jd_plantBean&jd_dreamFactory + argument: jd_joy_feedPets&jd_joy&jd_moneyTree&jd_plantBean&jd_dreamFactory&jd_jdfactory - timer: # 宠汪汪积分兑换奖品# 宠汪汪偷好友积分与狗# 点点券 parameters: name: jd_joy_reward_jd_joy_steal_jd_necklace From bfe41d46cb1661af446f1a602d7baa6fe6c310a4 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 26 Nov 2020 10:30:53 +0800 Subject: [PATCH 136/290] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=9C=E4=B8=9C?= =?UTF-8?q?=E5=B7=A5=E5=8E=82=E8=84=9A=E6=9C=AC=201=E3=80=81=E5=9C=A8?= =?UTF-8?q?=E6=9C=AA=E9=80=89=E8=B4=AD=E5=95=86=E5=93=81=E6=88=96=E8=80=85?= =?UTF-8?q?=E6=9C=AA=E5=BC=80=E5=90=AF=E6=AD=A4=E6=B4=BB=E5=8A=A8(?= =?UTF-8?q?=E6=96=B0=E7=94=A8=E6=88=B7)=E6=88=96=E8=80=85=E5=B7=B2?= =?UTF-8?q?=E9=80=89=E8=B4=AD=E5=95=86=E5=93=81=E8=A2=AB=E6=8A=A2=E5=85=89?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5=E4=B8=8B=EF=BC=8C=E4=BC=9A=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E9=80=89=E8=B4=AD=E4=B8=80=E4=BB=B6=E6=96=B0=E7=9A=84?= =?UTF-8?q?=E5=95=86=E5=93=81=E7=BB=A7=E7=BB=AD=E5=81=9A=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E6=94=B6=E9=9B=86=E7=94=B5=E5=8A=9B=E3=80=82?= =?UTF-8?q?=202=EF=BC=9A=202.1=E5=A6=82=E6=9E=9C=E6=9C=AA=E5=9C=A8BoxJs?= =?UTF-8?q?=E6=88=96=E8=80=85=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E5=BF=83=E4=BB=AA=E5=95=86=E5=93=81=EF=BC=8C=E5=88=99?= =?UTF-8?q?=E5=9C=A8=E6=BB=A1=E8=B6=B3=E5=BD=93=E5=89=8D=E6=89=80=E9=80=89?= =?UTF-8?q?=E5=95=86=E5=93=81=E7=9A=84=E6=97=B6=E5=80=99=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E6=8A=95=E5=85=A5=E7=94=B5=E5=8A=9B=E5=85=91=E6=8D=A2=E3=80=82?= =?UTF-8?q?=202.2=E5=A6=82=E6=9E=9C=E6=8F=90=E4=BE=9B=E4=BA=86=E5=BF=83?= =?UTF-8?q?=E4=BB=AA=E5=95=86=E5=93=81=EF=BC=8C=E5=88=99=E4=BC=9A=E5=9C=A8?= =?UTF-8?q?=E6=BB=A1=E8=B6=B3=E5=85=91=E6=8D=A2=E5=BF=83=E4=BB=AA=E5=95=86?= =?UTF-8?q?=E5=93=81(=E7=94=B5=E5=8A=9B(=E5=8C=85=E6=8B=AC=E6=9B=B4?= =?UTF-8?q?=E6=8D=A2=E5=95=86=E5=93=81=E7=9A=8410w=E7=94=B5=E5=8A=9B)?= =?UTF-8?q?=E3=80=81=E6=95=B0=E9=87=8F)=E7=9A=84=E6=97=B6=E5=80=99?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_jdfactory.js | 94 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 72 insertions(+), 22 deletions(-) diff --git a/jd_jdfactory.js b/jd_jdfactory.js index 4f5fc35..1724b97 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -2,7 +2,7 @@ * @Author: lxk0301 https://github.com/lxk0301 * @Date: 2020-11-25 18:19:21 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-25 18:20:02 + * @Last Modified time: 2020-11-26 10:20:02 */ /* 东东工厂,不是京喜工厂 @@ -11,6 +11,22 @@ 开会员任务和去京东首页点击“数码电器任务目前未做 不会每次运行脚本都投入电力 只有当心仪的商品存在,并且收集起来的电量满足当前商品所需电力,才投入 +已支持IOS双京东账号,Node.js支持N个京东账号 +脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js +============Quantumultx=============== +[task_local] +#京东工厂 +10 * * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jdfactory.js, tag=东东工厂, enabled=true + +================Loon============== +[Script] +cron "10 * * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jdfactory.js,tag=东东工厂 + +===============Surge================= +东东工厂 = type=cron,cronexp="10 * * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jdfactory.js + +============小火箭========= +东东工厂 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jdfactory.js, cronexpr="10 * * * *", timeout=200, enable=true */ const $ = new Env('东东工厂'); @@ -28,7 +44,7 @@ if ($.isNode()) { } else { cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); } -const wantProduct = `便携式手持风扇`;//心仪商品名称 +let wantProduct = `移动电源`;//心仪商品名称 const JD_API_HOST = 'https://api.m.jd.com/client.action'; const inviteCodes = [`P04z54XCjVWnYaS5u2ak7ZCdan1Bdd2GGiWvC6_uERj`, 'P04z54XCjVWnYaS5m9cZ2ariXVJwHf0bgkG7Uo']; !(async () => { @@ -102,7 +118,7 @@ async function algorithm() { $.userName = data.data.result.userName; $.newUser = data.data.result.newUser; if (data.data.result.factoryInfo) { - const { totalScore, useScore, produceScore, remainScore, couponCount, name } = data.data.result.factoryInfo + let { totalScore, useScore, produceScore, remainScore, couponCount, name } = data.data.result.factoryInfo console.log(`\n已选商品:${name}`); console.log(`当前已投入电量/所需电量:${useScore}/${totalScore}`); console.log(`已选商品剩余量:${couponCount}`); @@ -112,16 +128,44 @@ async function algorithm() { message += `已选商品:${name}\n`; message += `当前已投入电量/所需电量:${useScore}/${totalScore}\n`; message += `已选商品剩余量:${couponCount}\n`; - message += `当前蓄电池电量:${remainScore}\n`; + message += `当前总电量:${remainScore * 1 + useScore * 1}\n`; message += `当前完成度:${((remainScore * 1 + useScore * 1)/(totalScore * 1)).toFixed(2) * 100}%\n`; - if (((remainScore * 1 + useScore * 1) >= totalScore * 1) && (couponCount * 1 > 0)) { - console.log(`\n所选商品${name}目前数量:${couponCount},且当前总电量为:${remainScore * 1 + useScore * 1},【满足】兑换此商品所需总电量:${$.totalScore}`); - console.log(`下面开始投入电量\n`); - await jdfactory_addEnergy(); - await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `所选商品${name}目前数量:${couponCount}\n当前总电量为:${remainScore * 1 + useScore * 1}\n【满足】兑换此商品所需总电量:${$.totalScore}\n请去活动页面查看`); + wantProduct = $.isNode() ? (process.env.FACTORAY_WANTPRODUCT_NAME ? process.env.FACTORAY_WANTPRODUCT_NAME : wantProduct) : ($.getdata('FACTORAY_WANTPRODUCT_NAME') ? $.getdata('FACTORAY_WANTPRODUCT_NAME') : wantProduct); + if (wantProduct) { + console.log(`BoxJs或环境变量提供的心仪商品:${wantProduct}\n`); + await jdfactory_getProductList(true); + let wantProductSkuId = '', fullScore; + for (let item of $.canMakeList) { + if (item.name.indexOf(wantProduct) > - 1) { + totalScore = item['fullScore'] * 1; + couponCount = item.couponCount; + name = item.name; + } + if (item.name.indexOf(wantProduct) > - 1 && item.couponCount > 0) { + wantProductSkuId = item.skuId; + } + } + // console.log(`\n您心仪商品${name}\n当前数量为:${couponCount}\n兑换所需电量为:${totalScore}\n您当前总电量为:${remainScore * 1 + useScore * 1}\n`); + if (wantProductSkuId && ((remainScore * 1 + useScore * 1) >= (totalScore + 100000))) { + console.log(`\n提供的心仪商品${name}目前数量:${couponCount},且当前总电量为:${remainScore * 1 + useScore * 1},【满足】兑换此商品所需总电量:${totalScore + 100000}`); + console.log(`请去活动页面更换成心仪商品并手动投入电量兑换\n`); + $.msg($.name, '', `京东账号${$.index}${$.nickName}\n您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${remainScore * 1 + useScore * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请去活动页面更换成心仪商品并手动投入电量兑换`); + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${remainScore * 1 + useScore * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请去活动页面更换成心仪商品并手动投入电量兑换`); + } else { + console.log(`您心仪商品${name}\n当前数量为:${couponCount}\n兑换所需电量为:${totalScore}\n您当前总电量为:${remainScore * 1 + useScore * 1}\n不满足兑换心仪商品的条件\n`) + } } else { - console.log(`\n所选商品${name}目前数量:${couponCount},且当前总电量为:${remainScore * 1 + useScore * 1},【不满足】兑换此商品所需总电量:${$.totalScore}`) - console.log(`故不一次性投入电力,一直放到蓄电池累计\n`); + console.log(`BoxJs或环境变量暂未提供心仪商品\n如需兑换心仪商品,请提供心仪商品名称,否则满足条件后会为您兑换当前所选商品:${name}\n`); + if (((remainScore * 1 + useScore * 1) >= totalScore * 1) && (couponCount * 1 > 0)) { + console.log(`\n所选商品${name}目前数量:${couponCount},且当前总电量为:${remainScore * 1 + useScore * 1},【满足】兑换此商品所需总电量:${totalScore}`); + console.log(`BoxJs或环境变量暂未提供心仪商品,下面为您目前选的${name} 投入电量\n`); + await jdfactory_addEnergy(); + $.msg($.name, '', `京东账号${$.index}${$.nickName}\n您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${remainScore * 1 + useScore * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n已为您投入电量,请去活动页面查看`); + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `所选商品${name}目前数量:${couponCount}\n当前总电量为:${remainScore * 1 + useScore * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n已为您投入电量,请去活动页面查看`); + } else { + console.log(`\n所选商品${name}目前数量:${couponCount},且当前总电量为:${remainScore * 1 + useScore * 1},【不满足】兑换此商品所需总电量:${totalScore}`) + console.log(`故不一次性投入电力,一直放到蓄电池累计\n`); + } } } } else { @@ -374,7 +418,7 @@ function jdfactory_makeProduct(skuId) { }) } //查询当前商品列表 -function jdfactory_getProductList() { +function jdfactory_getProductList(flag) { return new Promise(resolve => { $.post(taskPostUrl('jdfactory_getProductList'), async (err, resp, data) => { try { @@ -386,11 +430,13 @@ function jdfactory_getProductList() { data = JSON.parse(data); if (data.data.bizCode === 0) { $.canMakeList = data.data.result.canMakeList;//当前可选商品列表 sellOut:1为已抢光,0为目前可选择 - console.log(`商品名称 可选状态 剩余量`) - for (let item of $.canMakeList) { - console.log(`${item.name.slice(-4)} ${item.sellOut === 1 ? '已抢光':'可选'} ${item.couponCount}`); - if (item.name.indexOf(wantProduct) > -1 && item.couponCount > 0 && item.sellOut === 0) { - await jdfactory_makeProduct(item.skuId); + if (!flag) { + console.log(`商品名称 可选状态 剩余量`) + for (let item of $.canMakeList) { + console.log(`${item.name.slice(-4)} ${item.sellOut === 1 ? '已抢光':'可选'} ${item.couponCount}`); + if (item.name.indexOf(wantProduct) > -1 && item.couponCount > 0 && item.sellOut === 0) { + await jdfactory_makeProduct(item.skuId); + } } } } else { @@ -429,13 +475,17 @@ function jdfactory_getHomeData() { $.hasProduceName = data.data.result.factoryInfo.name;//已选中商品当前剩余量 } if ($.newUser === 1) { - console.log(`此京东账号${$.index}${$.nickName}暂未开启${$.name}活动\n`); - $.msg($.name, '暂未开启活动', `京东账号${$.index}${$.nickName}暂未开启${$.name}活动\n请去京东APP->搜索'玩一玩'->东东工厂->开启\n或点击弹窗即可到达${$.name}活动`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); + //新用户 + console.log(`此京东账号${$.index}${$.nickName}为新用户暂未开启${$.name}活动\n现在为您从库存里面现有数量中选择一商品`); + if ($.haveProduct === 2) { + await jdfactory_getProductList();//选购商品 + } + // $.msg($.name, '暂未开启活动', `京东账号${$.index}${$.nickName}暂未开启${$.name}活动\n请去京东APP->搜索'玩一玩'->东东工厂->开启\n或点击弹窗即可到达${$.name}活动`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); } if ($.newUser !== 1 && $.haveProduct === 2) { - console.log(`此京东账号${$.index}${$.nickName}暂未选购商品\n`); - $.msg($.name, '暂未选购商品', `京东账号${$.index}${$.nickName}暂未选购商品\n请去京东APP->搜索'玩一玩'->东东工厂->选购一件商品\n或点击弹窗即可到达${$.name}活动`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); - // await jdfactory_getProductList();//选购心仪的商品 + console.log(`此京东账号${$.index}${$.nickName}暂未选购商品\n现在为您从库存里面现有数量中选择一商品`); + // $.msg($.name, '暂未选购商品', `京东账号${$.index}${$.nickName}暂未选购商品\n请去京东APP->搜索'玩一玩'->东东工厂->选购一件商品\n或点击弹窗即可到达${$.name}活动`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); + await jdfactory_getProductList();//选购商品 } } else { console.log(`异常:${JSON.stringify(data)}`) From d15705406c4b6b896e6acfe23566689cc430a557 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 26 Nov 2020 10:36:57 +0800 Subject: [PATCH 137/290] =?UTF-8?q?=E6=9B=B4=E6=96=B0BoxJs=E8=AE=A2?= =?UTF-8?q?=E9=98=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_jdfactory.js | 2 +- lxk0301.boxjs.json | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/jd_jdfactory.js b/jd_jdfactory.js index 1724b97..1c5ac03 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -44,7 +44,7 @@ if ($.isNode()) { } else { cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); } -let wantProduct = `移动电源`;//心仪商品名称 +let wantProduct = ``;//心仪商品名称 const JD_API_HOST = 'https://api.m.jd.com/client.action'; const inviteCodes = [`P04z54XCjVWnYaS5u2ak7ZCdan1Bdd2GGiWvC6_uERj`, 'P04z54XCjVWnYaS5m9cZ2ariXVJwHf0bgkG7Uo']; !(async () => { diff --git a/lxk0301.boxjs.json b/lxk0301.boxjs.json index f1b244d..81aa844 100644 --- a/lxk0301.boxjs.json +++ b/lxk0301.boxjs.json @@ -818,6 +818,29 @@ "https://raw.githubusercontent.com/58xinian/icon/master/xmyd_mini.png", "https://raw.githubusercontent.com/58xinian/icon/master/xmyd.png" ] + }, + { + "id": "lxk_jdfactory", + "name": "东东工厂", + "keys": [ + "FACTORAY_WANTPRODUCT_NAME" + ], + "settings": [ + { + "id": "FACTORAY_WANTPRODUCT_NAME", + "name": "心仪商品名称", + "val": "", + "type": "text", + "desc": "请尽量填写完整和别的商品有区分度" + } + ], + "author": "@lxk0301", + "repo": "https://github.com/lxk0301/jd_scripts", + "script": "https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jdfactory.js", + "icons": [ + "https://raw.githubusercontent.com/58xinian/icon/master/jd_factory_mini.png", + "https://raw.githubusercontent.com/58xinian/icon/master/jd_factory.png" + ] } ] } From cdb3c016c9a6f97d58525016b1981378a581269f Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 26 Nov 2020 10:40:18 +0800 Subject: [PATCH 138/290] =?UTF-8?q?=E4=B8=9C=E4=B8=9C=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_jdfactory.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jd_jdfactory.js b/jd_jdfactory.js index 1c5ac03..6520fe9 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -6,8 +6,8 @@ */ /* 东东工厂,不是京喜工厂 -目前不知免费产生的电量瓶颈是多少。 -故建议5小时运行一次 +免费产生的电量(10秒1个电量,500个电量满,5000秒到上限不生产,算起来是84分钟达到上限) +故建议1小时运行一次 开会员任务和去京东首页点击“数码电器任务目前未做 不会每次运行脚本都投入电力 只有当心仪的商品存在,并且收集起来的电量满足当前商品所需电力,才投入 From bd78049390cafdde3d9552b2e1b001b56599e44d Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 26 Nov 2020 10:49:33 +0800 Subject: [PATCH 139/290] =?UTF-8?q?=E6=96=87=E6=A1=A3=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=B8=9C=E4=B8=9C=E5=B7=A5=E5=8E=82=E8=84=9A=E6=9C=AC=E5=BF=83?= =?UTF-8?q?=E4=BB=AA=E5=95=86=E5=93=81=E7=9A=84=E7=8E=AF=E5=A2=83=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E4=BB=A5=E5=8F=8A=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/crontab_list.sh | 6 +++--- docker/crontab_list_ts.sh | 6 +++--- githubAction.md | 1 + jd_jdfactory.js | 1 + 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index e0b534b..912f805 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -1,6 +1,6 @@ -0 */1 * * * git -C /scripts/ pull >> /scripts/logs/pull.log 2>&1 -2 */1 * * * crontab /scripts/docker/${CRONTAB_LIST_FILE} -3 */1 * * * npm install --prefix /scripts >> /scripts/logs/npm_install.log 2>&1 +50 */1 * * * git -C /scripts/ pull >> /scripts/logs/pull.log 2>&1 +52 */1 * * * crontab /scripts/docker/${CRONTAB_LIST_FILE} +53 */1 * * * npm install --prefix /scripts >> /scripts/logs/npm_install.log 2>&1 # 每3天的23:50分清理一次日志 50 23 */3 * * rm -rf /scripts/logs/*.log diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index aa6fc2b..0a94f8c 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -1,6 +1,6 @@ -0 */1 * * * git -C /scripts/ pull |ts >> /scripts/logs/pull.log 2>&1 -2 */1 * * * crontab /scripts/docker/${CRONTAB_LIST_FILE} -3 */1 * * * npm install --prefix /scripts |ts >> /scripts/logs/npm_install.log 2>&1 +50 */1 * * * git -C /scripts/ pull |ts >> /scripts/logs/pull.log 2>&1 +52 */1 * * * crontab /scripts/docker/${CRONTAB_LIST_FILE} +53 */1 * * * npm install --prefix /scripts |ts >> /scripts/logs/npm_install.log 2>&1 # 每3天的23:50分清理一次日志 50 23 */3 * * rm -rf /scripts/logs/*.log diff --git a/githubAction.md b/githubAction.md index 5a12edb..3cfe13a 100644 --- a/githubAction.md +++ b/githubAction.md @@ -112,6 +112,7 @@ | `TG_PROXY_HOST` | Telegram 代理的 IP | 非必须 | 代理类型为 http。例子:http代理 http://127.0.0.1:1080 则填写 127.0.0.1 | | `TG_PROXY_PORT` | Telegram 代理的端口 | 非必须 | 例子:http代理 http://127.0.0.1:1080 则填写 1080 | | `MONEY_TREE_SELL_FRUIT` | 摇钱树是否卖出金果 | 非必须 | 控制摇钱树脚本是否自动卖出金果兑换成金币,`true`卖出,`false`不卖出,默认`true` | +| `FACTORAY_WANTPRODUCT_NAME` | 东东工厂心仪商品 | 非必须 | 提供心仪商品名称(请尽量填写完整和别的商品有区分度),达到条件后兑换,如不提供则会兑换当前所选商品 | ##### 互助码的填写规则 diff --git a/jd_jdfactory.js b/jd_jdfactory.js index 6520fe9..f933fd3 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -436,6 +436,7 @@ function jdfactory_getProductList(flag) { console.log(`${item.name.slice(-4)} ${item.sellOut === 1 ? '已抢光':'可选'} ${item.couponCount}`); if (item.name.indexOf(wantProduct) > -1 && item.couponCount > 0 && item.sellOut === 0) { await jdfactory_makeProduct(item.skuId); + break } } } From 8555d7f34fb38bfb4d080ca9febb6e5c887e463b Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 26 Nov 2020 10:52:17 +0800 Subject: [PATCH 140/290] update --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 86cec92..894e1e2 100644 --- a/README.md +++ b/README.md @@ -43,14 +43,15 @@ 20. 京豆变动通知([jd_bean_change.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_bean_change.js)) 21. 京喜工厂([jd_dreamFactory.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js)) 22. 东东小窝([jd_small_home.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_small_home.js)) -21. 以及其他一部分在特定时间可用的薅京豆脚本,如 [手机狂欢城](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_818.js) 、[星推官](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_xtg.js) 等。 +23. 东东工厂([jd_jdfactory.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jdfactory.js)) +24. 以及其他一部分在特定时间可用的薅京豆脚本,如 [手机狂欢城](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_818.js) 、[星推官](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_xtg.js) 等。 **脚本兼容: [QuantumultX](https://apps.apple.com/us/app/quantumult-x/id1443988620), [Surge](https://apps.apple.com/us/app/surge-4/id1442620678), [Loon](https://apps.apple.com/us/app/loon/id1373567447), 小火箭, JSBox, Node.js** **TODO** -- [x] 完善京小超脚本[jd_superMarket.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_superMarket.js) -- [x] 京小超商圈助力功能[jd_superMarket.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_superMarket.js) +- [ ] 东东工厂相互助力 +- [ ] 京喜工厂相互助力 ## 食用方法 From d6554d400cae0fa9bca318e7d7c11abc85b9ebb1 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 26 Nov 2020 11:12:35 +0800 Subject: [PATCH 141/290] update --- README.md | 3 ++- jd_jdfactory.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 894e1e2..6bad1de 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,8 @@ 21. 京喜工厂([jd_dreamFactory.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js)) 22. 东东小窝([jd_small_home.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_small_home.js)) 23. 东东工厂([jd_jdfactory.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jdfactory.js)) -24. 以及其他一部分在特定时间可用的薅京豆脚本,如 [手机狂欢城](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_818.js) 、[星推官](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_xtg.js) 等。 +24. 点点券([jd_necklace.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_necklace.js)) +26. 以及其他一部分在特定时间可用的薅京豆脚本,如 [手机狂欢城](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_818.js) 、[星推官](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_xtg.js) 等。 **脚本兼容: [QuantumultX](https://apps.apple.com/us/app/quantumult-x/id1443988620), [Surge](https://apps.apple.com/us/app/surge-4/id1442620678), [Loon](https://apps.apple.com/us/app/loon/id1373567447), 小火箭, JSBox, Node.js** diff --git a/jd_jdfactory.js b/jd_jdfactory.js index f933fd3..ed7b63f 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -122,7 +122,7 @@ async function algorithm() { console.log(`\n已选商品:${name}`); console.log(`当前已投入电量/所需电量:${useScore}/${totalScore}`); console.log(`已选商品剩余量:${couponCount}`); - console.log(`当前蓄电池电量:${remainScore}`); + console.log(`当前总电量:${remainScore * 1 + useScore * 1}`); console.log(`当前完成度:${((remainScore * 1 + useScore * 1)/(totalScore * 1)).toFixed(2) * 100}%\n`); message += `京东账号${$.index} ${$.nickName}\n`; message += `已选商品:${name}\n`; From 81f34cb19e9a529f6bb8227901cba2c6146f62f1 Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Thu, 26 Nov 2020 11:30:44 +0800 Subject: [PATCH 142/290] Update deploy_tencent_scf.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 同步新增secrets --- .github/workflows/deploy_tencent_scf.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml index a259d30..a69adf3 100644 --- a/.github/workflows/deploy_tencent_scf.yml +++ b/.github/workflows/deploy_tencent_scf.yml @@ -26,6 +26,7 @@ jobs: - name: "将Secrets里面配置的变量添加到severless.yml里面作为环境变量" run: | if [ $JD_COOKIE ]; then sed -i "/variables/a\ JD_COOKIE: $JD_COOKIE" serverless.yml; fi; + if [ $JD_USER_AGENT ]; then sed -i "/variables/a\ JD_USER_AGENT: $JD_USER_AGENT" serverless.yml; fi; if [ $JD_BEAN_STOP ]; then sed -i "/variables/a\ JD_BEAN_STOP: $JD_BEAN_STOP" serverless.yml; fi; if [ $JD_BEAN_SIGN_STOP_NOTIFY ]; then sed -i "/variables/a\ JD_BEAN_SIGN_STOP_NOTIFY: $JD_BEAN_SIGN_STOP_NOTIFY" serverless.yml; fi; if [ $JD_BEAN_SIGN_NOTIFY_SIMPLE ]; then sed -i "/variables/a\ JD_BEAN_SIGN_NOTIFY_SIMPLE: $JD_BEAN_SIGN_NOTIFY_SIMPLE" serverless.yml; fi; @@ -58,10 +59,13 @@ jobs: if [ $SUPERMARKET_SHARECODES ]; then sed -i "/variables/a\ SUPERMARKET_SHARECODES: $SUPERMARKET_SHARECODES" serverless.yml; fi; if [ $TG_PROXY_HOST ]; then sed -i "/variables/a\ TG_PROXY_HOST: $TG_PROXY_HOST" serverless.yml; fi; if [ $TG_PROXY_PORT ]; then sed -i "/variables/a\ TG_PROXY_PORT: $TG_PROXY_PORT" serverless.yml; fi; + if [ $MONEY_TREE_SELL_FRUIT ]; then sed -i "/variables/a\ MONEY_TREE_SELL_FRUIT: $MONEY_TREE_SELL_FRUIT" serverless.yml; fi; + if [ $FACTORAY_WANTPRODUCT_NAME ]; then sed -i "/variables/a\ FACTORAY_WANTPRODUCT_NAME: $FACTORAY_WANTPRODUCT_NAME" serverless.yml; fi; cat serverless.yml env env: #因为直接读取secrets里面的值很多字符不会自动转译,导致写入serverless.yml异常,所以设置到环境变量,在读取环境变量转译过的值 JD_COOKIE: ${{ secrets.JD_COOKIE}} + JD_USER_AGENT: ${{ secrets.JD_USER_AGENT}} JD_BEAN_STOP: ${{ secrets.JD_BEAN_STOP}} JD_BEAN_SIGN_STOP_NOTIFY: ${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}} JD_BEAN_SIGN_NOTIFY_SIMPLE: ${{ secrets.JD_BEAN_SIGN_NOTIFY_SIMPLE}} @@ -94,6 +98,8 @@ jobs: SUPERMARKET_SHARECODES: ${{ secrets.SUPERMARKET_SHARECODES}} TG_PROXY_HOST: ${{ secrets.TG_PROXY_HOST}} TG_PROXY_PORT: ${{ secrets.TG_PROXY_PORT}} + MONEY_TREE_SELL_FRUIT: ${{ secrets.MONEY_TREE_SELL_FRUIT}} + FACTORAY_WANTPRODUCT_NAME: ${{ secrets.FACTORAY_WANTPRODUCT_NAME}} - name: "部署到腾讯云函数" run: serverless deploy From e645026d216052ca3d3ae9c5e04318ea831c9b0a Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 26 Nov 2020 11:57:17 +0800 Subject: [PATCH 143/290] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=AC=E5=96=9C?= =?UTF-8?q?=E5=B7=A5=E5=8E=82=E5=81=B7=E5=A5=BD=E5=8F=8B=E7=94=B5=E5=8A=9B?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=9C=AA=E7=94=9F=E6=95=88=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index e525e7b..23ba958 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -34,7 +34,7 @@ const notify = $.isNode() ? require('./sendNotify') : ''; let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 let cookiesArr = [], cookie = ''; -const inviteCodes = ['gB99tYLjvPcEFloDgamoBw==', 'V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=']; +const inviteCodes = ['gB99tYLjvPcEFloDgamoBw==', 'V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=', '1uzRU5HkaUgvy0AB5Q9VUg==']; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; if ($.isNode()) { Object.keys(jdCookieNode).forEach((item) => { @@ -102,10 +102,12 @@ async function jdDreamFactory() { // 收取发电机的电力 -function collectElectricity(facId = factoryId, help = false) { +function collectElectricity(facId = factoryId, help = false, master = '') { return new Promise(async resolve => { - const url = `/dreamfactory/generator/CollectCurrentElectricity?zone=dream_factory&apptoken=&pgtimestamp=&phoneID=&factoryid=${facId}&doubleflag=1&sceneval=2&g_login_type=1`; - + let url = `/dreamfactory/generator/CollectCurrentElectricity?zone=dream_factory&apptoken=&pgtimestamp=&phoneID=&factoryid=${facId}&doubleflag=1&sceneval=2&g_login_type=1`; + if (help && master) { + url = `/dreamfactory/generator/CollectCurrentElectricity?zone=dream_factory&factoryid=${facId}&master=${master}&sceneval=2&g_login_type=1`; + } $.get(taskurl(url), (err, resp, data) => { try { if (err) { @@ -127,7 +129,7 @@ function collectElectricity(facId = factoryId, help = false) { } } else { - // console.log(data) + console.log(data.msg) } } else { console.log(`京东服务器返回空数据`) @@ -325,7 +327,7 @@ function assistFriend(sharepin) { if (data['ret'] === 0) { console.log(`助力朋友:${sharepin}成功`) } else { - console.log(`助力朋友:${data.msg}`) + console.log(`助力朋友[${sharepin}]失败:${data.msg}`) } } else { console.log(`京东服务器返回空数据`) @@ -441,7 +443,7 @@ function userInfo() { function stealFriend() { return new Promise(async resolve => { const url = `//dreamfactory/friend/QueryFactoryManagerList?zone=dream_factory&sceneval=2`; - $.get(taskurl(url), (err, resp, data) => { + $.get(taskurl(url), async (err, resp, data) => { data = JSON.parse(data); if (data['ret'] === 0) { data = data['data']; @@ -449,11 +451,13 @@ function stealFriend() { let pin = data.list[i]['encryptPin']; if (data.list[i]['collectFlag'] === 1) { //只有collectFlag为1的时候,才能偷取好友电力 - getFactoryIdByPin(pin).then(async (facId) => { - if (facId) await collectElectricity(facId,true) - }).catch(err => { - - }) + const facId = await getFactoryIdByPin(pin); + if (facId) await collectElectricity(facId,true, data.list[i]['key']) + // getFactoryIdByPin(pin).then(async (facId) => { + // if (facId) await collectElectricity(facId,true) + // }).catch(err => { + // + // }) } else { console.log(`此好友[${pin}]暂不能被你收取电力`) } From 5baf5621b3bb9c566a7281e63028fad54432c1ed Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 26 Nov 2020 13:02:12 +0800 Subject: [PATCH 144/290] =?UTF-8?q?=E4=B8=9C=E4=B8=9C=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=20=E6=97=A7=E7=94=A8=E6=88=B7=E4=B8=94?= =?UTF-8?q?=E6=9C=AA=E9=80=89=E8=B4=AD=E5=95=86=E5=93=81=E7=9A=84=E8=B4=A6?= =?UTF-8?q?=E5=8F=B7=E5=8F=AF=E5=81=9A=E4=BB=BB=E5=8A=A1=E4=B8=8E=E6=94=B6?= =?UTF-8?q?=E9=9B=86=E7=94=B5=E5=8A=9B=20=E4=BC=98=E5=8C=96=E6=97=A7?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=B8=94=E6=9C=AA=E9=80=89=E8=B4=AD=E5=95=86?= =?UTF-8?q?=E5=93=81=E7=9A=84=E8=B4=A6=E5=8F=B7=E6=8A=95=E5=85=A5=E7=94=B5?= =?UTF-8?q?=E5=8A=9B=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 2 +- jd_jdfactory.js | 44 +++++++++++++++++++++++++++++++++++++------- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 23ba958..20cdfcb 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -290,7 +290,7 @@ function hireAward() { message += `【打工电力】:收取成功\n` } else { console.log(`打工电力:收取失败,${data.msg}`) - message += `【打工电力】:收取失败,${data.msg}\n` + message += `【打工电力】收取失败,${data.msg}\n` } } else { console.log(`京东服务器返回空数据`) diff --git a/jd_jdfactory.js b/jd_jdfactory.js index ed7b63f..4bc5b75 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -2,7 +2,7 @@ * @Author: lxk0301 https://github.com/lxk0301 * @Date: 2020-11-25 18:19:21 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-26 10:20:02 + * @Last Modified time: 2020-11-26 12:58:02 */ /* 东东工厂,不是京喜工厂 @@ -85,7 +85,9 @@ const inviteCodes = [`P04z54XCjVWnYaS5u2ak7ZCdan1Bdd2GGiWvC6_uERj`, 'P04z54XCjVW async function jdFactory() { await jdfactory_getHomeData(); await helpFriends(inviteCodes); - if ($.newUser === 1 || ($.newUser !==1 && $.haveProduct === 2)) return + // $.newUser !==1 && $.haveProduct === 2,老用户但未选购商品 + // $.newUser === 1新用户 + if ($.newUser === 1) return await jdfactory_collectElectricity();//收集产生的电量 await jdfactory_getTaskDetail(); await doTask(); @@ -117,6 +119,7 @@ async function algorithm() { $.haveProduct = data.data.result.haveProduct; $.userName = data.data.result.userName; $.newUser = data.data.result.newUser; + wantProduct = $.isNode() ? (process.env.FACTORAY_WANTPRODUCT_NAME ? process.env.FACTORAY_WANTPRODUCT_NAME : wantProduct) : ($.getdata('FACTORAY_WANTPRODUCT_NAME') ? $.getdata('FACTORAY_WANTPRODUCT_NAME') : wantProduct); if (data.data.result.factoryInfo) { let { totalScore, useScore, produceScore, remainScore, couponCount, name } = data.data.result.factoryInfo console.log(`\n已选商品:${name}`); @@ -130,11 +133,10 @@ async function algorithm() { message += `已选商品剩余量:${couponCount}\n`; message += `当前总电量:${remainScore * 1 + useScore * 1}\n`; message += `当前完成度:${((remainScore * 1 + useScore * 1)/(totalScore * 1)).toFixed(2) * 100}%\n`; - wantProduct = $.isNode() ? (process.env.FACTORAY_WANTPRODUCT_NAME ? process.env.FACTORAY_WANTPRODUCT_NAME : wantProduct) : ($.getdata('FACTORAY_WANTPRODUCT_NAME') ? $.getdata('FACTORAY_WANTPRODUCT_NAME') : wantProduct); if (wantProduct) { console.log(`BoxJs或环境变量提供的心仪商品:${wantProduct}\n`); await jdfactory_getProductList(true); - let wantProductSkuId = '', fullScore; + let wantProductSkuId = ''; for (let item of $.canMakeList) { if (item.name.indexOf(wantProduct) > - 1) { totalScore = item['fullScore'] * 1; @@ -167,6 +169,33 @@ async function algorithm() { console.log(`故不一次性投入电力,一直放到蓄电池累计\n`); } } + } else { + console.log(`\n此账号${$.index}${$.nickName}暂未选择商品\n`); + if (wantProduct) { + console.log(`BoxJs或环境变量提供的心仪商品:${wantProduct}\n`); + await jdfactory_getProductList(true); + let wantProductSkuId = '', name, totalScore, couponCount, remainScore; + for (let item of $.canMakeList) { + if (item.name.indexOf(wantProduct) > - 1) { + totalScore = item['fullScore'] * 1; + couponCount = item.couponCount; + name = item.name; + } + if (item.name.indexOf(wantProduct) > - 1 && item.couponCount > 0) { + wantProductSkuId = item.skuId; + } + } + if (wantProductSkuId && (($.batteryValue * 1) >= (totalScore))) { + console.log(`\n提供的心仪商品${name}目前数量:${couponCount},且当前总电量为:${$.batteryValue * 1},【满足】兑换此商品所需总电量:${totalScore}`); + console.log(`请去活动页面更换成心仪商品并手动投入电量兑换\n`); + $.msg($.name, '', `京东账号${$.index}${$.nickName}\n您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${$.batteryValue * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请去活动页面选择此心仪商品并手动投入电量兑换`); + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${$.batteryValue * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请去活动页面选择此心仪商品并手动投入电量兑换`); + } else { + console.log(`您心仪商品${name}\n当前数量为:${couponCount}\n兑换所需电量为:${totalScore}\n您当前总电量为:${$.batteryValue * 1}\n不满足兑换心仪商品的条件\n`) + } + } else { + console.log(`BoxJs或环境变量暂未提供心仪商品\n如需兑换心仪商品,请提供心仪商品名称\n`); + } } } else { console.log(`异常:${JSON.stringify(data)}`) @@ -350,7 +379,8 @@ function jdfactory_collectElectricity() { if (safeGet(data)) { data = JSON.parse(data); if (data.data.bizCode === 0) { - console.log(`成功收集${data.data.result.electricityValue}电量,当前蓄电池总电量:${data.data.result.batteryValue}\n`) + console.log(`成功收集${data.data.result.electricityValue}电量,当前蓄电池总电量:${data.data.result.batteryValue}\n`); + $.batteryValue = data.data.result.batteryValue; } } } @@ -484,9 +514,9 @@ function jdfactory_getHomeData() { // $.msg($.name, '暂未开启活动', `京东账号${$.index}${$.nickName}暂未开启${$.name}活动\n请去京东APP->搜索'玩一玩'->东东工厂->开启\n或点击弹窗即可到达${$.name}活动`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); } if ($.newUser !== 1 && $.haveProduct === 2) { - console.log(`此京东账号${$.index}${$.nickName}暂未选购商品\n现在为您从库存里面现有数量中选择一商品`); + console.log(`此京东账号${$.index}${$.nickName}暂未选购商品\n现在也能为您做任务和收集免费电力`); // $.msg($.name, '暂未选购商品', `京东账号${$.index}${$.nickName}暂未选购商品\n请去京东APP->搜索'玩一玩'->东东工厂->选购一件商品\n或点击弹窗即可到达${$.name}活动`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); - await jdfactory_getProductList();//选购商品 + // await jdfactory_getProductList();//选购商品 } } else { console.log(`异常:${JSON.stringify(data)}`) From 9a6745a888f71ee34676d9db1d8ef2060cd5a7ab Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Thu, 26 Nov 2020 13:18:48 +0800 Subject: [PATCH 145/290] Update serverless.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化Crontab --- serverless.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/serverless.yml b/serverless.yml index f489fa8..a0f27dc 100644 --- a/serverless.yml +++ b/serverless.yml @@ -19,7 +19,7 @@ inputs: - timer: # 签到 parameters: name: jd_bean_sign - cronExpression: "0 0 0,12,18 * * * *" + cronExpression: "0 0 0,3 * * * *" enable: true argument: jd_bean_sign - timer: # 京小超兑换奖品# 摇京豆 @@ -37,7 +37,7 @@ inputs: - timer: # 宠汪汪喂食# 宠汪汪# 摇钱树# 京东种豆得豆# 京喜工厂 #东东工厂 parameters: name: joy_feedPets_joy_moneyTree_plantBean_dreamFactory_jd_jdfactory - cronExpression: "0 15 */1 * * * *" + cronExpression: "0 3 */1 * * * *" enable: true argument: jd_joy_feedPets&jd_joy&jd_moneyTree&jd_plantBean&jd_dreamFactory&jd_jdfactory - timer: # 宠汪汪积分兑换奖品# 宠汪汪偷好友积分与狗# 点点券 From ec48f702afb6fc97104c94716b796befc703745f Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 26 Nov 2020 13:49:54 +0800 Subject: [PATCH 146/290] =?UTF-8?q?jd=5Fbean=5Fsign.js=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E7=9B=AE=E5=89=8DBark=20APP=E6=8E=A8=E9=80=81=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E6=B6=88=E6=81=AF=E5=AF=B9=E6=8E=A8=E9=80=81=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E9=95=BF=E5=BA=A6=E6=9C=89=E9=99=90=E5=88=B6=EF=BC=8C?= =?UTF-8?q?=E4=BC=9A=E5=AF=BC=E8=87=B4=E6=AD=A4=E8=84=9A=E6=9C=AC=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E5=A4=B1=E8=B4=A5=EF=BC=8C=E6=95=85=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E4=BA=86BARK=E6=8E=A8=E9=80=81=E7=9A=84=EF=BC=8C=E6=AD=A4?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E4=BC=9A=E9=BB=98=E8=AE=A4=E6=94=B9=E6=88=90?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E7=AE=80=E6=B4=81=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_bean_sign.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/jd_bean_sign.js b/jd_bean_sign.js index 80c119a..b1bb810 100644 --- a/jd_bean_sign.js +++ b/jd_bean_sign.js @@ -1,7 +1,7 @@ /* 京豆签到,自用,可N个京东账号,IOS软件用户请使用 https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js Node.JS专用 -更新时间:2020-11-17 +更新时间:2020-11-26 从 github @ruicky改写而来 version v0.0.1 create by ruicky @@ -42,7 +42,7 @@ if ($.isNode()) { $.nickName = ''; await TotalBean(); console.log(`*****************开始京东账号${$.index} ${$.nickName || $.UserName}京豆签到*******************\n`); - console.log(`⚠️⚠️⚠️⚠️目前Bark APP推送通知消息失败的,请换用其他通知方式,Bark对推送内容长度有限制 ⚠️⚠️⚠️⚠️\n`) + console.log(`⚠️⚠️⚠️⚠️目前Bark APP推送通知消息对推送内容长度有限制,如使用此推送方式脚本会默认转换成简洁内容推送 ⚠️⚠️⚠️⚠️\n`) await changeFile(content); await execSign(); } @@ -71,6 +71,7 @@ async function execSign() { const barkContentStart = notifyContent.indexOf('【签到概览】') const barkContentEnd = notifyContent.length; if (process.env.JD_BEAN_SIGN_STOP_NOTIFY === 'true') return + if (notify.BARK_PUSH) process.env.JD_BEAN_SIGN_NOTIFY_SIMPLE = 'true'; if (process.env.JD_BEAN_SIGN_NOTIFY_SIMPLE === 'true') { if (barkContentStart > -1 && barkContentEnd > -1) { BarkContent = notifyContent.substring(barkContentStart, barkContentEnd); From e60210f5bd4995afde7b7a5ec3114e759f9657bb Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 26 Nov 2020 15:12:12 +0800 Subject: [PATCH 147/290] =?UTF-8?q?=E4=B8=9C=E4=B8=9C=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=E4=B8=8A=E7=BA=BF=E9=9A=8F=E6=9C=BA=E4=BA=92=E5=8A=A9=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8Csecret/=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8FDD?= =?UTF-8?q?FACTORY=5FSHARECODES=20=E8=A7=84=E5=88=99=E5=92=8C=E7=A7=8D?= =?UTF-8?q?=E8=B1=86=E5=86=9C=E5=9C=BA=E7=AD=89=E7=AD=89=E4=B8=80=E6=A0=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jdFactoryShareCodes.js | 31 ++++++++++++++++ jd_jdfactory.js | 80 +++++++++++++++++++++++++++++++++++++++--- 2 files changed, 106 insertions(+), 5 deletions(-) create mode 100644 jdFactoryShareCodes.js diff --git a/jdFactoryShareCodes.js b/jdFactoryShareCodes.js new file mode 100644 index 0000000..4bbbe48 --- /dev/null +++ b/jdFactoryShareCodes.js @@ -0,0 +1,31 @@ +/* +京东种豆得豆互助码 +此文件为Node.js专用。其他用户请忽略 +支持京东N个账号 + */ +//云服务器腾讯云函数等NOde.js用户在此处填写东东萌宠的好友码。 +// github action用户的好友互助码填写到Action->Settings->Secrets->new Secret里面(Name填写 PLANT_BEAN_SHARECODES(此处的Name必须按此来写,不能随意更改),内容处填写互助码,填写规则如下) +// 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例 +// 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2 +let shareCodes = [ + '',//账号一的好友shareCode,不同好友中间用@符号隔开 + '',//账号二的好友shareCode,不同好友中间用@符号隔开 +] +// 判断github action里面是否有东东萌宠互助码 +if (process.env.DDFACTORY_SHARECODES) { + if (process.env.DDFACTORY_SHARECODES.indexOf('&') > -1) { + console.log(`您的互助码选择的是用&隔开\n`) + shareCodes = process.env.DDFACTORY_SHARECODES.split('&'); + } else if (process.env.DDFACTORY_SHARECODES.indexOf('\n') > -1) { + console.log(`您的互助码选择的是用换行隔开\n`) + shareCodes = process.env.DDFACTORY_SHARECODES.split('\n'); + } else { + shareCodes = process.env.DDFACTORY_SHARECODES.split(); + } +} else if (process.env.JD_COOKIE) { + console.log(`由于您secret里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`) +} +for (let i = 0; i < shareCodes.length; i++) { + const index = (i + 1 === 1) ? '' : (i + 1); + exports['shareCodes' + index] = shareCodes[i]; +} \ No newline at end of file diff --git a/jd_jdfactory.js b/jd_jdfactory.js index 4bc5b75..2ff8a1f 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -34,6 +34,7 @@ const notify = $.isNode() ? require('./sendNotify') : ''; //Node.js用户请在jdCookie.js处填写京东ck; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 +const randomCount = $.isNode() ? 20 : 5; //IOS等用户直接用NobyDa的jd cookie let cookiesArr = [], cookie = '', message; if ($.isNode()) { @@ -48,6 +49,7 @@ let wantProduct = ``;//心仪商品名称 const JD_API_HOST = 'https://api.m.jd.com/client.action'; const inviteCodes = [`P04z54XCjVWnYaS5u2ak7ZCdan1Bdd2GGiWvC6_uERj`, 'P04z54XCjVWnYaS5m9cZ2ariXVJwHf0bgkG7Uo']; !(async () => { + await requireConfig(); if (!cookiesArr[0]) { $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); return; @@ -72,6 +74,7 @@ const inviteCodes = [`P04z54XCjVWnYaS5u2ak7ZCdan1Bdd2GGiWvC6_uERj`, 'P04z54XCjVW } continue } + await shareCodesFormat(); await jdFactory() } } @@ -84,7 +87,7 @@ const inviteCodes = [`P04z54XCjVWnYaS5u2ak7ZCdan1Bdd2GGiWvC6_uERj`, 'P04z54XCjVW }) async function jdFactory() { await jdfactory_getHomeData(); - await helpFriends(inviteCodes); + await helpFriends(); // $.newUser !==1 && $.haveProduct === 2,老用户但未选购商品 // $.newUser === 1新用户 if ($.newUser === 1) return @@ -210,10 +213,14 @@ async function algorithm() { }) }) } -async function helpFriends(inviteCodes) { - for (let code of inviteCodes) { +async function helpFriends() { + for (let code of $.newShareCodes) { if (!code) continue - await jdfactory_collectScore(code); + const helpRes = await jdfactory_collectScore(code); + if (helpRes.code === 0 && helpRes.data.bizCode === -7) { + console.log(`助力机会已耗尽,跳出`); + break + } } } async function doTask() { @@ -335,7 +342,7 @@ function jdfactory_collectScore(taskToken) { } catch (e) { $.logErr(e, resp) } finally { - resolve(); + resolve(data); } }) }) @@ -531,6 +538,69 @@ function jdfactory_getHomeData() { }) }) } +function readShareCode() { + console.log(`开始`) + return new Promise(async resolve => { + $.get({url: `http://api.turinglabs.net/api/v1/jd/ddfactory/read/${randomCount}/`}, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + console.log(`随机取个${randomCount}码放到您固定的互助码后面`) + data = JSON.parse(data); + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + // await $.wait(2000); + // resolve() + }) +} +//格式化助力码 +function shareCodesFormat() { + return new Promise(async resolve => { + // console.log(`第${$.index}个京东账号的助力码:::${$.shareCodesArr[$.index - 1]}`) + $.newShareCodes = []; + if ($.shareCodesArr[$.index - 1]) { + $.newShareCodes = $.shareCodesArr[$.index - 1].split('@'); + } else { + console.log(`由于您第${$.index}个京东账号未提供shareCode,将采纳本脚本自带的助力码\n`) + const tempIndex = $.index > inviteCodes.length ? (inviteCodes.length - 1) : ($.index - 1); + $.newShareCodes = inviteCodes[tempIndex].split('@'); + } + const readShareCodeRes = await readShareCode(); + if (readShareCodeRes && readShareCodeRes.code === 200) { + $.newShareCodes = [...new Set([...$.newShareCodes, ...(readShareCodeRes.data || [])])]; + } + console.log(`第${$.index}个京东账号将要助力的好友${JSON.stringify($.newShareCodes)}`) + resolve(); + }) +} +function requireConfig() { + return new Promise(resolve => { + console.log(`开始获取${$.name}配置文件\n`); + //Node.js用户请在jdCookie.js处填写京东ck; + const shareCodes = $.isNode() ? require('./jdFactoryShareCodes.js') : ''; + console.log(`共${cookiesArr.length}个京东账号\n`) + if ($.isNode()) { + $.shareCodesArr = []; + Object.keys(shareCodes).forEach((item) => { + if (shareCodes[item]) { + $.shareCodesArr.push(shareCodes[item]) + } + }) + } + // console.log(`\n种豆得豆助力码::${JSON.stringify($.shareCodesArr)}`); + console.log(`您提供了${$.shareCodesArr.length}个账号的${$.name}助力码\n`); + resolve() + }) +} function taskPostUrl(function_id, body = {}, function_id2) { let url = `${JD_API_HOST}`; if (function_id2) { From 0b52f56f40d3b25b874ff3401d6d69872ef95b57 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 26 Nov 2020 15:40:47 +0800 Subject: [PATCH 148/290] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_jdfactory.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jd_jdfactory.js b/jd_jdfactory.js index 2ff8a1f..08e4967 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -587,9 +587,9 @@ function requireConfig() { console.log(`开始获取${$.name}配置文件\n`); //Node.js用户请在jdCookie.js处填写京东ck; const shareCodes = $.isNode() ? require('./jdFactoryShareCodes.js') : ''; - console.log(`共${cookiesArr.length}个京东账号\n`) + console.log(`共${cookiesArr.length}个京东账号\n`); + $.shareCodesArr = []; if ($.isNode()) { - $.shareCodesArr = []; Object.keys(shareCodes).forEach((item) => { if (shareCodes[item]) { $.shareCodesArr.push(shareCodes[item]) From 41c5ab2d6217587a2490442635f845e0dc2e4465 Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Thu, 26 Nov 2020 15:58:42 +0800 Subject: [PATCH 149/290] Update deploy_tencent_scf.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增东东工厂互助secrets --- .github/workflows/deploy_tencent_scf.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml index a69adf3..2246679 100644 --- a/.github/workflows/deploy_tencent_scf.yml +++ b/.github/workflows/deploy_tencent_scf.yml @@ -57,6 +57,7 @@ jobs: if [ $PETSHARECODES ]; then sed -i "/variables/a\ PETSHARECODES: $PETSHARECODES" serverless.yml; fi; if [ $PLANT_BEAN_SHARECODES ]; then sed -i "/variables/a\ PLANT_BEAN_SHARECODES: $PLANT_BEAN_SHARECODES" serverless.yml; fi; if [ $SUPERMARKET_SHARECODES ]; then sed -i "/variables/a\ SUPERMARKET_SHARECODES: $SUPERMARKET_SHARECODES" serverless.yml; fi; + if [ $DDFACTORY_SHARECODES ]; then sed -i "/variables/a\ DDFACTORY_SHARECODES: $DDFACTORY_SHARECODES" serverless.yml; fi; if [ $TG_PROXY_HOST ]; then sed -i "/variables/a\ TG_PROXY_HOST: $TG_PROXY_HOST" serverless.yml; fi; if [ $TG_PROXY_PORT ]; then sed -i "/variables/a\ TG_PROXY_PORT: $TG_PROXY_PORT" serverless.yml; fi; if [ $MONEY_TREE_SELL_FRUIT ]; then sed -i "/variables/a\ MONEY_TREE_SELL_FRUIT: $MONEY_TREE_SELL_FRUIT" serverless.yml; fi; @@ -96,6 +97,7 @@ jobs: PETSHARECODES: ${{ secrets.PETSHARECODES}} PLANT_BEAN_SHARECODES: ${{ secrets.PLANT_BEAN_SHARECODES}} SUPERMARKET_SHARECODES: ${{ secrets.SUPERMARKET_SHARECODES}} + DDFACTORY_SHARECODES: ${{ secrets.DDFACTORY_SHARECODES}} TG_PROXY_HOST: ${{ secrets.TG_PROXY_HOST}} TG_PROXY_PORT: ${{ secrets.TG_PROXY_PORT}} MONEY_TREE_SELL_FRUIT: ${{ secrets.MONEY_TREE_SELL_FRUIT}} From d863af10f7e3667f048a711407daaefdeacf5f3b Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Thu, 26 Nov 2020 16:26:02 +0800 Subject: [PATCH 150/290] Update githubAction.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增东东工厂互助码环境变量以及说明 --- githubAction.md | 1 + 1 file changed, 1 insertion(+) diff --git a/githubAction.md b/githubAction.md index 3cfe13a..dd9e302 100644 --- a/githubAction.md +++ b/githubAction.md @@ -109,6 +109,7 @@ | `PETSHARECODES` | 东东萌宠互助码 | 非必须 | 填写规则请看 [jdPetShareCodes.js](https://github.com/lxk0301/jd_scripts/blob/master/jdPetShareCodes.js) 或见下方[互助码的填写规则](#互助码的填写规则) | | `PLANT_BEAN_SHARECODES` | 种豆得豆互助码 | 非必须 | 填写规则请看 [jdPlantBeanShareCodes.js](https://github.com/lxk0301/jd_scripts/blob/master/jdPlantBeanShareCodes.js) 或见下方[互助码的填写规则](#互助码的填写规则) | | `SUPERMARKET_SHARECODES`| 京小超商圈互助码 | 非必须 | 填写规则请看 [jdSuperMarketShareCodes.js](https://github.com/lxk0301/jd_scripts/blob/master/jdSuperMarketShareCodes.js) 或见下方[互助码的填写规则](#互助码的填写规则) | +| `DDFACTORY_SHARECODES`| 东东工厂互助码 | 非必须 | 填写规则请看 [jdFactoryShareCodes.js](https://github.com/lxk0301/jd_scripts/blob/master/jdFactoryShareCodes.js) 或见下方[互助码的填写规则](#互助码的填写规则) | | `TG_PROXY_HOST` | Telegram 代理的 IP | 非必须 | 代理类型为 http。例子:http代理 http://127.0.0.1:1080 则填写 127.0.0.1 | | `TG_PROXY_PORT` | Telegram 代理的端口 | 非必须 | 例子:http代理 http://127.0.0.1:1080 则填写 1080 | | `MONEY_TREE_SELL_FRUIT` | 摇钱树是否卖出金果 | 非必须 | 控制摇钱树脚本是否自动卖出金果兑换成金币,`true`卖出,`false`不卖出,默认`true` | From 3ee31507c2c2c5266aa9bd0f70c8bcc45b3754fa Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 26 Nov 2020 16:43:11 +0800 Subject: [PATCH 151/290] debug --- jd_jdfactory.js | 1 + 1 file changed, 1 insertion(+) diff --git a/jd_jdfactory.js b/jd_jdfactory.js index 08e4967..e9de1c1 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -499,6 +499,7 @@ function jdfactory_getHomeData() { console.log(`${$.name} API请求失败,请检查网路重试`) } else { if (safeGet(data)) { + console.log(data); data = JSON.parse(data); if (data.data.bizCode === 0) { $.haveProduct = data.data.result.haveProduct; From ce20841dbf9bcab6737fe9b3c932398e647460af Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 26 Nov 2020 17:56:27 +0800 Subject: [PATCH 152/290] =?UTF-8?q?=E4=BA=AC=E5=96=9C=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=E5=95=86=E5=93=81=E7=94=9F=E4=BA=A7=E5=AE=8C=E6=AF=95=E5=8F=AF?= =?UTF-8?q?=E5=85=91=E6=8D=A2=E6=97=B6=EF=BC=8C=E6=96=B0=E5=A2=9E=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E9=80=9A=E7=9F=A5=E5=8F=8A=E5=BC=B9=E7=AA=97=E9=80=9A?= =?UTF-8?q?=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 20cdfcb..9511a62 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -414,7 +414,7 @@ function doTask(taskId) { function userInfo() { return new Promise(async resolve => { const url = `/dreamfactory/userinfo/GetUserInfo?zone=dream_factory&pin=&sharePin=&shareType=&materialTuanPin=&materialTuanId=&sceneval=2`; - $.get(taskurl(url), (err, resp, data) => { + $.get(taskurl(url), async (err, resp, data) => { data = JSON.parse(data); if (data['ret'] === 0) { data = data['data']; @@ -424,21 +424,46 @@ function userInfo() { factoryId = factory.factoryId;//工厂ID productionId = production.productionId;//商品ID subTitle = data.user.pin; + await GetCommodityDetails(production.commodityDimId); console.log(`当前电力:${data.user.electric}`) console.log(`分享码: ${data.user.encryptPin}`); console.log(`生产进度:${(production.investedElectric / production.needElectric).toFixed(2) * 100}%`); + message += `【京东账号${$.index}】${$.nickName}\n` + message += `【生产商品】${$.productName}\n`; message += `【生产进度】${((production.investedElectric / production.needElectric) * 100).toFixed(2)}%\n`; + if (production.investedElectric >= production.needElectric) { + $.msg($.name, ``, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,毕请速去兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://wqsd.jd.com/pingou/dream_factory/index.html%22%20%7D'}) + await notify.sendNotify(`${$.name} - 京东账号${$.index} - ${$.nickName}`, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,毕请速去兑换`) + } } else { - $.unActive = true;//标记是否开启了此活动 - console.log('【提示】此账号京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动\n'); - $.msg($.name, '', `【提示】此账号[${$.nickName}]京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动`); + $.unActive = true;//标记是否开启了京喜活动或者选购了商品进行生产 + if (!data.factoryList) { + console.log('【提示】此账号京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动\n'); + $.msg($.name, '', `【提示】此账号[${$.nickName}]京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动`); + } else if (data.factoryList && !data.productionList) { + console.log(`【提示】此账号京喜工厂未选购商品\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 选购\n`) + $.msg($.name, '', `【提示】此账号[${$.nickName}]京喜工厂未选择商品\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 选择商品`); + } } } resolve() }) }) } - +//查询当前生产的商品名称 +function GetCommodityDetails(commodityDimId) { + return new Promise(async resolve => { + const url = `/dreamfactory/diminfo/GetCommodityDetails?zone=dream_factory&sceneval=2&g_login_type=1&commodityId=${commodityDimId}`; + $.get(taskurl(url), (err, resp, data) => { + data = JSON.parse(data); + if (data['ret'] === 0) { + data = data['data']; + $.productName = data['commodityList'][0].name; + } + resolve() + }) + }) +} function stealFriend() { return new Promise(async resolve => { From 6af0237807370540f94bfa5075c85b874d6c6f44 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 26 Nov 2020 18:02:59 +0800 Subject: [PATCH 153/290] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=94=99=E5=88=AB?= =?UTF-8?q?=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 9511a62..b5fe9fd 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -432,8 +432,8 @@ function userInfo() { message += `【生产商品】${$.productName}\n`; message += `【生产进度】${((production.investedElectric / production.needElectric) * 100).toFixed(2)}%\n`; if (production.investedElectric >= production.needElectric) { - $.msg($.name, ``, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,毕请速去兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://wqsd.jd.com/pingou/dream_factory/index.html%22%20%7D'}) - await notify.sendNotify(`${$.name} - 京东账号${$.index} - ${$.nickName}`, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,毕请速去兑换`) + $.msg($.name, ``, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,请速去兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://wqsd.jd.com/pingou/dream_factory/index.html%22%20%7D'}) + await notify.sendNotify(`${$.name} - 京东账号${$.index} - ${$.nickName}`, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,请速去兑换`) } } else { $.unActive = true;//标记是否开启了京喜活动或者选购了商品进行生产 From 317320d5121234a896a86a57261e53fd4118cdb7 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 26 Nov 2020 18:22:15 +0800 Subject: [PATCH 154/290] =?UTF-8?q?=E5=BC=80=E7=BA=A2=E5=8C=85=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=20=EF=BC=8C=E6=B5=8B=E8=AF=95=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index b5fe9fd..eca6528 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -425,6 +425,7 @@ function userInfo() { productionId = production.productionId;//商品ID subTitle = data.user.pin; await GetCommodityDetails(production.commodityDimId); + await DrawProductionStagePrize(productionId); console.log(`当前电力:${data.user.electric}`) console.log(`分享码: ${data.user.encryptPin}`); console.log(`生产进度:${(production.investedElectric / production.needElectric).toFixed(2) * 100}%`); @@ -464,7 +465,21 @@ function GetCommodityDetails(commodityDimId) { }) }) } - +//领取红包 +function DrawProductionStagePrize(productionId) { + return new Promise(async resolve => { + const url = `/dreamfactory/userinfo/DrawProductionStagePrize?zone=dream_factory&sceneval=2&g_login_type=1&productionId=${productionId}`; + $.get(taskurl(url), (err, resp, data) => { + console.log(`领取红包(测试中)结果:${data}`) + data = JSON.parse(data); + if (data['ret'] === 0) { + // data = data['data']; + // $.productName = data['commodityList'][0].name; + } + resolve() + }) + }) +} function stealFriend() { return new Promise(async resolve => { const url = `//dreamfactory/friend/QueryFactoryManagerList?zone=dream_factory&sceneval=2`; From 01169e669639ec94a062597e50489fd934bf8735 Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Thu, 26 Nov 2020 20:06:49 +0800 Subject: [PATCH 155/290] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=95=99=E7=A8=8B?= =?UTF-8?q?=E6=89=80=E9=9C=80=E7=9A=84=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加教程所需的图片 --- icon/TG_PUSH1.png | Bin 0 -> 47278 bytes icon/TG_PUSH2.png | Bin 0 -> 58042 bytes icon/TG_PUSH3.png | Bin 0 -> 24125 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 icon/TG_PUSH1.png create mode 100644 icon/TG_PUSH2.png create mode 100644 icon/TG_PUSH3.png diff --git a/icon/TG_PUSH1.png b/icon/TG_PUSH1.png new file mode 100644 index 0000000000000000000000000000000000000000..0e2c8a1482dffa4ac2dca4a4937e21fd4a67b991 GIT binary patch literal 47278 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

YB)9X-LL1$UvLv*NB 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 z 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 literal 0 HcmV?d00001 diff --git a/icon/TG_PUSH2.png b/icon/TG_PUSH2.png new file mode 100644 index 0000000000000000000000000000000000000000..a9d8c58d6669572f7e9892055a83361e236cc23a GIT binary patch literal 58042 zcmbrmXFyY3xGoq`R6syQKtPHjpdcWGA{|6gdhbo8h8BA7epZ@@l+Y0fH3==0K!}La zYbcQt5a|R$uOTqO@0^)CbMD-GXYQ|^tn9V-yVhR&Ezk3;e9+T*Mo-I53jhG<)t^5x z007Rr0030qFJGjzAeeaM0RSF=`V$qSz|2)Vov-nH*6FEk{m19muj=3UtbFa~lR~}q zYleBz_k?vsdp>>aUg~!#)9l(YwPwKNh$o>c%2d5Tm)3M=A9I|lwwoK|ePl_y`KoBD znD!bq`{zj3t9(Byjg$}9opP#u_Qu8*Gs8S&1UABj?fS-2os{~gNdGK`WOs|ymmD4O zQc)}d%*81-^qqYG@L05z@OC-tpQn6|l*jfTuh-AU_xmaS{qd!5*oD9Cs<~$a0R+8O zrawDwU5R2pJI=9DNuC`$fEOsk1pq!dT^>F=^7LOVK1Vq!XW!QQ_rm{qfrXoN!*J|* zOPi6>oJ*muFzw}=E}pG8FXIuqBQHJI=b!f$2`w!<}a!}>Jl$8s{>6S70tP=pnhqB?1A!j!j4 zf=XS&-44QGCf7OYGO7+H=&+li=Wblk_9&_0$kOME-saLCi9W_vif(Gq9n)-;K}2f-ySN7?dJ}UO-N86DT@-ylR?$Rut&PN~ zjb?gQ;iw`3j@y;~$716T6t|IvJe9-mH!OGyeX5DBxTGDfb(Byt^EO1nu_{o1tE(+FHvD=%@5!=89*+i;FpF7f z&d@M6F&II%2RRN(Qx`ugQN53^6=Q1k#SlH2tJa->fe;a?jX1Q`b zw0*>2@r6bN<$AX`)nXr++p2aj6*^5 z9uff>$W^(&7V-PrIrQGR>(NFlqj+ZZFCDox3GHl&v2gM@0YM<|Pj`2Di7TqD?Q8-4 zQg*jtl%;cC8e+~mvBS!=BTqhE6|*yzCYLokfPIXe!w4}JvkV`*L>Li_f!{D4irEme zxn>THMuaXux(HX+Qd3O+Q@f#PA`||3j`!?6jFdMXDEdYl+c)HpY7Nyl`6jkeKWn6? z_u`aG(&bBOX*0Yt3F8RHF=1)2SE>=}`2rB0-b~SLV9?fFIj6v^-LOl}$5=i?*L*Hg z{LtDar*OlT1;`wR>}ARu@lREAYDz_(2qX{)x)2HIucXM#FwIPnkNg{r-)T#UVULaZ zVQ<_0+O6X(yb#qZMihI><`%#`|GW?64;U)(^4cbJiP~VNxD1n z$mXwKzfUPnL|K6C+X@_9t^~!=4~zaLmooVN?h<-c>?8Ez*Yhzdio*LyB|Ksn|Ylw3|z8bcI9`~ z6eJ0}e|@Oum52T6z@F9k%|`^K@z#SHt2=*PX8gH@m!oefeS3&Yi$9ojhuNGm*^mlf zA;kCy(!}&CH;`ag`%vx79Y4AlN?D~YAW&sak|XrDbhTXi2i2Z5i6Q)8O#y@lW{U|Q z2MJGectokzWT)>Y{`KLH)ZC7@3436sa>)II-h@;dtXk?9=U*F4BOA8#COrG*x=u`8 z&bd-nwi#h>h7SsCNI!z*Rv(8sjoLFe)c(SN-eiy8{Ls^GeZp%kHI8l}STuMyw)JG^ z`{3n>R%Op{7>?O`C+Bg$q>)O&P^+`4XpRpJdV;{5q~kw3X8-prb>G;0ZES4ppmdP_ zLilTuV_1(zOgd*ES)JQbR5w$?)OLTY0JdyuL1KMF)p)-T%Ngu-SUv7x6Yc=@c&{`y zh|Ob&mZ02-=jt{OA&{|JN*KidoI^gaLZl3(C7PasJRh;va%(}^hKf}XgyYd_zzuD$4uwd{V2 zvkB3*m0Opmr>)cDBYd+xbqP>fRbL3~+a3yTFHe|BfyLkTr=bpfnRBeJ3zKM>I&_i5 zb7@CPxyEvKD4-Pm*=IG{e_^`2-ddi!1015<004OvjdZIikWoC|I1jVg)f&b2zqOGj z%+`O%`=HvFwad$#VNw+~n$Z`wcOYTQf3@t^Y-8#0$XaEYYk_N%Lu$nJN2vmZ-BSCqZ*aY{E(TbH*xaHPof$A#~dgrGI$e-kuQ5@t=j*1cJi^^1b<(8 zIYW`Ay}a$=M~(furT&P+Bw3A!0z~+{?uY%ew>wfkHBou(hkBCnG8pC;`Lz#)Xc0JSEk;zY~!oJ!T2nU9AIhrT57B;!TTlCb-YQossIoQDeoVkTmsY zdl9edko3kb{rbRu`|3t@kpzaRT7+#`6=A`7`~-mK|LeGP9p6U(_)I;@=T$R_rG)_unCVY$P_s*gQ0Ish%o!~I1-@Y(C z3Lp3s>u?be=_VI?;0dp$Eb_Ky;G~u)dW1jDwm0%@=d8&(Oe#+#X#du~RThg|& z`!Mrv@NW_jtL5<4qZEdd)}_agS6<x)1X*0F&fyB1rbnjxy80^1 zzide=MSS?u==HL20kN9RvF=~%8C*GZ6ER_mE1tgw(sy?VbWb9}od=8pPV(c~5R;UV zeXHaxiW)ymHPr-9=UVT{G2I|1*;6ajL2}z;RY)_h!s<74(ARAOyl3fAYj0qAVHk`G zu5>EtkBLI{jzO3+EaTTIZFYGLJf~`iwxSePV;>L~`n$>mzn`J^yNd9}MF_u9>xi#o zB^)bFvyGdiE{%H&~N%7O4-X@pWi znv>pVYrj3^R=j>j-Up}Vg2mRT)FISfIg=F{V*@6lpDLq4~2$lpf2UjlHcu^*`bqbL2rOssXydeg@d-1Sq?u> zEd}G@i~*PAb(+NM>l^86M@E*|O@9{-X&PIYlpOUAf+S=K785lJFZ{1BPZd_G6Ph?A zMTe~YM*TCiyR%-R?oO2mM`4|D@$Tn5wN+j#|Oic2NI1mjvcmh1#7w zIH0tm$|!u9g|&^0*6+)vvFjH0ZFO<)ecmVOvabhA+Z0_%7!qG_fmK@`Q8C|9Q?yIIeQ#*K zUt{)Cxb?|*{5e;aCtXs66qn>Sb-3^9!7m|em=6<64tYmH6~d z?*VdI=?a)5d(3Ng0?Vm1`GWd=cFn0(k&@M(vuVIjg*c@l?md%2v#LOc%h_#YQ=H54 z!iHO%6wvZ3#E7@Xqh~?Zy_^OHvN9`c<7hvC+P5J_$}fWnS-V~iSt-+IxRH?x7~G`W zvMh9a`+IOn_|qgf!Gfhv_qPOASejzAr`!FTHWFLUPfyMp>g0NM3|w&(kn6cwLqI-1 z{gWR1gDX|)4~^V=RX4{g<7kwC%dIR05%<+uJd|`Paw>OwD6FB6Quou$dycke+qD&~ zopeaPe0HER5wce^_dpl@hAn4w^m-T(UO)L@cJeInjCpI-6bEsqxUYhmZkN8HuY98P zVq!_kkPonPr-oA72fwzvOUYAt{-Gq3101)Qthvv6;3OoGcUO;v%qt!ys-mi#qIpM)-Q^A;zF!! z<@9sZF8eaNAj?`}mVe0nVZE9-Pgl!L>F`OtfqqyAZM9fxlRzFbze;|wq8+!J%{fV! z*nJmKHVRxP@vYY31H*hy@{ig)T?Zi?JKySH)9c4tb!12FNnh=lX--3puStySi`I3^ zN}?l(wW>6`k)>AFLRU~=L?2Y)L;5`;bBL#8D(e<|$+9*Hm-@XD50u6R06Sqg|D-5~e%CQ!rPTdC_Ij)JSk)kX>>}lDP@F72uL-aFL<lANYt{)NJ zAs8`G_0vvpGcVU3`+4B7`t>#3A&}r;{6_$y(Zq(SeN}0Jie~4VB%YKBjl3$9@q@`- zy_^oOIg1nE8R=?P%a(yxy%x)ErX^2@%9RW6_%^S;m~Xb+`99KJ!}sFE#C+Mbdwjix z&BB3NzM9K7TEa)MP3?09S$2x}^j1*gd|PKxa%#w$vX@7(7Bp76wq%^C;C_pL zXQlv&9V}8w^-!q4SI45x`MZYCRJ84xKbcGYZ=#C|1do!M+@0F$ItpI%n)=6bI@^z` zd>=>XMW;G{4QMhSSTn#YrYK1}Cpis57oJm-$qH*&Io&4~ojrT4-M%i+Ej>j_1*BbS zd0i%=EM=su7d<80)~W-*HtEpAlG9f>!7RRwMs)$@ZhHAn`m^I5hvQqv7m>-yE>@r0 zC#vSSghefj3mGk1%*@e5N^T`GF+OY}DLU`v6txApPt!NF$3kd!36#fbIMxPiC9NPS z@2zs*eECyK!i8IL6Y@MnR{x$8kNY)InuaF#9L=OI#gDHP|D5`LZ^K`uHsbWQ!l)S- z1{4l?yZkxOsh)ZOVL7K6oKNs;RGj1_yF_TC+=(ddAZ4lyf&Y_-CPo;-ZeOtCiWdxV2%Ws;0Cw zC_l8%!OCk3R2X8KW!%;a|lmgYgcLhTjPFXZvhA}wJ zKe3iUTje1ecZ!%r)ta?d9AgC+tsbDQ5YW*MEVj$VIxyX}djF)DSzAuroZ@b_9>-Hj z0zbUpc{hzh{j=sVlI=-1B!aQ-2^RVk;D!6Fb7k62lx>*(*F2&dMJf>1s?yh!W~qW@;rOK6*%ih z3L9~8b;kNNTMKaZ-MyVx8K7x7iRUzw_Hg^)6l?Z*!eK?8t zb2WGE&j*)?J$gUq;=YD@s~n3coDXcYtEyYVY2nFQ9nMd8v1>WMPTPN90Mqd~ zfajMkZCpEIbctg;H;%Ya?HPdikHA_H=ZP>yI`XeD+4iI*m{ z$Qr{CgU6QZM!QFvYnv{c?#7y~JD-cU_#B$rQm8?j8Wq<3eMyNu$aCU(v-Ap!F8CGa z>5{(NPX)!nA2t2b(~%95O;x+X?t{+BH-v7a^_G}8m^&MTembL_sO`W3N1O$QBpNIw znTyPTG|HH9a z2b`UPo<0nX-B^vQteY;418W8xd%k8i3mzpm=tR`74#J5aL)asrN~&c2=MLZXr4Kh~EW`$0J6^iaI4#zf!q7wV^2?oSRo(^JT8D=_u$h&d(aZ zF}~u0Y(ffpE=SLSNznppUZ9b>w%Ae z_kRZbg@|}NkJQTT8?rhTt_=3-UWv3ycm%nR(C2ST7*kwZe=zLKR2)QwsD%!2S_mRu zF*C3g(wOK4~?C%U%QycJPu(j9M~L-*2k|)3T0VwdGnPo*uE{E(q+^*Id*6 zr)c-mot|G+A%42UfzlyOW53$-p^J&qy5)JmCk~m+U9nThCa6)#TUY#Au=0Mkg0M_C(^e{5z*#bZ zvGQs#AN`E=S6+9Bu7L=K%5}r6p`^K@d(X#YZN1i?R}Z{1vj(mn#(Ge4nc7^=W;Ej592`zq$ZYdzLXZq-FdCea*tuKc3&YC|g>^ zByjvh*EW8rckmup>7V$p#M|yf3Uc(QtAH7_yC%nDcu1+e{rNrFUy+-0$GPMd0{a=h z?JdKcPK&!_`ecFEI%4oe3khXLti6zu@9_Nvb2r5y(s_XAjpwf7iA*~8Omgy@NW6gG zOW*D903xS&<~yHUG;85hVW;FsGTwJ_GL-SBeL3?w9pBEiJIIOx0QMuPwp@LF6xjaq z-9lye0k7A_1MeW@a{zRAp6Vr^v#Od(-9tPvnu-%l4I&@y_8a(9K#BNP+gqb8syU0Y zlxTF}`XfEU1S01my}V7>(N3>pIOU8-Oa+{eHq7DGl(~8lbspLB`mH^Xk^$L&fjs&V zs}96-g4E9gcBG=tOG1Hv@#XB6SRP7f`(NO5{xiS(PeKUtt^Y5T6z@PyO)Y!)Lrga4 z;3hqnQE_uvv4-l=pYGP9Rplc8b$lM4dwn30_nG)-kCu(EiO-JqxziGVQ0^I-KNxxL zwXfP3wIG+b0lYd|espvBS#aI11E+i-&sxpW(HX_^)_UT`S z>c>lz9Lu$W+dLFlGlbvzFDs>d%TbH{Q>@nHza$mq>z}JUY>@hYxvI!VY4~fMT|X55 z*HDpf`gR2(hbOweof{NjW%*yMwrZ&$Cj2Y6t)v)k>@qPnDBVvD4m|gl8sl+Qb2&Cu zb0+OcduJtn>$_!|NO9w|h&;r|Yc2 zAVhWRlU|fN9I3m50wRtYbf!-XVZqWh$w3i?*~6j{+zf#Jv?A`DI!nx9uVvnTk>&bn zi%grN!v43};36SIer~1FL)BLBKCF5##D=>eHG$j^9{Ogt@u%OFoqPYS%5uPjRifj`jXDILtZmHZeOl@~byk=GIl2Nj#6zc&&QQ6$NvFbm^JVIwhHN z*r~djFxxjeO1xEgb;m=tQGe1Dwsr%hx33|DcjrFfQe8h$K`gn&adRoQ4J^rr?M%BO z!<+*ZzFNtwU8Lub6`!ec%YAwVmUl!aiKIilgk6z>F3VhDTVAo8I`U(*0Kpyd1XN9U z%HzZ-TFTh6Wq4cG%jymDdk8#s@gIvZMa41N=DnqPI58=_{bt@ve+g$!yJ?T7h$)!v z-W%NdE-^LzPc>pRw)*4u^}Vvg!;$gfnR0nkV3BF@KzOy`Df+9vyO^P%@qDJnvhJ>n zx4TiWI#Psve%#G8>4aSPtEAxj1^awmy57>Q$?<1)BHb+iKA+jgFe^m4`m0b}JO7Ju znA4ibM;q=XJE1gL@{bSfQvTJoLR>zRB2G7kV6(#93qQ3-?#thsqk2SBsYF6)^`YxSFKu3{Kky!S^Nzs3M@x zk#ot=Nk97Wn>X3NMO!l?-4;XE{pqli-Blm{ePGb6P5LZ^_ISD$T{7N9%9yn+jr}xh zEklyn1cK+T(!0A>M%Q`aosw@!i)=jtG&+E7ABoNozpz?KU?akQRlEfGt`Pza`%xBk zvi?LPrAJD@Dg}Gr_CJ#p^?{jCZ$bWn- z@%k_I!qeJwW4~{Xt0gQqHGI3k5zmtCHMo#oIapIqkHm&aUjGty{DJvNsCMwYLxAk4 z;za*o0yu-9(F!UAwjUJkkhux%wsZ($`mWeqRw`~eI^r^-|3`Vk)2D)~lL)dkV!{gM z#JRHi0PD>3b1h*CwpKW@w~i&!loor|bis0ocSvCi7Pu|G=Rn%Gta0*K3gF2l$3t0V z0~uDbhm8$=k3~(&s}bd2PULPqhrr|W#~13HkQCSdR}1j9EeW#em>=*oLB&V2W=d!K zG2cxB%S(Q$h8J5s9xA5L*ERHr(`N<~A%nZu&fXH1G@dm zJ-h(Xy6eBiKj7n4bnO#Ov({C|Xt4lgsh~g7z8*gv*g)z+@+UvO>`VTuC-@}8?wm}ZwR#fxPF9h84>zVPYAkR6Pv21&-^xT?gaK(+;iUfd{?1zW++WxA zfHQ|UO4H6b;&uMgqO8!;n~R(Q(K_r>77?W52;Xlw}%|)`l3n ze6d~_Y2a7XoO>WyiOT)if66QVB_{vpGK&8ac4HL_!OEvmE7K8?M?1?!(a~DaD*$Eh z_*;q1$6FN)oU+BQ-zoO{Q4)sd8fsL?=x9ZD3FnHV-TCEJK;-d@=7+1UybUw#Dqi|}sIwpiLbj z+@LPiiAOVtV0Mo;n00?q+AwF{cRLY$Fi8c7Jn-f!?hUR`=itsvoU?&arQ~V!t^Tx- zl{>$@Ke5&s`WaxZJ|;7yO*k=#u~1`&qj!!G99dtMg)Fq`$#QyB%^(; z+eKn|6qdMaqU^sO?T2#gGzpRvDIY#go{?Uld(9j(V&LU;Jwlgq`7K=!%V9^;65p^a zE*smg>D04!Za0X{M&U8p#3M%ql;+Ss)VjgV#``r`ZQIrDxW?t+VG5*!{bG?578;l^ zJFW2&i`|5}vnj z>p)nzbDqyDIQ%eH5mDK%>1&Gqv9JG~q)6P2OJx)dXvo;{J*Z}1-M%WSZD?{T?*WQu z=%}r$xuoe&K_}}>TuQ+JU?rn~O?xMDmdnPV}VOVSC+J`Ng^iES=4a}? zUszJ-v*O7@zeM*e6WH&ZcY)WZU-Q2x#)Q5mZh^GvL{4^N%vpr=YzoFZP#+sm7#XkN zsoA3}%&&-yO!6P={0oGkz5pnklHETyCQ>1{N=mU8(JurUd%KNr!6oqbhjG4*Dbtlb z0?IVd&BTso{(EjhLL>DzhE}SoRN^+{8>9@zVr8M$#9)P0-w_v^qPL!O%Fc~qGapTo zp*2#@)~1ASf!1CPtKXysH&;!l-}D#BWHW~jHwZRZrpS9x^KSM9gjx%86LZG9Ixf=0 zLv&<#9d@!K`W3D($~RK?X@1-JqcLOgqbUKKsHGTMyPN!b`;%Z}cRq3Xgj)Lw6U$^i zVG`Gw*t6@C>Og_{OBejWezfT}(c7%sV8gGjU!22Ghw%YAl;D)mF?JJaUT0KRqg6U> zwPqo!x-T&C)s8wSU_=2_I8^X-kE-lD1>P|&gj>ti7UtNto;YHlKad6LgwVQJpPnI2 zn73(g7fg?@!zjI6W0`rrTf)Pl&{$o1)~&RrqvpVk!_K&8+!%LjCywer`xvfb9ZkCJXkNY@s{J!w&s2rrZfUJu z{Pe*RnR)S;?^y2IIy>Ky6+#O*z4GB~?f>c2&vi8ZR+{b`FdP{H^tdyo{`7HMobV$C5Vn4}Eqp=i`ljE@q(ylAKTVY4nj zx1%LSLVP#qy=&ZpZB}5J@*>aFuBI7_)1M^0fYw6c(aq>7#>zh1J2VLWPp)Zd%^`C~ z6xSK(J+wRMD@HJ3v(5LTPxj(x{y;%&plrTh;{CXReK(fj;0l2UX+`%-ZuNMyl#DXI z@|Cne)~XwNWG>R0^aNE>eE{(d;yD!V%$9!-a`i(czePzk^t%opRTTSN&HlnW-+7+u z7O>Ep-{*uW)2U85h$i#wQT#?;=5HV=t{m|vC3rTh?~<$>|7>3sN_eY~sPVS#DIY34 zs_RwsQRH$^JR#)d`Wh=`#{EPKKY@8$ajXEqU4cu&E{@j|H6#_io$4f^-qS~GefF~PODuF9@03{T-*9E$(t zT|Rd>-NjJoM~;=xbG|t5McfHL+Q2>GNp$j>F!qj6M0e^>jiK@BuKl)NI_qVb>9mYl zb2$V<>fnYiBf+2H6_)@+yiLgwJFj(gEbyq`BWmlq1UhivE^_<2*#@b3Vi)bFef{uq za!AiYM{S;mFXTx6N1vVJ&xY_#qA=3~RJ(0@6HMz~kL@Nd-rQ=Gg^ z62rBhi&x9aA$Feu3eWG=_3L*7fI3C6p9*7<0gFHsuxe*g0ZB z4y0AR(VrDSIX*fcY^94&nA}$`Jxk|yEV6il(eKM*M56e6`GreALx)jyG{VzM6P(xr5NF*nivr%=+8I;C z8k?XP+v$Vz|A5__8@g5Gni1IU4EoP82@WB_Bx47Q1+*0PL zT!%6uX1st`a(tqfLjF5q&S29Ib6(`a(gfO%<+D=)_z_rHLGl!@wjesx#dpKsu8^Hu zY=T-{?%UzELT&yNT%5aSmMTc!=phT?uWgeWLcA2q29mtTcL(vko|M2lY+_RC70v;7 z)3eJAtE;Qgq))JHNp=kpfKlR)0h-H(%?9@`n~?5&oIFOUF8wrX)wb&AyoB(Yeosv` zO(`+yn%#qptamQtZ!$WM(0)R%p;^x}?cP20o3%18nx`$wNt`_+-8xdj8{~W&{oP{F zqrPF~i2Gi`mC>1zBsCedQQ;ZrZ^eoH#c^;*#EnDO^yw^X@{v#Mbn0xRNb4+>YK*vE zLvjt9$)_4MCaA682tMDKO~Bn zhq{?98Z{#1P@_JrZWpRr_ z4yjl)65(kav~H_n=Efz3NSL;}iJrG0HY6#f<_QY!T%e?ww+gocMxU9+Bq+FtmoBHlY*`8YA`m7b>?0Q7WPr+`U|Eps0&NaUrhS?d}%tdoRNZCkA49qsw;oRGMd$5 zE8(4b-D3<~aSL+g!-O3X7XTZJsAu`F>W>Xnb9#xh-u zQ{I>)o5YTWm^|F`FPc`7Mdt9(13a&E^s`6;vscH)4{0%Fk^JhFqj&81KsiO0 zT*Z&K_HwF6icEz|Vpqv*0rq0Yx{c#iPrRprmNP)9PN@ho8i=hmimg}Ya@}k@_fZ`N2U%3JR-nBZk_Vejsk=7g8afB+`HFdq!=%rxA?`{6slLJ zf|ED^c>4N8OXzBvwTJs<8y7s+J*%^`K$pBB&(BlJsw9&b3rzE&%n#xH$Bc0cF9!kf z!eY@9`T5%GC05K1Gy4vU&e8s*_zULQoljl~a=Bazww|O&oISs&3t?9#0+gX!=KxD< zTE8WJ9EGVM75sZPv&j!?!h#87N~PZM)qPqQwqEU*9L@@kJoRxbtstO-STg!|PAH3v z8k?>)_Yc#@k$1!dK%~t-XWB2cN|!bFrT>aTqZHHCpIl^kBr+6q4!~1JDHzXWTHgx8 zCht>Z1D{MaY9oH_$`-O9RodxIRJa}YE>VPa?-)4$y5h@s8(5J48;~>)LqMwNZ?o%V zbe_MJ-8XV?vvpsg$PXO(8N}?clseOb!ug=Je=El=$DWn{xlRvx|4Qutzi&O@-|#ux zoDgXxbno6kr$GE*XKTCjM(*R?HB~>BhTWg3?{>$cbk?RCRU4J2@_3)c+uyY&x>0)U z(4N0|1#;kxJKY)-Txy+`ZJ3|;;#jcH9sSp+MwL-qM!a`?^%kgbys zSMZTd=MBSf48fVm=cD`c716L7%>SreV2@^gMluJM}+2arOo$B0AJvw+`KaesfPQ+vjsehMySKmNJx1<(5qumm#%Qs|j|@5$B?8M8>{3c?@p)Z_GLh*6HvK z8$q?7;x71xw|px3CYv1gto&pC41G=Xg(L>>*krpu!bdO->K0C-F8K!S3K6;DL(FWt zN!+&UT36&&L$y4;s>9;}Z>MlO7a3%=%rgOsHe7g>w{^$i$3)8j_7d@Z74iMFPQuve zp{}o$4_xaL8^LF${le3QlZT{qmitVr^^mQ$uCnUMh5)UKMFlubZVz%3n%GGaO(x`& zey3VK`qP4HIl8}hXmxJ+K8`WFUTqP@8a7Z65;0Cu38FN2TfTep_;m*CoL4A(XWON3 z(%P4S(ZdlyWKWP!1t)5L!cb&K_JWJD=)6(0*3a&e3cgphKw%x|SH}p=@JRr9>2;Vt zbq_xH1r>L-+Y^jp=_bgWj{V>+$CHaQinWc=Ai*zCx2a=CUd9h;v`E8}z1p6+Xquau z-+D?4auh0ZIOTtoS;_4uOaJosiKYU}cA89PMc&U5u7l@;;%M26dn>5qe015Te6Asy z!uQK%+AE`N_xBbo99B*=7moyZA%NcduI;S0F5NAy_)%%gsNls!Uj6Pp%ZcW->a`RM zXHBiP%*2v*IbdPhL(vedXjI0Hibm)c@|N@TI*+#E)S~mY`{ag>Hgph76)W*V@T za8|CH5AXi00tl2~&jW`G-6#mM?C?j*oYq28ifG0I-SgE>j`@3Uf`rqX255=p(})Zf zSi<8B>lf6aNT;{^V`Y-o!p4firiI2w7^TlEt1NPdtEcf?je8}(&i&$J^4)TcD;=6H zSqS0XSpnlu8J^WKgx9a!M{gq659Taqyk*+OtRJ?{15p+?viuBpTGk5);5{K;?6<|QiigaHX49kKDnU-ioX}$VwpVS#kdzqPxLYe6M$G{SF~$4P zCSqil(Id2jFO|%GJ!f@~+u{S@gj`Ezh#WZPy`1wy=Kbt+s~?>iOv7@*pZY?Wa%Ga9 z)c0ouf#IZ}nNfA1Vs~b>`sm@qbMb~;K7IY$ATPh@+`!qq$xM@6EuftkdS4aA6mmd~ zTzF)&kga7Z4r?KbdSKC~SoFz<0;XICj&r~Di+3Jq-#U!XrW=m)O2|G0!4%UldPz2Z zm;4>?WX+^+A_IKakx2g+z?Beb0-W0zlrMKRrhEK!nEoh_Sz=5}Xu7{_Cu;qKzy20n zIvm+|coNr)BVs*r{yu`3|H=+@mL1Tb- z@JB_+&L(J$X>n--X0okXGF1&}bR@<;%KZj{ATK&OAEr5sc?8jokH74)?{e>&H`+tD z#F;xrTL&m}+y7xQY<^Jp`uLSwTR*nHX3qMS@sZ%^Hz+f*$E4LNmKISPT? z--~by^N;^I#z6z{S$&N@$|b}#8sBeV$(N2`r7`nIAIB?ZN?P$la#eaV5Gd5`=HX(= z=_5I9K_qsEYx+W}Nu-IBD0skUefri|AB}uOhP^Ip4%wgV|9UFZ4`jqO8KhMh`z&9m z2%np38)1^OO5!0_x$)?okG~D2g1E7&C@sh9(~a-;fKSa-zLrR&|L%k|%iEktg>zZA zNRZMskZeg#X`7aBZJ&-_V1d$s?)3f2&CMKzpV}Gcp7JRR89mU6Q5VOPGR3qPCLvWJ z=dJf;`kzEDTjAVvwy=gh3e}xV702sL?|#jDN2dqcx&^L#t@{C6^go%XBaGISFn|Y1 zI81IX&wSV*=eZZky!aNi;*nK|XTZgVfgGBvSKMkYbY@gP{xtCuvP6j=%iyi#f-)sTw^F9e*Gu_@ULv|i679LpjX4>TG zwXbARB6Zx<&~Jm%E}7AW14DGW6-Tm-0W3zXL26>8AR^*^HCaMiS?Z_;xQgqCg-I+_ zxlweOl*#(;B>0K=(d_Go=LVepNi^Xwl}dglFU0;u7g)B&Kl|t$GuZ7$#)y~3eI)+L z>4&hZMbwj{m6N3xM0J5zH6#xw8+C#wZpw!fOceZE|I_0M)fhKI-kixN^~*G?yejLep3 zPQ-g?I{cgWJ?eOR(GM~%4@cVlV|aTnT+ZX5H^un}dw-G+uHDTCsxN&AOkls<<;yfV z7qs4J{p}+nB!ZGY`1FyZziGx(bO~_pW$#OvzJs4nTA~9kwgx7P`{+Vgimj+mmp62p zUJ=E7dM6j#F32wH7_O(d#8{N>+w#LB?(j!SfMjh;uU7Ew72Q2ak&$hd|0={Z|N%bhMv1#6Y{dy!Q~G%Z~0EI zVjhiF0kjy_r+}~uzCVog9NrfhY2a?kpAOmf>Aa9dI$}{+z2Dk~LkuSG72E+6=u6ZS-tx&!;I#W_IQQfYomRGd7G6fkz$P@?kGhRhE}(R~{0;=;$oaF79oBo4?=x9j zHymnGsK%P1EIf=IW%E!F`VaQi+{S%vcBG^)|Iu^c*;pP(Nkk!%pq9c8FLxpO!JpB}pSE+s^$82Y9K;;q24SnqiJx#T!l0Qqon5zT{l^f!`OB!mD0!&E`u zenv6|?p(m@`8IvT28Oe@TzM6|e4p%TntTFYd))ipVrKfy#z;|yufv-5QJwk6>|HUa zLhypAcKXt)UC?%3(e6T>j<@@EJXgpF?aiEe{;d;>^}C!iY=RN{M*H&Uqj>mf3dE>D zrT=&b6c>8OyPVOKJkBtVTAWB~&pEL;3bMy6nR8c{7e9ZKMM7c-ei>!E<*Hd(Pubm1 zCZC)_j3+e9)}{;bOh)=M&dL2HqfhrpJxKVx<|jwW#^`5aMV5Ag=TEoal(-d5VCSS4 z+G=WLy0smKeevGWlpLb(fi(UuzFLu;sL_yAS9Okzss$qGhjx2Ki@VhdPn_qn3dPOC zs}=dXF9e4(LTjDWYEndxih;!Qe}-h>A=epwLVc#wL>ZfaUt||ML5C~u`#CgLDHaZ} ziG3xS^R=PbVJty#n98Xewc3e%Kgagi9wbL`F3Bc(r_thz)~6e^&3^(gSK@Lg+;T5G z%ub%WSAcPFLS}aR6{nmEn<0hM?iV!Lj*#|WA765?_+!$<#?vb$3G-w$%lL}PQGA-^ z)sA|4g+tbWRV#Z;c&V$1r}sIzOb8GJ?w@&nb;i^20I0>{_WQ1k;9=GAr_Mx8%Q+*pIH?%DrBMc!@6KNlJ3Ovg!@BP+1 z=Gn4SAJ`0QvEH_cf@V4K7u(r z*gbE&-=%K=X5`G&z#&9!;)_;uuCk1;w$hcpZN(%1I5}!TEelBI+ME1Ln;AEM;;nnp z;7?r<11Xol=TK~yx9lBr zwT62o%)|TrxBH@3E@(_C_mkPYQ(LS=lT5*M<*i^W$GiRJhx=vQt8%Ru935FY1A)b| znf*xMtR0ky@kK-kW*_ZDlDD&Nzh1>i=92`Z@6$$x{=NVjtd?{+J;N{DV16j2xBM5! zFw;uOzoUy@MvDks_KB7ZQ1)+`E0b_rx(~VpIxB@+UYF=zRm;72i}w#TXQvMTXW~ty zQKM*(P~X(1#38n@8?xJ<*xAYFeH-6-*FYGn<{;z`1e?`#vOEa5=>0c#+ zYmd^*&%vY*KXj&OcVuPnSl`EkF3d5EUJ>BQkl*Bxt@~3&kq!vTpFCMpNISasEqdlD zZ^F)c#HvE*bxL8~Fn{t`bdZ%jRp-Q`w)(Y}m|dI5s-o^J91eJ}<5n|ZH(aYqxj zf9EfnzBNTe%Te~x@qirPkFnW_8s$XKIU)GY)C|f~6XZ<>ztAInik|N-EU@Ep)^4)q za2?niIQLh&z_ZRN_itylnE#)D^}wIsug@_MkxNnb zOm3q#&b`%-t8Up*=R`ag2Q(Pg79UTUEZbAu5U&f;w0! z3hSXSlno)J#lr<b%*#%5_&<0R>|yy__u>Pk ztxAg4p}vT+0Pf4U=yM<@z*ne2+oo!WF>I4$aO23P#l&@3f=8vLtU@3I2eH`LvR8qo zSs^|wbi22S#NpYP+=pj(q8j-J_KtWgH*NnezM)tn-GIZ!sc7OWC%yYPQPHL@Y_@P6 zq@LFNsPAOiI`vo3wh%agiAA1mgqARk{k^@0Dbh6EI=ozGk?xD?a_Djq&fp}4{_I0c zH$#nweWv|gW#R(joA#gWgv~~1A9pcl*$ks!KEY!?VB-Tg|8Pz?p!RS1iTdo%wjY&W zxMn|XkFXWow;vGyffBtwozrrvgR)$EU2vvYNX%e4qvQoCTll&HIUpaEvr0#C&Ia|y z-9~`~Q_T^7)Bl6Cw~T75jn+l!SBC)}A_wIA{7-#)SM)Iz#*XMkn`OGI3|_R>%F<6e&iM3u{rIZOIW*2=0UQkWaWtao=;>PUl+ znF@c8ec9@AZ@%A=u2(ZohH&zZw%t$LeX~@_!0mJLj6m$WB2HH6xz;-lj?qgRqU(Rt z%y>6$1$Ax;3|}R=M`-IDHp6R-D&iX;{gCSE66T82776>jv>0gyNaYYOSNyUimkv0| zctTdgRic01x&6&Lmxt~(>7rK7x?`E;Jn_<I^+!#Ae`3)7cw_laW#xxv5>=#-jEafOuqZHe)j zg$z}Us`1sqvr^U-1iDMWs;#?EAgsUVYdcM*c0Nrxy2gw~adEBadfSRa@$x12BCXt& zs`0jdp}{l|t^!0@s(_e{%E^jv%YLkHV~-?7e7SHxeB+mamYScae#+k* z1Yz|z(FZt+u3X(kCphFC2i|gim4IZ0Z>^;#qFH{O_ydH>z8|MgwBF|rF?HG!Bwl0! z^nSRyI|pK4Q8wZ5v=#0l{AV{&>f1mATVy#qjw|0t6YE3USKzH} zu*P8KZpzdUkm0hZ&BEn%Cu^sRLw{JHM5waEevI{n_wr1d!}evRx`B&jUpTF&*Z3si zE-0gx(Or`oAW9v0a3yag_}xSwEkOHaJI|D?zN}OIWn6di^x*YSf9A$Q)t0 zWmQ0<`6H7xw(Wtb#X-sK*`sQ(3(F(Jz0<=p(3|g4keLsvOaH_*MwCA71kJnVDwIl3 zIZ=~k+pF9u4N5Bb9}@|exXbLM{E{|I-XSbwSM@xXNpfMGdDlQQL9rO4+zihVr0erK zZ@Vt|@Y|DBQEb3TmJK1TmLuKGNaZo*b*_Raia zmPNX;9E6Ww#E(Eysg}aa>ZG+yQ`=wnV(hv0;FS%$-&IH`yFyjuIKIa@EV=Pweczym z8cC2CD*cxradYA>*;bmgO-EEV+%jwP@;&6K`XzZ0Rwnl#fO<0c|4C_mF5He9Rc|RT zVD|J_Y_stCUnPP5MLzo=~gObe;J}>Gl#X@Dl4aaG}9raVO zJQOM})x9IAjCPsbyW?D|P1bpdw)E%jh=GWXk*dw(`VC`9L5^z4(5I&s=LYwB^g)Kh z9?YtGrnI*N!=7bc&^R4ZDkOWx1a=k% zR-FnmYyNtFhRUpH91_m=SO|r8wjSL_fCx|3;;#QM5nbqP6OcRk&j$77H9b#XLFTq& zEc%?FDbS5JmjV*jR|en+|HhV-LY3@NamqR`#d!97&ensU1nT{IX*N#Fj0y5g_=hk~ zon6TQFUfQ?#NC)XbGh$N4fR&2V?&g)jy4oEai{~QuOkgG~eK2qb`!6xO@HM!0e4=E3TZk1KDQFZ_XotTfGp zh1_*xwE9z#(jVHYl`UG(u<>%|k5@XgOXG|j{G>b`Cf7wL`s?=UM%PIQiPjsKAwg_e zT%l9?YTC$?nc7lk=v6V-qfl(I{Oe08gkWgA31&vBn#U&mEfCPA?_b5O2Q1izwrUPb zVJbYI*4ldFyvUgWHb$re-&?HQ{IUox9A_;J*w%4_#KUW(r)(>tVbesBzcySMy=H#` zG&}_Bu61hZZ`yAY6a1Ag2bxt7aK*|(uvW>s<3VJJ-+Vb9$A^j!avC#dyn2_0;fld^ zl@XE!6Eb!JEm4Z|{3E=Tj?TVR6@~>ux&mG{H)q2gG;MN6JhklJpY$)Z3mf=5q-~wK z>8N-5x7Sh27xRV6-H<68gt`4Zcrr{grNtaIb#*lwco`e8y*42W@rh_z+(#&Wt>2*j zDUAW_s)qe(;i{V82&KH5L!C^z4;G$zO0H37PIBzCwF1g-s|b>y9PN+4c8=U1ImB7)f!2>*4!Y_}f>YN2`!vzriWubr@t!oyyi`LYedbXi2d10O>H%3{S}p0Ts7EQj zyXhr5zUFH;_!ZNyu9F^N;K>hqQk(fGHjfR(d+4Z#KfYHG5O5T$5y%w9X`H4^*mm<82Ag1Gkyg6Rb9~}6_j}}@pPLr6+}m)WcZNeIgeUXGY2z<$Y*dU=MLmGOw*G-NAV+;qEi4^7XW_- zg&16*WMkd6sH3gBs**1+FDkhV7@5!-RGA1UY=Q@*!r!vN$enTq6c2$xCEF;-Roc zY*?Dzr|PTGTP&2(2%0b=jnhmfOSd6 z0JXCKl1&Ji|J<7%YX8ZFRCwM8u`tcITHTO0oP}pAzSrgJ7do)!|5hv>nWoXKK>dO2 zi)iWS?Ani%@r6&`@doQ4?XhzusV0>)-dMD|(3n1Ji;C=*J)P+Zp- z?o#aS!4~TJ7f2b1*KyyIV*nR4>%DB68%`QKb{X3A%Uz(mP+p)uB)jm#AbE+Jj?~Twl zW@&mQq1Q3yme8%WuL#GK&#k$KhkDSiv(JtJNp;1NfM*FgFi%h-1^*x^M}ME%wv4p! zB_!NVo>x!Rb$huj^LkuXZhX~xnz-S z+9511pp}E)p9p0!3H*g`T}#q!vH5-&IMD!KJQ+j!!DHx3$PB8B0A;dUmedU{)$x1x zKNF{=I70bi@eUUHTHGMf)7whd@o2##_X*|G`How1Za$?kc9Iy1xkABF(W(3_9swr;td$-E;u7hF$P{`OvOqVg*8 zv3KAKw&J>^sU-rZ$4bM!(rzVMP<$lp*z)j16+BgQ|Cx!2uF3-Y4!Jn=>K-PGA5%qB z4zc=)$BtpwKz=Lkuv9JaTad>54Bz&*i?-=?&ajywv70@QFxMgENTEHQ z?NDBEBGcpkL`1x^Ve{PrYaC~{2S*l{QZR@dfp2*-&Fz@spB-r%D|K&fk~pnA!k-lf zSeSSgm4<#TW&>`|{dawMVeMRZW_%u#|4IpH;IyQr?3zsUjSVVj!ojkH`)s@S>~LWGDCw5pbJyci~Ta zH4PV(3L_Jga&i*#zJKKH3WZe)$%Vl;EYBxmRV{m-3?Vi;{2(<)M5lENuhzC+->!|^ z2XLP9%;YOY4vDFmqP)TjwrMF|pg>`^DCRyk*+8(c6%4oXV=%1%N9R9SOBOy?le+>P zr;u+P7JFsRqq=K02l_gRCXGG}!rJmorFM(5Vi^d?K_nBO{mx8iiNF41px^tSKXm?6 z`=Kdi^OdikGb%`m`A9vSCzpioN!vWnzkJVsM9vSaC{OlgYHr)AQr50 z_(FXrHs2`G&s9cr-Q+c6gPkOSl0pAG>{CCh47>PlhlqcK$Cg80D_69uUN_&t zP_G()W{w4+9pY#)KI{@e_08aaZ{G9~B3_fvkSvHrIRGJxn+f z_~~Kc0}uHWIFt8?8TQhU^go-G{gWsJ*ctxUPy8229=$OAuM+>GhU?W+hq8+{E{gdg zhFf4U(heK!DXwQ?S6!C26C?2ZPGxnH8TsrUORDk0Xi~c1qJ&m8@5lSz2ycy(-3cD( zVG4Kj-BH4>)%ty`W#yPpyU*U++dodrz=@i6cUpP#*h!mFjkF-{_UX;ZNTZHq>hGo_ zK9DX-_f&0&TZ9f?p+RYD?)`3^ZVEpbxt{M zR*Qo6trz=ch3-8k37c3kXc7sR@}^4@q;7WZ`5syN!5#DXCkTRpez>DZPlXqdzFAC( z5{zv++@5=@8Jf#U*nE{zTIah@(m=Fz;(Lo@ky1>`2Wo+}i;ffss5&6AC5sKVjj2iU0!e>O41J*?iXIBo*th~ zlrsH|TAQn4za}TY9}7sNY6?)35Zk0qdArENyF1I!f}N?2^}pQOT@UrxzJ5H;G>)}- z*L2xmZ8u2~K4)%VYW=q>gy8v7G5kW~K(}2r-PFO$J>Anwi0`A!Z+ynY+#W25;mWmK z(EK~fyU0aE^kviKqlB5~6yxgjIQ&fa*XYVyGL@Mh&D&5=d|PkQ#iqyJM9;vf+l6iU zFJew}LOg}eietVPqKPO1Q$0L-3fr0U&#Z8@=bK>(a>=v{;`?EF!0-}Lvr~fP@C-zQ zW9IUO+?~B{Bt}}ZrptM`_lWK12aj<@pK;Cpj0f4gRjPL5mwK!ljTYVC#B-L_YUg_t zh(fTOa57^-Z?9W&TS`GW?VkH(^_mgBz>u8gFBECF3)S&yQsvPLhqR4}#@wri>nO+g){ zY@vbO{=DS2Ab04k`=}$?)o~JQ&S{nxTOcvAhV9NdIs2CYV>g*Q;6rAe=g%}w3mj`^ z$)3TPVo($xK(S7=m2k(!}OYfiRi3FR3?vyetbzufk#TZd2@T%3~@~b z4?`j}6{4fWQC6-rHt22M9t>rcG{vA*1WQEYH69OHzv3eSX=|EGOjAyCnpJ_8PS#>C3tqdaU8!8M%=2tJn&q!IIaBbIGu4@ z`=qV9CW=r;mi(-G5LnH|{<-g86-p;Bvs0O0Fk2BHU9obO&3)q}a{dvx5`zt2r8cgf zwEN{B)pgI}2+2P(zgwkI{+0KrKe)9yYWxBm#Vgn|(`V?_#vVGgI~ZJK;niPcO7pGe zbBGM#_%Rz%+d@Isa8vwh4@SaVm@|hI2*@Pp6e`g5>o^(2h>}xOI~WEy4~O7ow@TA%XmNK&$=sBY&tqtHOnp7 z6sDixs2Oq|t^&8TTV{u9bIOXzrmdA<4 z%O$|cukN0o>J*^wxalW1%X#tBOIl}qizf?Jdza2c^LT*c{Z0Z#6>Z?oSI5i}wf*TW zyyovQ+U(N%bQK|IMdxR}%{Da~{3V9Jc6jL~51Cwc);GzETlVnh^Mz^-G~geXL}^^= z?!>%&y)=6DBzeZ`CEwg57TovYv0cl&M%-GteU}g~9-_1BDnFO#lgrm4>o=Ew_#~nk z$RYd<-xjHu+~L-&wox!;$5V81n`9BLHv2RO?MU4TBHO{N5&%E%? ziq=6bfr4Be8K)g6mE#>&yA5Rx#|OAq<(g}S%9Dr%5U<<#t(IDqsLSq9NA~UAssOxJ zKoxLz{D0&~5T>QQ<*d6Yc%h-VMaWTEY^aKu=Lxg=Q+@Ia(PSNG|HrF>r590ia8WF1 zxb7!4J38q)?I=+Ze-s`$=_QIkaX(}NmSU2U{4MX1p`{FktTr6-dM-_PLj@=AtJHa* z{L{0F3l>*_Ll9m1yYe>@e(e3m?0u*w_U-2qsX{%V)S4u&f^V&Mj2-0;#J%<=q)gAn zQ#Z8bqN9VzF0wmGiP9ZCXIa?!lJ^#h4O`z@zT;7H{oCs7S$?IkZy5}IT*#dAeWv>H zdY(L~@&Z>-Md_L#_-yT5BZgUTvHUFt;dJ)X?*2=IkX;T#GTR-LT^?fY#y2<17<-ovrLuK!|Y@afFNU~-qc=TO6wd$Zx$aTx8 z&5VoHC22CckV6dKv(?1yyzM(p`Fl2jHaQQI6$l&>sI$JCHXQW6-KkgS7U4VKI6i6k z`$;t6M*>y{gGN#@@d`erC@hXCXt;xoyfqGb&AhCbfUV2qU@;(Ct7)=S@gikbJWA4Z7!XUUzfn8`H3W*dC;7B|=EAqm+^-QbaiHkm|!{_{)aH z`(1I&?_hKt&X4MXrDkCydwZnp-VLq8xq;bBl@;as>6!$k4(Up7{~B=1tTlaC)IQPZ zFeq^AcY+(V`}otC(;Px*#Qe8^k6rREM z_Dvvy-OfAPmvDQYl;tAAk7;a$!y2R`>bVjgw0U==^@gW=ncj(8l^vga;Z|vbdsjs# zD{KNzx?S94b~DgZG`@OYI_*mS&xP{x`I>VByvDvN#@YgM?&VNk@$uy}-JF#?7Q0E| zvG1U`89BkdNOhfo)kGzm5vKG{LaE78xl!oMbb~aitN~7=QWLSo)~cGZyXF?dn&|@` zb9yG512XJ@Y$1fAQ!vr>}6+O`HWn<9FWne(d& zKfo_s%)MN`TSaHx56zoek#IMwhseqpFH9#COBDv~f-7|`%iL?{tDqK(#XLbtQ0PAH zEhULe;d8njI;MawjCTWiiQ;;RoV#45elyv(uGvf-L_uO$+`8SVwTBX>&sRROIzznk z=3$@t3icN+$_$GcXY!O!hn_3zh@U=}?6_Oqce<`~qB{FNlhW3sv(lHiEjh0}~_vfXr~i>w{3Fc)d2;SG$^bMDcE&&Rh_t^|Rph>8mN+;tM`Vdl+xmRWX>%Oo9yXqB^OYB1)TPdv?#3vX0)2Dn#&ymh zt^LfRs>?^-xQ~zyY&bFXx#t$2JaxJ7Omdd!{XH!6g`^%V)Rbi3bj95^YS;9~%YUq= z7~8bYcL-yCMb7t=>zekh%vC!yQ6mw3Ir8>2UbEQT2W{$T6VTB(Jbk-sma@}y#9JpG zKNlsLHr(6^BIMKE`^v*(wC*&XWah&ch!q$~*jq1Rl2=WYSyBr6YO!_U{n7^iFCkND z;f~8+jQE{sH=l7v9_{}AKEqW-Zx5Sz-rt#XS?s!|oCYd|Ae(Er9{xOWvY~qJkMXVN z&E5ILy5rwfoZ%K$OF20^l2J8%*L&lW0iDsE!TxlI5Z;_WVjU(A*mPglN!2RwfJZ2J%B7r@wAIpEFmm~Y* z?QmZp-}d$(FUAsq18v*R`JRI2z&W3jW&Xv~UKCGytzSCh_Sd71$enMu8`Qob73n_8 zKS8jIqu8ykpg&lv|6(yVY4>rgDB(eo70DBBH#SrhTuevd@mL#NACw49Hq!S8<-5vZ zO3`=;L&cJV-Y+r#&shvazRQ$m5|UWesS=Ov+gk?(atWGPSP zjX~0ipFW0duJ5j8!Tu$iZ0`IaHpaB&y{ym*f3Nx6keJ731cdc2wL0Rxt-|rnmup9# zhAnU-ED>Xl`tXL{`#5@JgBYzpTlW@?L}CIBjlg2OCT5F}(W7lgPsdEiB zuF7=IE4mC*$)+#d^_1z;rlX7D%4v7objayxo_H8;SwHEz5K?w%cLJ{B@T@>PY6 zE}?9PV>!OQAwHIWXHMI&4=woU|M~Olw~UnYQ@>`1J#NVMRZ1tK``>>JqifAIyPiKB zUkrqrO=%VuF$tqG;FF|zS2i)#KiA_{v{z<`>R?qnr}!62a@#mH7U*|@TOP(~zJ0B@ z#OqTBV0y0!+`{H;CvPMn29fvL&dU!fTqu5{ZoB)rPRE0l0}RhlzU#x*h_+VA+ERO> z&+cH<&!QiwsVFa^1`?SjI?(T44HKfEP82Rlp_ARyYx6l5YnOphx~YVCz5O zqW=*X^!19g{%DnIw8?&TJDjc}kHxTy9)Pz|{zBIW#1a|3rO3SO{DFW)`@#zFDN6f` z--<+R8>lJl+ZGT9`lU=@B*_W?KJKnwIec@k#bd+YhFDTxZq=r3R0E3pQGfdE{WTVV zpvn9H!av?=0yGK$F-3Km2dpYr~|LTXix8dcO67OyuC<$>L>JH@as>{|6e4~-^d#%43OlqS9(*|f#A4s z=)c1V%&9fMT+R}+9P~DlNi7=|VXS1in7sw*n8|p}XouWr=R*6DtDWq}Z8z9m3q_is zkv%O?eNX~2pyj71pG?d##r;DlpPg~e&ao&as(eZ7GDDrCpYP|cwxxBN~+AgdYr%2+#h zdJ#7_em)9wkJx%Q+pQ)Zx8jf~Q^CrN${@uGt+7Q{2b8k;JM=uRWKX-U#s_Rq`}lj; zeA7;0RB6kvwEe7&eM_?t7g=uG0a~+@9S*0WEhUX*-^l6dFA5&Itdxh@XA#Bv-WNZT zjp>XIa2=PBEh6U?qdu#yjKys@Q!utH{o!L2-n!1ez2Vp;Wd!Z#q=m{?mk*6yYB1hIEA##IYJ*9FcGjEr*4jQ&WHE5jV^ygdnddFV$ z=v9GxY@(S(_H8BuB@;yo_N9FZRIYIPHbK+3%D$ghiIO^HxURj*A~5XI!h0i5u;mNDN1aS^uccaG)!|Lu zpJWTpj2lXgz8#W7_GYA5&T0|Myz-dR*1+gwS;a=i}jK>IWu=U;W3eQW~eN9BnQW5!@{r16u(<$uZcQFUDWJzfXf z@_ndro?%jry#BV+OAb3R!cg<0D*u#0(KDLOWJc$H)k4w~@B6u3ei*662iO8lC8lU4@6WS8 zUzes6)?VkwLL#RzO&6{!Sd*<+mr`&`P8BLsqa%0@k#IUQe`rE(fjES=$OG3ntsw8m zGk3FFT>Y$}Y|nUV*rI1maDVpZxiX~WhYjVb&rS|?-qBQJqEaA>1-+5AWHxIvt5_;n zli=!E3Z>@zn>g(vQj9_x65W;7gpab?j`JlNTkqx&C87t_q^4R|L!Ut*_9ePtYwkw- z6uzXKwqzE5;LrU+KAxpHr&MW>S<8=`u)?sVJ#nshx5td0)*~9m7UJH>p;c#mI(_{t z+S}BElCNUB>gmUgRv`8X*n+TG&q<3Sh(%~LDQ?GbNnZa?c9K4xN^XY~5i>2zr*K`I z+=``yv~I}H3Hir?kABg8p&BY$q&3>fb{Vf+Z0&Uyz$_HD_fW-M)_d|=V6sMZw7csn z*P}n_BB?grjOpnhpmt{L_Fwx~kuw$o2;^-LYH_t2OO8>Lh<TEXL{`ZqXnIR z$u*)0g&6RH$8?6aq)julOi2iSe|HSbgc9L-?8&& zeQ8r#Y^VOXuqsOw-!hH1d3LtUf2R3Yo638A!|@#g-*?6#Ss{BHs2<@9!H;4=pNc6X za9_?96b^7SyvfHsdtM0z6^hsq7v2bG2N0TaC^~E5@6cVSg+s7&NIbs|#7h%+oA&Iz zD&Btyu8iJCm8%pvQ!t{R$Nxuv5MUVt`>|(E>{Zg7_1LV)u+$?<6;A&m?fS197zc%m zIvE+3^2_l~TsVfSAvX*aXJ@jl3UG((-A~4EK%b*@1J&FODyNKjwbgTNeq>A1ubiy2 zcr&PS8`HfldybR3Wm4p<;IbN#UcjogdsM6pci@Rs{uwP`z|W|e!%f*@W-HCja6;=a zK_q81I(%yyWG2nBoQ>Eyd*Ko9W*P z*%Ru?&V32M8*Y5FFFWq9y87C-RUiA^K**u|*0yspuZNlSE#YS2;rxuk3wP6o>YX<2dTzt(B!nz2ywS%(9C=%?2BWWKS zkrE|-bYq{riJ$(xsyp?Am_IvIgF>J6Q%!97H^$&WKvc^BZv$DXH!xJ=^RnC{n8S3c z+JW1PPh#*gBXgX0a<5Rb{6mq3dl}`yamqz~pfChKmU>X$Lf-q|#omm)V_R zd!2SK7CQoLDi9FhX?EQF2hJyPBfmbGyy`!I3>yPi+%vIBV!h{byylca#j&PqHz<0a z7acrIHXTaPJ=*b||9QGJY&xtP5B%y;}zPdQ~h&AR`YSbj?4gwiAM z7rleFJ0zE~NBv;-#QomxedQ4HAs;^&J5C;yw6y%<7%m8o0gwJ{*G|E9G1|nF(YpWp zJEGg=Z;0cTrFG8;rf&X-Pdy;VsMg+C4Oj!PtDq$dd0B7Yvo+#<=Kf3EMAxm_i~LNgqqp7PZ#a>*I4dshr{V-9Gp0}E*7@_u7m--&{cRHXSD9N1IqX&! zTw~z4UOAh$5(1`JW0$=GPS2gkV(#jj%8B}#BxhdTafm;6#7N4qp(88Mj9VQx6v?iP z{ZWixUy)MoU8a48&p@(}gFoOg36PYIVzJF@L;bi5U`JEu$f@}Y#yva6_= zm)?%PrcUO>69?5hm}gp;^+-n`(lMoC>biDDJw`ytu)C0PQ?qYRoT~6rZ^i`KuW>(E zt*FN3M{JTrZSU@UAhos_-ZRtokW|vLYndyJdBT0{LR!J3rud9|Py3PGy!-+0YqqXG z_cMp1mMK5)b;Gzzy4Ste^sjord|Pt%ha*wr2av*`t$3!1X2l=lY9O0tgb3vJ!sqJy zdD!)ar&Gx2?Tib8XtTxaOghJzsD0I*-e_)YPP}|xquAX$oKQ22lL=;=roYPi`N+F` zvP!2iBx<1|U5o*79o1y7Zv7>BFyRAFoliBliI-k?Dy7%_%qYgbFyKjiD9ZMcYq)bB zFmE)z1-pR-^%UfBUNn@XG#&C1fD)U!C-CG(eV_9WY+vZpI_bh4jGuYoYsIRjv`DG zc4|VAR`AjNcJ}ocQ)Z5-E*FN~q=^KMxj&m@-QJn^>G4s^_OR@)^00%OS+vuI1Fc-5 z3n*hrLRe^6<`fsdxbA!>2K%-*8zmS~x$h%=x=3vCw>DaCeCBfu6GA75UbitaWlxK0s6W)68NB5LU8GTvY)F#V#S+Yy*7$ue80>qH`}IjSMotDg_++#pWr&ueVn8q zW#0DpLKN$>wxWzQH7j0)<77TP(a`EmQ!BL<)+IB~ADpp@rb#CcTbuE_uK5$pu~b|4 z*3%wZhinm72y$2y53;8m*x12)!#k}6r==6!om#(F!Cpj73i zmVmG=X=PTb&D)Ol3~(G>%Fj8-*J#>cj-h{j5SA%Nr>cMw(=grJvJW-%GLjL}b*djF zJ!n zUJX^3Bpp~gQDNEH8A_i>$)!j;3p$fLdnBhhIyc_scH?F3<5gCd z!I~=)PaV6d{Mf;F5AuvCaX~c&f=h0YOCIvDn5HHsPuJmd(NYesAOk2+(>8FxwlRaVf2?Nl?n}mwaG%wG-N( zex)vu@;Z}gSQ+%x!gc zm?NW^ESiGZ@b79IqtO)G-@JyH-GMtK;U)mG?E6`F9xP?vD$=LB(;_HH9@8c)e$2C`~&wp=j*Sopc~k6Q-j35|DGu*XmSSI0q&J-mOnN#c*JN;i8V*3 zC%UoW_atT<80aoEMATdJ*U(1e5!VM#rCv_`Wy!&iPHExH2lJB}BPtT6blK63pKh=9 z(X7x26w@9&6l0`^;vN_eilAuZ>&t*IX)QLT1KU({)Pb|bcGOFEdCYPSPHdiU3TfeA zKEdsNHNfdhMhrtaF@J3f+omdkRpD1uoD$7ia8yT4t*e2TI;KgmPjo||^isy4NY6bZ zMlZp&#<`7$wTTkml|-Oyszb_U^Xbn&1+p2WIo$ci{cnA1@P1sm@%&BCiT%i19OD8Y zEZumZOs_~YXZNLup50MWLbb?69GTv2w%#&e{=fE?=pn54i=#w$fU(CMQbgeEUQGDr z%%4Q>C=O(5YGI=MeP;W!qh{d~a=~iULl4x)clZB11fzDQ2Qe)!(IK?kz@aiX_fDu9` zQLnG>l}Lg5^zL@7D79F;9FqI+72_-E!C{_gekrd#awAbHI=cvt90e$tr1*n<)7fCRTJBn~2n#QY@u)X~T z_x-)jnH_QqiVz_Q@Hxx^4}?D zlGD-fxXUL@ISQN(mPjzfR|}Vix_GJX0YfVU~DKv%Rr043gPz32Nl) z+u~yB?t?E~VAZrT)-hv(p!7lW7;V0@RR9h6GM6&gKeTRJ6QRR>7AVhS4Le-$E#P$= z7u$y&Qk_^Sdmj@P9_fR@=k2Dd$!Vz5A(olFHGy>#zr6Tv`KD~A#bdhFMrpi;A!6Zz z4w#D~+NZg`D$!G}qm9_tQDly^?+dwM=>rY-Cv<#U74k*vYWd>90-R2J9ZY+@>1>z0 z2$(HE?oEC;rhcK37n8%U+5ctEwLuNB605_i|6Qcdw=J>TfI$eLKYWpn@qMZmYVgc9 z<69lV*FCbU8TjQ3jF_Cs{jy44y61wN84#B@^+rlQ29ttJ+4+x6hATBeEeuKl4mk=| z-_UX^-T4MKRYC1HR$uGUx+e)EYQ9!Gi^aQZYseV#uVtqrT?3n=OM8zn$RaM0MXawpn*V)W(|>Dhbk-c9%aN9XF2pLU%CKTTL&qC||*HwNP%=vCpn7 zB4gQLbjp#}N-?1{QC&mm0VU=HS369^Hr&!T1AM%As<)^+J_B|Na%| z$FvS6t*VJ;%Z{MgL*!KaNVFbSMDk$a??2lhJ&M)iuk55(=SmjL5>aT8jw%9iU!uI2 z)D~O;{9>mfMHE4MR%$LBk})s8T_Oz`D&O0u+2JIqVSs*$CP~+hYhdsS<#eSrUhktH zu2hZmj@du`sw{MoFrm}lRb|#;nw-AwFjbEl<6na7AvJ9n*XY_ZQ{&w*5s>z_VgEBs zR^n1WIxNd^+A))TES=2LKVv?fPY?qDaAe!2TQZ}EiYOTDOrn7-+!!4}AFjpAm!&l! zTbJJIByA1XG`!q~7#vO3UzE0HnGKJ;mqXKs7hlxEk(-|aXFs;$?rt8^#K(O^n)s<) z{#x4N8d?eMHU^$V%O3PhBH0P74rlcxE@8>%bO3NO(3KgowWV+S+g!dtlP-?3>*L7H zfdWY3k}b*jT&aCPz=iuvRDlQ0rUOmHm{HBPWh-p$%}&b9`&UQWU-*166pvX14BnVz z&KhuRL>|-px(XatkMVXGXu}-e@9+w5x3ri~wVmsAG{jkCUbWFk?`62oD(rbRnhK@c zDj@n@S;?n``{|y?SGP&8(2+};^#D0y3ReA1$)Q^8m4(|@_@QIcJ^}QvA|=bmyLQGg z#;Bh+$x@cYGt>r`l(zDj65u+$$h8ceo@U}yN^}$W+={}J#!RHb$Qm*SD)f0lySeOl zORc{;QT#-gHT8f_!B%6ZE}f2P>0^&t=xiIuCB1L&~D-wifL%&w^Mu1AKJX zvbPqpjNtAMHAXX@mt7P7#3FU+EeKOK&>77fRrY>!Y=l`p#Yr|gqJp5>7B2OXDEQ|{ zqjK81$DYwLNP_@Q4cZ%Ak_^-q29d>q66*@G zoT10|yrc6bUM2$EeZ&TQB-ihX(tNIL@vOBL#gD9YoY%o7C*DE3*3b-63p_(ei(K1C z`Q9DMK076>2@1MDupXFb`)FxnfmY5=boz8qy-~2a^uUJqTzXv8NH#w+WASg|RYeSD zuOZW@azbj@tFaU4%IW?uUzLiJH(_*kR&P(eMKE|9w;FLQ*jWb;kv0P*F5*98c?(}V zpUNil3y9hKVHENRNYr_-SVx{>|6QgqJsO*#KzFx$m5biEn(hCa(u_-ZiNt|n3{zuE zT?mVhIfuu4L#$aG`EyzXSWKi878M^UZ#;@Z(JPZX0p^$T5J;RhK zm68`i+n+)n%8@ksz<)gf)c^DZ^k$Hr!NW!SKj0zP8z?oVWz03FSqv~plD29tt9s;B zEI7PP9UBLAROxtZp>%{o8Us@zlzc)xV)pp|8D<{~&WU6K9-!xhBFRuw)Kho!((HzD zD+?X%6W;5%uN3$#Xd31;&WbYLk%T)lqu*6DxBW~dL)Qt6hi#W`2!eQ#l@sm*Vj~nF zS54r6$R+q9@Te28Kd*c0Gx6xSMk28GX@Z^fxRo@OMYg>^^BQ?=Bx-S$Av_R_8tNUT zQa{9FZ!X!coRB}{H?G_hN+=XRED-^OI_9};!rucif=x$~$w3U6$`nYvrt0~2BYZaq zYhdi@h;edeNos$3=KRWr+*1i?Lt&BTn4+rbGkVR8c8{V5LqFM4Oyha$RcT$F5I>*0 z1G3E2Xs3v&*J*2@bZh%Lzn$OF*6`C@R#VK>LFx9{mKm*_WF+h0_c2(SS(0Yvwy{&a zDiEz;oyVlNl<>9LACCIV6TRKJI^a&aZg3`G(A(=VIM(Q$4q9dNy({7c5`H&oP5{Yc z=(lvih0`t7%ES|7vtCF8!JNC*B?+W89v!bVsI&9#u;&L3|8uJh*Bc7pVX}Mt`Vkr9 z;Yzu%kv5sFEs9%5QBBMtZQL6V28cpsnoN=!xW%S|&&i!)pY-#sWW(bVt zJ41^Pi}l_~VLePm#_WKcX#ckEsE@RywUA|oMiV#pfSQl(`BgH6ue?>yy8IIM3J zL}U&>6K&g0TfcK3$+>+CPssFfHPQ>+7><2rip`;Vrr@f=@0d>7JXhLhSPrh-f1zWm zzwfkTD-Mme{>xgB{(8OgkHe{l1N7Vqg2+J4Cv6m*fQrgEgpT)c4~bbi{vEe*Aeaz2 zJ7A4*sJbR)fmKCsDGK^@wD?#-3-@o1ikOy(1(tZlEaPj;t0FWU`f1MbYsN$H1RzsH z!CJ^JtIFk%emLOUrw`(*oI^3o;S`a7d7LVb>zX{}r+f8t)0H%9o>54qm(Xr=qWX9T z%RU)^l!=b)7uL1Td^$&(;smmPV+MTT3GP3bd>|GLMp5)~2Y}s`P>Z}mXb>(<7Y!@u zXck3ed^0}V&!5zbB$OK?zRj>${HXaF4`dX6Zc<@L{i*1RN104!ZVK+*&~4imR5#Jk zF|=Q883<+Be_2ktF6bygdNoLw0o!LSc)Y!6OmX| z%dj^OGd>Fr)sMDDws1``gTn$az)BIX+<655wYUivDvlMwfXNk#zii2vh~ws!5uD9`{QKH=SrM1ql?-AOkVh%5z?TyT@8B5ZILOxz5 z#nf9eS{H{af^B6g=-sW~^e_rgMb`X3yuEc)o88woSU0SNhvHD6MTBjIVNeYoj+luXMSP{Qny12nn zU|@i#@!22|_3Vyd{#_JseaQp+Ze^bX(l%fe_+VmTA71AE=fZXZos&8&&J5zxOkcbGY2RVv_4U=>8X&S9f3E_k~e`%`a&Fc=%X-D%fFYH3&=OgC6 zyip-Ta=uUUvFbX02{uj~B$YtMor8V)P0U%<>|&c&HXb{MbGB0tDa3LEX_rnW`?N`^ zNf*=U^55pnDCI}V$B%f}6UH!`**e!de{`K}cHH50coIFl6uk%@sc?3vqkY~w29V)< zYZoqlC&HFd58X0IpGR3?COoOv+k$Ne^AR@^7&7gue3`FnT*0U&Mm_;QN+5}s$ru98^ZHDq~+mN=A<6MY>Gb{4QnPpT> z7++~*52x=67ndf31A&%B;so9?ws2}=0jQKqlpu;etN>>#Zm`xtuFiM;Ck7GCypf+HHRSdVb9_c%! zzwYn5rry^p7&sZs6gNhGFZ0BTWtW3RYkA!UTTSG7f)6ZlkNpkT_W)V@TkpT{SOK!S zN$|+jrwt#N;|fBU@c)Fj)>#!cJn(*8Y4?!E*XDgy+tDv>ZuPS}Umiw>!MCc?Foj6L zrO1!3Jz{>6vf%xVgdAB&k)-%%wit6T; zrN{>-Z9Z4slr~0a20Kap#qdvMBpfzz1tjAmt-AyVE>0Xir(XR${nXFF7q!#3vvT7( z*quHb)8qu7gSJ$QEMD_v4aLS-hJG@n|Kbd<-fI5kCLVM|_0{DDO004^Eao6YIAm%W zBfkB`@23A~x;D+4&5*pUF^86Yet??t^3f~Lxk4q5^MpM?wlK+1oWCWk>lKU+nG;)2 zdg{4Hmf^n}@@M^B1Gkh!dFOG5?Xo&XB)L#&~Z>R32jvQYOe$4lTO)2)yJ72Y<=zw4Xdq_OEQS9^X1w4 zer@WSSo|G;1aIXw_U-07)gKzW7ogThY|HF@Eof3_%j+b?v4h1kjrG-O4DT%YQr#9{xi=7hqYc^4yy&f!gtk6pp6C%-S>pqpF!DX?bEN? zDALZqLJAR1h_-YGyJT(inUT4wvAjtUm-8sLTJa}EK-n1(Q;Fxw*1kczs*;!FmpP_s z)T3jbCj_3~me2J8#zdP(O5~55Jizir&$&78i>qmYT{SxSsGo)Y#&jA<#)+i^T~Ku5 zxMQm}DP?p${wVUS+h^jdrEy|@BJnySa`?bkL50w@l*n=lE@D)X_vY~i>M;SP8CBuL zk;f!wlp3WjX*?^^zgy^308E25V#wri*YJSXrl$?i{L6xX%?R-hn!O;Y9z9?-ak)w! z?drV($Lz6SJM@;3KI&g*{oU(RVR$82bZQQKu*z2n`8}UW!GsmU}492 z?I2hzzZmnV>r;bsrADnM5E;;ib<#Ef1Ovmst4MFP@uxk-k~1Ed)gi4LDuc_AazH*C zwF_I$hbytPe0M*&04bLD=^2=vF`eyF4Lb#Xs4j)CjGhEUf4FglxEbhO0UV;KEh7r? zMn}8W&51Qd!>`N!LprztS;zI8f*C0NT#;LHyLkzsa)vWMm@o(wxj!iz*6R7BvmB`B z2TY@^o(7FuWC(e2`L`ZL;lo^E^u3~uuF?S-c=qgTBg3bhUXFv4zJ|dxFdR1&ucRueA%B9ED0-K>HKce z0au?$e~Q_CR<6R5;1bh3p=kiVR1rxFK4Y29Yy0B%$A%V!PmQ02n;-%kP~twCXve#2 zb`@-7{oS8fv#xT(U)O7kAQyB4(Y)jNFfO|-+n-z-d*o-^JKte!wfH@Hg`89Ye!<1> z7U^2BQR{alKH~^#ol{J~-2Ul7OY8IE7qzvFl67y++_J;SSE}b1EIh|Ov;3Wcu*ZVG zrsVqK3j+&^hGWj%0c4xf>>!6=Ch9>i#5*snCwuH`(7n|67fW3!B%-kd9g{F`Wm8-B z3aw}1`d)0NQ>}8MYO~r~`=4so-C2*K61uc-c)Q#Z6wrQE`R}G!1567-(jI#g7B@Hs znm>LTw9nNK^SFWPEqJJs1)E503qrAU$J}++gd)mux;z8qphN_+eZbC#}>=DvQN%9_nKfu5=Q*1i74(&A?E0qREeQWNaE^K-V8oY}eD_u2m@0UEF#f?Gdz zW*pu4vI?qS#iJvIOkaJT-L3QTS5Eba)tY{qb{K*2% z(y%FTf8M|3{GaY#+1bm#SMqK+o4So4Y@I86QesMH4Y4mMnpl(n)*z{q!n?hY(|O#} z>r(CY5mZL9Bhmw)0waMmOgyE`;o4C$(G7VIknORYZvBJAb&7;l_d;%X4AhV%(B3b& zK@q_}jaI6{DVtf^qXn)+&u)F-OZkj=n~*Cz$7KS%@q;rNSCl^UbQPUMB&=~OcpB=E z`@_khvi9pyE$b2UtzjFGpih6uU$W^f8O6WV;=k|z2kOT|{uk6g{ogYz>D$#-=Fb5C z4_Qm3$L+LJ_y;nU+t!{G=)qo~KV=Up6x#FrO#qrF78biWTH_3=&mbrRtEEK)!@LzL z47{77=k*Q9?`Qjh7gb%AwL9{s^oDA4P=^JGgAHwQ_(8NQ&a^5?R~V94G7uA=4r~kc z!phD3-0Hr)r^ZS@bZ92!+s_unH(b4woq%cfOMr9W>@BS9WyHR1Wxqso$VaTV9(}s@ z7Hxt54R3svOs2C-dom$0gd==(#Jm%tQ5zr6vY#WCP;La(YOI4_h4B@<4m%tvO#xG? z4%7zP&9@ZEGMgA%@8^OTU-iFZ<3WkUxXl$QI|lwI?T_Z?vs4+`tBjFeE)zXn`>yfZ zoeY09ud=Z>ziw8|(*wMA=;#A|%fUEX@jxW_^`y5HjktA1tejNZwP~3&^_fgly6igD`&>qFjeCyx*?X6w`(ZuTEyp~WHxt0A&t#4= zzv1-(*Rfy2|4IzYo|O}RG=c{f<@MA1fS$ATU(g!K7pwm^Zl5Z09E3~~GSB|dL}Cjp_L_Vbw-M+L_-b2}ysYX5etaSR1Nm6b-mbc zqK?8Us)uAO@U(Q~%(>FNQ!?3PMfXUeo7_5;Djw*+G&3+%h_k=(uGO4o1irSJ;Q<#% zS?Ck@_PEmSLQwAU!`MZ*VBOB%3k))nYoPjxgSo^P&VTpBHksJ$A*)I)bf?2j8TEju zVp0z@{np6!ws?VN>^I@HumEz>_%^i4(8}Rj@PjjQGFd-_o*vKaW%dWlk@Teb-Z$ej zz%hMZHd(Vq+cGCO?NGvETotk*bqgkcCd`~nSiLuxB;Xrae=LN8?=`qkX5u#;G1=2X zW}nHQf9~BY@k_n(D4T+l)-aWLH&)BAy`i`qp<<0cwQ%SmoSFI?*nZ(2EGrc`HS$`) zN1pt(DM<_TXm+nmd2Fhqw!gY@nD{RH*FVN}9)2om_(yfjQ+}p4UP&?kb<{7hAhhWu7)2 zv6kEwTbE&XTmSWEy zeW{Xgpj zYpL!<5_PgX0njyP?p4|0zkZ#R3#k9N87c7d-*f2^ztm~8Vy=KwU(VfJ*o~{|zWwa4 z^fmDC|K(NX463F6hvFaUK_5r9~b-Uqj7j&fFI8c0nW-Zj*Bi z0-d-Z4cdY|EQYU%p|ctEO-dK;_1!jW9xJy%A7+JZ+TD#38SF|?S&m;dYDf##?JpAk zCb4d1E9U|yc>4Qx@gE{h3f_I8-m!@$8d4&iDvAv~rNUqHcqBPp7Emv&IQqPRiB|TR z?__9*(QJbv?d%=UOjkmQ$0Q<+Ny*V&E@4#Jg9BVW<>EXaCwVPApsroVXnP1mUU%re z;4Eu4a>%J{vwnV-_Fr6pk{{ajo8L9`db}w1N40M*_JgUiJH1^et!=?QzE$al>32@_ zcHwGwWuH#}84Rc19F4kdx_yJ2@qRvVyw3)+7KetS31W9++{=K}_TJuvSo74LF`OQB z<38o_(C1KkeJW6x{vf1syb_F`_q^N2JTs}TyU?F{pq9bFF=N}bSK8g?(#*w3o8%#3 zr`+7I>n680L(N*@rJ3hkwUUQ0`y1@=CE9XZ>KQGz`iXqmE(v&ArM5iQZVJ1BA^UrS zNQI;XvOR8mAYnMfA@ZLBcAvN88~(n`YyX5*{y6U|HFv%7h2_N)>Z2l)dk+S5CMD&% z^#Bqe4nzka%^zmJ1=0f9-NA7(8At?-5#2J~ZyaOz+(AXHUQ(zWzJs(VSozT;P`P80 zY0gMgrV&V3_5N+6>P=xoaesbxA1u@3P;d*KyZXZ|Qz-G(u8D4iaQ)w*z4!_YEuSo2 z7Q@T;AL`e=L4a;nObWr&tr{+XjlSNObU$*wjcM*Uz{}ryH{5YsSXftLvZlfC@|~ZN zdM!Z5N!^1uq{`0V#3*D-XX^vGV$s^EI?ALK4{-Iki|V|+;AZc}be|sf)zap&NOX3? z51~(wSGwLOSz5%|8ZXeTGQ`a()w)O{Y_a+`#X7*Ap^hI_t8soh9g|<{`o?iLt6&FA z`ZSnF*5Hfe9~(JbweYifx@WI5pLO*0>qt&&72j2p*kUw4vWaAdRDA~@zD)Y)EYqa_ z*Im-TQeAvXuMuT*>H(*k1t#iNlV?t@Ih;yCmNS~cE&?0csyfbtxl$D%-q-%m*R#hn zW2!Pe_9(I&2PTGIdr>JzjGZ6rla5~Ua@t(`kV1>Jp`9Ne;$?jG(QYUsKfGS;pM*KeaYvuE?D=~t^nG#=z|(h$vBDpviX;EH*v z9@qkMT}Hxnzx*SRqHUG?8~=4oo4}aNr?SZ&r;fV}@Xu@sR_@N9O`T7NJvi$M-({Ry zO`ib>YRIIm)USU>^&$3u_?+^~Szq(Ih_m`(lGlKS(T7bQ%C>WrOd&PLzsE+M>}E9m z-**CGN%jBKrvX8apMRy`{=V?vjq?AQ;B<3h>k2Ip=T5(o2yqPu{{GP$zXJ#?&G{WF z4yzIf#|AFnbo*V!6tsr$1`U5lXiFoX{H_Zxv(2AWlfZtujxy3}2*=qOc zn8$rd@~qi&A&;h&;sQh@cxZ;fbKmX?KLS;>8chg`L5{u`*oQba%bjD(!jnW6HQ29C z5$Mh1$18gu6%Nh*94 z&@1w*Z~VvHu)EwTz^VV`*(^o=b8yQ=A9Tt_+(g{tYk;$G15C$`Zl`emC^q$Vw8_<< zu6E0))TbBeE*rx@ARxVd@v)(DV}oN4q_sSgm#d+i-2{KP0hkfz0<(*RBToUP9C7B4 zT?m)UfAmE##e>%TkESlpYIiVWo7^iNnIvSIlFH;A+9zDSxh-p)%hT_y3S`Lp$9~kl ztxKO}yN24g5d|H6CTXacmWykfoqV;XGYi!=tPsYtdiVw6cK(IcEsb`oy?A=d1rRfG z+hx0#xYJX0+GneM@cle&*1g%LVj_+PKjZqvNY(N|1I#fhCBE!CJ}-Lh_c_VI(cnSV zwl+7vk*I{dWQ?mUcdYwFz6wm@9D6aNkhoFNK-Vx$WB6!yHL}snY#oa(zkD~`Sik5k z>fG49euj2L1nzHv(nX0b`c!B+)C$6{+G=0!!6@b=T9(!S_~5uGh__gX4vS9ua(Nve z@S11br}e^(vDqf>u)O+X_UH7xBV>5xbh}aGwnBznrk%0!xbO8R4;nn(d$;btpsItC zaExM=GxGMrGskJgSmS!idABw1P7h7%WTur28$4xP3TEAD13iI=II_P0WvNd8wp!8S ztDdK`TJMd>w7~-fb$>Zerm}M!Xv1NQKflNvZn0)INg!?B7VKjhz}XnKhYN9AT1E_1 zSzG?{b*Z-e$@+TG|DTuHR;?kk@UxZb#tQtez7thtbsZPCg4A-#0}qdrTOKkLYZ#V3 zq5)MrRDx@6XkDhSnd+?@mCa7C9~WNQY3;r%h=@vYoSPF0V!9k(a{B$9N`Qwi$)tcp zrB~&CEzF1Oa?B9vHex94)L+uE567ejn1e@A>p5vhg_hL5H$4ba*8RuQdd_f>2-;_%tdY^ zx6@5wGu;WT&Lzj92n->bf65cA-T<4)69v8T%uY+ z*d%hg=_9#?>^y(L*fO(-#8J6PW&^fOu2w#`RZepTIYv~n`gES93+aGoJvau7ze{jj zx{GT~PK`r4$$V$m3>i`$+;Uz;mE=Evs&zLfnKQkNGX|gH+JUHN1Q5&uD2&rB#6Jcp zzQlSDE{ip0$YtkyB;)a)@@C+9RD2)MiG0iFuS9;n&d0mXD_p|IzrGoKN}iaSeviLa z?>XQ75kIy8^8~RCP4TYL=VZy88ryv8)tL=O#T`R!j6pn0tGR_cretN5I$M9H)uKYl zyDncsO7i@kh!)z0i8wZ}ZGUh@QkytAKEx&?7b)?~fqkUftP=!RZq7ELmK14i1TQ{w zOF#br={V4g#5%60jwkG7PprEX85a!So?$5ARU#%+azhz#tfh>r!g3q>_wHl#53!Mr z)I#uvkxBH|1Z6`8*&R#dJcipgHt*n(s*FhOd}zd)?CkCj6m!TXiL7rJs_h-$cxFMp zikHyCTTHkC4VtpD&2?j@SAv%{N8KZUieTT!ld1Vr_)#;2$8~+Lbi^-ixxSY*K#n>5 z{Ec^5N)7Sz@GmZ1;-u)5dIT#{>|K_0&-X} z{hGzxfvEDO4Zo_wvt(5b!n~?}*Zz^$1nA!F+-b4{3I03G0Jeh+?5K_74Xqe-`k%XH zJ*19ahxpoM_D#qJpX>Rzx37Ff$E-+EiTkCykL9t?A^eK4>{^IG{XBsIuCjiXXcx`s z=zZt~J&nAVozRZK@qptk|bCenZODch^9Y%@rJsFHEwCYcc)H%gkQY3iX|lH zr#c{tu-f_<#6sQ2XGfphr=yg`vvJ2~ZW6+anY@;C8mEw|Ae`3_iZd434?Y*V^+xU& zWi|8pR%TPih*UG6A0m17aOXB26T|gL!#1j~Z+R*@azI#vr@Nw_lv#?Tzz|fLcC&70 zRf631Jv&X$XM9Qg<|}0Erd1D`o_*AMDIbaIeH0=z)`?F22MRQqRecE5|i1rR8chV?o}OdP1ISp@lBKGcif;3Kom;*56IsCb;a~ zxE_E2@~-=PX)^t4LSe!LlTa`r81_SYK4NA`4b$h}K~d-I?Rrr~S?YYq5~sN;=WxAL+M#usz@r@lzmNkV#oWo{5P zt|0y?Zk@Pd`1v7)PE=Nr&b=9=)luu`*PG}!nn1yp1IRSt3SMM5R@mgf>@~#6-SyxZ zNYWUOrovWMB3ofyb4bEmgFD#@(;SDH>gL`@VW9c9Zg4e{Fs~)8iN&~=D zu71c!S++?a!60Un3zkuw|5S;n=QoYNKD9`Bf#A2x#*XSoIPHIOeqn64GOuDb#|eJH zCOHVshhm@P@eV)#)794E`4NGW^V8|&&=Y>gX&ZBMxTAo0f$xw?!49ISsK<`BaP&>G znO^8;vyk+=n*w7m1VUn%GaU>Ej#T;Ibw%V8w@CZ8^9k8a$j%e1Ew3vY2tCh>Domal z?1P3_otWM;C!UF&&J*JvGfjFX4aF_t3v+d-i4r_RTT*))IoW9;eniht?C=wr>Sk`g zbXipf=Oi_D9d<{|`*TZ=?sh~833F8W;7Kxve$P360Bcy`kl7BV%c#=L@i4MvQ(7s& zi1&#lZ$LTImIdD&Zy5X8J}?TTGIqdyvo!d_w&i>zEcvKtnleSEjW?YH9~tfVgCk%! z)t#fS(KkXlEknZdDg?CIof&aah}>X|$buI{F4$=O^LSiB<1tFA52}S4w{0%?W$Ms9 z)bm5@s|MF2G)&WBxNx6Als%OGz513G=StaTOr)KEAN@IcD>eR6n5T6w6fq zVv{2D)p{KeJ9`#}e7s_#&t>u45}|}U(#MwgnIZN;>LMTWm_!^tMFB)_N1X|ePq~fd zo|}I}65hLu7aDD8bPUEz+`9Gakt%}1olRzU<7QVa-X)sz#J+uBFpx%wV$AM&AW*RC zB3>CVZM(uW64_~6g}m2kH`V>4kV4N{^mX{zQ?sIPW^m>BaZ)bX?-NI6Lb9d&v9S~m zy^YzezL6RsFsT8@`jg$I05t*jrNuIJWr_%48D zt{|!r1Tu^g8kCCxTLwo29Lx{7+fvsHhA#ZMRLkg71I^Eu%tD>4w5L5g76bwMsDm2n z^(&8Oab|)x4t@un-nNx}B;+ObLW9lJNZNFK+tO;utld9Mru1JcG^hxZ7giY)RLSd5 zJ+v(bsq+vCV?Qf6J?4en97lJKTlS42yBv*wZ*x9s~>-EX#u2Wft%wZbwJY->W* zgWSpV=C0O?jltou=6dBq=E;_Jxefy8;EmiQzR1^~&%U`R!Lv;!eDf|)5R~Ufq={+S z6u0bdS$~3$S~~mbuxPWUsaTI&dWG67y#T(N0N+ye_QGA=C)sQKGT%LwTP?lkcBH4i zwSz>1-!)S4@W7+mP^ZXPQX?v`)K&-1E&50^nP1ayxIn?{m^Wi#%e+jJ?|JqR)|QV- z(3NTBDi>wk~uf^$sZPTf+$NB^b$GKdf+1*&Y))#wP-=gScZ>@r=R~d+{ z;0lRwpGQq%ujPBIp1mZe7tnD*G1@i^yvsAxu=P;Pje~Doz7Np4moyMX3c|Y>elyvS z1bW$zP3zN9MS{zS0 z|M>A1fb|ntX{7#eX|dM}m6k&j2)>?>f{=zGh6VY%FAVT|2EPj*9yGWR%~jL_ovJT! z^07S*WEe4Z6QC}5N-5LUclRLg_Z|t$O9tnC^*{Fyb)Hu?VAOBF^_9CIH;zhXrUE@& zfbJU{(Jd(0^f_Pbiu+rgc;@rI`QuDBCI^xhg$lkb_^xGmI8_g@DvhJA5k2JPY)&h#K6TvG z_ncslX0gOOh`32BI@I~&A%C6iq*{W90IpYMu!!fxmEB2?>*`~^Lm#$uGA~X@2?Yz7 z;5-E1dv7dh>G3X2brG}<|DiR-NgVg0=*wERrts}{j=xdfdsc!0*ywvV>dNiC1tJ{( zMjrtL^ZsACaNyDZ49ZgQ59Z5yIOfTs`q|)*@*IUkYutn;6AkcXy>O3yeN(z}zF$_$t2{A}kY@|0&YAaL(uq|d0;^KJ9lYV9+=_6eJLt6c82k30VB!FqqMS_z z2|ZH7k@*d+jsLqMLd5i6xsD#fUR47P+AENhZ#{NA>z6{k8Bm_Rm~i^#^d`RXVO05^ zI!%o-vXhcAGP4ppoohUkzEUk*n4E)~e7Ia=nSN8jG}9Pz+N$^@_SsV0+G_6eosOX%~taG1}fLm zZ&1q0TU)OJ8V${MC1W%`2B%2Hbaet{2=nGz5$4RcrkKNJ&krPRuq7ql}by#qi;1KgQ zBhp2C`a37r;+F5vt#dh8&zA4ok=K=pa5Oe^d>UdGlC<~cW+LO`szG)`sikSW{B+1r zq}hZjN5J!)f)oD9_DT@;y51App{C{C2@h;xetbYJ@v-G8?bpZmNa0JbD#@IK;Ij3V zrDVl}#e8HLfPAL?>+4b1!++FMtA5ic3=~60STLT+^-Ak)u1r!H_~!sj}a(Cbj|l$f|bfdSCyu8 z7!(XjhFoFSWBu*jIWT2%i!x&!H8xPx$sVzhzTPYJ0n$=KIoui)tKeQMFP0&vJh;^2fE@aczkvA~bi^f(8 zz$urBB}=Dw>OiiFcJ|wsnrW$;zIr=31O9plZD>i^_KKH8W?O)Ht(d{LdMRpLhSPyO zUX|Q3tB~jgp^A|ZjS(!zpUc=2p=Zpp8T}QI_*YSTvAUT8nVRag$}EzQe?-|U1iD$o zquc~gE}O}|&2gt`XtY zS{1X^YL`d8zrMEq2|SVZ_8;J{37lxk9^JG4NjGBdVT&%KD9IbDaZcj5wR@Z}Z$UsX zfrYFIA+v2$MM#osUmkv+H~T}>JmZ<#QXW{p;@2kg%If2>+CbEU`f>EDR?;EgER>Nc z*0oGGn=tIp@h))^c0@~L;|tD4U3H%PtD58U&6UITfmnW9R{v`2Y6|o@N4c9ozl+rQ z&3rK@jrmR-nG9ymW{2!+_Sv(YL1AWA<*Vxn?;z%SC&yKYM!Q(^vg7-fx_7FS7D|28 zi)nO=*mdiY!{v&6^y(gx)#VdU7ld9`;D=8QNrCz^i6EnjSZiO2_xDLj;*hzi{sUgT>`!rh>N8H-p z@C2$Y8rlW_!^WXA^{r$l+{~!$GU-^AYGIA^><$ZR5o-QN%Q~tSrbWlGRuVpnH`06l zkv|k+>>^yszDqN2X4I>rli0^PvKJ$}W8n~2L&EVsfjBAio=32#gtP-SBxtf^nbj!? zDjhvbk|?~yfl;gTs)Y(n@q16&qeJUBH>8^Q!eQ^fnUKJQ7=1#IMaRNN45IhK+F!CDepw$rEYV#IbV+Nj zY9$bDy9)@6_2*qs^X1s)w5+z6ND*M3!DG@Y!8xThZ2m8JPuoj3GUM~gFuUX7B|ar~ z3b_~aq2TQ-nKe@)Q^EQwpQbyK&3CXKKUt?{D4x|Q4>h%qVV6q5Y;maempEd`pGlnw z2WYMP+$EJSytw8NW0aKr`HPvdPs%XSA{8bI&R#QPeCRSrNd}jtF8Jj-_4oFJ19ciM zsS?(2Io2Ju35zT4wrJUm{e}^EiPD_|`5nP-a%}|421m3iRE(o#xJ@c*CXy%E%S`9- z$?J2N_p4G8md9Kv{D`hpt>!x6;QdCW$|c$ zo5V!zbIZ~_@wN@e(iP4%@BdmA)O_J`Vh0qtXGXErAp-qq0v&zHPb_y0czcoAB$g$~ z4(;~o2=-Kcc}o@ZAoFyrNo&2MQw*fZGmFl(Guk!Qv&2H>M^eX}&Og&KWr11x@&X}< zDJ@O;`IN2JXq`nJb?WK1x-rG?PhrEMfXY~sA8f~|dqF@y^@P{0DPCLqUPv9ZsG$_c zVIIwVfDC@3S3g4?HCfyr$WiIoq_2~Y*b4vUG5Or5GMP_L!qzew8oki^wjNUYB71V} zM_e|aR>zVlSSx`=js@fW10lo<8-<^5%rJa(YZr6e@I9GLnyhBA_r*|`M|xLe0~QH{ zpG0Z~FGud)PH@-KPL}Gy4b$9Hf=pl;7D&sm*UXriC#h0Wi)iihIuR0jTIX}WF9}rp zS9)C!eBG3#)ZumWXy2Cz&lvh)n?)j@;BI-@<@{(KXUFc7t3$|cj|hJFx#tU@#VwRp z&wQ_i%j{>_V-ilQBd^067uUjw?D0j6aOKa)Qcs^ak8=BPljNz8sUJPZ}6c z(B{ZIjAm%sxM-ZXA547$*u57O3k;S`nS2p8^6te zB^-Gr|0M+2GT2JeJnVNck*l$TwJ>nxFMjroBb<`=F00b?$eomIUkUu~O|W&Aar2SS zHq{h<(G$ey3g6S&BG(cA0S2DrRLy;@mWsKcu~0FW{Ih6Za>w3%1hA(TlRoe>@!krY zyJ+&&^bMR&oblP#^N7K3zxX@+KLe3tsvo{_Er_80DS{&-eOo8&Y=S9z4jr{x3innF z>)9htDwo~SIEiQ>(l!>UV#wKnP(Ir!GJoQ@LTvqoc-UNLw)y9D&6UmGO_Dh#Ks~XL zDgfh>Y@%s)Sz@C~@@qJJmrxJ;2JGywmjIkIj-)+nTCTJ|ud*9ZXS9?u$2QgT_nW#& z7{AKnTg&pdPkaZNmTuFT@zC4T4%M7?DJxGJ8;b4w@O5d4P|tu>on(4<27KIFh4T1W zis~zS0zTg?84?=^9pf)|nK^fO>Mh6NJM9FLmY11@6OviyQhKwrAzT(hOK}u>T2Rpl zeqfYu&g7!Aq7Cfw*v-`DkADRnEn!i4fPuEUS2x5OS8!LsMe=s-RR zWtfUcmGG;qot*H{@u0(LON9gn!sd(IiJNnKZU`^gnJ%qD7oraEf5yI!aRMbs%dNYJ zUr;^P#86Ewy*T5+!Gt*kzYuwye>kQ6Q0x|ue|#BMC+r=Bvz*17Wn|;_X)y>{Cl|U{ z;bn$5K3liPR&QQEu$OcOERzpcql^SCQMQvlMeP4Nh?*z*HMnP%KC%2sDYRh&1JZUn zvoI!EfQv_Xxw1+0*<2wV}zicS3Up3$g7 zk0yN$t1)}C5-(psBx$H%G&LE4+}W~h!TFKuS_X7$d&QUf=(WrCpk`6csyVKuAm-Ud zr3u%`t7TFoiKJtzxmlzast)b_%GE4tp=a-TQtHA)ob#*!%pi}IGA_R~Ebw{H8zmhCY6vr=v#)As$}f z5Ve(R>}}SnE|@c(&}Xx3_3b^nNUzh=x`&)GMlJ5_ zleB&y)4bYuUv7z z4*|?e%%dA4^Wf8M;iJD9ZAat(vMula>Vm!)iutSi`6h+-f0&oxeifImvF(EnDunB#04$z-) zrI-~as87rMv-U0kdsOs<@xFUC5&Zs9G3EeSY`mQ*1uQuAM1*$#MK)pb^&c6bZNnM* zVT;knva3Qw8~f)GLusk(8)hSJ{4D{nE5Pb4KPn{nIe%3Ix}hKc279rvR+KQsZq(&+ zf6_!Uj1YqlVHm)ohB~PDU0bBYX3|4u=h3@l)~-S6JS@yJHQun=e_%`o{@ZAdx`b+x z3JFxMCbb%vQqR!|wMVdDABY;hp%!>4jAunZgE5+Rq1_4EeY~XzG>%Ap1kk7AUod`N zSWdyC|NzIuPWChh%~Xy&FG%OwyAUtgEGABzZMqbIE# z*JRPs`z);7&#lRfU69&RC9}=xIY{*q!eXiAs4?H>Vog{3;?^RTuXtqmX+ljQWgZhG?`#QK3~~FgEOy{`Cj;LuojdIKAv7 zSKF0ySZ(2SqLb(G8(}PV#wvEr$xCJ-nzD&B=QUQh)+!nzJku9j05l6V4;-B!HujA7 zNZcHJI*9P`uF-Lkr94leEb`CN>(=6^Hf}8pS$L4d zEos(Wig3a;dVv*LXYzw4f5FocxiE&+uC4V)+#C3+GjEV(PEZ2U2Q@oq@JyaMh3v*E z$jmV$`gpg=!K>7Y^>g+>=+mS%X6x+$DUfFil6IKib!Fx%zzj_rAMXd0~)!XW{5(aXFB|^2V43`D1rhMqJPD$pnewyf#QZMPEn{jTs zMC-1^Roh}#4txlg16Gr{iNmFSR;wEa^2f)2m#P}O%7Y?D&9^ja-QXou%MLjieyv#J zs_uUlhBGq7wXPJj?2K}D8|#*lwMf(&`jQJ+ZF7cWPMbMbC9RiJSHJE%0|4pJyQ+wN zp(MSlWYC`@PYfNVTfu%|a?tXWK(X^ZUZZcB^sA>nG&HnL;fhSlg6j))dL{{L^{s_F zltHbs4oV4=j<6`-yw@CH)s0BE!gR>4AS1Ed@I685jVK+^KgZdT-<}ynuSB|*_ncfL zhuO>_D+M+HOWUr*bjd(e6(S&%q3XufQBqjCT0*7vS~l)OAX zzf2v%v~2&ayIJSMb5TM9i#c-^wR(gD2NB~XVkSG=ow%O0ME5dXe0%DOH4_mCnK=Te zlE*~i&kW6<37NKgz8RqMou}3m-IKt*bbE#|#9UkuziZW5rraS-zUfzo`*v$8$BIFk ziNw2J{y2U%e3{J53R`_ISQV+RD3rmy`y=S%zTbOD)&2EL^`JrUHI zKb;@2iVkjD#*$Fi$Km6;pNW+f7*Mx8W^8|VVK@ms_}W70v6$MJsigAc@b!qRg~Yv!B06k=Jg@kmi!Ivy z94u1$-IjZD+^dowWP>7ncJGzG+?apBhOg zUrhBGKL>o>hue%$f);jt4yOwi=Vx>5G#5FoOp}t6SJGF)3T#aU#tUAGmlxZaYoAN6 ziK?~*4m__B*>!A58rSp(Kg~b7ihWzuX<^EoZkxZZ#~l0=B{UAXP`}!%=wCewd>y;E z1JzN|W9U|AyCy%Gha~SVo%kk$uRZd2Hx3B)&>Hah%z|M_LSMP=+sOC>L(pPNQ&Ll5h-SsL6rqmOW3RaQ4D zFyz+^!gSfGxmWjX)ofVotS^~Ic~B<(0+(0Y!}1NS-=d*~;?-s5^+qrF&riC{fT()= z`~AsBjg8+gw>T`Lo8DYiOeOX*Luf_n`@CJQ>jtXtV4SK%)C$=% zw1fzmHX2R(<@~cmonRugK1Na_!2_z*=Sc}+lxL0UFB;g!NhSk1;x_@x2 zhZ6)P8gPZuFR5}})oM|pzg1RC8C71VizPA(yBKm5bh7uRiXuBkTDj^pDgx_{8ss1K zm-=ghVEZ~OVxY&{WEBSi$--ji(1oiijO+EnoAjlVe;_e(sC~bZ^{dwM&^jS~AqLqEqy(F!1BP;`Zl6Jv(8uG;YphkUt z;V`y^B=Ljv>v7miz1Z0X4uWvnrzEV{;ndd()c4t$C=~g0Z z>$UM^Uc2HSg1qyMR%;eRe7+wYJMMw$z$9_Nt)kA{F8fCCv%E_O_gTwu2@@s+73I*( zw7~&vp9f|C92Y_dipKrb9K+L4gRvlnk|bZqTLep6VQG@UPa#dNx!Q-BF*7VxCq}iF zafcS_)+I-zrkhQ3&pyw_NWoMPX5LxVuN_=04p#d2T1V?N0KN}Gs|12M_@Y-FvI`^S zBSQ&k9?;K__@)2$O@24q9Xh`QbB`V=mn01DK)1MxCuKv8a!Da~?{>N~>%rcwj!cgI zLg|V)mS0p52XXgYxV{xzxDX#(ul975OMd;G{A4GaGQg>XQjo@%3J`mXn^?$6{3n(K zdg>~hc-U#E()+{rbt$c5+X>5oF|+9Y=iY~b5ouB{&60PeT}q5O>V3oChACU%vY!{O z{x%^ZTUhs8B%M`Cjwf1ct$K8bD3R*on)}u2Sv*B(3krMQJnLH|4Uz@MdfDPyByKg^ zEgbmqcF#-m8M>swYbwoy{6xwr8`=Y~zv-^ArP)-%DK{$8-`$tu1hUNy5a;a!Oe{IKnBxCT)U-yREklp6^;mt4r<#Zw$y+(v0(vRRf8cA3)Nf!HFd zNT34};;yT1^(*T%-M)DgH*=px#mHV<@ZF8K=jm-PNMxfEstC<*<~q4{N9{Z}UtjwI zWwIKXN0Xg8ckZehbZH;*2&^Y=taf&DeJdk^GR>PdN(XW0n-`ov?PEd%Oz_QMi%8gE zPw2CH2E+F6qbqTw$}LBgHBh?1RXvUUUs%OUMMThih4pUE7!UoG0V;!R1O6ro#yD&; z*K!22m|>*E7S2f0f$m`Aw@kyuQy8dXu~ql$p?j7ZVbklu=2wVQ_x-WPX^PvoV$5u3 zbAnrQ_V$J6|G5giefeRXCq!TUd7Q~zA&>W}pf(i`s^LUp)_#k`D_D*kz6trtLTY~9 z<=)V7JV-dpAe|`1>m?EpMRKHr$xj61l6@-`{1q*BTEEykS4kVYz+;x5`jHaE`G2%_ z<^ODM>)!6E({}5yJJ&8ch16V$p~kc|29X*%D2iR7p{P`7k!Z`Vsy0XnL8wa63Tmnn zLrYskf)aC6B{35v5yW&~=iGaKzn^>8AF$T*uJx|x`F@|Zp7rgc!roocJ+X5w*XN0x zYSS(DwpVi~#?q;lwu5ND7h6mD57*)+CWK=qmmrV;8;q6I!$(C;9ZlzWs5aAmEu4dq z#LXU3R9~a4=6cnQKd)>97dBmz_a~ep&GKq`zd+4l|Bk}NVVoy>7>dq8fJK-#pOrA>P_nIu}q4-wFQA?iviV$=9zqb{CgsPI#c(@Gn(h$r`#jW_e*B-R{I8I~BeV_&mgipC-wXPRrvWN2Z$yd7k^ z0~>Hl>z7N*%Gh&5xFxDc1iPf7O+|*DAfU zf~guM@Aqsi&X>#cZrWQVVt=9aQbYx)ySv=w1HaVya*b?)b6ruJ+{w&_B@PYj~{`srZH7P@m8r#^hN zh_SG$V}D%huV^*b50^*(8JaqT%rsI4+hrsa*9(#WZJl(~8B0P^?7=dp%yWobTgqwS z_~wQ645bs1HIAcyTw7J|x&3U6r3=3i9?qB^ZBV*MhHGhWI#&Gp9J~O zk9>ikJ3(EA)sE5;qs-)=5`iE(z^9EZF-Z-fMII|n`7yLtorxwugdBL)U5rgTXo7H zvFmhnbkK=(=_iI$AVmC;-8DV21M(!LB{&tHZu^-+qw3$YFp)G{cRtxG-*d~TP~hq3 zd&gn=3G=xulz4b+#_o3QbTwU4g3By#tWJBP#5%^`?U!hipu!wpbi}e}VR4&mErK0$ zA`K_1lR2UWLA_41GpM*g9E&iHFdMR6O-wRF?6~RRa9{@B1y56$x_)hZ4L>^NI!rlsbvvBir>F<*~?ttj)DpYu$C^AFnFAS0`}T_B0K@ zb5qz?A+73_TdU7z6RN?5+1VG1+!($BQ&o*jRSJbdq$Dce8)GFhWCVK!OWb5tj5#X1 zB;c&AEBSlvPlZMI%F#G4&x`Fk7b*IXUhGiwD?#GlGGlPNTpL^%HHScd{4oU21L&aC zT1&c#8-9V5#WdZwKIatkm(me6H8n`_;@zhE#B!bGo|gH3Av0W%*s8LBH9z}iQDmeWSu^~?g3otFOM-${naR{w1+9@IRhYu~uNiN* zYw_;n1wT=D+|`#6ixGdc(}(ycve*JLuBm>uD)1U(#_;Wd!V$U2fgugIo7iBy62rg} zZdal*J%jHLeQ7gRJ)1*(Pr-Cu6D_K!wpIsjRWYr4Qx7C*1$g90IL$4c0%?H)N8oG9HQm-D#HLfU~BncR)S5Y z9WDUP20**Lak$!+m)J&)>+d?gZ@>TH4P4Q8Xh+N?UrU!dtEu1620>FQsbC72PE#xJ zNMy0jpOWWxc}>YBf0ouYDj=f{H8+gdw$qev0dL94Z`!&#=oh%|LW-&hbICYwlm|R7 zqHd`0C)%OL<3>`>1euU(2~?pz{8V(oEpi$z5$&v;t7BwL-DNe>b&RF!yI8VNRP(!R zrBiXXoSGgSPVC2EmEh#C68KsBbmQ>%$u!&p>yX(}V)=;vy>7U}Nv;aK%NPv=glq5t zC+J|DNstLw_@=x-?K&83L)J*P&#`#(d__hd_f|8Lm!NnMT1PGhw~-joCFVHWaMrBA zEo^K!ptandsB_A+nqi)ciYMBo+^n#3E2=`O+YllmTp@9BQN|C*yROD(?$=66RM^T@ zgC5~GQpI1s@k1YiPD2~3Pwq7Wt6vz}hE3u69cl67jtT_tAUjCW2P)c4R#~?H?Bv|< zu|o+hina5BZy!aFrG^thyIFdKx`U*r9FT>2KQFJSY{|rh6LCfs z-XZV3GW@T?JIoeglR?P7{v5;6d!(xVUElVngnxp7nbFV7Fe5xW%7>4PYwT(yTccH2 z2TA!H_b)R=ogC$6Wy<%9er&%>)#vk9Fv^ln73T2T_~ay*XhiLkIaU1#E?<91E_u0>;=|bQ|sOm&}dq zSJ&I7M^~h@eSj(*vME_XAVopCeNl@2LXZpHGwxu!ASECkQYvy+G7uN=XIv(yn#tSZ zZ|ab?w;e+NC}yCb4KY`r#9Gz->k#sSCRc~2AryX|=P46FW}!bO{5BF*9&z@S3SK0J zAa7i&?7b2`lzKks)oxkHXFgQ&1Ge7bzitIFhFkw!K|kuBE_SQ%uHcXqr&bI_;+BpA z=M&>?>6%a5DcQ;0)d;d$S-bmJaw z1Wgy7Vb4q(Xx-je6FS8l3?5#4K*~pCq#m~A1b60)mmSj!$e0)gGZ1?!#nf@{*=i{(|nku9~M1ey5r<}Ur6@f!H%U<9MsRs83 z*5nMoR>#{Rb5nQk0{fPEbNv+2Lm>b{sdcTne-S_>qZ_M{Uc~bHnTTV%dh9u&lL|s0KNZixyG&ME!JRz= zDwP1FXmJn<`$}%*f)TVik~Z`>Z~Jsb)d_WiLIwTtUz7pvouSYpo!A;@gJ*GPGHZ3M z6@689?Z#`YiSj3Rxcb;EJ@Q_hEEU90XPieqTT}!2$V08B;MT12jj;Q)AC~@pLoP>C zzjV@NOpX(Lwi0o>l^#WBzkaRwB{6z+fe)`*0GlpV$U8n1_%D6Lyt@Tymc!YfcS*(NZU`;99KIe~L;`%6p#_(X0Y zfhqn#96j@5$6n^^Kn;qs^5XkPIMS(XGyjI=U66?7b6AIR$}nNzwarn4IDZZX;0nP- z7l%?O3$8BndyaTAVBKqeV-hZNTypICv2Quv{y7KoJ(g1Ja-E1u;4l**tE1h)8%4uG_6$K^zX}q@x?Q&ZIxfWt z)1~Ad5u}|;+jCsk6~7#{%JOp~Ym~tz`3|Alh%6JXNNTE0nQArFL^S_XFC-&LO~YPm zA9PhTc528Da89N%d!aDu9`S7DkhTA8jQ4fk#NgM|VS*CeQMN8~v80|@emfY+;Q&th zMt<)sU2YO1qE#8M8RR>fYIK~ z#-3yj{B;|<+C)Y?gWD*%buu?+_Y->n|DEJc5Ym(#b6ey?ZOJFrC-5u6ESOeH+Tvw_ zx3E3Vu2W=EZHa)DIj1E5&IsK!52zZwN-@AbQ*+;V2nP)g4DdT&+j!RsQkiVFPHdjS zFPs;a>@87;aOCn_YBDwI&y}MsAEpf|MI3L~61BjgOgC z_k2)Gd0EVrV+Z{w__hFc&60@UrltJ}<^83y{_znraFo>s=T0O_CxA|JI-L~o8`s%cIEuQ)Y6Jt1+aoXJ6 z98!6|h(dHne{Uxs-<|Lk-O^`UG9h)mVp;m4D*oR-0No;{7U`W3N@{=Kp1awZXdpO+VV-SZknM=}8d$Zj`{Nt2Xk zM*mw))8icl8ctYw@DY!{;r>4d=TPl#U}T^*B>rEI)Yl@PYPa25H{<-+>JM&iXI6B{ HuUpe=6?){zfJNKXa&-WiZ`?2?4d#|$Bdat#gH_x7GFrVc<3j%?d zpFDo34+7CUfj}qP8BYT(yk_hCAkY=ilZW>W12Wd8&xB-+!Ugu*Thd3%`=aJg_1b-S ze#JS3`&sz;$A6fo3jIzuc&<_idlUoxi??9kJg4d0;eyN0PS76)+>!G__olun%5NMy z`S`>`F1f3M^63d|5zrrRZKj_sDfY|M!!7jq^3zpD%dL(AAS zY+W6Bl0XLnb>#5KxKHUJgLkoyRe@)&yVp;n=mA=#FAM-b?_A9R8lOM72Q+#TuTb~-zK8PIpHpE#X^myC`+msaqwYC z#&FC0a9nKvs*p7+I#xY9Nmmz~FLnY1>ikyxb^YGo<)30AM|;0*V0jhIRQs==+Q8!M z9{s6106p!)UdP$Wx`=575Xk2C%JA7q1?zph39{01yTsyi+RK|>VH`dwSmM0CRZic$2K zv!Vc`XT7y~c1q2VWMx7v3up^CoKxFHFCr+z6bDPcgNe+FWLaRvZ6h$c3dTp)dsC5m zuuX=!sTx%-CYL>w>1*;X0%<`t=k+eft-go;3Rg>4H*AAw3`>s*gF*w3x zt;Z3J1zu4`+tn|oIw-aUhz8952q-rkU0GACD8fx05$$I3_bCf~4d_=?*{xrv!#I+Z z^}v$LUmB;LX@EdE;4RC0>9T^i)ZuPs#4U0pvtX}wtkh6+nRsHF9Z_xr)nNE8=m_ia z2x^G=?cCi~S8=tZ7J=t1PfW5@mC^Uy$0)TA`&t=~2?|G|!+2oITbUHhY-(13$}}6m zSJh>dg462i7cnt67Rw8c+7)8o1`G-mEObie`uPtQDK)VMD}`Bp&!ndR4zwpskQ>O! zc#nh^G7XO`Nr&Y5y+X+jwCRl}3 znqOvW^Yu{YDoyh6Z|r!q`@l@_kGkur)xB%^eL=;HI>t1pSD)*gu=Rdu@1!SXYl%sCT&i*QSHcq_D711hda~Ob8 zB3uSjIvDH@DCAbfu(3)@@>)$ldLwifud;5sNH|=FVfGd?t%GQ5KK&B7phv0 z&E=^PbSEofsng0&G_qz3o=nIN3$3Jss@=8XK~`DZ7Zx&#TtuP{o<-o-e4$HEmk&2=gK&8c z&F5#roSgDA+tB)TDy<=qFfo#9eX<~}xv=9D2z0Jex}5waPE07WrpP7iym`Hw!cr=m z?p>t(g1w~6$oJxkii9z%;5uvSh~Co552Ug}JECRPazhM)eealkxJV&+P~8JwfFT3e z*pd%J2jw2J%1R>8G!+>;edO|+ERh$iAkfw)=|zzz$u)`JO#d#Vd!P}qhf)r`xA}-f zI@05hQPMl}RcK8(`#@Th;M2BEoJsvUZUMSokQ;5?R^zBO0T{`{>!OVB^KBC>Ct3o1 z1amUI|NfvK6cyT97D~)+pCzccvH+@J?p%ky(WkK5gUwV*PXtR95~;p7R{9~l)b;zL zfcoKv^!J~bozEB6;2W)7LKEQB{Z?I#FMov+mmyhkIOAih%XMqW2m8L(%-*<%Y8^a! zQ1kK@V5&PL-tj-k%rDp)c1hqs2au4k$zJ;AfMFBL#|}OYbXJ; z(Q{HY*rYk(#POY1)t6V=FV4#=EG*pW zaJgCm39FnPr*YKk{|dTAxJ}6NCCHGGEG#9~+c0uKP?q0WU(S>U_t>J8yBEa^8w^x0 zXRikF+uORjabN+ExVFU>GA&^1oyPuwBFdi>OP<4Ez=wli7&T)Dvp(61LZD=v_C<19DZh!` zainPOEXqtkm>iZ=`>K9c06E_`HkY6V8F(r$nJ9j3@^$U`1R>x+-g?76lvN5ZWgi-9 zsXh90Y~&bJC||jV7VlO{ER|p>QI}creOv!-_W!l&MmD{#t79mVK814dP+?;g)4jT} zni|4dg$uGz4*S zgH@wfD6y!$-TD68-M;{1+kQDLB3#o-W^hJcx%;FcQ2yNY5J$5q6S?SF#d`!f%Z{u%u;gb8iUz=vf53|ZJKs&FK6JkqV z=xmOsEmXFK;r5Vqcejwj21Spy>l4Vs%>7-s71g9LneESN*?b zPy-9!_2{{LW>T3O;MnZ(3>q_MO4zy{xcT8te22(vc6eOk7yUHHogXm*G_kCp5JcWln4E(e9m;*oi2O*%Hzs27^^<(p^6Tcr919XM_@+XKgN& zo7HDrrmalHG;{EYOuoCsHnHPSQt$s@YhA%<`Lj#G%v-I=sCv%qkh`}m<&?yxaS1c; z0D>+rH!whot|pC&D|05nWSJ`h$#2;Qg7$f9Q<_}nL1T}&tuA{xd#yVrT3=$VtS`NO ze6TDPg{PD{nzNR=x9T-W+TqqHQ%yRMn(8dW0nM4U#znim_mvBu3*PQL3i(w!YsSXH z&kfM}Hm_8Wt>1a7HP|tp2R34}3uvQ_$!d-I1Aq?syZ>t^@W1pL9~FeHP1h7{0d9fK zpLn76%gRA(Hah_4Y{sR!F8uGk%l~rV|H>WxSBL+O)Bdkr`qwV~7xCP`MB`tg@&B`E zbO8VX2sAC{ur;o<%h2a!>IbX5*thMjV|aBZSFSa8x`D*2i69NoOnlqN&`(1f?4UgW z_qg*ZO6IKNR^66Ta%cnSdtCVGw@uQE=k_CrqTvSs*zsA5>D9fkKd4i0!F0@5e2iT4 z+bPp0z9;>^;UnR;wq{d*{*;=uIzXo2kTDHxvp642qt~UKG_&XBZwxIu9A3nzb;}qL zVS$@%Kj+qEGBbil`3jEi`p(s+=r|H79ry8y28#9biXaJTVD`>$`{O2KTa`hYi!%a| zS$LONxw`EOyUGK$RYK9lDLHb7?~6aP>(PF*AuHh##-m-4gXA{TPgs$|a$;lKVuQiS zulU8M@x`VC>Zz{G1v&_Z*{EgZc6QLY8>_1)&Z(EYuXB592&*a!TAwvhZt(uOU~-3= zMj;6B#}o)|jff^FjETn%Z=|zHIzJU@^)Q%v&!V+4*6Tc}YOm*&z#fmoOk_9aG-4M_ z6y|Xzt!{P(AJjd~S{EjZ5$WSQY0Fc>oZZb|!hBrQRKlQvx*qF)8&P|N70&*IvJEq$ zVM4kwam0VGs%!!6_d%#Xooh@KbzK(QC}^~`^&TW~&u{<~RmE{OAz*gjb+%o6EkH-9X(W732)jkpVD6m-;kIvBL$AqQp~VeTR&TIRRV z>=0?tox)eA@BN5fb@Vqg)$|!~FDpqLj@w<;-0ZpZP$c!TbwI9jfW1bVkZZCmrjYZC z;dHvW0YSD&`WzBkP-dBou<#S!w)YxF3T|1_Olr@#A%)ya%5y~91uNIF3H0|Koshf9`;w10-kg~suFLJ(d zlB#sT4@B`%@&MmmIlD(mQ4+GwRuJUDip_<$DYh^BIxh<2U8NpYE8G|zgSso;>Z2EC zXpv@sTEV9dw)=p{w;_3Bp?ehu;z$ zuftXZmkSu53a1mup*t7o>=o~QyX=jCkebo_+YX0a-_!GB-Eg!T@+GhNOE1bJ`1&uQDO;_zW3qh-1{^q zDea3OZy*u|W}sLre1x#jyO~9`9p2gIGa7im(5;qYb>Qoae2Zv(meFv4q*#3#BXFg! zr0qYWPA_;uGJH(RZX2<5i-@vc^y+M3$2p*(43LxHIC0;L59zLGoZ#-LlDTbGx7?#CMNu9nv}iNILgFXUkM5{4b)3A>`o^#uqL~6V$-6OD#iQkg&`!( zq*IM8B(f_@=pR|oZ_Ru3Tz_w&e@iKjPaT|JF0OzY46d}i!qvvwYgMJ+Dd;RKxSCk7 z*>1%*Hu_L-e7ZWo$Jxs4XJaxrn?ofco!jEMG6<_*?s!( zPOniuWYEMZJ*8lW47t2L8R~MeX}!>TTPZ15nA4EA#>U5@VJ$ILM!xm*6$60n=aYqG z%f>!hvvx5L{|pvOLMctDh`I+fGM*Fk^lfZEY*Gj9J#;kQD6U|CG?^I&afCLsx;yR; zP3+Wogyh%-<5z2m#zE7ty{puLWjHq7^d!PRxvDO1cI8yr?6*M6b2JMp9$|YsZH3=5 zAg-stmT|?#+W4A_#BVy>#kp&oeaduA|E6Q0G;80#Tf>h#{qcA)oyBRx{g2;zhY-C< z8;bgLFz5luV4&OSTKuAZ}RrtqvB ze$8do0ezE$qcAzC;dGWC5w5r*0KqKJ`xtOJvpD{URoBXEi*q-u-=0PHU8vh_FiO)8 zFL6WFg!=i5XF@#?h9xUe?jdr~tKT9yASm{8T3rFS`Xx8y_t^Eq8K; z+#Q_4^~J@(UG?V?B}rNi#1Z!QEPK~T*q6$uQ+F#)XnMeF?wAz z5hZtN<_aV;_N||fhmhRz)IzLrwlSP#0>QHWB2WN7mv}7$a?W0)Pq@t4d3j5a&HR;q z|Ng*B{bZd^|F6)y}wso`QK+wFWB0OWYEQDBjA1&((R^{!Db1e4#Ip+-e1vTb;{7AYuVa zWd7_%pS8KXlu>AFO_i}qzfdBmw&2xi3HIbm=+ue*CV$)EZ=8Z$7EM*oCcnP@#X`Ka zjG1g}ofKhz)4GvC?!zg`Oqb9-fgh+jot9h28@9#IiFqFwXC5Vl6Sv~hT5&O}+-w!N zo+4(>F;Az zS7t-vd47|11ExaMXS4^O^0Y}6%TsvOnVKjXF?|Xo#5K#?u|%Hz|^JzIO^XY25j;dC~i;o(%vTlht zYY=aOarOLnR@)$6<~s9F7{K%$@3c-a+r((HzOdSB^z`p)TuC%(U3*oWsVs#}A3R7q z^c@i~=YUy{?hGU|2_>3VDO8&KYxHtwSkVt)j!%9^z+3b*NS^-|=^Qgh@71}5Bb6!f z?xaSkT?+f5%aO4F-&}X)Ij2AGunqsz;QsjKm!^bc6H_-Wlf1|`wLT$=7fz%-G~U(E z$gUjq4mo?Bg!N#v5!y}OXr1L(93Pw5!EUVnf)^P7+#L=CE4KCrO2z#et-M(8uV>L} z1F?`t#LZ;?bhUq>9WNN&avG#@f{xkdyD50rLP5&CMAX=9$a>#kz?4@;7Yi+E=?(n* z%4G6ZeqTJk?V^{@WZ3){N>M`k+&3+Add$raM%_J6WJHtGYKpYu_XV!wwjv!Bv5F`vg(SErwvV}*n5^ z2c`Sox4@Z#P^GuT%7Yc#9AmC`yuAXbF+(4n4cT(lT($zWdgLEQCh}^vwG^{AYEs*& zz9YJ6Q|uv{S94^uiqkKD`dIpSc(yw3x=TAsg+;$~$_yg!HH=T> zx?`^eO{J8&h--^Iz%7_eg;;T~H~6l1#eOjEW>a3#GCsC<&4ErX!9%?!%??k~`wDE5 zqnNPcBhp({6qEJ*MaaKKFh?P9`$Ha(_TW|Han-uy{Fa zfV&-Gc+;iwPMwiiVb|{`mXX=pNF<}@rwp$^?MlH{KenCCq2(4PY&HBz#g!GJC(J)a zF^Y*Y@1hEqeVmUVI;_+o4Sl>i1=TbhJ7iCeygY9k6F0Y>pmV>dlQg&uPrhVp`b?!= z0KRk&u!@a_FU$wqS{JUyTd!Vuh(N94OuWgn6ggv2#YQlQ_ua8|WJ!yj=xg;d`&l@2 z=O8*2RXagL`l@@`cFDNBuT&v<;>0nnu zAzO#3X_pKXnHr|o)$pr?&24E+#q_Id&R)rpQugy>N=(7?o8_~N5{AWqpfEYlyluL` zDxNs%lP*`FF3JL#7lfc39vzMeFNUj68Px)g)MnItoc)iMZc(-U6;AQ^n|?CUOFzG* zwiMQh3v-IZCvV=`UB@Xpp`z!XI@&q>{YTd zGO@F?(uTwAX2qK{yFo0*yzMsqnpf0}Ev-WhGIk#Xv6#I`cV7D4Tbb=;lmYu$P&Qjn z6-(mC3S{u?DoeXV&Onp!^<7JY_6#U-kngWXdtI(Iv4N*)RKMV<$vegsEzsqU)TBm+ z2oECiMHLEk@01!ZT~74SLCt*GSSz5@^62 z2o|1W&ui>|04!>t9^g#H$8%3`3Gh#!hjdfri2RqSEa&`_KwOUjbog9#>9qvQ5Nsu- z_htgQjkQ%EQMF)sW?YF7AQ-yet3_tjeRLPOQ0(Ny`#bT(z{atq&bXSWh8NTT$KYwc zt|411O!i&QHP;^L3ZF0^ZvVhz@6km_82s}$mO}mu?$X%>^B~$r8)(qc^BUnT@poq^ z2JX`}j<9&%lGM|0^N{u!R)5YVfg;{k)s%zobTUEp$Spp=QKu^=FAngeh5R{HiDDNg z6Yb2^4Ea zqsKu`?r-7#AYS^WG*36a6#eN-sjUGyNYaiLHB`3J5!YQN_Qlqxi(+qY=e0%*SxDeA zeNleBoF(<_uA8~?6{(}7}hXKehf12+K#(eEBCHPto*arH59+$GFvt2 zb>Rni!hVeMww_G0kP79U!R(x)8+dJGhdxJ4M}}^H-mHJb8?4<`X?)GU zowt3zC>xXML(@9gB7+~TA;iC#!4I~ARpZ$4-bbae`n}VWW&g%>@f?TbO&RLV5=8zP0u590*Pxyc@C!3D>W+X zO?T?pkkuhm+etFnD0!DGH_}*!fOt#+Uu5mIyVEK#pDBGWnqGtS!pBMH^-bez?oX+e z7VN7*L;iB@(F$<_XlQ0eSdSjn-goXOW{eOYu(uu4hrn!P-jP+IMlO>pr4nPu4~?YP z2^Tiff(%1;qINMQ0!d2emXtAc&tK~Dr-yy{ z5G18?TNGt1V#d8aJxzR>oTQ5Td(@qfe%)mwDHvyD5v>0oM^K8~hB@`&2(B+)t66HS zJRP<~44x~vI%*`e@%y!gI4_58oi@$7}dpMILWmyuZk`nnDm9<(ywsoLS%>e)J9=e;=#E+Ti^)d9gp`7Hc zY`qpsb7UatOJksy7tPhE8`=lAxI-<(-Sd}+!ps*J+grnY*QPBwnC*AfM~|Y4C*>3$ zttZYd#yE+5GloDQ`4q@#z!kgxVlJdBOnTi_WJivjhv!;Fd^>z&iQs!Sy!TjE1|cx^ z84+eO>Xy+**?a{<86B!sank-mtWosKd4Na_7Zl?IIqRn4MJQ|>At)KBkD((24!oAy zjrOX8U+`$W|C6(R(3MzHrwKq4(#Nno*iSp;&+90zuwF_)@Q5C{SIR@9k3#_cz4j>d z!a!`;BefvI?aHWtmCwervpz|Q7xH-Qh*|XHGGlaCI%c0aLjGVAKo82SXrbc+Hg z@rKaxKK|`SJ}1nk96JB(ImKi@-|}O6Doj3YQmkUO zv8n|MnYuGqxS(lWCcOb&uU=3Y5d+W`@BZZO=xB2)#Eg>H=`yuXA$+)?^{FCu)vVqx zBoi0vH|me1{nP^V)0p^U!K4~_%Lrlm%&QeE99iebHXGY4H`ijni+SyZnuUMhwp-~E zM7Fs*w(L)0ha?S(661u$6%^1i?n%n1ovxh*?pa5_>vKP5EkIF)|CZlugKEX|EBjYb zPuycjRN8s{b^Y4~fxdQ>vU@_A@TJ4seLvE@!!~2z!bK}i1iE&8LO5IU7Vr?@YwIQy za&xMDpdoMA0fkGhUg%LgH%G$tv?y^S8R@QktjW2mjgkOS8X?gfPg z9d%Joan7rx!VTR7tx{r4Qg)lnt;}X6bb@nf4rx00ifo&TVphOR7bSH14RSY}R(V!p z1c>F|DyZ>BCzY1Y_6PU2$p=~ts})-lrDW?jE^{OtQoc(8zQNxwuTFzLKfdpV&l)V? z1a*EuUi|kU>&{qqC!ULN;7<2j;~xEY3$@N801Hz4_#X&5zQJR|2KMr5&&H*Dp+MZz zOPX#F*a1IV&haQ9mTaL;-LnE(uXj{hdN4U}ecnQS3@rkEPkOOKmk3HoU`F~ZCUQvy zxdBYO^(dYT66A2n*VyblP*kJU$qm7R{sIRq@BJa`^22#i_pz#{Ucx|GUMH z|LXAnOqRuSud#q6YJsfH9dtZDk3BkGv=waH0`M-4rd*YqdzD3+_jV|MOl$CN7Xcou zxj~oH0QffhT`{E>yhije=yA!pyi%8{U@3{xSROu^YKpNlSu?j5DQVYFusjwACnqZzKke>e05_W7GK)Qo|Ol z(duD`$*J4V47Mwrx$L_P3J!TRi^^BY(_0q%SpSU)1(5NHUylKFeZc-09@dW2wb18N zrF15tqgLbI%9Nm}LVi9mbCc@i<(f-%AqR0ZeS$1_dU0*nl(JYurEV0{}D4au3*FCu?1v~WTRpPl=a?z4zF6E1ME@%W zFjE8e^m}&^reiecVGATPPc!U+k9>M9F!z|8c7my~_28Cf-0QoBJi0(O0EQJ;(Ty{; zZWa@Z?ITBMux`+eP0w6DW;GCuZH*IJgHQi%vT}ZM5DC`W03cbIv_QGUYIS`lPk-C& zm%{md0h+VO!77gAXH7gWj8owbBS&ALEo0l`BTK#+y{;)bIt+_JjnzYIR4<)*Lc9#( z)g1l!W>MOmSby_TaQH3I^v9HVRUpP{KCD{l{2Y<;V3Lmvo)nuL3?-O4ZVm@|Re1EJ z2Ygq5&_hKjAw>A>d`#5YPaJ}s0!;%z?0{?VF6m7J ztR&y>23%kn^@Ml<_Abbn4@Duz!jb=w5&7aYf~SuQvXh4^Sv?6An15-5Z(G3ZWane|T+C z=InkmhKZ`a=W`kddu&YdBU;)7tpe>0q-AAynnl}zS}cihbo^zoffI3pO1O)EzhiL?;`-k0(m|RaMVr@a%rK=_BY>MDIa#^ z-AUg6!W@K&-~xeuJ@)(?Jhv5ajepN?7*nINE$7w!@h{eRPJm|b+%<098GLWsX%YdDY(y$p`^ zQF4lS32+yv7XMYwYIzYkQ${x1_gtv+QfL3VOz{7@+)hIUFwoP9BdHf?WH4TVffT(4|ANTzJ;9-#{B=kR222B?Gt;Jkst*IHGvsnxea5Aukz z@Q}IW0H2-$GK0YGmlA8*H7mE8nNi9Qdm@y@u@=@{kR8XS8?bn_VVi>k*zNCAg5W0U zr$kCX`E8GYLlp8i!PpMBNW0Z$5)!gGfk40a4p{wjP_M>&9oNNlI8HPgmGs%^jd4st zm+oVC!Mg{r*>~3N$^jeT-Zx1tMF-C2<%jE?UVm&Y8@%N8&nuCpb;=6v?o;Fxr*WT- zx&7VDjQ7T@KvG>c!%mHf9``H-ONmh3v+E72`Ed1(qm}vV8soXa;0-tap>gSra-vRv zb;w_~B6Toza88jzm0(TcX-Sth(a4O0_;#TFmtOna%serQm^U8wfoSm zXWLuDvjrO}ysk<*j+|%>JIKMG`Bu<^bwe= z+%p9L=|K0;L+^Jz+$o`W1-pVs6`_=Gy27He#{Hq&a{{w!wEZ}8H>{U)Hiq=vsQ<^g8lTzg+=e^jzu$YCf*eNaQkD0Tw z;;6WOGnnuQcFsXwtF%!2Zjl$YUQ{w@Ydo~|JW!twzZp;17-M^YY6w89i*s~h zd=L~vZPm&M`Ub=s%%mu2$Y{6;qe{yh_kZevcY<7Qd*5?qCwEhoLm=xd|~B z61GvvpJ~qmlnzVWt4E82ExFsv$A=sO>^9$`N&O-TG9^Yv)QoE zcg@@~?;i)==ap!O;H2HY#^Szug5rAdhuQ5`W%I8Ok4;5&jm*$n^k)up#b6e*jbt^m zJ^0_L{x)z?)?MWBf0HS&?p5>PO9RcyU0$2Z8}b=#_mi|k$S@$yvxFpqUPu^Mi43cVzlEX!(Wjbo-^bWzRp%v5{8FrNa8Jxbu^+mL^udGNDL+?SRSy2jdZ zK^W4hFTbiu{e??EYc@?dWXRm?|Dc<|P)~{{uBkpd>zT|k|5s)xP$L#YBup<5e(nw& z5db{B0R~M1EVow`>MJOXl2|jhEhmQ|90oW0g&|stJpLVDX`M{}D@>7oT8s6}wZ<40I?}uOJk1y5qXeUa%%d1N$R}FU<^Z z)D!pCcGhD`d*5K_ETan1>>dn~DL+@PzfnfIJ?4x@&)k@w>ZPHmT((47tNcbr66Ou2z2@iKNokvBy|<6_ zk49nIF){|k3p6AnBbZy&p$cXAK1%k;yT8qyp;lGi#ZBv%<|cY5Fl-mgHfflnpM1No zK`890{!?kq0l< z{#qJBn0ZVmed-2?wtmrh$!#3KN9Y}gOZ0^pDp?A-<`J^=o35o zn{Ac8yPo91eswWe{q_^4=jUn-l{M)KQJZeVWWj-a7lZdvf`zeW^BJXoUvUYx_;ENX zn(s+QA`M$LN%<0~--c#-RkgkfZ7VQ0xwXg6(t_3~DXvDE$eYu4LHOhTSH}ezs5~X$}P(C z5&0_zFE#|KnQLp$f587*~oi?EIK`NT(R6PPw>}mQyu0QwF z#`^PA8x6W*i>uoACAL>b^sZ07?t5ugA_oUMQyi%SXF#2w!%y?3NW<1BrKR#kjJGfx zszpF@!1ACVcs8|dFZo_qLOBJ2&Wp0*jQT8*f+ES${Qic{nxq1iETx@a8%mIt=Ck*f zv$V!|$JkSii<%tz4*6rEAJei0`0#mqp&$ufMyGq9Sc=Z###Dkv#)no@=$XmW*Ye>t zjQstqf9TVN7c&cfef*}=H2d)cMB!n9=f_tDf#08>y;_o%f)zI|6EfD&=BW0LtUSnB z@qKD$D;e2VyYYASfW25{dx!_R|1nVqlW#8^EnL{GIcYpSnVo&&d7z4Ev;Wz5B}C_& zJ%2sXe}$6Z$lH(iP=dxM@kA!zr~^2)0jX+BIbnC!g>^^mCh6JG`~4?DvZjJnhObi$ zyMqcCosyFqdNd8sUUxn+R=D8@`K+b?OpBxH??LT|kp?U5>EYv1gl}KZS*tV@F7(Vn zt6f!0AkjkM zTUAwnd}SG{r)T!UuPV)ckXS2Z;xPqzo!xCth$SUN0QVomj|LaRe0U5_whrcDx?(QmeW55_ zQ+sAl{xlaAb%^vJ62?&;HYxWUogiO>gqTTM$t7O{WVt~d_f~4cjUY1D&`GL_z;U5S ztIJ9(_@!J;@p+2SQ|BVqt&*CU$p>Qtn~#wgDYJ2fZ6xq9>&&q>Tv8n)IcG*}12wGMAxLFr0}C1QZpHA;?p9G z&)U!*Y9q7R;d^6!!dD6d9ca6*coEPE&^cH5#Q^{gIp?89f?XLCGSQ7bzp#$!KFkj# zQhH>W!a<;i;8W6NGT!-zEWe+f;)%KXx+yp?Os)5*FFj(K85HhzuA-X3kgHh81gpkK z2a>O5bmB$s=be=ui8_A*xWIB@;QQo^;n#ClPXgh>^_+JVs&^eMLbmzXCRwh!xy5@J z-{tvv9=Mhg_5QkIjt-C-P3pg_P&#LR)ZLHcb%!n46GL5LA=GXnv%ehRGj*H`y@xt3 z&hT^?rcOqB5rAAzYqp9izZp>7p#?VT7L{_3<>)Kgx|Pb;6HHW{dy82kj-hfrY48cT zG=d=k3|!Pxir^l=wvk_&1d)d&ix{m}C)b+pu3P!vAHil_-YrikJiq(rVBFIHx_NZn z)h|l*^I_9?ZLXLJma*^|# zCk+5pPvd@_ss(aCI(PXb!yx5W!&^a1Xy;7c7L~TJVQXfm-Th9A7m)2`0!Tui7SH*o z0BWJ@H^vbiC^h72JJR1OZXn_`zl4qcOjoONVnCu z9LyjCzWCc|tKuS^jd(e*uXx;DsC3^9F>2u39E7+Kf7r}B~_Y+1T+UmKNQ~IBy##tbiSi5~3 zOE`u~Cr$&I_)T5>(PI(wx`O4+{5ZQE4I(%lyl3i0a_0ePYv*n`J2@%vMRuW!G#}^) zBwwe}`jE?!I}A_bc=)Z()B0a9oNkVWufKF`pZI#{r@I|LJS#`EywDFz$&BsTo}t(t zEd3KgBn!Knhg~WQMHcuGaZu#p_}m;ttqy>N&!yhCa0r7>`OE|PdIzuaEPU;Y`B$Gs zh2^l#9*`-c;jOk%@>Jt~<+c|#zJ{To2wo8SRi;ANU}tLzqNDq=Y~6F?cj{g)5R^e< z13Y#$6Go*9F<$L^w(1-;i%?)o;I41MhKD90wvRBZ?p9uhy(tU^pOo7Ro$ntV1w8W$ z3-XSrNCScR){egm5K2O5sRBu+^9(!s+$mhDR%U0-p@qrNL({v>YmOD!TAerIY*GlE zGj0>5I??WcugxV9!8;J-NJ_J2_UHUNcvr;B)KV_7;+&f^%jDV{a&L9fmo|Z8It~|N z&N+R|Jinp5sC)s_R>Wuyt{6Z1k$RX_N1pa)3a{1MjWdB^1?Fm>2y~HKp}^Qn1}7#j zK(!8L-xZMKVnx{qO2R4^%Vq~_uRI1K1U^+OZdW_+3q7)RQ59!K$?NtF7>|1XFTe)^ zY&sa7I=gVGPkS# z6#J>N9Frm`2+CJ!QaMu@rQ>#M`j*V{jY5SFw*;Jr!*-tA`NMpA6Az1!KW_BhVAGvs z6IgcMseIxHYj7-`zYS3u4H68XdwB29s~AR(^A~nDsTFaqSI6oul`{mkJ8p4Y4$pK~<43q=F_6~25$sQ*3>R}A`g zY7YgtzzG6f<4g|65s91$wi1zKspFQ1VnTGJqeFtzxd_4dY(SnsSG@JkIJNF>lx)y( zd|d81z^DJy40`uQ^PW^QYUAQi;nhtK_aoBrKR*<6f$lJz-X9$uExG(eD*2paY0vGdd+odHL=5 z@9?FV{fin`xQB-C*egd0zM;|svlPmn;QqrUnGksK;zg2%-OxF_?XdJ8;6=xX#6ozA zbuhf^P*BiWQ~SyWox5!)_`?SSC=3FOrp>J9e9_Kql?@Bpm2CgCunX7=kb#=viL}7= z%OKe7@w3fJ46rWNg44gA9)tq)X!8NfFO;PF&)2_>?=%A#&&6Z>0YHMz9N!uQff`Rv z)1z&N3z==RgGrO4dPyZEC9J_A$FB^)bkK9v3omqf{9u%z{D z0HsX)1foAI@F8;?Q>|MuJ?qESKa7hwoQ&o?c=@n2XYSBG*=^K;GzMm+>_GSo16wuB z8<@GPR_I%QpKPRUGmriwTpz^Imb^TEO%9Y+hc|OanS1xmg?v5Z7o%#AI|f=L}A%(kH+ZqA)nf40?fU&-1}%rL}a>TRAyqdZO~ImxWb#%g@=c!X5`*|VF* zEWT4s75Vv}ZCT%ErCjb7Z0c;;n@DntUSB)euLc>q)frIc=!*Lo)uIY-zLPe5yl{y#j81tme$RNYzwXIS zg}yo#2noOQ1L*JIk@!8f@jv#BJrhnZ0pkORyT&~xwVw$<2}+I2cF%>R&5d0KnN5|e zS>~sJp~9EL!x!}PP61yQ0fCahno=KP27vpnAe$SK=bYL{2tCR{lK#gU00J3*p5&;7 z2G_#O%LR^!01ZkO&`-wo2ihqg_W;Fkk4c{~CF8Q|!W=_?9nM(tw+41l_q$aMmooc~ zloR$nsqLB@>%$(Glsx2&m#EX&#lO>LRMpijw6%Zfy6%t?O8Gvf{mX9IBh*v!`9-58 z(vUZ_VyZw#t@kHNd$?VEOOfs-Vs$tPwq$L!2c8M@Ii6OVsq&1|A~9IqmAKhDQI9!e z8N4<7lDI6jxUJ;<&3KtJSD@vWUMAaAeJBTSYHTKJ5+M-FOH)F1pRR^kkI{l>=rh5~ zivDU#O|o1@3rb&qHa$w-pp03K#nL;7ur2vNd1_5)-8QOEx>R9whb%8QTtVkweRn@h=mW#@}KG&svi)QJa~3UBU&4fBnkaIv9Z@) znUWbiUyARYic_AnZo2+_^H;|rtfmegPp>K@8ff(I5~w(JVW6Jm^}ryHAO`PlxH~X~ zuTxkG7vCzhoOMd!SRW=d|9X)y*n*W$?XiMKgl?EC0$@7`^v=8gqK3fQ$UizVde0#7 z*=T7Q>$Ltele=_dm+AjaVFo7;(u0SEguk^OfAJ^Wxr>jE)S&`jdYyUba5-<2?6LnC zjHB*+M)S6j7CNQRk&XLRs5b4jKG`rLIP~&_AG*S9qrJ*}((;0I`wY0{5S4Aoy!+sI z{=zqn-wu-L`C#tCg3b=(5&1?zHTy;}cDy?!th@ z^Tzq4F@Zqf+e9FcT|_VdDFV83vp7dNDmLZPX)BHDHAykCg9HAemsR~FFeA+ZcyA+g zJxAyMSGse#vkZ|vM=y`K`hZ&=ATHGtlkE3zGxh)KkmY^F3$#ofE7ey%zUzU{WYFl7 z3J;DI)Gi@>;SSrj+dn75I%jA2juxpR1oEljSmZ;}HLb>qHZK5^a=@uO-3zp(d&3DRXd5$A66FdSelUw-Bz z%nznB^p@GRlD{``1fgmz%<0EiRYLQdPDxr9Nwr74-E0YJURV8_xw64b%PzU%7&yL2 zAT6^{r(QSyDbu6BAkC?xnRa2P$rv%ZUwOQ(T~WdKH4l6qtk&FBOSz3TY(O&C`BUxB z1~~Ns^e7<7>RiUspwg}1pW$sejt$Dj{9LXWm1Vh&wn~mRDQx?0Pv`1d=|JIh1e!^4 zm*l8PD2gd6>bR^7*I)w|T}tR@}x7>wRe z9t*DZOQ(fDf>ZjBY<31_5N(VtDzy0vG9qFF)wz|yITq0x@(uNsdP1}%TSzbO2H16^ zX|EwH=aVM5BI{VoQVCPRtZB@W|C4rUsh<)uSsOg+;kz2m$^yyd{^$IO_#~h9BAx*g z;2u-85QXWy7+CM|wrv^_yFasAlu5Io`R(jn4`#ZnR4ay|RjMtvA80$`F>*kV11eO3 zoswqr964V*!_;c(Qfln5{7Z#YvALvUU|QzEI8}5B2@THh#1%JaSr0n;N9?N9S3L}N zPvyRYTLNeGe^4ZaMH~L|dIfRBR4p$0g;XX9hvd4FiO$q08JB~D+E-GOG4{YbzmVrU zZzlRRTVx~p`Z=itrK@W){Sp|XvP#14kOaUOGb4zi%-reSi(`jMxc#}nk zwAY44P9D+jkjye5%~_x8oZ4zbd(|sHV1dYgbebYL0Mdq9TMY7<#v$0s?{w9ivhLQi6np zLq|arsfQ9s2vu5001*i7Py_*`gkC}wkVIPOC6sVC-v8;2`*82m9%GF?zP0yQYkhNm zWv=`Uw$@T2hS|I2z-v3BDb4C-zH2*LzPRGL6_6BqZQPeaSbI7oy;yi=SZnjXK(z8F zBO%p{mvu;TVDE#SPnvIv#NSkwl~0`CYIvU!`XK`=yd(V&gLn4trWv_tv&WX1>-6Sy z%hl}`V8Z&oKh2WrJkqDBt|B5G=Y3<=OWVZ^oqYK7@DaBSSuUu z=Hh!@87);LzJ8_jhbu1$-sb~5?|+bFBRYEmqV~_n9c8hINbiV?o}M0^z{#wK{wVbA zx{#M?kd56fDCe`)IO(-2t-n_haK43-HW29Vr|LewxyVvwuN;^){(VT3>*IM|X@`eT z6OBR7mpxioG*+VkFHlFCv;#2KT3mXN!;1e6;&QO#DMa(LwLg?og;OP3k|Vn4|*FeGY;F?GC}<-x77*eV3Q#t+=2arn}x&gc!h z&4u$#CG8j874RXz*dxx1Wwf-(5Y-0WA8yB|{XYTm=8+eo3qcO};C6zXBp!8C_UO*; z?tdeCgz?Z(08{d(rfjzf&PQxL4g!$>;VOKAaWNIj*~*hra&k_`a*kic?_60YZn103 zjSjh`t$bk+HYO?WCr&W{{ASw_CH2WNS!oS|VI$7HHvos8UI!H{G^LD!i z!ofl~0dnZ85!Oc|O~-(jj>x|HwfdW9$lTUGGQ#ff+YNs$56Z#zzrB8U2z|AnRh$H1GQ!<9Pn|DFHd z)IIoBB|!HX&LatdJPFg)otvE-=t!2Xf|})SZjONby#cGw^pcg3saS5A{!D^^$c-Bz z3eCZ%xjf4%X)OM|*tPQQ4zW)6g-amN#@9@pR*U$LD!jaUx`q@$#88dSt+DAaOGYow z!8SHFnp~oUaVgjw7|GQ6%N}cUKN8EmzuaiCKSbj#bN+gnUL^2qcD9FXA#TjyCp)p1 zo5m)tuC6ZZ`ff321D56U0!-YIrg2l_@f$&BVcFf^3cn`=aKbskX9-rMu5UK;8~W_qOLot6htQ~ftBI?}Wz zutw3UpvA>S&V?l=)6~GA%x%Ig4l#YdKtdYU7RfK=b;t=$$+huCK5W1}r)qdH|K)T% z$D?_%U^cQfq(s_^BBtRVwZD7tH7xEfd+cC3T5C8uG}Oo5&TcN(NNcej^;%=AE8}kA z87H=Vq$mN`|C&80nl4SKyZUl4>}6cc5BGtdo=jxzN@&UUcF2Q)Hv9)mn0-RY&8KZx z>2UfXzX)o1bAbE>%nuJd2#%2h<1GdpB@m(n1tq1~`J%QKXuMpDz|M}dZFz?hl_%~qEPYTYq`=(;X$B(Wn zGFoGFL=XI?GZosCv3IJ;-B4=n{wC7!n}F{$7mBRXLU5LFav;xMmpJMQG;$1onzZl* zeIycKP-tG!Qf*Bqnd}m2Vqy{>OUUdenK^r}tk!#P`S|wFXHmP|{yYz-V2gZvSQ8l( zWY^BrgRK);Kb<>b7=K)u(=C8+#jidItw^Quct$R~ICy270tS9uRxvzLs=MvxL0rHF zDKKIK>e5&r8*8#VEafaso)fW2T!q1vPy7LLt2YtKY$C z&}dM7Em1l1^gdT9x(y{^O@S(uDNw>cvP8im9gmR{Ckn*TZ=QQtkt~5w^NTYYJ50R- zGhm)7_&z@{E9oVqQBE?>bxsL_VT%eOk#l@Zz5*UkvI2}{Pc?T%c<#6)4xC3vfd)Q! z>a^_fFRFVa2zY+82Fr85JwIMRFUjpwUT8XWPepgY>AX2%I%J&bPR*x(;Tw}+N!BC}m8l?X5a74isGX<#(s zFCm_#6D3DEx2x>&GSN98J!h1@d@c5ZsO-#kPv;K0$#B5Q#J~#s!DC%^9cm`&Y=avB zo6Vb}=RXE3PtHGDeIh}vR`7g(u7cDIdC>pM*Jg~amOE0XWz~kN@}#$?J1e79AuijH zjH18Q;kSUV&mqRgL+u@?WjZlMU&AkJH{7WU|nhQRzH!*G$~koq=NN#I1lRb z@bEa}D6E^BK;D>F5|dQZA1s>qNX6ef5K zIjmHRZp_kCBXX{-&>hz#)15CLu$RSUu8p56{&Li{!oPgjjnzzmd?~@a`*eIbA4d9j za$y)Ps7B{R*pmj8wFH{xFby~&p{%@IZBnWQgOt;f1=nd2?}In+?vz)(qS-k)svN9X zH|w2++0#d@$HE;wk95Kq^h6cVg(m>u{h;6G-C4mwaRKdksig-EgWMmfzu!vy-q5 zmPFXnc+P1Zu()?w^F>?+t=<98PnSkf|431>C;Cn%4TJBSnqsG>rd(3xwl;C^?2{jaE zBaKzvy*0LlA<7$EFbMnu)iIMJ}l4`S&B=EXhyR3>KjVbevl=cw`1r>Oy(B?uSg zUFKIW!@sJ@eY6sx(2_PoWi{4V2#gwf%ZqlZ!0VFNR{GiDWr8d$p2Qsfc>6gSW(F*X zDPb|BuIs%+K6=d6Yth@bFde7JZV@_=IRu_0Wrxej#N{Lh0h=+Vx8jqveuw09?fF#z zoGvvhGnPES%XVr)SE3&Px#lY7yiT$EFCX3DW=2r-Aw^#Gpk)2_uJms953IEP@lk{+$tKDrjlaG;56&!VCag$TTVnyLTx3Z zeS5?!@X1~O8i!=yILGb#u~zM^fb6{{fyVrRswrCBcbLvgx93R|&#fNzg46EWnC16d zn=1aIIS~!DQ4R1PThFB~%db6~Q%9#2U;;@0Zq=1JXk_2&waJps6V7tdd@-_?Y#&1x zV3<$TpxA}+82AsGn>ysMXeTGDn1zLLP`T~~+YC5*VlYFcj?9~o z$#!VFqK~3D8k1jhdhsX6+KuJ!M8aFCSL;Xt=um^k37t>GMGMdpVri*=cYLwa-WgdTHaAg*Wxx;-23$Ed$Ge(+ieM8RN|)tlg**py(hXB4hIco%hpg7Bw_H{>3ggQWeV}ZL{uB!63&U01K&+WXiy2D z1(ko)32F;L+(K#3v`z-Bq8!EG}VLdBk9OR za&gU{J)2M9+~}GM0)S=QHJHHR)Zc32F_Mr`t=7taq3xLeR?VPOK|qD)=Q0Bc{+GI0 z9C4y?Xqz+8RhcVXmhQarr`kk-AN`@2qg~=?T*xhBosLLl;SRZ#VwSg1j*Y8UsBHsI zr3Kp64oU1VFLnoHO?Wxm91jm}r}+VfOOT7B<6{IOcMN&fBsdd%Sa3O_})P z>nc_L)dpb0ROqf4r~D%^NCISyHhLfZtLxgxZ8>bf>Uyt)wTbeS-1y~S@by~LJ9L8g z!Ao{AC?#-vrDD*xlLD~qz}nA@4pgmoiXtbX6Ed%>^vFjU!tOj^+w~M4W}P3EuB)IH zR#i&wbjTm$DDO@sGLudP=1kk7p2XqtV1~Dos8G^w@vU3*VdtCD*7=XXf8$u{zXG3a zB@c=lV*Z{A(~*#t?#F*tpp?}T34$sf%Jj*0*{wdCYD`Drm5Au*l4vg3c9UjFv%+6} z#3!4$&h87ClO3`dZevwws?r+AF1r@A9_x3zD2HO2Yh=)VHxF33pxJu)UfIiejuJO- z4g!&%u^>u5r?Hx-oe&>?DpgQXp!Y&n{^wTB{I-dg6RuAKSZNCkBTZJFv5?xrS^V=$ zO9_$&bF;I>T=ozkx-hecW#`{~`hL^;(6m#Ne822-iEEl)#+U3YyWTbKjg8w$YD}n2 zk43CXwLGieb@`;9C^HLml~XP`-m$v#X6ss)7O-=%Snd?9z;WuzK!KH;BV3LQEafh1 zv@$<0TG069@0d9!xu0Y@(uwfz)C$jee+Bw`u(#vh2}s>G2mkMKpsdXQtZDrpqh&Tf X!h`4EuvFsj=w4UH@Lu7aXK(%sc$hvm literal 0 HcmV?d00001 From 6e81b62c2263c1e5071b42e25e5e1d7dc8cfcfcb Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 26 Nov 2020 20:09:38 +0800 Subject: [PATCH 156/290] Update jd_jdfactory.js --- jd_jdfactory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jd_jdfactory.js b/jd_jdfactory.js index e9de1c1..a503dd2 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -312,7 +312,7 @@ async function doTask() { //从数码电器首页进入 if (item.status === 1) { console.log(`准备做此任务:${item.taskName}`); - // await jdfactory_collectScore(item.simpleRecordInfoVo.taskToken); + await jdfactory_collectScore(item.simpleRecordInfoVo.taskToken); } else { console.log(`${item.taskName}已完成`); } From 5c34ccd3d4aed1077ba381719e72ba58a669f057 Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Thu, 26 Nov 2020 20:10:51 +0800 Subject: [PATCH 157/290] Create TG_PUSH.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 补全丢失的TG_PUSH教程 --- TG_PUSH.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 TG_PUSH.md diff --git a/TG_PUSH.md b/TG_PUSH.md new file mode 100644 index 0000000..9843772 --- /dev/null +++ b/TG_PUSH.md @@ -0,0 +1,17 @@ +**TG_PUSH教程** + +利用Telegram机器人推送通知,需要在环境变量填入正确的```TG_BOT_TOKEN```以及```TG_USER_ID```,以下教程简明阐述如何获取token以及UserID + +Ⅰ.首先在Telegram上搜索[BotFather](https://t.me/BotFather)机器人
+ +![TG_PUSH1](./icon/TG_PUSH1.png) + +Ⅱ.利用[BotFather](https://t.me/BotFather)创建一个属于自己的通知机器人,按照下图中的1、2、3步骤拿到token,格式形如```10xxx4:AAFcqxxxxgER5uw```。填入```TG_BOT_TOKEN```
+ +![TG_PUSH2](./icon/TG_PUSH2.png) + +Ⅲ.再次在Telegram上搜索[getuserIDbot](https://t.me/getuserIDbot)机器人,获取UserID。填入```TG_USER_ID```
+ +![TG_PUSH3](./icon/TG_PUSH3.png) + +至此,获取**TG_BOT_TOKEN**以及**TG_USER_ID**的教程结束 From f7d691afc38931a4f7027b4611782d7e274022b7 Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Thu, 26 Nov 2020 20:17:10 +0800 Subject: [PATCH 158/290] =?UTF-8?q?=E8=A1=A5=E5=85=A8=E4=B8=A2=E5=A4=B1?= =?UTF-8?q?=E7=9A=84TG=5FPUSH=E6=95=99=E7=A8=8B=EF=BC=8C=E9=87=8D=E5=AE=9A?= =?UTF-8?q?=E5=90=91=E6=95=99=E7=A8=8B=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- githubAction.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/githubAction.md b/githubAction.md index dd9e302..c3705b0 100644 --- a/githubAction.md +++ b/githubAction.md @@ -85,8 +85,8 @@ | `PUSH_KEY` | 微信推送 | 非必须 | cookie失效推送[server酱的微信通知](http://sc.ftqq.com/3.version) | | `BARK_PUSH` | [BARK推送](https://apps.apple.com/us/app/bark-customed-notifications/id1403753865) | 非必须 | cookie失效推送BARK这个APP,填写内容是app提供的`设备码`,例如:https://api.day.app/123 ,那么此处的设备码就是`123`,再不懂看 [这个图](icon/bark.jpg) | | `BARK_SOUND` | [BARK推送](https://apps.apple.com/us/app/bark-customed-notifications/id1403753865) | 非必须 | bark推送声音设置,例如`choo`,具体值请在`bark`-`推送铃声`-`查看所有铃声` | -| `TG_BOT_TOKEN` | telegram推送 | 非必须 | tg推送,填写自己申请[@BotFather](https://t.me/BotFather)的Token,如`10xxx4:AAFcqxxxxgER5uw` , [具体教程](https://github.com/lxk0301/jd_scripts/pull/37#issuecomment-692415594) | -| `TG_USER_ID` | telegram推送 | 非必须 | tg推送,填写[@getuseridbot](https://t.me/getuseridbot)中获取到的纯数字ID, [具体教程](https://github.com/lxk0301/jd_scripts/pull/37#issuecomment-692415594) | +| `TG_BOT_TOKEN` | telegram推送 | 非必须 | tg推送,填写自己申请[@BotFather](https://t.me/BotFather)的Token,如`10xxx4:AAFcqxxxxgER5uw` , [具体教程](./TG_PUSH.md) | +| `TG_USER_ID` | telegram推送 | 非必须 | tg推送,填写[@getuseridbot](https://t.me/getuseridbot)中获取到的纯数字ID, [具体教程](./TG_PUSH.md) | | `DD_BOT_TOKEN` | 钉钉推送 | 非必须 | 钉钉推送[官方文档](https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq) ,只需`https://oapi.dingtalk.com/robot/send?access_token=XXX` 等于符号后面的XXX, 注:如果钉钉推送只填写`DD_BOT_TOKEN`,那么安全设置需勾选`自定义关键词`,内容输入输入`账号`即可,其他安全设置不要勾选 | | `DD_BOT_SECRET` | 钉钉推送 | 非必须 | 密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串 , 注:填写了`DD_BOT_TOKEN`和`DD_BOT_SECRET`,钉钉机器人安全设置只需勾选`加签`即可,其他选项不要勾选,再不懂看 [这个图](icon/DD_bot.png) | | `IGOT_PUSH_KEY` | iGot推送 | 非必须 | iGot聚合推送,支持多方式推送,确保消息可达。 [参考文档](https://wahao.github.io/Bark-MP-helper ) | From 733e0c702cfcb834074069574fb65e06f3d72d88 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 27 Nov 2020 08:33:58 +0800 Subject: [PATCH 159/290] Update jd_dreamFactory.js --- jd_dreamFactory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index eca6528..8b1fe2b 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -315,7 +315,7 @@ async function helpFriends(codes) { function assistFriend(sharepin) { return new Promise(async resolve => { - const url = `/dreamfactory/friend/AssistFriend?zone=dream_factory&sharepin=${sharepin}&sceneval=2&g_login_type=1` + const url = `/dreamfactory/friend/AssistFriend?zone=dream_factory&sharepin=${escape(sharepin)}&sceneval=2&g_login_type=1` $.get(taskurl(url), async (err, resp, data) => { try { if (err) { From 8c49ab580b2d173b8a1ec0fb061cc70c407ee5f9 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 27 Nov 2020 08:35:06 +0800 Subject: [PATCH 160/290] Update jd_dreamFactory.js --- jd_dreamFactory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 8b1fe2b..f1ff403 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -34,7 +34,7 @@ const notify = $.isNode() ? require('./sendNotify') : ''; let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 let cookiesArr = [], cookie = ''; -const inviteCodes = ['gB99tYLjvPcEFloDgamoBw==', 'V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=', '1uzRU5HkaUgvy0AB5Q9VUg==']; +const inviteCodes = ['V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=']; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; if ($.isNode()) { Object.keys(jdCookieNode).forEach((item) => { From b25b226f3c4755abf397372d6cf207028cc1c3e9 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 27 Nov 2020 09:09:34 +0800 Subject: [PATCH 161/290] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=9C=E4=B8=9C?= =?UTF-8?q?=E5=B7=A5=E5=8E=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_jdfactory.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/jd_jdfactory.js b/jd_jdfactory.js index a503dd2..69f1e02 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -2,7 +2,7 @@ * @Author: lxk0301 https://github.com/lxk0301 * @Date: 2020-11-25 18:19:21 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-26 12:58:02 + * @Last Modified time: 2020-11-27 09:58:02 */ /* 东东工厂,不是京喜工厂 @@ -151,22 +151,22 @@ async function algorithm() { } } // console.log(`\n您心仪商品${name}\n当前数量为:${couponCount}\n兑换所需电量为:${totalScore}\n您当前总电量为:${remainScore * 1 + useScore * 1}\n`); - if (wantProductSkuId && ((remainScore * 1 + useScore * 1) >= (totalScore + 100000))) { + if (wantProductSkuId && ((remainScore * 1 + useScore * 1) >= (totalScore * 1 + 100000))) { console.log(`\n提供的心仪商品${name}目前数量:${couponCount},且当前总电量为:${remainScore * 1 + useScore * 1},【满足】兑换此商品所需总电量:${totalScore + 100000}`); console.log(`请去活动页面更换成心仪商品并手动投入电量兑换\n`); - $.msg($.name, '', `京东账号${$.index}${$.nickName}\n您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${remainScore * 1 + useScore * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请去活动页面更换成心仪商品并手动投入电量兑换`); + $.msg($.name, '', `京东账号${$.index}${$.nickName}\n您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${remainScore * 1 + useScore * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请点击弹窗直达活动页面\n更换成心仪商品并手动投入电量兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${remainScore * 1 + useScore * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请去活动页面更换成心仪商品并手动投入电量兑换`); } else { console.log(`您心仪商品${name}\n当前数量为:${couponCount}\n兑换所需电量为:${totalScore}\n您当前总电量为:${remainScore * 1 + useScore * 1}\n不满足兑换心仪商品的条件\n`) } } else { console.log(`BoxJs或环境变量暂未提供心仪商品\n如需兑换心仪商品,请提供心仪商品名称,否则满足条件后会为您兑换当前所选商品:${name}\n`); - if (((remainScore * 1 + useScore * 1) >= totalScore * 1) && (couponCount * 1 > 0)) { + if (((remainScore * 1 + useScore * 1) >= totalScore * 1 + 100000) && (couponCount * 1 > 0)) { console.log(`\n所选商品${name}目前数量:${couponCount},且当前总电量为:${remainScore * 1 + useScore * 1},【满足】兑换此商品所需总电量:${totalScore}`); - console.log(`BoxJs或环境变量暂未提供心仪商品,下面为您目前选的${name} 投入电量\n`); - await jdfactory_addEnergy(); - $.msg($.name, '', `京东账号${$.index}${$.nickName}\n您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${remainScore * 1 + useScore * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n已为您投入电量,请去活动页面查看`); - await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `所选商品${name}目前数量:${couponCount}\n当前总电量为:${remainScore * 1 + useScore * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n已为您投入电量,请去活动页面查看`); + console.log(`BoxJs或环境变量暂未提供心仪商品,下面为您目前选的${name} 发送提示通知\n`); + // await jdfactory_addEnergy(); + $.msg($.name, '', `京东账号${$.index}${$.nickName}\n您所选商品${name}目前数量:${couponCount}\n当前总电量为:${remainScore * 1 + useScore * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请点击弹窗直达活动页面查看`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `所选商品${name}目前数量:${couponCount}\n当前总电量为:${remainScore * 1 + useScore * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请速去活动页面查看`); } else { console.log(`\n所选商品${name}目前数量:${couponCount},且当前总电量为:${remainScore * 1 + useScore * 1},【不满足】兑换此商品所需总电量:${totalScore}`) console.log(`故不一次性投入电力,一直放到蓄电池累计\n`); @@ -190,8 +190,8 @@ async function algorithm() { } if (wantProductSkuId && (($.batteryValue * 1) >= (totalScore))) { console.log(`\n提供的心仪商品${name}目前数量:${couponCount},且当前总电量为:${$.batteryValue * 1},【满足】兑换此商品所需总电量:${totalScore}`); - console.log(`请去活动页面更换成心仪商品并手动投入电量兑换\n`); - $.msg($.name, '', `京东账号${$.index}${$.nickName}\n您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${$.batteryValue * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请去活动页面选择此心仪商品并手动投入电量兑换`); + console.log(`请去活动页面选择心仪商品并手动投入电量兑换\n`); + $.msg($.name, '', `京东账号${$.index}${$.nickName}\n您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${$.batteryValue * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请点击弹窗直达活动页面\n选择此心仪商品并手动投入电量兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${$.batteryValue * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请去活动页面选择此心仪商品并手动投入电量兑换`); } else { console.log(`您心仪商品${name}\n当前数量为:${couponCount}\n兑换所需电量为:${totalScore}\n您当前总电量为:${$.batteryValue * 1}\n不满足兑换心仪商品的条件\n`) From 8df8905dfd0ad369ec1e448315dd4436e472f9aa Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 27 Nov 2020 10:06:13 +0800 Subject: [PATCH 162/290] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8D=81=E5=85=83?= =?UTF-8?q?=E8=A1=97=E7=AD=BE=E5=88=B0=E8=84=9A=E6=9C=AC=EF=BC=8C=E4=B8=80?= =?UTF-8?q?=E5=91=A8=E7=AD=BE=E5=88=B0=E4=B8=8B=E6=9D=A5=E5=8F=AF=E8=8E=B7?= =?UTF-8?q?=E5=BE=9730=E4=BA=AC=E8=B1=86=EF=BC=8C=E6=AF=8F=E5=A4=A9?= =?UTF-8?q?=E4=BB=BB=E6=84=8F=E6=97=B6=E5=88=BB=E8=BF=90=E8=A1=8C=E4=B8=80?= =?UTF-8?q?=E6=AC=A1=E5=8D=B3=E5=8F=AF=20=E6=9B=B4=E6=96=B0=E5=9C=B0?= =?UTF-8?q?=E5=9D=80=EF=BC=9Ahttps://raw.githubusercontent.com/lxk0301/jd?= =?UTF-8?q?=5Fscripts/master/jd=5Fsyj.js=20=E5=8F=82=E8=80=83github@jidesh?= =?UTF-8?q?eng6=E4=BF=AE=E6=94=B9=E8=80=8C=E6=9D=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_syj.js | 194 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 jd_syj.js diff --git a/jd_syj.js b/jd_syj.js new file mode 100644 index 0000000..1c6e3ef --- /dev/null +++ b/jd_syj.js @@ -0,0 +1,194 @@ +/* + * @Author: lxk0301 https://github.com/lxk0301 + * @Date: 2020-11-27 09:19:21 + * @Last Modified by: lxk0301 + * @Last Modified time: 2020-11-27 09:58:02 + */ +/* +十元街脚本,一周签到下来可获得30京豆,一天任意时刻运行一次即可 +更新地址:https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_syj.js +参考github@jidesheng6修改而来 +已支持IOS双京东账号, Node.js支持N个京东账号 +脚本兼容: QuantumultX, Surge, Loon, 小火箭,JSBox, Node.js +============Quantumultx=============== +[task_local] +#十元街 +10 7 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_syj.js, tag=十元街, enabled=true + +================Loon============== +[Script] +cron "10 7 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_syj.js,tag=十元街 + +===============Surge================= +十元街 = type=cron,cronexp="10 7 * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_syj.js + +============小火箭========= +十元街 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_syj.js, cronexpr="10 7 * * *", timeout=200, enable=true + */ +const $ = new Env('十元街'); + +const notify = $.isNode() ? require('./sendNotify') : ''; +//Node.js用户请在jdCookie.js处填写京东ck; +const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; +let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 +const randomCount = $.isNode() ? 20 : 5; +//IOS等用户直接用NobyDa的jd cookie +let cookiesArr = [], cookie = '', message; +if ($.isNode()) { + Object.keys(jdCookieNode).forEach((item) => { + cookiesArr.push(jdCookieNode[item]) + }) + if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {}; +} else { + cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); +} +const JD_API_HOST = 'https://api.m.jd.com/api'; +!(async () => { + if (!cookiesArr[0]) { + $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); + return; + } + for (let i = 0; i < cookiesArr.length; i++) { + if (cookiesArr[i]) { + cookie = cookiesArr[i]; + $.UserName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]) + $.index = i + 1; + $.isLogin = true; + $.nickName = ''; + message = ''; + await TotalBean(); + console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`); + if (!$.isLogin) { + $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"}); + + if ($.isNode()) { + await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); + } else { + $.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 + } + continue + } + await userSignIn(); + await showMsg(); + } + } +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) + +function showMsg() { + return new Promise(resolve => { + $.msg($.name, '', `【京东账号${$.index}】${$.nickName}\n${message}`); + resolve() + }) +} +function userSignIn() { + return new Promise(resolve => { + const body = {"activityId":"8d6845fe2e77425c82d5078d314d33c5","inviterId":"VMIQlLQqjQyjZokQmv5bIDgq011L0Ov8","channel":"MiniProgram"}; + $.get(taskUrl('userSignIn', body), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + console.log(data); + data = JSON.parse(data); + if (data.code === 0) { + console.log(`今日签到成功`) + if (data.data) { + let { alreadySignDays, beanTotalNum, todayPrize, eachDayPrize } = data.data; + message += `【第${alreadySignDays}日签到】成功,获得${todayPrize.beanAmount}京豆 🐶\n`; + if (alreadySignDays === 7) alreadySignDays = 0; + message += `【明日签到成功】可获得${eachDayPrize[alreadySignDays].beanAmount}京豆 🐶\n`; + message += `【签到累计获得】${beanTotalNum}京豆 🐶\n`; + } + } else if (data.code === 81) { + console.log(`今日已签到`) + message += `【签到】失败,今日已签到`; + } else { + console.log(`异常:${JSON.stringify(data)}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function taskUrl(function_id, body = {}) { + return { + url: `${JD_API_HOST}?functionId=${function_id}&body=${escape(JSON.stringify(body))}&appid=swat_miniprogram&osVersion=5.0.0&clientVersion=3.1.3&fromType=wxapp×tamp=${new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000}`, + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Content-Type": "application/x-www-form-urlencoded", + "Host": "api.m.jd.com", + "Referer": "https://servicewechat.com/wxa5bf5ee667d91626/108/page-frame.html", + "Cookie": cookie, + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), + } + } +} +function TotalBean() { + return new Promise(async resolve => { + const options = { + "url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`, + "headers": { + "Accept": "application/json,text/plain, */*", + "Content-Type": "application/x-www-form-urlencoded", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + data = JSON.parse(data); + if (data['retcode'] === 13) { + $.isLogin = false; //cookie过期 + return + } + $.nickName = data['base'].nickname; + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function safeGet(data) { + try { + if (typeof JSON.parse(data) == "object") { + return true; + } + } catch (e) { + console.log(e); + console.log(`京东服务器访问数据为空,请检查自身设备网络情况`); + return false; + } +} +// 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)} \ No newline at end of file From b68cfd14dde89de4da6c08fd9eb10255a3442a2b Mon Sep 17 00:00:00 2001 From: Sirius2s <53803920+Sirius2s@users.noreply.github.com> Date: Fri, 27 Nov 2020 10:15:48 +0800 Subject: [PATCH 163/290] =?UTF-8?q?=E4=BA=91=E5=87=BD=E6=95=B0=E5=8A=A0?= =?UTF-8?q?=E5=85=A5jd=5Fsyj=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- serverless.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/serverless.yml b/serverless.yml index a0f27dc..332cf3d 100644 --- a/serverless.yml +++ b/serverless.yml @@ -36,7 +36,7 @@ inputs: argument: jd_fruit&jd_pet - timer: # 宠汪汪喂食# 宠汪汪# 摇钱树# 京东种豆得豆# 京喜工厂 #东东工厂 parameters: - name: joy_feedPets_joy_moneyTree_plantBean_dreamFactory_jd_jdfactory + name: joy_feedPets_joy_moneyTree_plantBean_dreamFactory_jdfactory cronExpression: "0 3 */1 * * * *" enable: true argument: jd_joy_feedPets&jd_joy&jd_moneyTree&jd_plantBean&jd_dreamFactory&jd_jdfactory @@ -70,12 +70,12 @@ inputs: cronExpression: "0 0 10 * * * *" enable: true argument: jd_bean_change&jd_rankingList - - timer: # 金融养猪 + - timer: # 金融养猪#十元街 parameters: - name: jd_pigPet + name: jd_pigPet_jd_syj cronExpression: "0 12 13 * * * *" enable: true - argument: jd_pigPet + argument: jd_pigPet&jd_syj environment: # 环境变量 variables: # 环境变量对象 AAA: BBB # 不要删除,用来格式化对齐追加的变量的 From 9fe1011e1de24cdcfdf2a3f94165937bfaa46ef1 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 27 Nov 2020 10:22:15 +0800 Subject: [PATCH 164/290] =?UTF-8?q?docker=E6=96=B9=E6=B3=95=E4=B8=80?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8D=81=E5=85=83=E8=A1=97=EF=BC=8CLoon?= =?UTF-8?q?=E8=AE=A2=E9=98=85=E9=85=8D=E7=BD=AE=E6=96=B0=E5=A2=9E=E5=8D=81?= =?UTF-8?q?=E5=85=83=E8=A1=97=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Loon/lxk0301_LoonTask.conf | 3 +++ docker/crontab_list.sh | 4 +++- docker/crontab_list_ts.sh | 4 +++- jd_syj.js | 7 +++---- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Loon/lxk0301_LoonTask.conf b/Loon/lxk0301_LoonTask.conf index e6014ee..b3d8a57 100644 --- a/Loon/lxk0301_LoonTask.conf +++ b/Loon/lxk0301_LoonTask.conf @@ -63,6 +63,9 @@ cron "2 9 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_script #点点券 cron "20 0,20 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_necklace.js, tag=点点券 +#十元街 +cron "10 7 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_syj.js, tag=十元街 + #东东小窝 cron "16 0 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_small_home.js, tag=东东小窝 diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index 912f805..9a845d9 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -60,4 +60,6 @@ # 东东小窝 16 6 * * * node /scripts/jd_small_home.js >> /scripts/logs/jd_small_home.log 2>&1 # 东东工厂 -36 * * * * node /scripts/jd_jdfactory.js >> /scripts/logs/jd_jdfactory.log 2>&1 \ No newline at end of file +36 * * * * node /scripts/jd_jdfactory.js >> /scripts/logs/jd_jdfactory.log 2>&1 +#十元街 +36 8 * * * node /scripts/jd_syj.js >> /scripts/logs/jd_syj.log 2>&1 \ No newline at end of file diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index 0a94f8c..d525d30 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -60,4 +60,6 @@ # 东东小窝 16 6 * * * node /scripts/jd_small_home.js |ts >> /scripts/logs/jd_small_home.log 2>&1 # 东东工厂 -36 * * * * node /scripts/jd_jdfactory.js |ts >> /scripts/logs/jd_jdfactory.log 2>&1 \ No newline at end of file +36 * * * * node /scripts/jd_jdfactory.js |ts >> /scripts/logs/jd_jdfactory.log 2>&1 +#十元街 +36 8 * * * node /scripts/jd_syj.js |ts >> /scripts/logs/jd_syj.log 2>&1 \ No newline at end of file diff --git a/jd_syj.js b/jd_syj.js index 1c6e3ef..18fc684 100644 --- a/jd_syj.js +++ b/jd_syj.js @@ -17,7 +17,7 @@ ================Loon============== [Script] -cron "10 7 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_syj.js,tag=十元街 +cron "10 7 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_syj.js, tag=十元街 ===============Surge================= 十元街 = type=cron,cronexp="10 7 * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_syj.js @@ -96,7 +96,6 @@ function userSignIn() { console.log(`${$.name} API请求失败,请检查网路重试`) } else { if (safeGet(data)) { - console.log(data); data = JSON.parse(data); if (data.code === 0) { console.log(`今日签到成功`) @@ -104,8 +103,8 @@ function userSignIn() { let { alreadySignDays, beanTotalNum, todayPrize, eachDayPrize } = data.data; message += `【第${alreadySignDays}日签到】成功,获得${todayPrize.beanAmount}京豆 🐶\n`; if (alreadySignDays === 7) alreadySignDays = 0; - message += `【明日签到成功】可获得${eachDayPrize[alreadySignDays].beanAmount}京豆 🐶\n`; - message += `【签到累计获得】${beanTotalNum}京豆 🐶\n`; + message += `【明日签到】可获得${eachDayPrize[alreadySignDays].beanAmount}京豆 🐶\n`; + message += `【累计获得】${beanTotalNum}京豆 🐶\n`; } } else if (data.code === 81) { console.log(`今日已签到`) From eaf10930357561699198814b3cb5d2e975a376d2 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 27 Nov 2020 10:27:14 +0800 Subject: [PATCH 165/290] =?UTF-8?q?=E6=90=AC=E7=A7=BBtg=E6=9C=BA=E5=99=A8?= =?UTF-8?q?=E4=BA=BA=E8=8E=B7=E5=8F=96=E6=95=99=E7=A8=8B=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TG_PUSH.md => backUp/TG_PUSH.md | 6 +- githubAction.md | 4 +- yarn.lock | 1349 ------------------------------- 3 files changed, 5 insertions(+), 1354 deletions(-) rename TG_PUSH.md => backUp/TG_PUSH.md (86%) delete mode 100644 yarn.lock diff --git a/TG_PUSH.md b/backUp/TG_PUSH.md similarity index 86% rename from TG_PUSH.md rename to backUp/TG_PUSH.md index 9843772..4004b29 100644 --- a/TG_PUSH.md +++ b/backUp/TG_PUSH.md @@ -4,14 +4,14 @@ Ⅰ.首先在Telegram上搜索[BotFather](https://t.me/BotFather)机器人
-![TG_PUSH1](./icon/TG_PUSH1.png) +![TG_PUSH1](../icon/TG_PUSH1.png) Ⅱ.利用[BotFather](https://t.me/BotFather)创建一个属于自己的通知机器人,按照下图中的1、2、3步骤拿到token,格式形如```10xxx4:AAFcqxxxxgER5uw```。填入```TG_BOT_TOKEN```
-![TG_PUSH2](./icon/TG_PUSH2.png) +![TG_PUSH2](../icon/TG_PUSH2.png) Ⅲ.再次在Telegram上搜索[getuserIDbot](https://t.me/getuserIDbot)机器人,获取UserID。填入```TG_USER_ID```
-![TG_PUSH3](./icon/TG_PUSH3.png) +![TG_PUSH3](../icon/TG_PUSH3.png) 至此,获取**TG_BOT_TOKEN**以及**TG_USER_ID**的教程结束 diff --git a/githubAction.md b/githubAction.md index c3705b0..203e5ad 100644 --- a/githubAction.md +++ b/githubAction.md @@ -85,8 +85,8 @@ | `PUSH_KEY` | 微信推送 | 非必须 | cookie失效推送[server酱的微信通知](http://sc.ftqq.com/3.version) | | `BARK_PUSH` | [BARK推送](https://apps.apple.com/us/app/bark-customed-notifications/id1403753865) | 非必须 | cookie失效推送BARK这个APP,填写内容是app提供的`设备码`,例如:https://api.day.app/123 ,那么此处的设备码就是`123`,再不懂看 [这个图](icon/bark.jpg) | | `BARK_SOUND` | [BARK推送](https://apps.apple.com/us/app/bark-customed-notifications/id1403753865) | 非必须 | bark推送声音设置,例如`choo`,具体值请在`bark`-`推送铃声`-`查看所有铃声` | -| `TG_BOT_TOKEN` | telegram推送 | 非必须 | tg推送,填写自己申请[@BotFather](https://t.me/BotFather)的Token,如`10xxx4:AAFcqxxxxgER5uw` , [具体教程](./TG_PUSH.md) | -| `TG_USER_ID` | telegram推送 | 非必须 | tg推送,填写[@getuseridbot](https://t.me/getuseridbot)中获取到的纯数字ID, [具体教程](./TG_PUSH.md) | +| `TG_BOT_TOKEN` | telegram推送 | 非必须 | tg推送,填写自己申请[@BotFather](https://t.me/BotFather)的Token,如`10xxx4:AAFcqxxxxgER5uw` , [具体教程](./backUp/TG_PUSH.md) | +| `TG_USER_ID` | telegram推送 | 非必须 | tg推送,填写[@getuseridbot](https://t.me/getuseridbot)中获取到的纯数字ID, [具体教程](./backUp/TG_PUSH.md) | | `DD_BOT_TOKEN` | 钉钉推送 | 非必须 | 钉钉推送[官方文档](https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq) ,只需`https://oapi.dingtalk.com/robot/send?access_token=XXX` 等于符号后面的XXX, 注:如果钉钉推送只填写`DD_BOT_TOKEN`,那么安全设置需勾选`自定义关键词`,内容输入输入`账号`即可,其他安全设置不要勾选 | | `DD_BOT_SECRET` | 钉钉推送 | 非必须 | 密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串 , 注:填写了`DD_BOT_TOKEN`和`DD_BOT_SECRET`,钉钉机器人安全设置只需勾选`加签`即可,其他选项不要勾选,再不懂看 [这个图](icon/DD_bot.png) | | `IGOT_PUSH_KEY` | iGot推送 | 非必须 | iGot聚合推送,支持多方式推送,确保消息可达。 [参考文档](https://wahao.github.io/Bark-MP-helper ) | diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 58175ab..0000000 --- a/yarn.lock +++ /dev/null @@ -1,1349 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@sindresorhus/is@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" - integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== - -"@sindresorhus/is@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.0.tgz#2ff674e9611b45b528896d820d3d7a812de2f0e4" - integrity sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ== - -"@szmarczak/http-timer@^4.0.5": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.5.tgz#bfbd50211e9dfa51ba07da58a14cdfd333205152" - integrity sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ== - dependencies: - defer-to-connect "^2.0.0" - -"@types/cacheable-request@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.1.tgz#5d22f3dded1fd3a84c0bbeb5039a7419c2c91976" - integrity sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "*" - "@types/node" "*" - "@types/responselike" "*" - -"@types/http-cache-semantics@*": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a" - integrity sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A== - -"@types/keyv@*": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.1.tgz#e45a45324fca9dab716ab1230ee249c9fb52cfa7" - integrity sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw== - dependencies: - "@types/node" "*" - -"@types/node@*": - version "14.14.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.6.tgz#146d3da57b3c636cc0d1769396ce1cfa8991147f" - integrity sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw== - -"@types/responselike@*", "@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== - dependencies: - "@types/node" "*" - -ajv@^6.12.3: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -archive-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/archive-type/-/archive-type-4.0.0.tgz#f92e72233056dfc6969472749c267bdb046b1d70" - integrity sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA= - dependencies: - file-type "^4.2.0" - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -async@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - -base64-js@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== - -basic-auth@^1.0.3: - version "1.1.0" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884" - integrity sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ= - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -bl@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" - integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - -buffer-alloc-unsafe@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" - integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== - -buffer-alloc@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" - integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== - dependencies: - buffer-alloc-unsafe "^1.1.0" - buffer-fill "^1.0.0" - -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -buffer-fill@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" - integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= - -buffer@^5.2.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -cacheable-lookup@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz#049fdc59dffdd4fc285e8f4f82936591bd59fec3" - integrity sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w== - -cacheable-request@^2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" - integrity sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0= - dependencies: - clone-response "1.0.2" - get-stream "3.0.0" - http-cache-semantics "3.8.1" - keyv "3.0.0" - lowercase-keys "1.0.0" - normalize-url "2.0.1" - responselike "1.0.2" - -cacheable-request@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.1.tgz#062031c2856232782ed694a257fa35da93942a58" - integrity sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^2.0.0" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -clone-response@1.0.2, clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - -colors@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^2.8.1: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -content-disposition@^0.5.2: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -corser@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87" - integrity sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c= - -crypto-js@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.0.0.tgz#2904ab2677a9d042856a2ea2ef80de92e4a36dcc" - integrity sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg== - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -debug@^3.1.1: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" - integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== - dependencies: - file-type "^5.2.0" - is-stream "^1.1.0" - tar-stream "^1.5.2" - -decompress-tarbz2@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" - integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== - dependencies: - decompress-tar "^4.1.0" - file-type "^6.1.0" - is-stream "^1.1.0" - seek-bzip "^1.0.5" - unbzip2-stream "^1.0.9" - -decompress-targz@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" - integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== - dependencies: - decompress-tar "^4.1.1" - file-type "^5.2.0" - is-stream "^1.1.0" - -decompress-unzip@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" - integrity sha1-3qrM39FK6vhVePczroIQ+bSEj2k= - dependencies: - file-type "^3.8.0" - get-stream "^2.2.0" - pify "^2.3.0" - yauzl "^2.4.2" - -decompress@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118" - integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== - dependencies: - decompress-tar "^4.0.0" - decompress-tarbz2 "^4.0.0" - decompress-targz "^4.0.0" - decompress-unzip "^4.0.1" - graceful-fs "^4.1.10" - make-dir "^1.0.0" - pify "^2.3.0" - strip-dirs "^2.0.0" - -defer-to-connect@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.0.tgz#83d6b199db041593ac84d781b5222308ccf4c2c1" - integrity sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg== - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -download@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/download/-/download-8.0.0.tgz#afc0b309730811731aae9f5371c9f46be73e51b1" - integrity sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA== - dependencies: - archive-type "^4.0.0" - content-disposition "^0.5.2" - decompress "^4.2.1" - ext-name "^5.0.0" - file-type "^11.1.0" - filenamify "^3.0.0" - get-stream "^4.1.0" - got "^8.3.1" - make-dir "^2.1.0" - p-event "^2.1.0" - pify "^4.0.1" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ecstatic@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/ecstatic/-/ecstatic-3.3.2.tgz#6d1dd49814d00594682c652adb66076a69d46c48" - integrity sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog== - dependencies: - he "^1.1.1" - mime "^1.6.0" - minimist "^1.1.0" - url-join "^2.0.5" - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -escape-string-regexp@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -ext-list@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" - integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== - dependencies: - mime-db "^1.28.0" - -ext-name@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" - integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== - dependencies: - ext-list "^2.0.0" - sort-keys-length "^1.0.0" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= - dependencies: - pend "~1.2.0" - -file-type@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-11.1.0.tgz#93780f3fed98b599755d846b99a1617a2ad063b8" - integrity sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g== - -file-type@^3.8.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" - integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek= - -file-type@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5" - integrity sha1-G2AOX8ofvcboDApwxxyNul95BsU= - -file-type@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" - integrity sha1-LdvqfHP/42No365J3DOMBYwritY= - -file-type@^6.1.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" - integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== - -filename-reserved-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" - integrity sha1-q/c9+rc10EVECr/qLZHzieu/oik= - -filenamify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-3.0.0.tgz#9603eb688179f8c5d40d828626dcbb92c3a4672c" - integrity sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g== - dependencies: - filename-reserved-regex "^2.0.0" - strip-outer "^1.0.0" - trim-repeated "^1.0.0" - -follow-redirects@^1.0.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" - integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -from2@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -get-stream@3.0.0, get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-stream@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" - integrity sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4= - dependencies: - object-assign "^4.0.1" - pinkie-promise "^2.0.0" - -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -got@^11.5.1: - version "11.8.0" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.0.tgz#be0920c3586b07fd94add3b5b27cb28f49e6545f" - integrity sha512-k9noyoIIY9EejuhaBNLyZ31D5328LeqnyPNXJQb2XlJZcKakLqN5m6O/ikhq/0lw56kUYS54fVm+D1x57YC9oQ== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.1" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -got@^8.3.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" - integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== - dependencies: - "@sindresorhus/is" "^0.7.0" - cacheable-request "^2.1.1" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - into-stream "^3.1.0" - is-retry-allowed "^1.1.0" - isurl "^1.0.0-alpha5" - lowercase-keys "^1.0.0" - mimic-response "^1.0.0" - p-cancelable "^0.4.0" - p-timeout "^2.0.1" - pify "^3.0.0" - safe-buffer "^5.1.1" - timed-out "^4.0.1" - url-parse-lax "^3.0.0" - url-to-options "^1.0.1" - -graceful-fs@^4.1.10: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -has-symbol-support-x@^1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" - integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== - -has-to-string-tag-x@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" - integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== - dependencies: - has-symbol-support-x "^1.4.1" - -he@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -http-cache-semantics@3.8.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== - -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-proxy@^1.18.0: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-server@^0.12.3: - version "0.12.3" - resolved "https://registry.yarnpkg.com/http-server/-/http-server-0.12.3.tgz#ba0471d0ecc425886616cb35c4faf279140a0d37" - integrity sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA== - dependencies: - basic-auth "^1.0.3" - colors "^1.4.0" - corser "^2.0.1" - ecstatic "^3.3.2" - http-proxy "^1.18.0" - minimist "^1.2.5" - opener "^1.5.1" - portfinder "^1.0.25" - secure-compare "3.0.1" - union "~0.5.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.0-beta.5.2" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz#8b923deb90144aea65cf834b016a340fc98556f3" - integrity sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -inherits@^2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -into-stream@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" - integrity sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY= - dependencies: - from2 "^2.1.1" - p-is-promise "^1.1.0" - -is-natural-number@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" - integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg= - -is-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" - integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= - -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-retry-allowed@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -isurl@^1.0.0-alpha5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" - integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== - dependencies: - has-to-string-tag-x "^1.2.0" - is-object "^1.0.1" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -keyv@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" - integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== - dependencies: - json-buffer "3.0.0" - -keyv@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.3.tgz#4f3aa98de254803cafcd2896734108daa35e4254" - integrity sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA== - dependencies: - json-buffer "3.0.1" - -lodash@^4.17.14: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== - -lowercase-keys@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" - integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= - -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== - -mime-db@^1.28.0: - version "1.45.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" - integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== - dependencies: - mime-db "1.44.0" - -mime@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -minimist@^1.1.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mkdirp@^0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -normalize-url@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" - integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== - dependencies: - prepend-http "^2.0.0" - query-string "^5.0.1" - sort-keys "^2.0.0" - -normalize-url@^4.1.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" - integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -opener@^1.5.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -p-cancelable@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" - integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== - -p-cancelable@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.0.0.tgz#4a3740f5bdaf5ed5d7c3e34882c6fb5d6b266a6e" - integrity sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg== - -p-event@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/p-event/-/p-event-2.3.1.tgz#596279ef169ab2c3e0cae88c1cfbb08079993ef6" - integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA== - dependencies: - p-timeout "^2.0.1" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-is-promise@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" - integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= - -p-timeout@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" - integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== - dependencies: - p-finally "^1.0.0" - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -portfinder@^1.0.25: - version "1.0.28" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" - integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== - dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.5" - -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -psl@^1.1.28, psl@^1.1.33: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -qs@^6.4.0: - version "6.9.4" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" - integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ== - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -query-string@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" - integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -readable-stream@^2.0.0, readable-stream@^2.3.0, readable-stream@^2.3.5: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -resolve-alpn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.0.0.tgz#745ad60b3d6aff4b4a48e01b8c0bdc70959e0e8c" - integrity sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA== - -responselike@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - dependencies: - lowercase-keys "^1.0.0" - -responselike@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" - integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw== - dependencies: - lowercase-keys "^2.0.0" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -secure-compare@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3" - integrity sha1-8aAymzCLIh+uN7mXTz1XjQypmeM= - -seek-bzip@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.6.tgz#35c4171f55a680916b52a07859ecf3b5857f21c4" - integrity sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ== - dependencies: - commander "^2.8.1" - -semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -sort-keys-length@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" - integrity sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg= - dependencies: - sort-keys "^1.0.0" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= - dependencies: - is-plain-obj "^1.0.0" - -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= - dependencies: - is-plain-obj "^1.0.0" - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-dirs@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" - integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== - dependencies: - is-natural-number "^4.0.1" - -strip-outer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" - integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== - dependencies: - escape-string-regexp "^1.0.2" - -tar-stream@^1.5.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" - integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== - dependencies: - bl "^1.0.0" - buffer-alloc "^1.2.0" - end-of-stream "^1.0.0" - fs-constants "^1.0.0" - readable-stream "^2.3.0" - to-buffer "^1.1.1" - xtend "^4.0.0" - -through@^2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -timed-out@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= - -to-buffer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" - integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== - -tough-cookie@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" - integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.1.2" - -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -trim-repeated@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" - integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE= - dependencies: - escape-string-regexp "^1.0.2" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -unbzip2-stream@^1.0.9: - version "1.4.3" - resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" - integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== - dependencies: - buffer "^5.2.1" - through "^2.3.8" - -union@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075" - integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA== - dependencies: - qs "^6.4.0" - -universalify@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -uri-js@^4.2.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" - integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== - dependencies: - punycode "^2.1.0" - -url-join@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" - integrity sha1-WvIvGMBSoACkjXuCxenC4v7tpyg= - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - -url-to-options@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" - integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -yauzl@^2.4.2: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" From 82239323c4c5b8d4243c03ca19ecfdc93937623b Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 27 Nov 2020 11:02:05 +0800 Subject: [PATCH 166/290] fix bug --- jd_dreamFactory.js | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index f1ff403..b799618 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -102,7 +102,7 @@ async function jdDreamFactory() { // 收取发电机的电力 -function collectElectricity(facId = factoryId, help = false, master = '') { +function collectElectricity(facId = factoryId, help = false, master) { return new Promise(async resolve => { let url = `/dreamfactory/generator/CollectCurrentElectricity?zone=dream_factory&apptoken=&pgtimestamp=&phoneID=&factoryid=${facId}&doubleflag=1&sceneval=2&g_login_type=1`; if (help && master) { @@ -489,18 +489,8 @@ function stealFriend() { data = data['data']; for (let i = 0; i < data.list.length; ++i) { let pin = data.list[i]['encryptPin']; - if (data.list[i]['collectFlag'] === 1) { - //只有collectFlag为1的时候,才能偷取好友电力 - const facId = await getFactoryIdByPin(pin); - if (facId) await collectElectricity(facId,true, data.list[i]['key']) - // getFactoryIdByPin(pin).then(async (facId) => { - // if (facId) await collectElectricity(facId,true) - // }).catch(err => { - // - // }) - } else { - console.log(`此好友[${pin}]暂不能被你收取电力`) - } + const facId = await getFactoryIdByPin(pin); + if (facId) await collectElectricity(facId,true, data.list[i]['key']) } } resolve() From 259875387b4ad8348f212d60159f9eeb0afb5616 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 27 Nov 2020 11:14:03 +0800 Subject: [PATCH 167/290] update --- docker/crontab_list.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index 9a845d9..9d02d02 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -52,7 +52,7 @@ # 天天提鹅 18 * * * * node /scripts/jd_daily_egg.js >> /scripts/logs/jd_daily_egg.log 2>&1 # 金融养猪 -12 13 * * * node /scripts/jd_pigPet.js >> /scripts/logs/jd_pigPet.log 2>&1 +12 * * * * node /scripts/jd_pigPet.js >> /scripts/logs/jd_pigPet.log 2>&1 # 点点券 20 0,20 * * * node /scripts/jd_necklace.js >> /scripts/logs/jd_necklace.log 2>&1 # 京喜工厂 From 3305f153187125c365e779e787a50ed9b6d152be Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 27 Nov 2020 11:39:31 +0800 Subject: [PATCH 168/290] =?UTF-8?q?jd=5Fbean=5Fsign.js=E6=8F=90=E4=BE=9B?= =?UTF-8?q?=E4=BA=86=E7=AD=BE=E5=88=B0=E6=8E=A8=E9=80=81=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F,=E4=B9=9F=E4=BC=9A?= =?UTF-8?q?=E6=89=93=E5=8D=B0=E6=98=BE=E7=A4=BAlog=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_bean_sign.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/jd_bean_sign.js b/jd_bean_sign.js index b1bb810..10d51b3 100644 --- a/jd_bean_sign.js +++ b/jd_bean_sign.js @@ -1,7 +1,7 @@ /* 京豆签到,自用,可N个京东账号,IOS软件用户请使用 https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js Node.JS专用 -更新时间:2020-11-26 +更新时间:2020-11-27 从 github @ruicky改写而来 version v0.0.1 create by ruicky @@ -55,6 +55,8 @@ async function execSign() { try { if (notify.SCKEY || notify.BARK_PUSH || notify.DD_BOT_TOKEN || (notify.TG_BOT_TOKEN && notify.TG_USER_ID) || notify.IGOT_PUSH_KEY) { await exec(`${process.execPath} ${JD_DailyBonusPath} >> ${resultPath}`); + const notifyContent = await fs.readFileSync(resultPath, "utf8"); + console.log(`👇👇👇👇👇👇👇👇👇👇👇LOG记录👇👇👇👇👇👇👇👇👇👇👇\n${notifyContent}\n👆👆👆👆👆👆👆👆👆LOG记录👆👆👆👆👆👆👆👆👆👆👆`); } else { // 如果没有提供通知推送,则打印日志 console.log('没有提供通知推送,则打印脚本执行日志') From e3caab3d475ee3772c4c06c118d3b97b6b1a24c0 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 27 Nov 2020 12:32:55 +0800 Subject: [PATCH 169/290] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8D=81=E5=85=83?= =?UTF-8?q?=E8=A1=97=E8=84=9A=E6=9C=AC=E5=9C=88x=E7=9A=84task=20=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=20https://raw.githubusercontent.com/58xinian/icon/mas?= =?UTF-8?q?ter/jd=5Fsyj.png?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_syj.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jd_syj.js b/jd_syj.js index 18fc684..b23140a 100644 --- a/jd_syj.js +++ b/jd_syj.js @@ -13,7 +13,7 @@ ============Quantumultx=============== [task_local] #十元街 -10 7 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_syj.js, tag=十元街, enabled=true +10 7 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_syj.js, tag=十元街, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jd_syj.png, enabled=true ================Loon============== [Script] From c50087a7477346d8afa2c0cebce854d882f10ddf Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Fri, 27 Nov 2020 13:40:56 +0800 Subject: [PATCH 170/290] Delete iCloud5.png --- icon/iCloud5.png | Bin 50792 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 icon/iCloud5.png diff --git a/icon/iCloud5.png b/icon/iCloud5.png deleted file mode 100644 index 9f11de909778d1f3b618cea123558b90082141b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50792 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

!Gr{u)Wn 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 From e77ab872653f5804fa0e6e00972de3eb2b78eda4 Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Fri, 27 Nov 2020 13:41:25 +0800 Subject: [PATCH 171/290] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=95=99=E7=A8=8B?= =?UTF-8?q?=E6=89=80=E9=9C=80=E7=9A=84=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新教程所需的图片 --- icon/iCloud5.png | Bin 0 -> 58538 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 icon/iCloud5.png diff --git a/icon/iCloud5.png b/icon/iCloud5.png new file mode 100644 index 0000000000000000000000000000000000000000..d5651835dba85fcdf06697e76e12df708e57af4f GIT binary patch literal 58538 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

Ud4oDks)ZuBS4krIEb84%_m$ zPs*qdMg_0MlmwI8+C6KiT|0>F9Q+nT$-RTf-m~R4d-}_zYMt}pl!S&S*&chOJflrmLN?~KWd1_a|uAp;wQ=dxH<`4NTm#pf=O1ayb3HG(cS-rnC;vw74 z5KZ3MYgpof-RK*AQ?*^V>pkXIPD3P4beRJ9=KXdkL|z zaZz;<0->_TW-buAa5Pz1fxAlaO{m@7xoFm|CVAez6v-(!%Fezv{fXxYQt-NVWRu$R z6b+_WC}5J^MsNsywCNAAsvH_QJl9ex^cRwOpHdBQ<+FJjsg)ElswP(qM7SgMaj-2Dy=*RyE+!1EI9;)?E4Mhv)JY zkt46zrf(SB#HA13_My6(%`m5*lt1cfv8g_%C|~`DB9(rwB{1;&-FM0% zD~(U)7Ax!}qIwxQ9lw{&Xf@fVLj9Q$$OQMp!T&Sd(Q%}fnHlj`o%L3Z>jJBY1B+}6 zAea$fJ|*?x%evE-q)+R@?HCqP+-rY2!!NM@iXVSGSN zHUIH(-7AZy_=ML767sI9gr9r}AG`Ux@4u5pNnIoevML-R$mZ_otrz!K%W=bc6ETw_`sWNRwp0bZOKP5r;ol`h&B_elHnzmOJCZ}Tu& zC6qxtgcA3EpuO=~`hRGUO~T(#fH+j_Ke&!eUyKPG1Y3=<(duXi6MPjY!jxeDsBNIE z{X1>(1;eh{R%p|!zpQ8^JXt_#{8VfUu~uCsgANDMVQoBm^)&_lVzM3^hy7P{O3pKU z)z?(tN0Lzdzmnrq6ebTsT2RplxPlY(87mmzM-1~K21rWgJjd>>lk)3h@$N4-wHpBd z(+}*g)4ZfWhwWN=KP6mdI;-STQ5!5wLd?>FkBlBP+V|AR&3=6uks_l+i7d0N%fzbt zGeftud`V(gk=b`qI$OeP4wm5R(TLJ0xU@{!dlfU1?GhIonI3TBOjRtReH`C8Np4E! z#TnHb&+wKjwF`^-?I_`;9Gze62h}l+w*9He-{a&)M+Z`1)z7lZWoksiySJHCi0rl& zQ7&zo-aFMfq~(kH{$jNYO*wAdKXlF+DA1FoOA{MiCpTe6+ssx%i0|YzFT#xu2%3C} z&p&O{f`$EuXftzHm$Zqaws!qOa5@QV7Loy}?J^@b5A8Hgr@tUO93&;OJeZfTIo@0J z-R-I?&`InOYkbv^I}K1yT_u9imMZcy&9Y@8a*MiSvCj2d`dw|1CxqCC#rZDJiU%8m zuaABSFT2(WP=W;ObmhhDxlnAZ)3UwcKg6EreW@79g`l!DRZKWxXJ;}Ul=G(=Fnkwt zJSGoPaC1P1Y&JafV%C=OpgPHK9Q_iuE{V3x>`e3r=swiX+b%$gKcO{?zbmyIN~vi` zOd451Z77|ZBgL9qTQ*u@LK!{pzF*b>#{6KJkbj`{i&!a(*P`gTToQ6MhvQ+@N?DOI z7GXZ+i&kr1gh;AYc%fMQ37A<*q9>B~JNLJ-LrqK;N0D6Gn4${Vn{v*H-L3giNB6|s zMX~bnhXZl^r)iHG$3r@LB~MzecCMu(@&cBWCmm~Xlv-fN_1AJr=tX5s**(8JRx#;1 zdKAGU&Rgz1GtMTy=l1Ww~7k*#gB7+!jUdoxNEYqqYmdQ z!6u4xl-i~_E3$$X)0eY=obD3-1cY0eiere}EFhIP78_Sha`zjMiGs6y2ujYd(Podh zIXEti;v2r7z_W4EuOnkMWb;e?-##^5mCl5N0$Ak$>r)Bxfz9{iyk~QnKI#DOFkUG$*f1q$=3&#&!M&CS#X(1U7>&BuAu zsNkXd`aV??IwDFlv0kJj_E;SRe!Qp0?W5UVBgEwO8LKtOVQ>i|y3)TV=`3rCW;sE2K&T`o;k4Cy_@hpDLaLZ7T*^dB9(`BzQ5npDeqvqSHT;B6WZJEfU$!EF9h+pQT{g9Quz?1Dt65s8;yFey}w z2mqaU%4o6J%W2+voj(Lgs-9_KOd-ixjb3!FFyG6aqK%U??bPc8 zt4)rr_Oio-U^)qb{XK&b3a=vw2DPLwQY3ojoT_<;E@D>N0nt=45SvxrpYv^QqEDf5 zPX07P>QZSr%lr9s4K6kg)l}?4==TVV$pzTL2S1dLKNygc3cC7B!c^8zu<%9TI-Gi$ zdcPdP_8yf)m*zGzZ&2>o>;cC+{qmzG?flhENg2r1+jstITkJf5dd$#HB!B#?do=;D za4{?&_kZam)d$3({kKR~S8D)_{s$*s|3~8HgohfrP|K(@U!&m}Vlp~qh&f*)1_Uhr zi}tApMswf8$oo8-;Pc=;v?dKT^SVLreBzNGLRgU3*rrTJfQtO8g}OG)bd(uy_qDR9Dh3*s*e@!U>-vqnr6=lnH%5<^#a_(e5T&0puQ- z8@Em#`(hu4)chD9vx>%2G9e14wz-AIUZYwrhw|-3xbh=?}m2sT9hh z%a<@(YUx5XoKaF1i1!-9M$`yAbUzQ2gNm7!pIe-~xW*g%)p%wsAl7XU4npC^hkQF!^1u(lMw509SpT6=XT^JL9CRge zud`!5OQyUp-HLIx39Xl2OTlB{XnKEEK|ukQSr&Y|Slp1!{gn~v5w>oujdP`G)g|p@!31FO0SEt`8PSR(iQxGVM#Db{CwH}4L|OG;K!on zJ-c@Sfi8SI@0^7W!tGp^ z`+4Qg+fr&mts*sSX|G|r9s~EHt=67cXE2~o73hU;*o5L2G zcvcEv4+xj8`U5uQWcZdvh!KrbS~3n4NvP;e+$meVNAJ;E?eT8!qlOkwML;T^6bIe4 zV%YoshjnxVrKlt8E7$g7>DCF9QNA8jkAT;oh-!(DcLg=) zyZ-{GdQ6k-uqtPvY=seseD#YMDBqvQUH>~MIBvuh$K&_%nm_T2%-LR5ChTKdoUrxo zk{F^LQWWzl{!phHaS1{G6%($QsiHj~j(+A)vz0OwE44=YL zXwtoy`i?Hb;xips^D(ZG#I12?mSg-TJ6l%lu+?qGYsP$F#0Oi znE=ag38w~RGLI;YbNu!0Ex|YJCSnL>e4S~A=qj_z=BACxC1G!?!-$Ug_5|lyzRo6_ z#McqFU-kP)7sLQhjk&PoT=sx2<=D7ZEM$qm`9ab&c2jnzVc0||E^|$C!)Io8q08+1 zdH(~q)^qLDk4YH~c|Kfx@~sJ`Y3^rhVuAmWAWg6VApF0iWF{`klq*v#%vx=FxmZ{_1J$cCq-_T<2P|Be=A01PP+c^+rto7^>b(a9w60APQA_lFT#p8DFri{bhPBD;crONKOxj@ zsVUJc4dpA^GoF^9>-(9~Q|fF(+Vz#Zb!auz&}h&-ANBpFsuE$+Ouy$J@LN%7#R9m~ ze*<+-aNy@g^DA+NKk*L5nzJ!4-Tf6C&(t29fU&(u$N1tN4gpvEEtIISS@!IPLb%5#h{Bep5csF&m@S0cpueDLwV0RmIxdjY`!Ah}^@v-4n4(J~uhKZt zBYJSKgTAo#I<7m+@5OzyW|lb;-FA6Z^*&;K-{8sc8ucI&3ZDg+HshN#U|smnMIxU? z5UL_<;;3K)Zd<4ne+9x@@Nfsk3=f z?YyaCZ=;p;+RIfL-|T;LE=8O1Q^}q7=};sc42t*kNvSMgPG#^5&bmaI%-P|nyg#46 zNNiMZKE^Gf_~UGSCs+EdNR~K(Z^8TxB&R-lu8nV8B(tVa0elA%V&gC3`N8js)9Fg) z@xhFGuCth2tOYh{NVH$xW-2XK8`Ct!og21WrEJN-Hvj^d4PB+y&o~;(LW?8CcC!ZF zo!irsL<#osd#oRs7C9wnT7Y`MqjrZdpC^5k_*0c%)U5w6FgGr`&Gi36IXd@(otKj* zzEaOSiAWhYmG-)c&lqK8!xmX?6JNZYW!mY{!9f~b^NSuvyU!_{ecG;UUZBJ<09j3< zr9Je`LfgxCXK=C@#ihyo<^`sVFu7Yg^mj9}NGDLqk56w{DtKl4J#Zouw$~V}tVLW~ z*6a`A0Yn)Ai&L?a;SNpMd3;h@LNc9g_6e<~ z&?F9d6Yq&%TD7bpKv!-mm9)9%eB!{kJzUP+x7ekT>PhsqLD4(GHe%;EMI4Gaf?7>a zkvEh`rF$@^uka;xaJ>h5bQYGQ>N)ojoLndElwe@p9UBiHO+)1Ac#y;1mN_G2PT82b zu<8%?^pEj6qasHs+?hUgzC?|z`Y<@~;Q9PF?LW%gO^SQ}JzWyxc6o*>gMsp8k3uZ7 z|8sBm5uw3b>zvw9IfK(07;}xL7F)TA^ILQk6rH{(gUtcsFH^kHNT*A>aL%Rt7jU|g z$iI#N@TeM6UYjDX-TQX25x(v`@@j;xp_g~&5L1dV2E!Bx2U-I^o7lG&E0U4+>u>|L}<84b-LU6F63L;1f{ykINOO zyspqD_ZissYKo_(t6gnHzGPn=^l3`LO<=Uh?p=xv?r9RILatX%@%W!qkxI@IZ1CYO#r=)2~g7^Ggb@^Kh9J|K$`luVcCgT5i29;gb!0wghh z2FYn?xHI4XTS&gC9Pv69_yNkXwU=Nf@qYl8Ki(FJ$XAn04I#aRBiZ-j6J$ObmBVRc z2&Du0*_IH!>vDR;@zP5j`m%$vuuRVa!sok;%M)WKTZ|F1NtO#i=V(C7a%4RS}) zAWO!7s@k4d9;~)Jwm>_=b6^Dc7lxccS=lo59?zj+;USd4q1=s6r#Xj^Zq{mye-~JN zY6bX~YmyvO*Z(U3dtoRefkker-&3@;ja-7zI5<$oTLZi*f@eb4j{FgTcmfwngI>?B z5WxM-SXn^`F~3PT$bPL7k2i?7Ub<3Knuv(SG(40i$rgn}ZL>u79t3K}m>JoTOrRMj zTy{Su!G5YjEu>*ff=+SewQJ~wY%m1>*XF0N%h-h9rCa>YpH8B6OBiA;I-UTz&!`@n zoQVE7#PK+#fKm3LuvAD!O;ZSuMr6@M`wSf! zSW!y7O&A{i0AqN1?>L$50(w02@+bwbUV(ucnD$qwBFAW@5>rN%XGoz)8%Z-2)M?a( z{ux9G&&to?0})wi&%~Gu*nHG{9wL|d4;Z``VB0I?LEoqPEly*zM<__In(u^mzLB4p zyS-!I?S86^!j6Q1PQ#&_mt{9mep*lvi+0ARzEFACX{J|&&iC38dk5<*p7z2K(%F1* z|L~Tyk3WA?VY)}-v3e4oh01cGYuHnx)d5#a23j%vwoeCU>+XrRo>|M8P_?Jc=& zq5~X*GGiKqfcJ#+Ir6AGd6MrcD{q}5%l7>Ven||eEk?Bqesc}3dT*A-MNal zVSZRG<_HE;=y|^5QwofKxro$4?q^K%CVrBqyZnI%RqdGe2GE(ftuF~PtY(zR$-Y1- zcfc|4?QiBHARMGPb&n6j!_TxuiS>Hg^(DwSBOfA0N(*WKFGGn~RO=+U^H2Z&4WfuP zrKo*L08h`z2PLTl!b%v09fP|kDwx`gnzBchQx{^5-h7lb^5xlqZp0>B%2Q^fd6@?$ zah$05TUpHv>GD`FM%%bs+f=gC@PT;GY)I*FjDsJZ(lwK=PAh6a7`wd6;+vJysn9By zYLU#=nBZq~^^bkdr9@3&w}uLsZuQ#MBS+Nz3HV_@QgZVSu;Sv5FCP?Dk^1&v%7}eu zO&l3Uc%=|p_TBoM4YuO%M%ni2=0?j3Q~7q^lt&SI6Z1B)hy!_wjVZcM$ngQH z|AWKypFb2qiTlRJ$c{YkqVLv~V`GdX*k=~lTn^R~RSZt;me zJCu88k~_!k=lN)zMZbmhSGHoxk!Gj$zKPNXXPntI&^9WGDlH=;ausB#bdfQM1sE+r zJ(Xbx6GHl-!faRKKD{c;d?d;xf zokrTMBLeoB;-PY@;j`+&M3egCm-^Yyp^r`-m*vL#g}2*~F1AVKSDjn)lbkHH^e-KK zV?_8kFYI5~Ca?@#?v>cF2a7pYq}4nRmzL)cP%wbyE^hruX4W`7TslcHZci7dnUCEmM$aROE}gGVykdXYfpXR{ zj}oy2AuqP-A11PR=8AW!eN>cX=vV*7vyi;=!E2^Q%PQ_aU!Fx#0PE&!3cE}E72N3b zB39|lV`!URlcK1A;d!@s&h453{rL$s?wf!H^slW%@l^r~Lt;S=)*CNV#&?oSn!m70Y- za*%fZ&<7d%=q(~!!gLT?@RuV!6#Ypf08W(bof0W&4H5ARW78#K;3JcniqU5rDG5#J zbc9@0b{Mr$Z%s1q6A(ksy|R?7CJj*w-#z^tuZpyI@*mc(=M6n`#+n>KZ_-`-{Vv^G z1#DiuOLOnJS0R0d2Bw#VzjLKC;y(Bs5cjVU7k>RXZ6_<|WfTuFzN z_$Bi~f0J-s&_=KJisP28DNUtW*@%KLMTbq;p0Q7Q<#hKlGDyXe(Saryh|D2q4+-#f znC84!-Y>CV(54C@zFGCVLTbP|tM>m`yy@2aN|O3SnjP7bz{uq&40E=b!xIpScr z-dZkB5zo&=JfNfN5BlUkbT5(|`T#q{>ZyhGhqojN!1sJ4Mg1_5{aTQ2!|jjJ!;TV+ zToO8`9U2Uk0&4tiV$&8sw?77t4EpHD<&*;ghiOgN)Ds;w1 zM2{V(#KR>4-5)Gk+3)F%COFZH!QF<`mtYZioa)k1?Ct9+{ZTf6hF= z+_m&-Ye|ee_OSNroN_FX7D|4c+L6(4?)W)z`ASHQ#62d*RY=_)JvZTrjgoEb%dIZgPSPoSo?U*ae(}faXD& zH>Af}0QC)0>)J{x1=5Ilw4X<;%LJFhy?P}}Nu`BFA>jnCLv$1?Mydl%S_?wk_)6l&w zJ+9`_f$cAZep&`+!BPibD^VA*rlB_*zPBmGIg?yAxH^%Jc9R|l_}U|CH7(ipUVS^I zt66`e@%u&5bI9+3+83bWFqWJcuPG^g|SdhlJxUQ>B$pnyCqomx0Xg?J1lsuC%WeX}dHP{QG-<9=72R}_| zx+t}d=;=Z^p&I2-?nbEnyG&V&4adr8!LigE?~%^wBO<7q=P;WSy``}b^i@bx8u$5l zcD!mKOH>Z-khP!M&-1PrA>HXz{*mGN&9J?*)>as@_y~!5e=zksFC}R+30gTnC)nh( z7T-SwAjD`1tmiwzyj9j@5V3)kw~5?J1}c-ZJQTbxkG{hb2}Z0GMT=xC__ILA4i2R( z8a!ef)7`DU9{4u2A>VQfEo3$ZRPVfu!#Rb0c&rXUzJjEh0bR9&Yhv9gbt(Kx zgz}LaCOm2G*$wqW`LqyEaj&DtxHOXD?gHpdFG~YLvbZMAoLP#>_xbO+Od_tBrO|t< z$^Xg_K;+*3D zZBOM42+J9+1zthrRWIukKgCf4V5RfcgI+sa8yA#`HSSu}NyC?9>J6UXG-YAb;P6qW z>&vG^b%24yUajCj5e7Ss&|%q4upU zbj*4mR?Q{ZLEB@6EkzAX;6F0rCR_i9f1tmuz7M?t&_u)7Eh}x2V%=-1BU(*GhOJS$ zlelIzb@Bmt{~0@;v|=9lreHAqTcMkAr_YbaEhn zGnQ}=^Q9#bqJU$6jhNvz_le)^?_E9l`442AyLz$$+9>SuPBY690Yk!-QmW(t-TM## zP`HQhKJ8{Xd@-SnWFGs(b#v&!K{xpyoi7vFGNMLU!l$z&cc(eyN|7~vmi-K8)LRQhujOM)=u)65R1$$#r0*AG5O2hS#5&`@7Eh$B&R%S+myM&n?f);QEbivMU_`C+ zFG!%xQ3Sc;Ev#0CjX{RU_Tiz^tXFF-WxQy*y@r$MT+>1*M!P_}&#RrH{EKHIJ48-* zEj$JfGXa93-VtQRES)J|^CAGA)=W$$Lw*H1y6$y=fegCq6#8l}9Bc;(?V( zRr)KaqVvJ)Wc1e1S9uVdiCU1#kZLR!0s%cn)9(YTSuEfd(0Ke@R`zoANyzz}L2xxc z4*M0h@^p0NaS5{{=-H26od)y^G#RG*Eq*0vOEQn-=G|zaL=S9|}kJ$m(Mc&{j zun$Vy)-VqQEkosp@%fAj=LVddKFa1in3lYB_*fB!2OoML&}Xv#K?xmaggD=$x=Snz zdWMe<$9096kIV+rK~b#zE)$rEXM@g(Cmk_+S`rLgorl7oxqOw8 zdE^EQymj_{__XJkp%2CZE}QY-KK`>g!xi&N1Lrw+#;M1~%tf+!8oHq@r5fxB%!qNu z?m`+1vH$fCbX4l3e>Sgyy5%3gk`E64leg&J^TJr!ox)m!ulpwD-6^#9Sl(CL1GP1O zlTbVzzn9%`DL}ujqd0RJ$s!<{QO|kh;&|Ah?n^23epga-A^M4%(Xj*A4B)G6+3&+B zWTv5p%Iucq#~$jYYIMsws&#B~n`h4jyx<=2PD(MDA1%Fb4=y1qiS=t2^jSzHMCkfy z_kBIFk{d>7^SVOUx7)sTR_@yTb}o~ zGuJtRN~^APJnE4fKqAw2j?v(nbiQ?Ft*3Z8%Z}VnN`0GbhD&$J<)+tuEo_B8-Urzt zI*zJ!5aPa#ZXLJl=Lu*-998$B>oW`fg8@BOpt&=VqnntNdSS*!5ADLjyk1%ftvOz2 zC63%hE%S`>dpL{Hfd3=?RU5t-EDFVjv8K6*(~q{aQ~yQ>enm4+zl_!LxwL(aW8L<^ zN`-;vn82=GJegjepX0dZc94|FA1&;$0ny*2HYM|`ExQR9uO2iWmx0-pGleQ1&(@L7 zCuzTZo2PV8|HYt?y!P8wEKX1mi)Wb9-v70&W}NioW4UiaaZyL;hBwh=`efHeinJInjq~y! zYQ*!(9C!^ZhfuY2WQWPW+Ogz4C*mTMZL{5Ai}6^}6tB3(w6qn`JQBfhp?hY-9|yLFEl~*Q1AKNqe5d%5S1CE5Y9}UEO6v5NZ=UXu)6e z5hyh0#s{N-m0S@}*QJ6en46eX0(^SLPpr%|qfOvnR@5!?{g3=6L7|V*D4#tTy7WcE z7PDl(PT{AoVif>i4rH>x_Ap*t5;RyEAp8kL)6fP!7mT?_o_UzqE zJ%__*XoJiEY^Bd(@6wMu>HAKr{a%uiveaQwo*Hwp@&pCM!a4)gznL;OI)k=+_Zk1Rpuy=+@(NGcLj#EYc0_PXUH{RvUd-UK?l?g~8FD^%GYPZRJo=4@L6IB(BX(TZ^3Fo#2_i{^6$)Wy{ zRU1()^<)yvj~c%S$78%4wfr|LI)#N;CK;!8H>ncyVQD2scN6;cYAgQAJBlv>NSG6I zcfW{4*!Z3QN3Y}2t)^-(>+@pxs_zt~9)jBa9B9Z4X5G7hYuzte`v3*Y5@Kk8j<{%1 zLmS{qKGaGXZQXl3PaQgFfi9_)7WHL6&gYYt@s86MZzZXQWkWvue9?)I&$)|JWTiu? zfnRIRuT_b)$Zpa0odT;Q{3$6X#p<2Uw9D(DAqUiL?7KBWLwpJd$7p-C)NLWVxHIip zOL*QtY<6V~!{nyusa8#e17CVXgxh`*exmTB&CUPBBm^iP~{gD_C$R1*Xw82-+PoAxnTww5bingatm zYpiLqtJ^)zp(<>bE$)*fYG>L2CkCM$c{eQ2SYdh(3!VQAmyiR%on8$Z8*;>jr1rx! ze_d6=B#ksWL941JY|=Za)y084>{WtlHu#f`0@#AoTds52M0S1cA<*8LGB@zA@&e`O z#JNwpl#uWnBvlOuaTC~9Oe1e~Npy1way^Be)0`T<7|S8&HOi1ef2gCRT%P!2ocE2*r?&U>)pb`@LFAd7+5>K|#=6nEf?z^(Ean#PUl&jhl!wKB^HFn? z*;dRY?`yuzYj!>BFoUnW#@P3n|A`Ki`OB;5D; zzUAfgb&SPb9PywTWPBbCO~YjO#szhlk5H!q(dLuQKmGzVQ5qmOzD-<3 z(x(W^z|i9u_UC2#c+-fjKOe+P{HaMdq~kW(ioJV@`~BzzaG#<$t>F@t+x153=lUv& zkGJm%$=BClqB;ySNfV-_GjcQ?t>1w^N0+l`J7G4)rvu)9HXppwrZsm zEUIxjLlmjLs3n62_Ju_afHSsNkL(Ea0=hRm*j_!AGjoyh$V$ zNoNHG`N*^Bc89nrsgQgU9G6U|#uu6sL?iyMoFE6&-5f$p=>3I<(}m% zgOWh*6CALf+Uq8;ZD_YUMJENZ-M^O0)pcaj5-`Hem^1gDGCXw&*-yg)NIUPn(?0yz(XhQK#gDG=dHZjDqOV%i$=`sL4(OttXj|KTER*t6G@tR zC~-GfU5`WcGZp4b#=W1n?ujJ0NT?L;g>%q;AxrNGFbTj`G$C~S=1()1_}mF3ryI5r z1zyTGG@Al4QwvS2a3_y^?kg7-rEYpDcJBkWv!4pzYAo5&v+>}K#<*zNNr6%)=^s)Z zH#7zin~Mb(Z}t4%RvybmjE(bi=B9fp1_O^-J38j0E8v`+N6B#($mi)W&q+z62vShc zZa6>1?!2p1dbN`y}W<}YJ@~sq_f9w zbZRacCytS?U$gpKdk1-d%!oJyO!_~OTsUroWoe}6V3AL=uspR+b46QI@3_X_t46@S z9WWx}=1$uf_0vu3s#ksRkK&K0#v* zfE9b_EsSxJSXDz092UQH=_(D4-*X`2)wZ$RIyG01t_-P{tVwcL;bg=#>j~w_Ez=)p z-u5iC*D)#S0x&zWse1pBMG;L2YI@r1f5^dPSV9Apl>9N9%!W5%y549bM~H`NG$PL2 zi^)zH<2?<}*?GY5DMmxak5e3R%_2K*rDLIsyO;Ci7+D#C&lFl+S0)vJ`4*othE+n5 z=3#A7nQ4~wAm}36dTY+&pJhX$o&-#25w7qZ?gcwPX;0O)$3gP@&AM5r_*%tU{waB> z!mLv^&|bfHoNbFH0Z+Pl_$HZiJh{H~-qGCe240U*P}n(9q@JNIF_0MN;b^LDGWH?1 z!c**DEo8W&cr|&}x4TBSX!Pdan*ixUqndQxEg)dOR4cTBjPKnb`mVchk{wfBjI6V0Y@uGdF9_>Jfd3u3{WZ1d2Xp+1MOw<&{mGZn_zboMgC0B`+9 zrF|@&k~396|`*B1~e`9SpvSkkjgS zdB}8~KDQ!gx@+cVIA<$dd0v&FQqAFZ_`U8eR;~9CRZG%s!?ePluA{utQ}%$t=_yv3 zXG-vN{e?YLX8^4X-fmquInnf9UEl5vGNXGBfsVciWb_G~BIs^$+uk{NrDZ?b(lp6l z8=W`S(J8cC(b|)nM#4zJEx`mVgoHwJ(Ts4(!&cH?gD!~EG8^-qyi-U{v;ERsH#WU_ zVr|l_{4J9}Eo)Q=t5Y&=)h>m(h-D^omsoKvALTJ+1^&8r<-@ZvvZ53pxN3yoZb+bB#If0{lyiT%dtht5YGptavIT_ zm}7;F%L{ktKO%Ktr@)0j{nTl=f`dmviUqpjq4o_#C%USR)_s(V4_%3zmOSEnXxx_Q z1Z3R0Sl>iL8@N4eZuC&Li`qA!a^t0HDL05g6gzy@lTT%@-;oqW- zQEEidZ=6tnoj&;eZA_`gLq4iedJwCjXw)hkdA2V@CO(nH0ANlLMCpr#a_qYGmuawK%5Bl51wlfrAqInFBSTY#xg++c6n9nbXim2Onh31|M*pOoq z)8Ky(ec3TUK$+?wm{xwIniaGn0E|x0ye|v-%GfeMyqG(yJnuQ0Z@L7YtW4U@mwxqW z@q_qQGq2$pzN&=&M09X7>~CXK!;b0+pzcHxKWscJ_hqHzr6t(*C655K5Bv0EfgO_YTFn4`fE!=q^>6W^>A|q-v^D#*GQVC_>22rb5e+qq# zy13jGwG>vzaYjFZmbcCRlz1^F+4O*ek%t|btj`nY(EmB^S175W3y)#mWbwcRZ7}*R zahLuEcQuv?M@*zuZCq0mOAO<3smjvt@6{)m7rQ;|p=laiTeMyygJAt~vYAog>Jbtp zE43OVm$g%T%fio=zImeH=)P81Xjc?}RSN0_s?%K6+RCubJ`Y#tTM(!3?5RGyX`vc> z;qngmP7Prd0TlUbpp6I=h%l$YZwEIe%5UW8d2Z@ie=wM1+=^w zwC9Fy;ov>^+ze}K}`1=VZ3S5 zDs$~yzWU*o-pedb3_jXyB8=v*DbGN0%Tx&bV|CDeTNz<+*WfqqVSMclhvzc%HQpgQ z;@~viny6)y%MveG%A-~Bi9aNdp)JK`?p3BU*r44cV@;22#cy!-N>`UizC5BUw^e>r z#|MS1ZwPSBw1`D#MMF{r-Ggw3u~n^+==AK{7h4n?`s{`Dtk$=3Z0kNcSzb=WrbbXd z^$pZdb)1&H-R~kq@jyvjRqrhbt2-|)Z6VSbJR#SE>deC8L6$S_`6a+KDuD7~%Zx;; zps4eKKADLhSjjhH$aQ9qu#89}5?q8F8gHLm1LfdlS&FpWf|bJEUQQg6?I!)x`0)F&2I} zBURFaAAcpJR~r@R5q+oaLu@&ep zF-32T2@TgzE%s|d)l^L=m1UGA7~cbgG^KZ5k*O6ZmURPjXSlrvMw}3IiV7k);X=P7 z@=+^fX(Pio?UcxzdzO51!)TJYVv=W=s`Q=sa-`EEE$_Q$SS0_Ff!6VkvD6HoGtsZl z`pgmekz;jp0NOz!HL+>Z7 zqfRl5z`!)1$L$;BDioBSp6pXix$&bN7pfY#R`guE{VZ>*?cieGaHi`R=u3MQ{@5 z5slw+*hSPtnfKwL=Ojd3*%6pM(>-ujcl^x`PS$FgK+Ew#?JXO>Af7_uJWikPOE=@2Ze?AlR6 zz2pIBxG^?X4S4K1-wMN6Oz$PNyK3)-zi1Xh~e5mMScf6DUp*DjF{D8vkCqVg#b}z*c~!JC_wsLqsK}L02N3D-w?To9fLXYc z@Z)I_3v42A?&AZRvR2Bd0*W;xbI-7@J$oNEsF+30SXG66*ch+RXQ@_ zxa{Ykgm7X2xC z6d~u~aUc5PXUsA$I%?tCM z{T$djmiK)RsV2(qM_THHf_tV~q9><|6)oSuw;iKZCZI%UkL9~#4w_Wwv`h|`>u?9I zxI0e+g2tiPZIwk_=R8`002@vm18#M-MKXAbF2gyNWx5DXZ6hBuugQ-}vm-K^N4U59 zdcxMrZDE_#8!_BMn#R8Ec#K~Jz~38VosRimBrl>)kl57Mg|dkL*mPig!vwm2;m!_<+YGiJgP!G1Cx z_cE~9)$QxN5@XY)J8J{nDL58&-ln8>Rifn{?BZ(*_lW>ogZmbES=YgBv~ckK*8Fzp zkOL6rKq&YP^&WZ#Bgz z2YpvqP16>w!hHr=WEI+#9^H;}mVx^P$xDg|6CyJj_fJ_ksSqZ|@rUsInXiT+26w`c z<%T-wBmzkTtvaJ4zA2!mom-*=jh>ZO1?aj3QID!2n2F{qA64zKM|t88 z$y7NL-t(gq4NUhwm`c5gVK52xpm<_{ES)Yhf8+$sD|o$YjrUv(Q2tOo7>h#v zyqt97xlM7rR&R#2VFmS`W(X}}8E~nTg)<(h(#?qWcu$DIeu&qaEVS`1j-XRKBnWODtJvqIE;HtFs1Eq%wq>B3TEC4-OWuNF zW$eB^!&~d*J%)L#x0o~<`o*@_{o&R`c1wL_;&B;5<|Yv1{LW?`N6O=SOU=zgl?%p% z&ZQ-lO}^HFiJ>qtHE1iNgGX+EwLgTip!cnS&+jVXo~d3o*D-@XXp=?`rDmbI=(MW6 zZo+w0r%slshuWw89YO=g5+~4YVDXC=^q_}o@KErf48e=KVz9cJ#z^h^@M$iRe@=jIw`LD;o^E<-u%h$_}8*)v?+qY&_el`kIN00 zZSd1Clz5c5wgV8qciC9tkhGb0EbHgc?y0KjZThjMvg}rGd`NM-CqBJ4#>CvEHD*qw z1c>a>c`Au|q&}BnV6=Is{($vhkjOoxc0t1N@kUbTjy8D1+;vUB?bYG3Xi0e`Qn_9R zsBPVS`q04(mFuCGGn^ zUwpg(LO`Tjo;h!tv294Z&-K~%SV{AVVRG^q)=mmd6n`_nn?_-KHmx?su|A0#>>mJs z^l+jf?hrhH#y}Z#Y+=~JKT(}Z7y2}hw@Qw+S+}%N5)F-Gss;3$q^MW}^|-KiHwWnz z`U_NQs8?DAh5P4}M&LrzDrk}_Y)V+vd7P~n8w8oN+0f-9ntG1l`BdZjRxyZ$^BkRQ|h`kVUE;C6rgXP)k-268c@RoMw2IiYU*y1llBDN8G}>kr1w?A_Ui{pXn1Z z2FK}7p>Fo_b}k&J?UgvaAI4ya_qd^~&2&x!7RPFM+|+8`TC=aMI_pa>AkHnjom z)^B)2OY=flnLdFDhhncagEw+wU`EYh=-~dlj0nA?Vk%BY4#Fh`z*5*}sptRbPP}NW zpph#LKEcsfQK_)KU9=0k^x~qi=z}k!cdJd(DS2bX`cz9!uw@-ND=K7zod)nCGw7Rg z0_cbs8mB?(C@y+D8X2GwG>~aYlQ}{8!=Cqs*rm=gwsxLP4Fc$lsN&uJjGn6lw3?V% z&Tn(+`BOdEs5LCe(Um>iKkzwC+L#@7R}Vr@A&P0KOE*AB7|-TEA_$%;XLhNzw_9M| z7C682Ob?*5jzE~_?5m>8E%UMt*l?B?WeM00ocH#-T)r5%@+9M9zW;oiu{Zl=|C+e< zXane`x=dtVfHL52)k;-yKoqTq-zXr&j{3xz$ui1Z>Wm@%Q|`@3T_6OP zuWTP-=c3`QoOL4oZAvvkvt|QAH;w`yvGDwjF1~lG-|PuevIF~V=r8ES#s;=54wcP( ztxaxjUwFTMU+ULkkj6|mFqd?<*sqt^f}$`tz$g}JZwMak!HF^@*#`#1WK~(g9b+01 zFjlr#3+{fW-QS`zaY015WLmAaHRu6gG;O+gSM>hlGgUg3V$9tX^h(d;WhvHJ$1am7 z1Zh>g2)tf7)q<@;V6=FiNy4HwDj&?!prxShy1QRjD;k|8Y(!FF$03X}%!^+pfP6`G zkq+Z;kQFVT=8zWD=$Ci7ZWj?7HHY>7*DJYHqsFu_A0OW!bOBQSl6PcU{Uxm}o8hxY zE0^pRz1`N!os`wE00jbXB^|M&U3&SGm#(NJLBQXgYG15N{MJ^ z2HO>81;Zv@b@AEjej6|LRTf+ZqU9ljN~W|xM%5G8%ddFLZP#uXA;KG{iFv_3hwrfY za84ZdHgBZ5t}-DnF`Pnk6jZMWQ+o2M*RCr4>MriE^;vINpy-c`Q93$$@fT-&%gm%RNLy-a`VFImR?*m69H6(Ew4ZU0-#^|q=2 zO5jHgr8>Pijby@nMScnK4%Jz-{Rkh3<|PrblnI=Ic&RqZG!E7-(6FN#$NMsfSxUDv zbl{q@u-tf38zJWq?%2s25tMfU3nh%Z#-~*5&7}?zlQIjZd5&~B%{d|glo)`=9fH4o z1zmjbQW7^=ueic{pqnHcN=c=fKBz_*!-DfaeCxkpXetSz9<|IFJO1hz6wt+nJvt!v zmTip9%&s36-C}4mO2>TZ;wKwq<72dgrKGY6AViw!S42x4h%jm<9M24529p?z+{^pp@+e(Mk~=&P_Cyy0ws1YRy)6Zm;;`5VW5o^f1z z28!e6%{ImaN=b+KHX+7t&V29}YAqY?6La`=<%@!ueT`3O+uK%b;~MtX%}Ah!Q7_51 zr0<8XZ4T>7C&YhnGH0IQr9oB}EftL?XPHblwRg~*qy*f=CZpo&gKlLgqAw?hU~8P* zK%|T-GZ6E&EBk(DFS5;Fg13z7G!`}jY`s)RN=A1_%cECD@2yZQtT=Xog?rnF!F!BD z9?80iJzjc$MF0;vVCVJKG07uT1=zC%{zJXx@P?Np+M9pcU}0khyH;}T52)T9&!oFz zUm8X`&uTRSa*`Kdf(wmD1bf}N47}#TSg(WwIk9=b>%Tq-Vyn!18^`EJp~gnHEM{ZF zli77{^E_(Px}P$?iRn11xK(r9KkC3%pjvnH3CIa}K+->gWtGPZ2YGZM(}?0MCL6t-j54D? zW&|->^RJ1uCj+?&leM?A6QU9?e=^zKlrE#*A_=@7_Ru5UNa+Tzr<#YftdO}OZ1lYM zoWr^;kf2t(x*1jHEigei5N-;HdJ64G9o&i}DVO;a~{fPxI=l)$7KLRd|s=)5f{Z^q?D5A87=EOakmwEMU|jgIV$-#{0=Q|UAV%|q(=AE|G@*&wtl!K5~Oax!uY zS$+C-b^4PubF@hAR2Tj5MDG3hbQRXxCbAT+ii+nd3(jS3=!LnPOO5b~Cc{28^(7CI zXwbZS5~_|1*&<6obB=9vU*I;u#Y&}}h-~U(+Y1${9k^06g7+Gy4Zr$n=o3@F(9fgH z;{LRgBwel~6TEjYR^00C{JB*wiwh}*wO3AZSgcFjc|#cT>k2L+NCP(8>AItoRWNU0 z9#=ExykcEk=3X}OI2icuwaN$bKdhg#2f%~%^!N`FRnzl&ekyH(***ie@R=xbmKe6# z_cW#ElTn?mVeIyR=n>};t&Al0im-?RlMdO+Fd1v5R&m>xO`l`XVxq0O$V<69+5C~x#K50y%T2yG2U8{{mxQf)8 zj*fSY%)0FkN3P_J$o1(CLZr(&Q{OXe(!`a&vGZR46meJJrj)u7x5}Lmd&}q+}Hjpj3?&zLjs z%N9;}cR|hb?;Zl81lVRTLa`fczf*oHIq{XJt1y8j!!%%#l6idwpT5Xi&6PP=RDK*v zuaR}R+o7^X*@?rM?@F&BiQNac+r&p6qPW>glv8n;$V-;dK>Krpv?-OfWW@$Y>kUBR zn)nj{jIED#kkKaC*$P1+dl9u86v_tOYBItOU~NSRQF)YWM zz!0!q3TH?e#%9>N*>3jGmkAk)vE}zrM{7Dhh zWp9N2l%U9jwgO?j%TpsPc?i0U18p7~VOPCCU5JYebwT77MH>O0;fYl-0JKmvP23Sen8m zIQ8Lb4#~QmY!lp>c1!EFAsd_ibeGR2d64?W7wg6G5<*d-mv^xHi`2zOXagx`NF|el zg3uLm|2-;6CE1zZ&MN@eGJTO?*P`03pi_$8640`_{%ew+qAPit$Bkz4@I(!tynY%x zJg}q~1Xh^QNxWidd{=gtl00tNY4OF)L7(&K@u4eI$VYz}Nw^JtFB-Tf{196Othwq8oLFMS*e{Y!n57CVngzEKgO1>pl!Cp_f(EQ!7oL|_K2)*&u zota&J@|!27TqO{40}qoMVq=jR(nkmct<8Je$c(6rw7`JrjklXG>D95DFhM}en;!Fi z4;GE7FL&ll!QO-8M746#d5C<1?N|jLW0RmGi7E%TIjlAn%&EVbKD=;ofwlD!ChnNd z*9=;5*b+Hs@jF~dX7tt;kqTG;Y+>~*b$g_ye*5;-X=+ZqI++vB4VHKg=!rYif%>Wt zO@iVABaTrq=%~;}nc8&T{u|5y5j0jVm{_)#ZPRdBa;JoS>N#^*;&Gy`nRv0sq>2On z0`ANR$lTW-vD`0KT>hRQ){3L2v33%!o;fX!XDap29&;GqAvoBku-tGP+C=`y<|tvK zk!ZPBkH{xK^)uZjUg=UUrcQkUs(KT~eu8U(+5t~*78fkf_?H{k5zYq2Jfh=d&C{*Y zKkuN$vCoa4UySHc#%VVD^j6! z3ba8TO)DW+h$0Jj~N;KPL*G9`qO|Zm5~LBRFn*E9GD;V z3@An0tM>~KmzBV|x`P$#?~zvKdR2zheV_D~{jz~%O~iE-%jIS)Q9OMWT%Bz;Cgtla zsaZUU4k}T|(QIiVj|q1SIN?nW*2c5#!+Ix!rLgmhOidYv#6z@;oZRiEIfk<&#xx9< zgs-8|6FOr{5!u#XYmLYFL18cpF}4O`cE&~%7c<-UpCVtV^GsIGRwKcz@h{!p+)10W zciEpV^vB0udE$5R+g!^G@;(&N+luZq9^!K)z(SICnYb)e{Zy-V+6<;lY@>(HEFqkP zaaC9@wl|B2#31AuM4op1ldG#;>R&F=QV6njNEZIZR&dRc^cYrSG)TfbQjz=_t&xDi zSe9vn*De;cbye0yv}o&}@S1Y!O5|!Ubb^R7!2_{XVtn%1lXN;S$VGm#h0P4A$(5j8 zGJws47?5gsen1E`RD)KoxaZrnI}>O}tmsopp}bU>!Q>*K-U_O!GxY`q?otWKxb9J` z7Hy}M5p&nqaH`yi3gX?oFKV1b@E9b|VSE;%+k_o3^dq}F#&}0FOn3C;rFFBSvyzbA z3SP-Cb zCg!wSBe3$1!?@u=Z%3dd?dopnG+@c8<@qs8*mgL-ljR$&Cw&vTme5FUH{hwr@Z z%u1kfgu~nRB@8F>T|mFIi9o#eX-mw-cnDl&T>9` zSYMH0F|P?jJSVQ5x^OEh7=6@P4;tBZT3QjmKUiK$JMea%U7XlrG*0uWeB}`2#30P@ z#|N%2O{Ex&LQNo-lANJc6p87_I-SMs&eKcG;0PJ79AU*#A}j;EhF2 zzCnBr>x01A$ivNG8i-v9{XX*;Z9s-@{|(imxR{NqZ_{@NbHZBy62=uCrze^gPH z0~2`S%NWdF;C#hWapzST51z?|6IIYU6QV^AaJl`reRm@rstGHRt)vly-#8%ki zBCj4N+@`^1BBthXK4=f$IirrP#>bKmV~qZ;qb2k46f7l}j%icCGbGcD5G|r~EKt^N zn)wvhKDICAwdu5`cb=-@?=}=nHyk9g*j!>@VB|45i%T}};~75t=Mb8qrg6kYiZ;^X zQow8xRZv!!P4ei)S?vnC<|SJJ3eYYmJh1r#Alr~YF0b&mss<;}|K^vkR8V|>Q=6}T zbjcQudUNQ{U0U-x#(QxAZ-DG@-giI7n~r~F0iZ^)`~yoMHASYXK*>A0%ogXh7zvs; zU<))!oh8r-hKi4o&+)huz{`#9`gt0~268?=8_kcev@XRKD$c55V0@w{Vp<+7p#edL6?!o#KqOx?#pUwo!*g3ezE zQ${6Wo8qlc{XG0RhyHZ``b=wtUxUiwmCRw^5@G;2e0Rn(ag*YC0R7{`3;eg_ecz$XWixJ0K5TqI$9D1^xi{6oq&^7r=Eq!gVXKqBCt*(n379^*@Yp^_l%@sWu}s? zs#hYaCKBuXC=X`U#5#+Kt6)H-3dy4XkrO+)P{tY;k*twh9vd_hH2+>>{tfZnL8UlJ zNt{Xxk>-x+h*^R|a=u)tZQ5$?rR^Q34oU_6k-a5yz*dvbM2$8J;)#_3PJ7?Qx|XRF zhwBHLH;RANTRpmDV(OD`MNd8dP#`iph;JadGk4vWMs)89@->b^DTrG+U!(ibezy)# z#s3aXe6oBL#SvlF8k@j5HxAur}d5VsAnlJ%UFSpc=tax$V*;|Fg8gMRL zBHjOvao@t;>olc59>(oNCv@m$ydG7U=ynwA)z!i-77m?#3MT!>BJ|h zROPKY8*#&1^u6l;BbQx@`?n;JCR@8j_4G(ew z3lK(atIhYeA*oaoIvkL*s^oIYT|oybo-rD$y9E$mqsQ=mcX*?Oe^zks>M0M#tr0)nG$eXA zm=`3I?#K3cdr($V2O1hAx>H?a>%!X9OJsaU0_Io*gm#n!&imyRMfZV&#$ZI8y>$%0 z97ae?Wvz}?%%Qlg-D_F}+h=hXwd;Jc(m#nVlE&mu_qr9(oay&N#?=nkYRS^W>_r~E z+sh{%Gwa)6$7oJn+xC$`7z=JF4=Y(6aY$(+op-5_TE;FS&UfBXdh+!Z-d@C$vruRu zJpd9i8?6cK2DnCr(5HoO)UG_Za_I+=5hCjDncoqn&2zqdQ#Us@_1)Ml8euQIqW%Rz z9A`~rHQ5*p#zDUz&ocB>-4O+44`m6dS3dJ(@QFgm()EYIF!Y(9Z8^jSw*)SdtZC|< zzm>)nfGza(79K0bxGBg+HuvmcmbV3;__xpEpD$I*jpShqw?w|bRdkVO@J{dsh-9{) zu;1qG#px)?2G|Gk_vWNt0uNfo-X!!xPn)=)WV3TSwN+K|QLCQPxVi%G-4PcT87Pb8 zmOZ$*l+WQn>8rU}`Ux#p`oHLFY5UMQnXq&(W|R5542=vRdEvM8wx)K7ItkeZ-Ly%7 zsM?Ii)w)1TTv0sQC6vn+H!PcN%I~MPrFyBs0=WJUs=Ngih>`wo69NZ~f|-UBv)rg& z2L%6D6s+N2j_rRE+5dEGYmr0QkH0^wynh_q6q`T6uTwG4vS+vUi;TX@RR*U3O}_eB zEAI|mK|U=_C{UU-=_k{#)qlu9J$^-cphKcVL9k#H3cf9g15dJ9nb7w#!pxz$iS7E2 zA<@D$C*8OGj0XEa)wfOvb505%Eb5()0}c+vN@T;moB%eX@K8zWa<7#sW~L&ncHgkI1urDzOKc(X?)om#kNSgA!)zZ&@8xk zrZ-MjMCjy*qf>at;a%lUdHLe5;4&0QLr%C?#PK7UAT&1mN4NEKr}KmW&;02(LBFOY zQGTz;-jp%l8DzdzG_9x4MMl|odvjtBcdrh>VV;X&H@e#Glf=60?0UTmS>H5=e%d! zWj-zN5tmd{#vXUyXua}pkB9<}{kRF7u?;I}AaRqc|CM?|rlM!?AsR~*2f@Yf-J^%1 z&VrE3eFa@F!^EoltFm8f01%)H0~=#|KCv}?Hh)B_sUKhxEmf_=EY zPxAzZ5KgwaN;e2yp$koc15rnCH>f7vO*1Gw^G@%zJ*=&d`_@>YY*G-rgG;4`s;>g- zhGN|=g*JT+dUz$LW84^Thd6#5OhOnx(Hl1uJ4UTca3$>F9RP|1zUB#9E+=z5xjNj_ z#M4@*kXY=5yEw`VGPYE+-Z`q1TMaWaSHbs$dR2haMNH?w}4-W&5f>l0QWXp1!xFq8o!E&yQ4(`F7`<;>^%gnlPI`OEm#@CCM*tT`y6(Iz7x8SY` z4o#5Y52w_Asl1_&=9%?t{(`st%^c+VN2R@-!NVuj+hO? z7xYuRKue{94A+C7u-;#w#|`HaAl7eV@)CXZJ6#X+eXqEH5! zV85_U8(LPu0jAHycYSpsXdyv%hUTSu4w^JLKI@3oAN9jYFy8Pz{s*m{=&}@9?3lf0 zUt1=-*KxBu|MJbTj_XQ!z3JRuZge$^YmSW>5`TH#P|-Lpi(@{lsuq))*JoE!FmlZ1 zP)CN=JWn&S^PYnb6j9rF@`JUjL_2EcHX5fQaTDgE_-uf1uOAOfzstF)OBia9I)8#A z)OWQ)-nVh~WelTu@b~76;P@(VnThTy4+F}KP0BN^DSa#D&SEVUN)*!?b?at&Lx-=C z&&zK%yOt38?O$yW@g(ZAhnF12PE4eCc|}p;xH$k0tZgQ$9q;}F9+pGdyYorL4crbX{0X&`k#5{|G{tmCoCYr`_Id!KZ$=2_z>pMu{jdY{i!e!!E)&MxtbOZ zZX-?-kXn~6f6rPo#{ornSy3}9DkNsph}VzOmxbq1ejlsM*|iy>bqbjJ>?p~g0JRccW2Tn~&FfXb;S}!TYh1kk zZifJ!_P*WsS=<|vG(8^U7!d^bhuhRksOxSRv)!vu=j&!Xsc-r@!JS~7%qYNcUk4T;{Vv0#8WN zwhTs+qIpPeoJ@u9EUbW6XNKQhvbf%KY>Bu?QuacgpFCC4ss33jJQZ22cWVY6b?#rs zdB(2jxDi_f{}&f}5;EPatwwto7hH)8f zcP@urXeTejl^97#kj>B)c8f$jK@nuwebIO_H;LR}dHusjNhfF_r@y&&az@S19lKRe zrmBl$#k@A%hOy$8daKWgt8XmJ{U(ffRN2_E<5G7#G2Xbss}>WT=cY~vZ{tn$Y)FkC zr+QqZUQk*H#)$hH-MBty#4$(&lrlS*i2gJIzuIqa+<)~%7O%_Q-M;#ODlmDGU%GZm zDMJ5(=sYnq26e%p6!_R3t(9b~0Gb!outpjSZSbG&}6Z6#K{a#%=RyOmKu<>4Kz*yxAebxF`o)?JChH;C8gU0Bs zne9J59y<3BlS3svD9Tt&x2|2%yo0g*+8~xBjcBLqwB*4E5AA?lz)VUoI zFq5VqWPG|F&5RrYc1m1;Jr_077bS)fH+E3O)cL;5zAu_oWJ&Jq8C7i@I-@aJQzo^C zlf!nR|0$Dq|I9Co3Yd#tUIX$8gQ3&y93Mtv+45M=kpwLp7pC4gcD4)=OBD}R^!u`j zqYs~>#l^2h$$~|1p>u0Og(VT^p2AyQ@Ye#Mbg5)~@CJr9DK*aFsI|%3elRsJ5xs6j@*V64h+;ULn1GiP=b2ifJ69gU# zzFlDZ4+~s0S@F4DRuU}a%t3uCO(s;EH~gT@>o@M)GjT!Sk*?2xODzpp4_ z7MgX!e&d#jXJbnFE#&7o{zu6Ju-~@B&b>f&;tOjEB91T6#d)Im*R+(HY0_|Q^)1Ky zZ%PquxGtqyq~mhod|4&eEQPwDV$ZS?_$0VSmgtSd#a7l`1W_HBBz=C zjwYx=Gl<8Ap6Eo2ONky|9s%3SjJmR>{J#t>|Z36XYW@GjNPhpe*8TVeGZu$z@{;`B#z{k zN0y9YElF(nO3MWfow@J=(eavZ_JT$8@$JmK8I@M>1@Vn}dD;z%Rt)(arAmoQ_`Ebd zW%S{QhI&$V3@Y#??~s^qQ|LAP&XwG|bGdEbUy@;%UNDgkrc@UVWDfXKamkLw);9zW z`bxI@qH>^fg6l&)9v_y6l6i^_Iw7^SL5jalN03Cm{;S;GU+zevdb&+76(Xbg&I|vO zypg2$3Y8O2N$FgfXaK8!-H@Nn0O@!>LTtKH9&ch|7m*Mldj zG@w~*CfpafFZvZOJxr%D^YR zQUOL4wPxZCsV}yuMsyi3=A|`UXuTvn3?VK&clr=f_yMR-Ez*On@b(IE`a$=qd8!6>um^+G6*SU zpoVgthMyvgf|~>d&amX^rYG` zQXD0v9S9qR_^WMqE*yhSCA-JAv`xRns?+73yyW!O3qmrovx9)U`#6^Qg)VDliQrd? z!0rx!A5Nr9&I`s~re%MpX2g{lz+7g{rO2xakt7lIc=}pUux!m0qVHPlffZbuf0H5@ z`_Kv4iOe_Sb&?HKFU`9#7H-a;tf)9gd@);)y;~?~Z=;Sw2fGos2ZfCjt2U`rZxS}K z`JC^j=-~qsxejmhh}ZCUZlELDPy;Y>WEr@{ivt=)kev4(K8+c-FtiuBsokmDEAfGT z+S0O}q_n)-Na5u*n^$~xk>G>c2>oHxdJGk)6`2bJw-9zROs{3qBIhUs>adLEjTSTg z@$|PS9z;BPNG7oy3OyjP#>QF+#u<$YIwUlO9A{2-FhfH}!;B*MO>gpK1x7n^n_3tM z;iM($xB&d}CLRNlCmZ18i7Qi&vgOgKuq_GT&Wa&j!~4w^l{jQ644v}h7s0y(qzp({ zg{g6hx$50a4-00-nMzHGB^#&e18wp_3va8Y7p6X237f-+GU$T{lc6X&MXapn2Vd&T zI;Bht4-Zg#^7u7qkdsG2fTx(AACz6|-^qDZ(W*0(xE_`YVdEp6_gD<%4H5(Uq9*y`f10(v%+%1`D ztdbTA8TRlL-V_Jd!2pK)6X*JpcYDQiYBUk%z-8)eL6*WYCM{^u}7UYlh7EOTeS^re1c4iFOw5kctKdj0-h{Ly00F>+KJ{{e*G?yT)I* zTb<>XTnPokyGBpoTceaZ5hA1iRN_dJ2eRfYr2nz1Ow38iA7rH9lBot<1O?fO#}~iP zUpbe!yS+s4c(`-2V|{xqn$5$P3v({k%QrjgQFPGW09N&k<*d3TbpKWLpcmTv5SJ0- zH=qN{6zRr#oW-(Ls`xhlY`jRd7218zwRTbmcCD=LJE%!cK12!!%oFH+TN*^H=)?V4 zX(?!WfcHlZ^o=Q<*tS*wdvnEZjFnHqvBbh4w2fxu6ORA5ov!@SPtQtU4*qk}6F39? ze`tQLLHtCQq&XR8o^+Qx6fQPR;d39D%|AZ>QEpoo8#w3bFM-V6MOp6REW{>bOW1u& zeA!$xYa!IPVMt)6{vFE|CGjhKVNv-ev{&eR2;-9!^S9i-`1NRuZwL_(Ekc}_ZId^I zIS5w&i|V7~v_|p8{o*JjOk}yiua$!`owP8!lEoY;pkl>v2xj+;uRg1F9i)1mn!r?; zY2G~mrfDY_=!vygv1QE4DEH-zhc-Y94hr9AEb=)q3DyOefxa*tya1e%du*P=-(k~` zdt+i@MQwlhy#-rb)-Ac1_-XQAe!mMUmj z=WUgpt*)ZEcK&mTgK?-}6|5^vz^x1~!jP}9YZ&|3%RTTO0H$#;FtKOK<7Mg1Pa1Kw z3@uD$e$#ge`R-P@F<)4e`1#R%*55{7oEB9yga?xSG5xt~n})>Va6;S!L^w*CiI8#? zm?p+bMW8c7X@K##Z;6kaTP52V{k;2}*6d2>02hT*8imKsFQE znrH<7)R@A-DHxbKis?%dltbBA9QWLl^`D=4JcTclmz>_1J;`hwo;lWb=m!>KomxwR zV`bJ_U&`CiG!PQ_HEo+nB%&U#>_~0O-Xo4 zC@gjpX1| zThd4;w7nDNy^ zbEzc2`4zk+d7nUomDe}6!A{!i0>{{aUde+E$m`dmxsfBxy~tydU)x~uNLT!AX4w%> zp!`G@}jn_(VC?tR?1{%vK6N1~S2 z2eL3feCy|QptY07qTcp&jeYnD@obBUkteAU=>@t7>RKn?%uSUn{EhN4mb3S&95=$sa2OyH*cNm57~S(!aY@SaihSmIr7^A)WS(PH@w> z*~D;^n8=~44zY>7`0#RcO!)a}_*zDh1*`SBd^5x$I4MXv%| z{%whO)V6}spGWbYSl34uNM@bxxIh1!uMzQoiT;D^qiCOzqx+Ws@1gG}Ok00%3$OkL z51GK4J|a$^3?pC$jhjBR^GE6vY+#QoVEpX`c$>n%l2&+FT|z`y!qysgkYL|{244|9 zz<7y!ALm1%xP%1nzA2|skmd>EAav@^>$&}qu=s z-z}||b9T$MPo8|n)Gf{D1b=p0E0*+sWbx{&QNp9@kM_3{#A#=`$GfdGbrpBOr&{d4MDL zPi1{cfM1GMg>WmBMAJBc{)2-kB^GVT(23S^4ZP5lE$UR#UnUUl9$8P8_|5~=8=Nm` zAGf49gnMh93ff>0F3elM_l=+q`0rD{*M1v@8tB&CIPvxq{f=Sz1>3a4xI=C6BQ(zC z5Fz7gVfO!QBZQua9tWZ#veW3Hbhu}R4ZoY)Y+gD#l&0R>CrP!EZ#Ek3Ug1L|TTy<^SdX5%06S6mp=euE{r1&eLkS}m zKCJUxnj&9Uf)R%=xE|jcztpGG z5L)o7ODv`=3z)^e4^nokMo4;7A*$Y)$1Eo^liU1O1oyLDMuRe}Ot_>{abjIG= zhe1EN)NO^ew}G6<$Z3J`daQM-b0+2fqK`#Iv#}ymed2!E=0#VlCl=ghqkp6IL=o7t zj;J>i;?o#eZ1eNsl~V)YiJn>A%lA!7RO)QF2DTQIqt;wvddSs?|i>$l%JplDVK=rONWVK=6t_XNa1~ z7URV&KK`5Hu?rw-tlFK`bGN=4>hiXNXlifpmkXaL@dCa^2BEc>S;?2`+}?XR(nY2^ zU#NNLh5kM_VV3*fJ8EmaO&*U&n?uQp4&OtIy#6JOtYqpCZi}1LuBqT_7za#IxM{1v z>FN`aKVwrU0mYEb#`al`2V2WyP$saVpAF<|NdK?3`2Q-hOaLN_!?VZ|yo>i3yo;8$ zbN_5BCm2xVB(WwxqcZy@EX>XpYmzv2P|0jtUd$hFf48W=xuu%0NnXL*t@68>rn#}f z*O(cuDrCZX>)F#RXV@jbmIrWB-L#pRnhOcd_G;CIKSXTcIxs}UIo%!Vz{~1|xzA@x zW{4;7Y^Q|IM>DJ^vsKktPhz`q`-t#;yFhOr*p=SvWv?o|1|lKx{M##TMK6E&`2E=@ z9#oLWhxQoaLci|_Te)00;e~v1)gk$Rv53dms{(cjH#;ED46Lq$)WNIkm;3$aMq3Fy zD!U)!HIjvXDofm%^X-l!%WAdm#}Ddsot`Bl{sKGPT#0mMj}e3YYd(xV3*+AKty0E` z;0Y$X+)mC4I8wA?!V3QtZ^HVKS4jVBYBgAYN($^f?or|AbjJZg_K=HESl@QFVCMFn z1vg`DU|op!<^*qi@uclvi<@FBtoo+Fp&7zqY#LDkb+vQS$A#v1MV8@@J}z(`dB^*& zp?wofDr`%pyR%h2MddyeZ(_u7zoevrAh2t`S>~4TJ`!w!jg-L9(FsVYW>mCwq9?H!HR_7` z9WPsHnzp}!yb%Cj<)l}d&IQrxRAnk(ZAR?+ffjA!szwLnkTa>~kwBE0fAH{YIeGQR zIeCjcmOd*UfRdM=Laf9@laFR`&ikP~N0CJX#ee_l-IyV9(6%$}ki1gmhcG|JUtlNl zL}u+xg?CbWLx_RS(df_cf*|`l<3+;U=-_mr!BTw1cb$k2rx8ELEarInNexYy8I)bsl7T-dysBw#w8*8I3(w4XW z1niWC9$)dC=l+yv7`KwP-oGY!6qDy`f0h`o7F)EyB(#?&Pd2UGN;P8Fgz1l_O_#6M zJSTNiay)_SbjL5Nc4f4_?U^`@l7_vq zhTAVVD%W$@^Z^3HP9qQ2qbiMqILABDND=!P7h*1+7x!i}DvD+r$?kd_?go!MQKFz_ zCrY6@`6`eYyui$8@a9KQ%MaHRIZd3kjL#k;30+BLnW>wY`h-+`;V0>p;D<}V%Y5#V zFlD8q!yY}+sPKuC4j5czEBvw(J>e|`yR>0^I2GFE%&-6zy4t^B3nQDUq)(aH2ghMOAHvP z_4OZOf3e_TcIbK8T<>>iE4=2#^T`}D`+3=HoyyUM^ZZLx|CmzJDYidJozT)_B9eY2 zl4NKbO(-Y4f9=^nZvS(6{Ac<6Uqrs8@R~c}A0ppw!?Jfp@So_H!@b(EMpJ*F zq1gLwnb=*m+;7lq?3=hqQ98OexX&3$x;BwMllQcqcDZCBV-Z6`X$V|pX|}UH_qRx3 zWW=c`R=WzOCxcr3+zF~zQIf$L?fhB4I;^v*5afOVIW5wac7`&%p6FT}4ZO|yK|&~> z7?Y=r?EB;z5L}{|U;eB8aAMMiEo}1#GHdsMLkadrz9*kmKcVG}&{z$A#Ny37`_!`3 z*iB$#ZTkl*i@pS{g`Gg;WfbU(4wJsAkgLjXo6}JJE&hj1T#w2YP&6(Y1lo5jJ2x+# zxpM??BuI7iTFEv?v!ADAq1Fb#+BNYj@u^D)y4bl-Hvc}{ev<Zs4{#23?OssiL+$Wf;zuQ|8HlQ4_h65$pEY(Fc$HF;A-750}})5FUQSv zAR1h91m@E%UJ)J*l&-@p_vk+vr0LwhStiG=8WuG?V7yxX{W>!|fzQpuqIZfLQfv7z z(9&>rvS=tp#88ZbnE!P`nCU$^NdWicmX4i$FeJKjTQ!t>t3utATiOdDxDk-f>tGw7 z9#(CG^C>Lkay(&=5pU!yn0T$LBfx6+jOn!kk59#6iHQ#(`$d^J+pNxtOlFEGBW#ZHL?Quozh5atJ@tj%OKK8{icN*N~yxcGIrFa$Q z)S$~5S#B%0AgWyt#RP-flgy_6N%^_ly7Q>I3nAR^TOkyN8q_Bh1Pjqzkk@Wz9W@JQ z%oUHzpnCdfy@pyCf`Ib6Jc&*eGmkaSUk{>W9~3$wSk$Gf*6_~aSq63Sd=F?39}U|Z zWM~NQ=hOP=feL>Pq?T3&^z6P<2gd}(d)G#Hs)BOFdYiS&nohly4Y`4_+GYZo9CzBBu{TQr6~L=+JhAHE<= zSHYLSY=b;EQWqvF$lN@!4S~S*cVlPh|D{qRji^mvkB1K7?WS>U) z-TrIDw8=G3G|9JwKaUi&f`*kHVB2>5ck3+1QS^k^hD7%G3e$)#n>Z|htr*JYL~6WT ziCa@J3mLz3r1xiSQ%lC+(p%)H_D&w-IphUgeqGHgsO@Co9-ufWTbV$&n`>P4IjnY| zK^?u2sf2BlpR=-SKO4EI2#YJVGowxjKz{(4@&iZNSI(JIs9{^htq*M` zQ_B~ssuNg0kOWiyaNk$md&G{1-(GPu`_4tMQ^b`j>n}CUtLD5az#zqH+0cYH)XjQ= zeV+;7QD+L*d4^qA^`ZuZdgE=zYd6xJ@YQvQKcg|YT@<5z=Y0j(#TWIRlxh&VGLt>@ z=wv|ui(eTW?G1ytEf(V3Jz%tsi1~XOMq`HQpAb{gdIKIZ`?e6B)*SE&zOO~HW0y`$ zfqBN`+^=9LS0#G}_Wu>i3%>m$%7Y;O9ZbdhFBL|$8rt0;Y^>Z1+O)>7e>_-01GwsN zd*x5a5BPoN$CoAS|n0``5$U#cqFSVaiNMo68Lq^|2Z-pzn>alx^*u&Al zT$pYGd*(`Mo!ikt>mLWRw0Ki+RBD7BgQEg~VBh>_vb_r|XG4NN0)qnJxVpJ^J7Qxs$`@K? z78@k(4%Hg$11U~Kj0QN4_n0TZvngf#anGUZlEjGfS%*2!$AGbvDW_njCyK49cvj*y zY1*%u$|D?|;%)4+sbmS5C*`A~X4U}kUeXYfBZKuH>zGYo7D6u@iI%v;vG;)LG!WVX zGDe?R%b(SD@69)pTi8h`i`$m3#rI^L{kdOEiVljbw0h6>AI)hbj>_r2WpKf%T6)ER zt&SJ)B;VuDb@(x5xE1{%%pB0fk@c==S^5eqRRpOsUrYQ4N|oHZr3aKWo|8sYGk+(I zB<`Nncff3}K&%@Nc1q*!z1$f}hxi`^+StGPI8)RibW$up z00>yfr=>#f7}8;fVWKOL_Lxk6SUq#H?T@iZhHcd4u3Fk}I4bRgSWp4E35fH;k)&wp#L_?f*h!Sj;F%NAu z=n5LY5vm3x*Yy*5xG_1~0P`gRtp_Bm+Yf-x?pimz;`i^(ur1+CmIHc#AZ@my;(TnV zeI=g-aBo{2|8j3#8A53Df;;4=>sMWhryees!5R6Z-Y>4~3f`kK7Grq^|HaA3#QYr* zTgFfwHrd5^){c4b7zcmsRo&kX} zGlllRqei1;=A*&OIuK(jcE+@_@#S-YB2n^y_LhzqYUd%*d-Qy$H`W-7#FtiWl>#-r zox^C1U8izZhf0JaOn*V8-TS+|f#9#9@E{%JRut6e5Z>w2~2y$L_Rwz!YvR{Oh*U5U5e z_Q3Hq##jlQPPbmo_K&C^DKVY%n=V6M?L(4vJFs~B<+)!?{Ck!10g+Y-d{@-U%_Mf-DI}wBfgp*G=58PtIf?A&xO{REAQ@!LI@P?INo;)kNgWoQoGRP;QpR-AfVBbWT~9jp=ON<@54B-nMfxw$#v%X=1u=^=0!cq}$VbTc~#cr7dAPtl4-{d_yc zqo>tx)XD-=3N62}AOSCF2ss`?qzJW)7c8`BoyD5i(ijm>_vs^jStDlC8BHqSzoSwS0Kd*2Vnd$~?PDN(Iz?)X7N5*l z$2X!9eNJ@OXi~!D;1l22iwi?%@0x%@!@8xaXbT!VcFf?+3ckF=Cplw=i;;1jl3JU) zy)ZU|bB%p3jisk^Qj0mr6GS=dk7KQ5C3SX8*Zx{hhfjt%6=hRi$4|XE@nWRqZSZEx zDehw)M0$VYj`pm1S_uBQSkpxWk`ZhW?nn}(!FYS>5Q1fDYHz3RH6~qW9L>9sv-?-R zHY-V6Fzq_u0yKdW4x+~^61*D0f{E}9iUM|Z)7<^sk2F5RbPk`*nfTW!^Q7~tbzmRX zco>x4qraM>ZT=KH!EZg}3n4QxIVe4yQdd~W6YaLg`{@I%Y~03y;M=?ltNluWqEJ65 zDjz737n?T1D|&~T**)-vXh!0&(ju<00hP0|BbiGI25Gp=S*+Y}M7h24j z2|L^=Qf5j^#J0Wc7QB+;)V_Qfl(P+V*Q|?P+Pue`zzJ<5XpU2kxqVElB+U&kWmIy$ z)h=0np#8ddcr3_gKd(_0GCGIc@R^A$8^cD!nVCAGOf4-2Eyd2Sf3S(jDnz&5UHj+z_tTHq(Hj@7XqFN)6Ad-DF|LxgkdTjJdGfxo`* zzdhyGUMd?AN#tK4-|MB116GqqP5V0!mqr9vA+yn2@oQZ^oOo>qa8~!-sGU@9(Q`U0 zE{uefyV^4hieKJ{ammbySSXAW)TR=E=Bfl0Qq`CJjmpdX!9LRhF~l# z71s2tH*8AJA-hHFO9NOMw%i*lwwB`UM4cjjkSN>5Wbl zs54P}MWuvKCb~Lw)-(*)8ixe)Q;qBy26z9I%^CXro&kOO{-H$+JINUrFORqaJ+3J$ z6Sm^|*bK^wKZVdtY`qC=U2L!!rmCQyVF;rYH5o|;bNy1N6ke>&Yy2(xxXDT@A{Psb(v-$AW*MCo& zt@AJLyHZVIxsSkwbYN9bXx5~UC(8XmcseWk;=+Z$V&N4q`DcsZNq$sq6$J4?eXHJ5 zKHJEWq$bP0MBh4$S;*Zb&c1kO>e7^7G@Xnzqv0{rY&q>ZK1WwccE4Eg@iBe88P1%Z^e!)t6#n`Zy^yb_Z9kex)pR*sIW&mvini(k00THnF5 zn*8SDHY4w+3GuNrxu_x80iq;+A~T^bJxA)6(a$)nPA_6s!CLn9wbQv4q8n)^!N{%l z-DsI#W2eYI1lt^(^1vF0B4vA9JXv4gm|eUYtX+ogOTykAH=1~xSYJ*h?V8_%usgjv zOnl%{X7K|`1l=K^@ zKBg6O`-%jR;7W<)mhy|QmGRqI4%?gPExUhxwkw`?MEJ(tOB^QHiza<&~Ikh#KKN@bS!LOiYT2m|4W~ zc;oTaBS0h_iN=OgsdHa4MD32Js_xxtv+k4C5bzdZwC4oo*mycmFWL2I!|1Yi$<9)% z?B?UO3Oi=18tTl2!n4i#g47^%UUo8!paCh zL_X=T+Wa!@u?|Kf?cK*jbGFt#1p-$ywjN){b~|`!(%C-$Kb`|DTc@}3M^hI1-_kt2k-_I?!-ebPB z!dT3l_X0LwqZxe*ajU*+7ZL$?8;aH(yUS*7J+H4?4^4Q$lnnoJW0s%6RDC-M&Z8#M zZD{zsiU%(ZB=f?hN{X%hR*tyMxbAni` z?D6-`gO##a|2SR05COe3645anm6a%oPkV7*G=(7OlbXiiYKxS9|6aEv@QyXQ;xykm zEH~V+`Q?6Nw2COo3vKs<%8REx@u{6ND6_!>3h}pAk>Spax+?8>w z8*hr)KGYWd^0O#dhc&(o(AM<46p@?lcp&f(DXq5W9Ko?<#G7NN4niEk*I7|mN(}wT ztC*OA((o6w!g2t@&@}8#n3kM&MXu!MjL#Qlusmqh*ocz^m3%{S z`W%lryL?uODdy`$p}k&s#iF#+J8Z#d4f_B>KY>0q9J;95o_Rm5NJmP(n6*rBtwk`3 z`DK7TCo#M|eAL%{i+m!CU12{G4SVNi{;nYrS7i80v;q9L6J$rUVuz61A;yeWLB@>yiHp|u@2Qn0U; zhli&K6hv>J#S!)EbaG@$>kg@bzLTCiaLYtPgU|_qF0%^uJE1eFiT}PliYQQ3w{RE; zbJ!T?Nikc!(I)HL#1DlTsXuFx03|pV+Q-!2K>KOEio~sQgo_-ElrGi5SS(P~25g(4 z5v1XaKKS=4R{Q@~t~Yd0!Zq!v26`8>`J|{ZhB!rBjuJj^-9MeL;b(}1aQoO8cOkRr z8P+`IELx4zM_V2`8VQpajj$HU@7rnbt^9`O?{32nlq?rN(Ej#{0lZdmOj3UyJih zZr^;ndYoWp+=>NMKiyt*T&;A+pd90d7gfk`m%|P@om)AseEwY#bVh6y6b)&2-cEc2 zTWQvGgSe#-yj($roFxapO5fKjo8p`|pR88r=BQ5TKHF^qypdN#?q%>qNK3&f&dWK) zAAwyefR(UDA@=d@6`M%!?(@4MK;;>lzJL8-C2fA`dZ*0adNH5FIrGH%d-?3`iYD)=E3)8AB=t2aS5J3c;Y$qHal$ zQI)ad=$MeucksPqbtltiD(%MJd-XT)ph={uIHQg(NGn@lrG6rt9Ji#wf{ATnP0$?CmEhJJ?tz}S82GxR(mk1n}$=D zh#cPYvRIKqz@l|Vo0t_j`PlBm8eHWdUgeTT?0)9{^p{H+*5rIr(+V6iO1(>snEwV3 z|EVR+CGQKXj!HSakl=_?=q~wE3u;Vkmd>s~kFd8vS~zWetS|5{FOv) zh3PFhvk?_fw*`ygkspk>@Xku7x9J^IakIw3sOn1RGn*TG>`4Htoe zYsl5$V%PcHC?t$edzH>(?*Q#kV4j$pig@H9kbpQ8s&tHXh}klL9q^D_Dm2Cg7Zod-UEW=lUw~OG}|%py-m<@VoeB6 zWk!IbKmrBXq$0)xbo)d`axp>S%N;I20DX6R*khiD(Sj z%~6p(gUrY*$Cwi;ze9)3n~iDPab}Prc885gMy2od;C4w+=RA_c(ciO+SEKPWzX4WQ89_Yz z^uzI4@c`O>Maro?Q+K%YRk-Hz_kUQN{jY5vCP@T@NUrpJKRO(FWElHeJ#0d+_ou4N8 zQav>*M}_KyUZ57R%j@*?bf@jzjc8DlK^a4$=rBwSey_RIlGih5(?YE06nvkH2piKCG`B z2oOlnY!2YO73k>D?(C4`OjMawW{Ot*^0SHDncV6AepY{Ih<}+m{*8L-LSZ;m&y=j< z5f}Z%A>H-Qw`BS(XFmBoFHeLwUy1rd2XqEyhQoLFPD8FjSSWf@1K z?!D#k0zlt5R1OYzlw)Ca^ZUCG2euB2xO{TW#59PCnzAU+WLM^(7&LSWSOW;KSKrB! zqJ*EalN?)H7ZhmKzEbW`>34FA-Ii2?QC2Y}Zfv~cpjOD^G$pvcSBeiCO_{bhy6N5x zH`{28%6H4GS5%y5JZd`V|EffO=d^ba>tnC$7`ruXp5Cywl)2FO!E3Kr&Hs{5?&}{I zL%dFIleKEi{u`ov(%N+dJ-2@f4{R>{XI~_iya^GK!ZbG;)3bdjqSz4`tE|aK?<}K@ ziz?IOMIsWpB)P7OFqrM%p{a0X?lCe&|I`e{+YOIALDmh2CJi3)UyqMhB9NHuw_5V> z3Ma6M?NK-OD+VKNc2_q^KX^TM$SF8&H^ZjH1N1AeZ@D~*-d<4te3%m4{eWxA^G2M+ zV>ES}bsKLE_nMZZFMgzHz&TyJQXIGJ))&J0YF(aqAQXP` zq4S8pYC2u5zPst`!gU!cNetXqNwT^S3VNuYUJ@){;IP$oh{17>|7%D z8`7P4e>YuiOD7ug^XTr?W0~5I2louJK^R{GgM?jcU_CQ8%Dl+wE_-wPX{vKviwA4U z5aRMU!3@~2uwqA1m@YcvlecK&?e4lDNfByM8}OkTD{7BNxMk}=w#5>)rKPthO^{CN z|MJ#9(F`9Xs}Sl9QMwg(D$4n`PcP3bPy=#zpm_kH!ouOKu3qI^!ZICdkGa)c>DYNu z2#SAP3KrkG!5vt?4qZ5lMdDX#zt#<=yJ7voJ_PdFF%w(LcJychWd`Wrt^ou6AwT0` zAbUr@Fi5N{4N1ln#%s2`Guv5a(bkrJ4C}fIaD(3Th`+Hw*m`W4xNi!nXcymabv@G> zb|?XWY~h!D0YprYmmoETn(ajT%d39Iz~-&O%<3Je4BjR zMjf2;ZEloR?CcT-!?vnR&NEFDcP-c5TR?nr2H?7ScMkTt8bRxJLMue`QeS+W@6QMy zw&e2z_TKNtMtr-hZeE&!rGT81kR;72)FJULs)&A{tw!f5aJi<osR(NYuL4Pt_3 z^>`x**#VV*pa<(o-Esa=U9IRM=u^1mg?fZk`qHOHbpE1Nk;AO0#`f36@cKIx4iHco z)H;kK#pQ5xJ))O-62+mXx9^blGdhBpytEvCeTufR?ND1!ZCCM+f)(evqJm(#E!)Juo`hRv43#Xm?PQ1eu9>Gt$Hgj-zem zr*p}FZo$41Nvmy*({lr(OD!*hZr*}<6VP{qUt2H`X#a;sY-DOtJBk*3JkgD~xbX9# zdjF^m_40f~3J$qO3KxO~Qe;KJYsVPQJTB3lkO$y)Y-H0Z&r5(yJ^?|DZjF<^QGR4B=$&KU8en(pEhw{t0safpOLlgf^F}(^6_eXD4zr)`?Y7+bqu3tTD7TCDWP_a z)T}+KsM<4BMG_)%KeWB)-0%J2d-De*@8pN~E05>n`F?-yzV9=@vM%}xuKu>^nyJSu z*wjLbU!mFTiF`A(ycM5xAR~&Xug)%K+epUxwh=$D45kw3V>jh-4zx?UcbW}FR!?FyI6y?nGPtHzfxA0Odj4AzBmtf z4T~Eesdox7br`S&VXV;ht1fY0nefe&k5|2*IT)0K?jMO@zolZa?T|)nFMo!}YK%q~qLUlO|5p<3LyhmE;ai93k#EY4G_ z-E!=??3yF%+SV5E>2NIyiIvOJII}>5{`$I zz=FU7$e6M0L)z`tuNlTu5u*oWGgYl(VN>}4Zf(yg2s0PU?j6}i#LdsUullz;5&&9D zLMQ0)SPdN51}eyvFdMXW=JHFVg;*}`irnkNFY4IY6b)8CR8^v1)$Xo_bz++8AkPL# zu3WD7GPvCN4_tjDR)I)s;VN))(@>0eDNpm6kc9(^&O!>Q$+yB+B|>tsQYcEt`+}4;@o(2tKG3DodSh z7?-2fp+4c1Kh8Z+*VRsR*e(8??l`3rC6jDzwP@+U@0IT__PZYPY?!T6#AW#%U7=vX z_nSZO*HJw(P1IYy*-J6%8dEar3;cQU?XN%go3r1BJ1DCW>RBsoW zyR3=CWuSCai|B^4xMFSvCg}z!Xci+A$6)ctru$0CoV};Ho-s%M5U;yn4s_Ujd;8gC zh+X}iBr!2{5yn~8{l|>^>ZdHGN3{O4m~Kw1*1r@#INMD-Gs+s^L$mmZxX(!VMgaZ- zcVgcjb;mW;^xukXEWndus=!i@Rdy;1nI;(|NgW~UmPK4*W2k`6EfZleJj|?df5ob) zw|slK4tC$UJ;ruBc+Y_Oi_i`cG=8`*V78#9kBRL@k-6qW!M~-rVr4mC06SK z1~%bGPMAz1j*5s(8BnWpZQvO+CE$hSaLlTV?gJa9*OEspzqWO#CRLw1Kln= zd4u}g#a7w-5Z>WztKfIV`7PG4v6FKxfuF>ITcC&D;Y&1tA3=}ZBl}4#x8a%o0iN0L z-W2ly6|Fvznos(K+Cw6rFNfW&5^oDa(#w}sCl-gmhK zy_d$&5p6YB4owetD{qq$8MvV-0ioe$!7X|P^}MS-*@M(^f)8jb?&!RcTg`H^^kqASC5Cfc#Ob&?~pTTNV z6`3U)<(n`$`kO|RezM{IOXRmg;Qu+#hU`x>MAp{3peFec#_tg#spaTupC{nTQ%eBu z>i#*~tRJ$^q{B*W`FIMP-yH9&bq3F3ArSg+oK$fcjsj`JZsp?9#4 z7{$ewJ^v5<`k&@o(2w~RUN6tZ^QLLAmYnVr&xt2r=t#BE&u{ul03~4 zue9&U1?2t!vPb_fkR@k}-h#Tr*E#TUcmT+H9AX%vzPW1yblBllVpAkcpe~nT3OVmv zH#B>W!0= z;&Z=LQX(CkPKIP8tt21wYDABPBo859AYBkssHTx9zd1EnjW&M&K!8BI9P$ zBolFvEGupA36^OrVrl|#l?$(Q_!L}5e^I5AE9MLp`!v$neJHesc7AfC-$qNXT|?_6 z8~?%XV%*c(b?cRY-=5Fb3prJM^h@YvXlV%3vLuBII0)78klVJ_ zzMEIcT&eRgqC`|YD~<~@jOI@{XwJB}77KQ@rPB`<2JL!Dji_?a21XP!1_z?R29Bmj zUU4V6KIs{K?ZCoqg?S%YQ|%f&#gf7dd{Gxh^?QH-)Ie%FQKh zm5xJ4kIlLfy;fYpWi^kAJ|O^UrGM+S&rn}_GxdGwvNn-X-NWeEopt2i{+;>MvqAF~ zH*s)>kcuz$3mPyQ4hIEs^{-yp>Ztec=Tb)274I6tAOd^&*DIJ6N853wR%>X zoOqhvrxc}u+(Kx3uI^&>{es!n_Q~5sh&x2;yIEq_l#UMYIiQMPzi4(W`cW*dpzAya z$o#5?M$B^Q5AVa-!Ov8*zU34qoZPn^tbv~roD}Hu{A+mmA{*slt9{RdoA}_lhj3OVXElUC-OH*pP?Wi&eIX@50s!{NH30h(d#*Uj*4G8(IsMc=(T9>pU6m z`1xbKXBb&eM1NIo2|fCvQLJG$H+YwAij$VGupO^QKVW`78a|o^v+m$1j z?3rzG-c3%HXu(V6facFTX-x9FxADwD|fW`VztqfS&Ae3sx7WnFWcC7yx>< z&Y%Z~*S*P0d-PX`@6dpE${x^WzV^~jqQdWQ=#lGgNEq4IID?)c-v5H0$j+O<7dmYk z*s|icBP-4-1VAb$$u1I;WyDjjfrdsHMRn-J_r01X+MhlXAulh_kc(o((B^Ny#3frk zH|;*$mkqhd&3RqY*ao)Y|KWOcqh3`@{TBzkqVea2hkmDg5|lZlsn+!pY9ln4cEQ%D z`mUkji&Cfp1cuaZz=E!qVQG%fYnsnhv&f(7{tFww1ewvk&3mOb%Iycz;Z z`jan+ufhoIk+lNP(#A>MRhApzY;u15r zJ{5WcgQ)D=Ssq83_gvX$QJb)Cb-sK5OJEXd;+&rS!E9T=cZT7BU*pV!PgClGr-?(O zyduw&Gn|gVDSrAAwdh;0`G$V zLVgx(y{t>@X?&;AwWfU9oWl6NA>>7^Xra{LU5Pv01NPKwxoEqtFRdfp7@QQGmYWR6U*?) zuU39gpEMRNzERZN9g*SAY{Q2bUlA=92~`)r&;mAxguiC*^KPDMpfv5TD{h+%mj;2p zz@O7v$1h^sr2=igyvK{w!iDSjKz$~_!4mP^(Tumc^3iSsV)eMPlM`-4`-NU;hs0dD z!48g6rF&M;gljKO*0hwh(~Qs?+oSkw$G8FRAG=}Npik;-krMH}mk_&?Pp5LIGL~i? zOK>%xBPoQkG|DUN;~ve`LC9mdwEIeLdN zZ<_En)U-g0hke5XY%*_)U;_JSYB}c>CWNlaCEYu~>BQ2~O$S{>F=^r&Jw++QG~0gl zf1F!G_Z~DE2D?k5uiBxEM|N$yuRsckAJ#A)%n!JEqFEiWTW_jL8 z*j5q&bLGM|hd*=~uWRpRo>~?@4Lc`myN7O{1DE46#ud7&=DNqB*9YYT4Z=u~AFZO6 zFWD>(M?u+VbIj|w$C=y4j(U4%$ymY&FMC?Ud0NkcDLSKkkENfxaDVvz9|5`2kE-W- z9OatJdhkV3zHBAF@V?jpwp*-hjhBJ)o$l#Q>{tq=30Fr)+|M^`QWQw4f{AL(?@fWs z*%RWTi`_gM^p6yNm=ex{*Vm$P=OTI+j3;L5V2)Sf(Y2P1hL=1>OxdH-h?Rt#06tDDUo))Xw>z_j8TanY z5#55YG`9q5##k9r6*E&63$%PgIB(OdpBTpNt0fvKoOljySgn#?dj~XPYG=>oZ|nuO zh5VkHK1S+_FV3Q+&_iQ-qKSp9*Zqf@Pt0NzEPt`x_?UKs;sH)0pjGRvn|dfWA-6cq zHR^YMcXfg-o}uEF$Vf}|`-6S>N(k|%%BLxK-SyM8k4#CIw_J5-Qmn`{GZc;rQ2X#O z4qZHdDn2x{vD*$SiW_qc(wQyeh%?0w1!{zHHs_x4as~hgDOp51CQy)rt(UBd2ew}X qu54}wi*C6jo$Z5V9sg>@QOJ?M~ldsgOkmywp{+AyrCN;r{}i40M11 literal 0 HcmV?d00001 From a66eccc9b0fe4c3ddbd23f1f1f575a3fb7065501 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 27 Nov 2020 14:33:53 +0800 Subject: [PATCH 172/290] debug --- jd_pet.js | 1 + 1 file changed, 1 insertion(+) diff --git a/jd_pet.js b/jd_pet.js index 19d3888..cd397bf 100644 --- a/jd_pet.js +++ b/jd_pet.js @@ -145,6 +145,7 @@ async function energyCollect() { async function feedPetsAgain() { const response = await request('initPetTown');//再次初始化萌宠 if (response.code === '0' && response.resultCode === '0' && response.message === 'success') { + console.log(`添加log打印${JSON.stringify(response.result)}`); $.petInfo = response.result; let foodAmount = $.petInfo.foodAmount; //剩余狗粮 if (foodAmount - 100 >= 10) { From b52bc35a92f3459a3f9b4a2240418e7c30a5a92a Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 27 Nov 2020 16:01:45 +0800 Subject: [PATCH 173/290] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=90=8C=E5=AE=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_pet.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/jd_pet.js b/jd_pet.js index cd397bf..a5199f1 100644 --- a/jd_pet.js +++ b/jd_pet.js @@ -136,7 +136,7 @@ async function energyCollect() { let function_id = arguments.callee.name.toString(); const response = await request(function_id); // console.log(`收取任务奖励好感度完成:${JSON.stringify(response)}`); - if (response.code === '0') { + if (response.resultCode === '0') { message += `【第${response.result.medalNum + 1}块勋章完成进度】${response.result.medalPercent}%,还需收集${response.result.needCollectEnergy}好感\n`; message += `【已获得勋章】${response.result.medalNum}块,还需收集${response.result.needCollectMedalNum}块即可兑换奖品“${$.petInfo.goodsInfo.goodsName}”\n`; } @@ -145,7 +145,6 @@ async function energyCollect() { async function feedPetsAgain() { const response = await request('initPetTown');//再次初始化萌宠 if (response.code === '0' && response.resultCode === '0' && response.message === 'success') { - console.log(`添加log打印${JSON.stringify(response.result)}`); $.petInfo = response.result; let foodAmount = $.petInfo.foodAmount; //剩余狗粮 if (foodAmount - 100 >= 10) { @@ -163,7 +162,7 @@ async function feedPetsAgain() { // message += `【剩余狗粮】${$.petInfo.foodAmount}g\n`; } else { console.log("目前剩余狗粮:【" + foodAmount + "】g,不再继续投食,保留部分狗粮用于完成第二天任务"); - subTitle = $.petInfo.goodsInfo.goodsName; + subTitle = $.petInfo.goodsInfo && $.petInfo.goodsInfo.goodsName; // message += `【与爱宠相识】${$.petInfo.meetDays}天\n`; // message += `【剩余狗粮】${$.petInfo.foodAmount}g\n`; } @@ -266,7 +265,7 @@ async function slaveHelp() { let response = await request(arguments.callee.name.toString(), {'shareCode': code}); if (response.code === '0' && response.resultCode === '0') { if (response.result.helpStatus === 0) { - console.log('已给好友: 【' + response.result.masterNickName + '】助力'); + console.log('已给好友: 【' + response.result.masterNickName + '】助力成功'); helpPeoples += response.result.masterNickName + ','; } else if (response.result.helpStatus === 1) { // 您今日已无助力机会 From 1d3fe20c26987590ad63b828fd11ab1d144f2a2e Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 27 Nov 2020 18:41:19 +0800 Subject: [PATCH 174/290] debug --- jd_joy_run.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/jd_joy_run.js b/jd_joy_run.js index cfefcc5..3d35f82 100644 --- a/jd_joy_run.js +++ b/jd_joy_run.js @@ -101,19 +101,24 @@ if ($.isNode()) { } //获取来客有礼Token +let count = 0, countFlag = 0; function getToken() { const url = $request.url; $.log(`${$.name}url\n${url}\n`) if (isURL(url, /^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/addUser\?code=/)) { const body = JSON.parse($response.body); - const LKYLToken = body.data.token; - $.log(`${$.name} token\n${LKYLToken}\n`) - if ($.getdata('jdJoyRunToken')) { - $.msg($.name, '更新Token: 成功🎉', `\n${LKYLToken}\n`); - } else { - $.msg($.name, '更新Token: 成功🎉', `\n${LKYLToken}\n`); + const LKYLToken = body.data && body.data.token; + if (LKYLToken) { + count ++; + countFlag ++; + $.log(`${$.name} token\n${LKYLToken}\n`); + console.log(`count: ${count}`) + if (count === 3) { + count = 0; + $.msg($.name, '更新Token: 成功🎉', `\n${LKYLToken}\n`); + } + $.setdata(LKYLToken, 'jdJoyRunToken'); } - $.setdata(LKYLToken, 'jdJoyRunToken'); $.done({ body: JSON.stringify(body) }) } else if (isURL(url, /^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/user\/detail\?openId=/)){ if ($request && $request.method !== 'OPTIONS') { @@ -134,7 +139,7 @@ function getToken() { $.done({ url: url }) } } else { - $.done({}) + $.done() } } async function main() { From 1b000dc39bcaa7d4f6aeecc565440bd5e8f52921 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 27 Nov 2020 19:02:13 +0800 Subject: [PATCH 175/290] debug --- jd_joy_run.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jd_joy_run.js b/jd_joy_run.js index 3d35f82..49bd741 100644 --- a/jd_joy_run.js +++ b/jd_joy_run.js @@ -35,7 +35,7 @@ http-response ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/addUser\?c http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/user\/detail\?openId= script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_joy_run.js, requires-body=true, timeout=10, tag=宠汪汪助力获取Token **/ const isRequest = typeof $request != "undefined" -const $ = new Env('来客有礼宠汪汪'); +const $ = new Env('宠汪汪赛跑'); const JD_BASE_API = `https://draw.jdfcloud.com//pet`; //此处填入你需要助力好友的京东用户名 //给下面好友邀请助力的 @@ -115,7 +115,7 @@ function getToken() { console.log(`count: ${count}`) if (count === 3) { count = 0; - $.msg($.name, '更新Token: 成功🎉', `\n${LKYLToken}\n`); + $.msg($.name, '更新Token: 成功🎉', ``); } $.setdata(LKYLToken, 'jdJoyRunToken'); } @@ -133,7 +133,7 @@ function getToken() { //} $.setdata(LKYLToken, 'jdJoyRunToken'); - $.msg($.name, '获取Token: 成功🎉', `\n${LKYLToken}\n`); + $.msg($.name, '获取Token: 成功🎉', ``); // $.done({ body: JSON.stringify(body) }) $.done({ url: url }) From c4d849d596be5662dde6b59ae7b7b35370339278 Mon Sep 17 00:00:00 2001 From: M <44107620+YM1099@users.noreply.github.com> Date: Fri, 27 Nov 2020 21:52:40 +0800 Subject: [PATCH 176/290] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6bad1de..e6d2303 100644 --- a/README.md +++ b/README.md @@ -39,13 +39,18 @@ 16. 进店领豆([jd_shop.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_shop.js)) 17. 摇京豆([jd_club_lottery.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_club_lottery.js)) 18. 全名开红包([jd_redPacket.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_redPacket.js)) -19. 京东多合一签到([jd_bean_sign.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_bean_sign.js)) 【可N个京东账号,Node.js专用,核心脚本是JD_DailyBonus.js, IOS软件用户请使用NobyDa的 [JD_DailyBonus.js](https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js) 】 +19. 京东多合一签到([jd_bean_sign.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_bean_sign.js)) 【可N个京东账号,Node.js专用,核心脚本是JD_DailyBonus.js,iOS软件用户请使用NobyDa的 [JD_DailyBonus.js](https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js) 】 20. 京豆变动通知([jd_bean_change.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_bean_change.js)) 21. 京喜工厂([jd_dreamFactory.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js)) 22. 东东小窝([jd_small_home.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_small_home.js)) 23. 东东工厂([jd_jdfactory.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jdfactory.js)) 24. 点点券([jd_necklace.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_necklace.js)) -26. 以及其他一部分在特定时间可用的薅京豆脚本,如 [手机狂欢城](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_818.js) 、[星推官](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_xtg.js) 等。 +25. 京东抽奖机([jd_lotteryMachine.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_lotteryMachine.js)) +26. 京东排行榜([jd_rankingList.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_rankingList.js)) +27. 十元街([jd_syj.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_syj.js)) +28. 京东金融-天天提鹅([jd_daily_egg.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_daily_egg.js)) +29. 京东金融-养猪猪([jd_pigPet.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_pigPet.js)) +30. 以及其他一部分在特定时间可用的薅京豆脚本:[手机狂欢城](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_818.js) 、[星推官](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_xtg.js) 、[双十一活动领金币](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_collectProduceScore.js) 、[热8超级盲盒](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_mohe.js) **脚本兼容: [QuantumultX](https://apps.apple.com/us/app/quantumult-x/id1443988620), [Surge](https://apps.apple.com/us/app/surge-4/id1442620678), [Loon](https://apps.apple.com/us/app/loon/id1373567447), 小火箭, JSBox, Node.js** From a78b8c8c5b8562444263e761f279aca30d5629e9 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 28 Nov 2020 08:45:13 +0800 Subject: [PATCH 177/290] Update jd_joy_run.js --- jd_joy_run.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jd_joy_run.js b/jd_joy_run.js index 49bd741..35abebb 100644 --- a/jd_joy_run.js +++ b/jd_joy_run.js @@ -113,7 +113,7 @@ function getToken() { countFlag ++; $.log(`${$.name} token\n${LKYLToken}\n`); console.log(`count: ${count}`) - if (count === 3) { + if (count === 1) { count = 0; $.msg($.name, '更新Token: 成功🎉', ``); } From 7efb61d228a00877fd4f804227e1fa9807127970 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 28 Nov 2020 09:56:26 +0800 Subject: [PATCH 178/290] debug --- jd_joy_run.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/jd_joy_run.js b/jd_joy_run.js index 35abebb..0856e26 100644 --- a/jd_joy_run.js +++ b/jd_joy_run.js @@ -109,12 +109,14 @@ function getToken() { const body = JSON.parse($response.body); const LKYLToken = body.data && body.data.token; if (LKYLToken) { - count ++; - countFlag ++; $.log(`${$.name} token\n${LKYLToken}\n`); + count = $.getdata('countFlag') ? $.getdata('countFlag') * 1 : 0; + count ++; console.log(`count: ${count}`) - if (count === 1) { + $.setdata(`${count}`, 'countFlag'); + if ($.getdata('countFlag') * 1 === 3) { count = 0; + $.setdata(`${count}`, 'countFlag'); $.msg($.name, '更新Token: 成功🎉', ``); } $.setdata(LKYLToken, 'jdJoyRunToken'); From 7b5402e5348b99c4a4a659199f4d3850df53e944 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 28 Nov 2020 10:28:13 +0800 Subject: [PATCH 179/290] =?UTF-8?q?README.md=E4=B8=8B=E6=8E=89docker?= =?UTF-8?q?=E6=96=B9=E6=B3=953,=E5=A4=B9=E5=B8=A6=E7=A7=81=E6=B4=BB?= =?UTF-8?q?=E4=BB=8E=E6=9C=AA=E8=BF=9B=E8=A1=8C=E8=AF=B4=E6=98=8E,?= =?UTF-8?q?=E4=BB=8E=E6=9C=AA=E6=B3=A8=E6=98=8E=E6=88=91=E5=8E=9F=E5=BA=93?= =?UTF-8?q?(https://github.com/lxk0301/jd=5Fscripts/tree/master)=E4=BB=BB?= =?UTF-8?q?=E4=BD=95=E7=9B=B8=E5=85=B3=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6bad1de..443b99f 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ ### 方法三:Docker(NAS或VPS用户) - - 可以精确控制任务运行时间,有三种办法:[docker办法一](https://github.com/lxk0301/jd_scripts/tree/master/docker)、[docker办法二(和本地安装Node.js类似)](https://github.com/EvineDeng/jd-base)、[docker办法三](https://github.com/chinnkarahoi/jd-scripts-docker) + - 可以精确控制任务运行时间,有二种办法:[docker办法一](https://github.com/lxk0301/jd_scripts/tree/master/docker)、[docker办法二(和本地安装Node.js类似)](https://github.com/EvineDeng/jd-base) - [环境变量](https://github.com/lxk0301/jd_scripts/blob/master/githubAction.md#%E4%B8%8B%E6%96%B9%E6%8F%90%E4%BE%9B%E4%BD%BF%E7%94%A8%E5%88%B0%E7%9A%84-secrets%E5%85%A8%E9%9B%86%E5%90%88) #### 注:以上三种运行机制都是Node.js,故您需仔细阅读下面几点 From 5dd01420134d8b8ee82040c0808f309478b4a687 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 28 Nov 2020 11:31:22 +0800 Subject: [PATCH 180/290] update --- jd_jdfactory.js | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/jd_jdfactory.js b/jd_jdfactory.js index 69f1e02..0dc70aa 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -2,7 +2,7 @@ * @Author: lxk0301 https://github.com/lxk0301 * @Date: 2020-11-25 18:19:21 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-27 09:58:02 + * @Last Modified time: 2020-11-28 09:58:02 */ /* 东东工厂,不是京喜工厂 @@ -312,6 +312,7 @@ async function doTask() { //从数码电器首页进入 if (item.status === 1) { console.log(`准备做此任务:${item.taskName}`); + await queryVkComponent(); await jdfactory_collectScore(item.simpleRecordInfoVo.taskToken); } else { console.log(`${item.taskName}已完成`); @@ -454,6 +455,41 @@ function jdfactory_makeProduct(skuId) { }) }) } +function queryVkComponent() { + return new Promise(resolve => { + const options = { + "url": `https://api.m.jd.com/client.action?functionId=queryVkComponent`, + "body": `adid=0E38E9F1-4B4C-40A4-A479-DD15E58A5623&area=19_1601_50258_51885&body={"componentId":"4f953e59a3af4b63b4d7c24f172db3c3","taskParam":"{\\"actId\\":\\"8tHNdJLcqwqhkLNA8hqwNRaNu5f\\"}","cpUid":"8tHNdJLcqwqhkLNA8hqwNRaNu5f","taskSDKVersion":"1.0.3","businessId":"babel"}&build=167436&client=apple&clientVersion=9.2.5&d_brand=apple&d_model=iPhone11,8&eid=eidIf12a8121eas2urxgGc+zS5+UYGu1Nbed7bq8YY+gPd0Q0t+iviZdQsxnK/HTA7AxZzZBrtu1ulwEviYSV3QUuw2XHHC+PFHdNYx1A/3Zt8xYR+d3&isBackground=N&joycious=228&lang=zh_CN&networkType=wifi&networklibtype=JDNetworkBaseAF&openudid=88732f840b77821b345bf07fd71f609e6ff12f43&osVersion=14.2&partner=TF&rfs=0000&scope=11&screen=828*1792&sign=792d92f78cc893f43c32a4f0b2203a41&st=1606533009673&sv=122&uts=0f31TVRjBSsqndu4/jgUPz6uymy50MQJFKw5SxNDrZGH4Sllq/CDN8uyMr2EAv+1xp60Q9gVAW42IfViu/SFHwjfGAvRI6iMot04FU965+8UfAPZTG6MDwxmIWN7YaTL1ACcfUTG3gtkru+D4w9yowDUIzSuB+u+eoLwM7uynPMJMmGspVGyFIgDXC/tmNibL2k6wYgS249Pa2w5xFnYHQ==&uuid=hjudwgohxzVu96krv/T6Hg==&wifiBssid=1b5809fb84adffec2a397007cc235c03`, + "headers": { + "Cookie": cookie, + "Accept": `*/*`, + "Connection": `keep-alive`, + "Content-Type": `application/x-www-form-urlencoded`, + "Accept-Encoding": `gzip, deflate, br`, + "Host": `api.m.jd.com`, + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), + "Accept-Language": `zh-Hans-CN;q=1, en-CN;q=0.9`, + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + console.log('queryVkComponent', data) + if (safeGet(data)) { + data = JSON.parse(data); + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} //查询当前商品列表 function jdfactory_getProductList(flag) { return new Promise(resolve => { From 0ffabe07bacba54659dad693b55c7cb01ddb7118 Mon Sep 17 00:00:00 2001 From: M <44107620+YM1099@users.noreply.github.com> Date: Sat, 28 Nov 2020 12:54:14 +0800 Subject: [PATCH 181/290] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e6d2303..27eddf5 100644 --- a/README.md +++ b/README.md @@ -45,12 +45,15 @@ 22. 东东小窝([jd_small_home.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_small_home.js)) 23. 东东工厂([jd_jdfactory.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jdfactory.js)) 24. 点点券([jd_necklace.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_necklace.js)) -25. 京东抽奖机([jd_lotteryMachine.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_lotteryMachine.js)) -26. 京东排行榜([jd_rankingList.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_rankingList.js)) -27. 十元街([jd_syj.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_syj.js)) -28. 京东金融-天天提鹅([jd_daily_egg.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_daily_egg.js)) -29. 京东金融-养猪猪([jd_pigPet.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_pigPet.js)) -30. 以及其他一部分在特定时间可用的薅京豆脚本:[手机狂欢城](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_818.js) 、[星推官](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_xtg.js) 、[双十一活动领金币](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_collectProduceScore.js) 、[热8超级盲盒](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_mohe.js) +25. 十元街([jd_syj.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_syj.js)) +26. 京东金融-天天提鹅([jd_daily_egg.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_daily_egg.js)) +27. 京东金融-养猪猪([jd_pigPet.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_pigPet.js)) +28. 以及其他一部分在特定时间可用的薅京豆脚本:[手机狂欢城](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_818.js) 、[星推官](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_xtg.js) 、[双十一活动领金币](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_collectProduceScore.js) 、[热8超级盲盒](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_mohe.js) +29. Webhook触发Action([webhook.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/webhook.js)) + +搬运脚本 +1. 【[@yangtingxiao](https://github.com/yangtingxiao)】京东抽奖机([jd_lotteryMachine.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_lotteryMachine.js)) +2. 【[@yangtingxiao](https://github.com/yangtingxiao)】京东排行榜([jd_rankingList.js](https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_rankingList.js)) **脚本兼容: [QuantumultX](https://apps.apple.com/us/app/quantumult-x/id1443988620), [Surge](https://apps.apple.com/us/app/surge-4/id1442620678), [Loon](https://apps.apple.com/us/app/loon/id1373567447), 小火箭, JSBox, Node.js** From 15978a4bf7a1259e027b916366a23ea37599239e Mon Sep 17 00:00:00 2001 From: Jone2008 <70353049+Jone2008@users.noreply.github.com> Date: Sat, 28 Nov 2020 13:46:19 +0800 Subject: [PATCH 182/290] Update index.js --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index be67f30..c70aaa6 100644 --- a/index.js +++ b/index.js @@ -15,7 +15,7 @@ exports.main_handler = async (event, context, callback) => { // eval(response.body) //}) - //3.执行github远端的js文件(因github的raw类型的文件被墙,此方法云函数非) + //3.执行github远端的js文件(因github的raw类型的文件被墙,此方法云函数不推荐) request('https://raw.githubusercontent.com/lxk0301/jd_scripts/master/' + v + '.js', function (error, response, body) { eval(response.body) }) From 0723536fb421a01333a3a637e4aade93b46e394a Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 28 Nov 2020 15:18:42 +0800 Subject: [PATCH 183/290] =?UTF-8?q?=E9=87=8D=E6=9E=84=E4=BA=AC=E5=96=9C?= =?UTF-8?q?=E5=B7=A5=E5=8E=82=E8=84=9A=E6=9C=AC,=E4=B8=8A=E7=BA=BF?= =?UTF-8?q?=E9=9A=8F=E6=9C=BA=E5=8A=A9=E5=8A=9B=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jdFactoryShareCodes.js | 6 +- jd_dreamFactory.js | 763 ++++++++++++++++++----------------------- 2 files changed, 330 insertions(+), 439 deletions(-) diff --git a/jdFactoryShareCodes.js b/jdFactoryShareCodes.js index 4bbbe48..99a5008 100644 --- a/jdFactoryShareCodes.js +++ b/jdFactoryShareCodes.js @@ -1,5 +1,5 @@ /* -京东种豆得豆互助码 +东东工厂互助码 此文件为Node.js专用。其他用户请忽略 支持京东N个账号 */ @@ -11,7 +11,7 @@ let shareCodes = [ '',//账号一的好友shareCode,不同好友中间用@符号隔开 '',//账号二的好友shareCode,不同好友中间用@符号隔开 ] -// 判断github action里面是否有东东萌宠互助码 +// 判断github action里面是否有东东工厂互助码 if (process.env.DDFACTORY_SHARECODES) { if (process.env.DDFACTORY_SHARECODES.indexOf('&') > -1) { console.log(`您的互助码选择的是用&隔开\n`) @@ -22,7 +22,7 @@ if (process.env.DDFACTORY_SHARECODES) { } else { shareCodes = process.env.DDFACTORY_SHARECODES.split(); } -} else if (process.env.JD_COOKIE) { +} else if (process.env.DDFACTORY_SHARECODES) { console.log(`由于您secret里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`) } for (let i = 0; i < shareCodes.length; i++) { diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index b799618..628bfc3 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -27,14 +27,11 @@ cron "10 * * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scrip const $ = new Env('京喜工厂'); const JD_API_HOST = 'https://m.jingxi.com'; -let ele, factoryId, productionId; - -let message = '', subTitle = '', option = {}; const notify = $.isNode() ? require('./sendNotify') : ''; let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 - -let cookiesArr = [], cookie = ''; -const inviteCodes = ['V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=']; +const randomCount = 1; +let cookiesArr = [], cookie = '', message = ''; +const inviteCodes = ['PDPM257r_KuQhil2Y7koNw==']; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; if ($.isNode()) { Object.keys(jdCookieNode).forEach((item) => { @@ -46,6 +43,7 @@ if ($.isNode()) { cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]) } !(async () => { + await requireConfig(); if (!cookiesArr[0]) { $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); return; @@ -57,6 +55,8 @@ if ($.isNode()) { $.index = i + 1; $.isLogin = true; $.nickName = ''; + $.ele = 0; + message = ''; await TotalBean(); console.log(`\n***********开始【京东账号${$.index}】${$.nickName || $.UserName}********\n`); if (!$.isLogin) { @@ -69,11 +69,7 @@ if ($.isNode()) { } continue } - message = ''; - subTitle = ''; - goodsUrl = ''; - taskInfoKey = []; - option = {}; + await shareCodesFormat(); await jdDreamFactory(); } } @@ -87,10 +83,9 @@ if ($.isNode()) { async function jdDreamFactory() { - ele = 0; await userInfo(); - await helpFriends(inviteCodes) - if ($.unActive) return + await helpFriends(); + if (!$.unActive) return await getUserElectricity(); await taskList(); await investElectric(); @@ -102,37 +97,37 @@ async function jdDreamFactory() { // 收取发电机的电力 -function collectElectricity(facId = factoryId, help = false, master) { +function collectElectricity(facId = $.factoryId, help = false, master) { return new Promise(async resolve => { - let url = `/dreamfactory/generator/CollectCurrentElectricity?zone=dream_factory&apptoken=&pgtimestamp=&phoneID=&factoryid=${facId}&doubleflag=1&sceneval=2&g_login_type=1`; - if (help && master) { - url = `/dreamfactory/generator/CollectCurrentElectricity?zone=dream_factory&factoryid=${facId}&master=${master}&sceneval=2&g_login_type=1`; + // let url = `/dreamfactory/generator/CollectCurrentElectricity?zone=dream_factory&apptoken=&pgtimestamp=&phoneID=&factoryid=${facId}&doubleflag=1&sceneval=2&g_login_type=1`; + // if (help && master) { + // url = `/dreamfactory/generator/CollectCurrentElectricity?zone=dream_factory&factoryid=${facId}&master=${master}&sceneval=2&g_login_type=1`; + // } + let body = `factoryid=${facId}`; + if (master) { + body += `&master=${master}`; } - $.get(taskurl(url), (err, resp, data) => { + $.get(taskurl(`generator/CollectCurrentElectricity`, body), (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) console.log(`${$.name} API请求失败,请检查网路重试`) } else { - if (data) { + if (safeGet(data)) { data = JSON.parse(data); if (data['ret'] === 0) { if (help) { - ele += Number(data.data['loginPinCollectElectricity']) + $.ele += Number(data.data['loginPinCollectElectricity']) console.log(`帮助好友收取 ${data.data['CollectElectricity']} 电力,获得 ${data.data['loginPinCollectElectricity']} 电力`); message += `【帮助好友】帮助成功,获得 ${data.data['loginPinCollectElectricity']} 电力\n` } else { - - ele += Number(data.data['CollectElectricity']) + $.ele += Number(data.data['CollectElectricity']) console.log(`收取 ${data.data['loginPinCollectElectricity']} 电力`); message += `【收取发电站】收取成功,获得 ${data.data['CollectElectricity']} 电力\n` } - } else { console.log(data.msg) } - } else { - console.log(`京东服务器返回空数据`) } } } catch (e) { @@ -147,15 +142,14 @@ function collectElectricity(facId = factoryId, help = false, master) { // 投入电力 function investElectric() { return new Promise(async resolve => { - const url = `/dreamfactory/userinfo/InvestElectric?zone=dream_factory&productionId=${productionId}&sceneval=2&g_login_type=1`; - $.get(taskurl(url), (err, resp, data) => { + // const url = `/dreamfactory/userinfo/InvestElectric?zone=dream_factory&productionId=${$.productionId}&sceneval=2&g_login_type=1`; + $.get(taskurl('userinfo/InvestElectric', `productionId=${$.productionId}`), (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) console.log(`${$.name} API请求失败,请检查网路重试`) } else { - if (data) { - // console.log(data) + if (safeGet(data)) { data = JSON.parse(data); if (data.ret === 0) { console.log(`成功投入电力${data.data.investElectric}电力`); @@ -164,8 +158,6 @@ function investElectric() { console.log(`投入失败,${data.msg}`); message += `【投入电力】投入失败,${data.msg}\n`; } - } else { - console.log(`京东服务器返回空数据`) } } } catch (e) { @@ -180,18 +172,17 @@ function investElectric() { // 初始化任务 function taskList() { return new Promise(async resolve => { - const url = `/newtasksys/newtasksys_front/GetUserTaskStatusList?source=dreamfactory&bizCode=dream_factory&sceneval=2&g_login_type=1`; - $.get(taskurl(url), async (err, resp, data) => { + // const url = `/newtasksys/newtasksys_front/GetUserTaskStatusList?source=dreamfactory&bizCode=dream_factory&sceneval=2&g_login_type=1`; + $.get(newtasksysUrl('GetUserTaskStatusList'), async (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) console.log(`${$.name} API请求失败,请检查网路重试`) } else { - if (data) { - // console.log(data) + if (safeGet(data)) { data = JSON.parse(data); let userTaskStatusList = data['data']['userTaskStatusList']; - for (let i = 0; i < userTaskStatusList.length; ++i) { + for (let i = 0; i < userTaskStatusList.length; i++) { const vo = userTaskStatusList[i]; if (vo['awardStatus'] !== 1) { if (vo.completedTimes >= vo.targetTimes) { @@ -222,10 +213,8 @@ function taskList() { } } } - console.log(`完成任务:共领取${ele}电力`) - message += `【每日任务】领奖成功,共计 ${ele} 电力\n`; - } else { - console.log(`京东服务器返回空数据`) + console.log(`完成任务:共领取${$.ele}电力`) + message += `【每日任务】领奖成功,共计 ${$.ele} 电力\n`; } } } catch (e) { @@ -240,28 +229,24 @@ function taskList() { // 获得用户电力情况 function getUserElectricity() { return new Promise(async resolve => { - const url = `/dreamfactory/generator/QueryCurrentElectricityQuantity?zone=dream_factory&factoryid=${factoryId}&sceneval=2&g_login_type=1` - $.get(taskurl(url), async (err, resp, data) => { + // const url = `/dreamfactory/generator/QueryCurrentElectricityQuantity?zone=dream_factory&factoryid=${$.factoryId}&sceneval=2&g_login_type=1` + $.get(taskurl(`generator/QueryCurrentElectricityQuantity`, `factoryid=${$.factoryId}`), async (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) console.log(`${$.name} API请求失败,请检查网路重试`) } else { - if (data) { - // console.log(data) + if (safeGet(data)) { data = JSON.parse(data); if (data['ret'] === 0) { console.log(`发电机:当前 ${data.data.currentElectricityQuantity} 电力,最大值 ${data.data.maxElectricityQuantity} 电力`) - if (data.data.currentElectricityQuantity === data.data.maxElectricityQuantity - && data.data.doubleElectricityFlag) { + if (data.data.currentElectricityQuantity === data.data.maxElectricityQuantity && data.data.doubleElectricityFlag) { console.log(`发电机:电力可翻倍并收获`) await collectElectricity() } else { message += `【发电机电力】当前 ${data.data.currentElectricityQuantity} 电力,未达到收获标准\n` } } - } else { - console.log(`京东服务器返回空数据`) } } } catch (e) { @@ -276,14 +261,14 @@ function getUserElectricity() { // 收取招工电力 function hireAward() { return new Promise(async resolve => { - const url = `/dreamfactory/friend/HireAward?zone=dream_factory&date=${new Date().Format("yyyyMMdd")}&type=0&sceneval=2&g_login_type=1` - $.get(taskurl(url), async (err, resp, data) => { + // const url = `/dreamfactory/friend/HireAward?zone=dream_factory&date=${new Date().Format("yyyyMMdd")}&type=0&sceneval=2&g_login_type=1` + $.get(taskurl('friend/HireAward', `date=${new Date().Format("yyyyMMdd")}&type=0`), async (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) console.log(`${$.name} API请求失败,请检查网路重试`) } else { - if (data) { + if (safeGet(data)) { data = JSON.parse(data); if (data['ret'] === 0) { console.log(`打工电力:收取成功`) @@ -292,8 +277,6 @@ function hireAward() { console.log(`打工电力:收取失败,${data.msg}`) message += `【打工电力】收取失败,${data.msg}\n` } - } else { - console.log(`京东服务器返回空数据`) } } } catch (e) { @@ -304,33 +287,47 @@ function hireAward() { }) }) } -async function helpFriends(codes) { - for (let code of codes) { +async function helpFriends() { + for (let code of $.newShareCodes) { if (code) { + if ($.encryptPin === code) { + console.log(`不能为自己助力,跳过`); + continue; + } await assistFriend(code); } } } // 帮助用户 function assistFriend(sharepin) { - return new Promise(async resolve => { - const url = `/dreamfactory/friend/AssistFriend?zone=dream_factory&sharepin=${escape(sharepin)}&sceneval=2&g_login_type=1` - $.get(taskurl(url), async (err, resp, data) => { + // const url = `/dreamfactory/friend/AssistFriend?zone=dream_factory&sharepin=${escape(sharepin)}&sceneval=2&g_login_type=1` + const options = { + 'url': `https://m.jingxi.com/dreamfactory/friend/AssistFriend?zone=dream_factory&sharepin=${escape(sharepin)}&sceneval=2&g_login_type=1`, + 'headers': { + "Host": "wq.jd.com", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), + "Accept": "*/*", + "Accept-Language": "zh,en-US;q=0.7,en;q=0.3", + "Accept-Encoding": "gzip, deflate, br", + "Connection": "keep-alive", + "Referer": "https://wqsd.jd.com/pingou/dream_factory/index.html", + "Cookie": cookie + } + } + $.get(options, (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) console.log(`${$.name} API请求失败,请检查网路重试`) } else { - if (data) { + if (safeGet(data)) { data = JSON.parse(data); if (data['ret'] === 0) { console.log(`助力朋友:${sharepin}成功`) } else { console.log(`助力朋友[${sharepin}]失败:${data.msg}`) } - } else { - console.log(`京东服务器返回空数据`) } } } catch (e) { @@ -345,19 +342,18 @@ function assistFriend(sharepin) { // 任务领奖 function completeTask(taskId, taskName) { return new Promise(async resolve => { - const url = `/newtasksys/newtasksys_front/Award?source=dreamfactory&bizCode=dream_factory&taskId=${taskId}&sceneval=2&g_login_type=1`; - $.get(taskurl(url), (err, resp, data) => { + // const url = `/newtasksys/newtasksys_front/Award?source=dreamfactory&bizCode=dream_factory&taskId=${taskId}&sceneval=2&g_login_type=1`; + $.get(newtasksysUrl('Award', taskId), (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) console.log(`${$.name} API请求失败,请检查网路重试`) } else { - if (data) { - // console.log(data) + if (safeGet(data)) { data = JSON.parse(data); switch (data['data']['awardStatus']) { case 1: - ele += Number(data['data']['prizeInfo'].replace('\\n', '')) + $.ele += Number(data['data']['prizeInfo'].replace('\\n', '')) console.log(`领取${taskName}任务奖励成功,收获:${Number(data['data']['prizeInfo'].replace('\\n', ''))}电力`); break case 1013: @@ -368,8 +364,11 @@ function completeTask(taskId, taskName) { console.log(`领取${taskName}任务奖励失败,${data['msg']}`) break } - } else { - console.log(`京东服务器返回空数据`) + // if (data['ret'] === 0) { + // console.log("做任务完成!") + // } else { + // console.log(`异常:${JSON.stringify(data)}`) + // } } } } catch (e) { @@ -384,21 +383,20 @@ function completeTask(taskId, taskName) { // 完成任务 function doTask(taskId) { return new Promise(async resolve => { - const url = `/newtasksys/newtasksys_front/DoTask?source=dreamfactory&bizCode=dream_factory&taskId=${taskId}&sceneval=2&g_login_type=1`; - $.get(taskurl(url), (err, resp, data) => { + // const url = `/newtasksys/newtasksys_front/DoTask?source=dreamfactory&bizCode=dream_factory&taskId=${taskId}&sceneval=2&g_login_type=1`; + $.get(newtasksysUrl('DoTask', taskId), (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) console.log(`${$.name} API请求失败,请检查网路重试`) } else { - if (data) { - // console.log(data) + if (safeGet(data)) { data = JSON.parse(data); - if (data.ret === 0) { + if (data['ret'] === 0) { console.log("做任务完成!") + } else { + console.log(`异常:${JSON.stringify(data)}`) } - } else { - console.log(`京东服务器返回空数据`) } } } catch (e) { @@ -413,129 +411,264 @@ function doTask(taskId) { // 初始化个人信息 function userInfo() { return new Promise(async resolve => { - const url = `/dreamfactory/userinfo/GetUserInfo?zone=dream_factory&pin=&sharePin=&shareType=&materialTuanPin=&materialTuanId=&sceneval=2`; - $.get(taskurl(url), async (err, resp, data) => { - data = JSON.parse(data); - if (data['ret'] === 0) { - data = data['data']; - if (data.factoryList && data.productionList) { - const production = data.productionList[0]; - const factory = data.factoryList[0]; - factoryId = factory.factoryId;//工厂ID - productionId = production.productionId;//商品ID - subTitle = data.user.pin; - await GetCommodityDetails(production.commodityDimId); - await DrawProductionStagePrize(productionId); - console.log(`当前电力:${data.user.electric}`) - console.log(`分享码: ${data.user.encryptPin}`); - console.log(`生产进度:${(production.investedElectric / production.needElectric).toFixed(2) * 100}%`); - message += `【京东账号${$.index}】${$.nickName}\n` - message += `【生产商品】${$.productName}\n`; - message += `【生产进度】${((production.investedElectric / production.needElectric) * 100).toFixed(2)}%\n`; - if (production.investedElectric >= production.needElectric) { - $.msg($.name, ``, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,请速去兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://wqsd.jd.com/pingou/dream_factory/index.html%22%20%7D'}) - await notify.sendNotify(`${$.name} - 京东账号${$.index} - ${$.nickName}`, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,请速去兑换`) - } + $.get(taskurl('userinfo/GetUserInfo', `pin=&sharePin=&shareType=&materialTuanPin=&materialTuanId=`), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) } else { - $.unActive = true;//标记是否开启了京喜活动或者选购了商品进行生产 - if (!data.factoryList) { - console.log('【提示】此账号京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动\n'); - $.msg($.name, '', `【提示】此账号[${$.nickName}]京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动`); - } else if (data.factoryList && !data.productionList) { - console.log(`【提示】此账号京喜工厂未选购商品\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 选购\n`) - $.msg($.name, '', `【提示】此账号[${$.nickName}]京喜工厂未选择商品\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 选择商品`); + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + data = data['data']; + $.unActive = true;//标记是否开启了京喜活动或者选购了商品进行生产 + $.encryptPin = ''; + if (data.factoryList && data.productionList) { + const production = data.productionList[0]; + const factory = data.factoryList[0]; + $.factoryId = factory.factoryId;//工厂ID + $.productionId = production.productionId;//商品ID + $.commodityDimId = production.commodityDimId; + $.encryptPin = data.user.encryptPin; + // subTitle = data.user.pin; + await GetCommodityDetails();//获取已选购的商品信息 + await DrawProductionStagePrize();//领取红包 + console.log(`当前电力:${data.user.electric}`) + console.log(`分享码: ${data.user.encryptPin}`); + console.log(`生产进度:${(production.investedElectric / production.needElectric).toFixed(2) * 100}%`); + message += `【京东账号${$.index}】${$.nickName}\n` + message += `【生产商品】${$.productName}\n`; + message += `【生产进度】${((production.investedElectric / production.needElectric) * 100).toFixed(2)}%\n`; + if (production.investedElectric >= production.needElectric) { + $.msg($.name, ``, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,请速去兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://wqsd.jd.com/pingou/dream_factory/index.html%22%20%7D'}) + await notify.sendNotify(`${$.name} - 京东账号${$.index} - ${$.nickName}`, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,请速去兑换`) + } + } else { + $.unActive = false;//标记是否开启了京喜活动或者选购了商品进行生产 + if (!data.factoryList) { + console.log('【提示】此账号京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动\n'); + $.msg($.name, '【提示】', `京东账号${$.index}[${$.nickName}]京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动`); + } else if (data.factoryList && !data.productionList) { + console.log(`【提示】此账号京喜工厂未选购商品\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 选购\n`) + $.msg($.name, '【提示】', `京东账号${$.index}[${$.nickName}]京喜工厂未选择商品\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 选择商品`); + } + } + } else { + console.log(`异常:${JSON.stringify(data)}`) + } } } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); } - resolve() }) }) } //查询当前生产的商品名称 -function GetCommodityDetails(commodityDimId) { +function GetCommodityDetails() { return new Promise(async resolve => { - const url = `/dreamfactory/diminfo/GetCommodityDetails?zone=dream_factory&sceneval=2&g_login_type=1&commodityId=${commodityDimId}`; - $.get(taskurl(url), (err, resp, data) => { - data = JSON.parse(data); - if (data['ret'] === 0) { - data = data['data']; - $.productName = data['commodityList'][0].name; + // const url = `/dreamfactory/diminfo/GetCommodityDetails?zone=dream_factory&sceneval=2&g_login_type=1&commodityId=${$.commodityDimId}`; + $.get(taskurl('diminfo/GetCommodityDetails', `commodityId=${$.commodityDimId}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + data = data['data']; + $.productName = data['commodityList'][0].name; + } else { + console.log(`异常:${JSON.stringify(data)}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); } - resolve() }) }) } //领取红包 -function DrawProductionStagePrize(productionId) { +function DrawProductionStagePrize() { return new Promise(async resolve => { - const url = `/dreamfactory/userinfo/DrawProductionStagePrize?zone=dream_factory&sceneval=2&g_login_type=1&productionId=${productionId}`; - $.get(taskurl(url), (err, resp, data) => { - console.log(`领取红包(测试中)结果:${data}`) - data = JSON.parse(data); - if (data['ret'] === 0) { - // data = data['data']; - // $.productName = data['commodityList'][0].name; + // const url = `/dreamfactory/userinfo/DrawProductionStagePrize?zone=dream_factory&sceneval=2&g_login_type=1&productionId=${$.productionId}`; + $.get(taskurl('userinfo/DrawProductionStagePrize', `productionId=${$.productionId}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + console.log(`领取红包功能(测试中):${data}`); + // if (safeGet(data)) { + // data = JSON.parse(data); + // if (data['ret'] === 0) { + // + // } else { + // console.log(`异常:${JSON.stringify(data)}`) + // } + // } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); } - resolve() }) }) } +//偷好友的电力 function stealFriend() { return new Promise(async resolve => { - const url = `//dreamfactory/friend/QueryFactoryManagerList?zone=dream_factory&sceneval=2`; - $.get(taskurl(url), async (err, resp, data) => { - data = JSON.parse(data); - if (data['ret'] === 0) { - data = data['data']; - for (let i = 0; i < data.list.length; ++i) { - let pin = data.list[i]['encryptPin']; - const facId = await getFactoryIdByPin(pin); - if (facId) await collectElectricity(facId,true, data.list[i]['key']) + $.get(taskurl('friend/QueryFactoryManagerList', 'sort=0'), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + data = data['data']; + for (let i = 0; i < data.list.length; i++) { + let pin = data.list[i]['encryptPin']; + await getFactoryIdByPin(pin); + if ($.stealFactoryId) await collectElectricity($.stealFactoryId,true, data.list[i]['key']) + } + } else { + console.log(`异常:${JSON.stringify(data)}`) + } + } } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); } - resolve() }) }) } function getFactoryIdByPin(pin) { return new Promise((resolve, reject) => { - const url = `/dreamfactory/userinfo/GetUserInfoByPin?zone=dream_factory&pin=${pin}&sceneval=2`; - $.get(taskurl(url), (err, resp, data) => { - data = JSON.parse(data); - if (data['ret'] === 0) { - if (data.data.factoryList) { - //做此判断,有时候返回factoryList为null - resolve(data['data']['factoryList'][0]['factoryId']) + // const url = `/dreamfactory/userinfo/GetUserInfoByPin?zone=dream_factory&pin=${pin}&sceneval=2`; + $.get(taskurl('userinfo/GetUserInfoByPin', `pin=${pin}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) } else { - resolve(); + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + if (data.data.factoryList) { + //做此判断,有时候返回factoryList为null + // resolve(data['data']['factoryList'][0]['factoryId']) + $.stealFactoryId = data['data']['factoryList'][0]['factoryId']; + } + } else { + console.log(`异常:${JSON.stringify(data)}`) + } + } } - } else { - reject() + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); } }) }) } async function showMsg() { - let ctrTemp; - if ($.isNode() && process.env.DREAMFACTORY_NOTIFY_CONTROL) { - ctrTemp = `${process.env.DREAMFACTORY_NOTIFY_CONTROL}` === 'false'; - } else if ($.getdata('jdDreamFactory')) { - ctrTemp = $.getdata('jdDreamFactory') === 'false'; - } else { - ctrTemp = `${jdNotify}` === 'false'; - } - if (ctrTemp) { - $.msg($.name, subTitle, message, option); - if ($.isNode()) { - await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `${subTitle}\n${message}`); + return new Promise(async resolve => { + let ctrTemp; + if ($.isNode() && process.env.DREAMFACTORY_NOTIFY_CONTROL) { + ctrTemp = `${process.env.DREAMFACTORY_NOTIFY_CONTROL}` === 'false'; + } else if ($.getdata('jdDreamFactory')) { + ctrTemp = $.getdata('jdDreamFactory') === 'false'; + } else { + ctrTemp = `${jdNotify}` === 'false'; } - } else { - $.log(`\n${message}\n`); - } + if (ctrTemp) { + $.msg($.name, '', message); + if ($.isNode()) { + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `${message}`); + } + } else { + $.log(`\n${message}\n`); + } + resolve() + }) +} +function readShareCode() { + console.log(`开始`) + return new Promise(async resolve => { + $.get({url: `http://api.turinglabs.net/api/v1/jd/jxfactory/read/${randomCount}/`}, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + console.log(`随机取个${randomCount}码放到您固定的互助码后面`) + data = JSON.parse(data); + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + // await $.wait(2000); + // resolve() + }) +} +//格式化助力码 +function shareCodesFormat() { + return new Promise(async resolve => { + // console.log(`第${$.index}个京东账号的助力码:::${$.shareCodesArr[$.index - 1]}`) + $.newShareCodes = []; + if ($.shareCodesArr[$.index - 1]) { + $.newShareCodes = $.shareCodesArr[$.index - 1].split('@'); + } else { + console.log(`由于您第${$.index}个京东账号未提供shareCode,将采纳本脚本自带的助力码\n`) + const tempIndex = $.index > inviteCodes.length ? (inviteCodes.length - 1) : ($.index - 1); + $.newShareCodes = inviteCodes[tempIndex].split('@'); + } + const readShareCodeRes = await readShareCode(); + if (readShareCodeRes && readShareCodeRes.code === 200) { + $.newShareCodes = [...new Set([...$.newShareCodes, ...(readShareCodeRes.data || [])])]; + } + console.log(`第${$.index}个京东账号将要助力的好友${JSON.stringify($.newShareCodes)}`) + resolve(); + }) +} +function requireConfig() { + return new Promise(resolve => { + console.log(`开始获取${$.name}配置文件\n`); + //Node.js用户请在jdCookie.js处填写京东ck; + const shareCodes = $.isNode() ? require('./jdDreamFactoryShareCodes.js') : ''; + console.log(`共${cookiesArr.length}个京东账号\n`); + $.shareCodesArr = []; + if ($.isNode()) { + Object.keys(shareCodes).forEach((item) => { + if (shareCodes[item]) { + $.shareCodesArr.push(shareCodes[item]) + } + }) + } + // console.log(`\n种豆得豆助力码::${JSON.stringify($.shareCodesArr)}`); + console.log(`您提供了${$.shareCodesArr.length}个账号的${$.name}助力码\n`); + resolve() + }) } - function TotalBean() { return new Promise(async resolve => { const options = { @@ -576,24 +709,52 @@ function TotalBean() { }) }) } +function safeGet(data) { + try { + if (typeof JSON.parse(data) == "object") { + return true; + } + } catch (e) { + console.log(e); + console.log(`京东服务器访问数据为空,请检查自身设备网络情况`); + return false; + } +} -// 生成url -function taskurl(url, body) { +function taskurl(functionId, body = '') { return { - url: `${JD_API_HOST}${url}`, + url: `${JD_API_HOST}/dreamfactory/${functionId}?zone=dream_factory&${body}&sceneval=2&g_login_type=1`, headers: { 'Cookie': cookie, 'Host': 'm.jingxi.com', 'Accept': '*/*', 'Connection': 'keep-alive', - 'User-Agent': 'jdpingou;iPhone;3.14.4;14.0;ae75259f6ca8378672006fc41079cd8c90c53be8;network/wifi;model/iPhone10,2;appBuild/100351;ADID/00000000-0000-0000-0000-000000000000;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/1;hasOCPay/0;supportBestPay/0;session/62;pap/JA2015_311210;brand/apple;supportJDSHWK/1;Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), + 'Accept-Language': 'zh-cn', + 'Referer': 'https://wqsd.jd.com/pingou/dream_factory/index.html', + 'Accept-Encoding': 'gzip, deflate, br', + } + } +} +function newtasksysUrl(functionId, taskId) { + let url = `${JD_API_HOST}/newtasksys/newtasksys_front/${functionId}?source=dreamfactory&bizCode=dream_factory&sceneval=2&g_login_type=1`; + if (taskId) { + url += `&taskId=${taskId}`; + } + return { + url, + "headers": { + 'Cookie': cookie, + 'Host': 'm.jingxi.com', + 'Accept': '*/*', + 'Connection': 'keep-alive', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), 'Accept-Language': 'zh-cn', 'Referer': 'https://wqsd.jd.com/pingou/dream_factory/index.html', 'Accept-Encoding': 'gzip, deflate, br', } } } - Date.prototype.Format = function (fmt) { //author: meizz var o = { "M+": this.getMonth() + 1, //月份 @@ -613,274 +774,4 @@ Date.prototype.Format = function (fmt) { //author: meizz } // 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, o) => { - 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.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 o = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); - o = o ? 1 * o : 20, o = e && e.timeout ? e.timeout : o; - const [r, h] = i.split("@"), a = { - url: `http://${h}/v1/scripting/evaluate`, - body: {script_text: t, mock_type: "cron", timeout: o}, - headers: {"X-Key": r, 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), o = JSON.stringify(this.data); - s ? this.fs.writeFileSync(t, o) : i ? this.fs.writeFileSync(e, o) : this.fs.writeFileSync(t, o) - } - } - - lodash_get(t, e, s) { - const i = e.replace(/\[(\d+)\]/g, ".$1").split("."); - let o = t; - for (const t of i) if (o = Object(o)[t], void 0 === o) return s; - return o - } - - 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), o = s ? this.getval(s) : ""; - if (o) try { - const t = JSON.parse(o); - e = t ? this.lodash_get(t, i, "") : e - } catch (t) { - e = "" - } - } - return e - } - - setdata(t, e) { - let s = !1; - if (/^@/.test(e)) { - const [, i, o] = /^@(.*?)\.(.*?)$/.exec(e), r = this.getval(i), h = i ? "null" === r ? null : r || "{}" : "{}"; - try { - const e = JSON.parse(h); - this.lodash_set(e, o, t), s = this.setval(JSON.stringify(e), i) - } catch (e) { - const r = {}; - this.lodash_set(r, o, t), s = this.setval(JSON.stringify(r), 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() ? $httpClient.get(t, (t, s, i) => { - !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) - }) : this.isQuanX() ? $task.fetch(t).then(t => { - const {statusCode: s, statusCode: i, headers: o, body: r} = t; - e(null, {status: s, statusCode: i, headers: o, body: r}, r) - }, t => e(t)) : this.isNode() && (this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { - try { - 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: o, body: r} = t; - e(null, {status: s, statusCode: i, headers: o, body: r}, r) - }, t => e(t))) - } - - 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()) $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", $task.fetch(t).then(t => { - const {statusCode: s, statusCode: i, headers: o, body: r} = t; - e(null, {status: s, statusCode: i, headers: o, body: r}, r) - }, 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: o, body: r} = t; - e(null, {status: s, statusCode: i, headers: o, body: r}, r) - }, t => e(t)) - } - } - - 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 = "", o) { - const r = t => { - if (!t || !this.isLoon() && this.isSurge()) return t; - if ("string" == typeof t) return this.isLoon() ? t : this.isQuanX() ? {"open-url": t} : void 0; - if ("object" == typeof t) { - if (this.isLoon()) { - let e = t.openUrl || t["open-url"], s = t.mediaUrl || t["media-url"]; - return {openUrl: e, mediaUrl: s} - } - if (this.isQuanX()) { - let e = t["open-url"] || t.openUrl, s = t["media-url"] || t.mediaUrl; - return {"open-url": e, "media-url": s} - } - } - }; - this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, r(o)) : this.isQuanX() && $notify(e, s, i, r(o))); - 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) -} +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)} \ No newline at end of file From 86f825f0c167d3fac064a2b12d54a35be0d124f2 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 28 Nov 2020 15:20:49 +0800 Subject: [PATCH 184/290] update --- jdDreamFactoryShareCodes.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 jdDreamFactoryShareCodes.js diff --git a/jdDreamFactoryShareCodes.js b/jdDreamFactoryShareCodes.js new file mode 100644 index 0000000..b17202a --- /dev/null +++ b/jdDreamFactoryShareCodes.js @@ -0,0 +1,31 @@ +/* +京喜工厂互助码 +此文件为Node.js专用。其他用户请忽略 +支持京东N个账号 + */ +//云服务器腾讯云函数等NOde.js用户在此处填写东东萌宠的好友码。 +// github action用户的好友互助码填写到Action->Settings->Secrets->new Secret里面(Name填写 PLANT_BEAN_SHARECODES(此处的Name必须按此来写,不能随意更改),内容处填写互助码,填写规则如下) +// 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例 +// 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2 +let shareCodes = [ + 'V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=@Bo-jnVs_m9uBvbRzraXcSA==',//账号一的好友shareCode,不同好友中间用@符号隔开 + 'V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=@Bo-jnVs_m9uBvbRzraXcSA==',//账号二的好友shareCode,不同好友中间用@符号隔开 +] +// 判断github action里面是否有东东萌宠互助码 +if (process.env.DREAM_FACTORY_SHARE_CODES) { + if (process.env.DREAM_FACTORY_SHARE_CODES.indexOf('&') > -1) { + console.log(`您的互助码选择的是用&隔开\n`) + shareCodes = process.env.DREAM_FACTORY_SHARE_CODES.split('&'); + } else if (process.env.DREAM_FACTORY_SHARE_CODES.indexOf('\n') > -1) { + console.log(`您的互助码选择的是用换行隔开\n`) + shareCodes = process.env.DREAM_FACTORY_SHARE_CODES.split('\n'); + } else { + shareCodes = process.env.DREAM_FACTORY_SHARE_CODES.split(); + } +} else if (process.env.DREAM_FACTORY_SHARE_CODES) { + console.log(`由于您secret里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`) +} +for (let i = 0; i < shareCodes.length; i++) { + const index = (i + 1 === 1) ? '' : (i + 1); + exports['shareCodes' + index] = shareCodes[i]; +} \ No newline at end of file From b88b06f4250a6332b44e68a4b66a6581e22ad241 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 28 Nov 2020 15:22:30 +0800 Subject: [PATCH 185/290] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20secret/=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- githubAction.md | 1 + 1 file changed, 1 insertion(+) diff --git a/githubAction.md b/githubAction.md index 203e5ad..0287af8 100644 --- a/githubAction.md +++ b/githubAction.md @@ -110,6 +110,7 @@ | `PLANT_BEAN_SHARECODES` | 种豆得豆互助码 | 非必须 | 填写规则请看 [jdPlantBeanShareCodes.js](https://github.com/lxk0301/jd_scripts/blob/master/jdPlantBeanShareCodes.js) 或见下方[互助码的填写规则](#互助码的填写规则) | | `SUPERMARKET_SHARECODES`| 京小超商圈互助码 | 非必须 | 填写规则请看 [jdSuperMarketShareCodes.js](https://github.com/lxk0301/jd_scripts/blob/master/jdSuperMarketShareCodes.js) 或见下方[互助码的填写规则](#互助码的填写规则) | | `DDFACTORY_SHARECODES`| 东东工厂互助码 | 非必须 | 填写规则请看 [jdFactoryShareCodes.js](https://github.com/lxk0301/jd_scripts/blob/master/jdFactoryShareCodes.js) 或见下方[互助码的填写规则](#互助码的填写规则) | +| `DREAM_FACTORY_SHARE_CODES`| 京喜工厂互助码 | 非必须 | 填写规则请看 [jdFactoryShareCodes.js](https://github.com/lxk0301/jd_scripts/blob/master/jdDreamFactoryShareCodes.js) 或见下方[互助码的填写规则](#互助码的填写规则) | | `TG_PROXY_HOST` | Telegram 代理的 IP | 非必须 | 代理类型为 http。例子:http代理 http://127.0.0.1:1080 则填写 127.0.0.1 | | `TG_PROXY_PORT` | Telegram 代理的端口 | 非必须 | 例子:http代理 http://127.0.0.1:1080 则填写 1080 | | `MONEY_TREE_SELL_FRUIT` | 摇钱树是否卖出金果 | 非必须 | 控制摇钱树脚本是否自动卖出金果兑换成金币,`true`卖出,`false`不卖出,默认`true` | From 96185974a1c910771795af4d659b9a5331a5f4d3 Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Sat, 28 Nov 2020 15:33:34 +0800 Subject: [PATCH 186/290] Update deploy_tencent_scf.yml --- .github/workflows/deploy_tencent_scf.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml index 2246679..0450fda 100644 --- a/.github/workflows/deploy_tencent_scf.yml +++ b/.github/workflows/deploy_tencent_scf.yml @@ -58,6 +58,7 @@ jobs: if [ $PLANT_BEAN_SHARECODES ]; then sed -i "/variables/a\ PLANT_BEAN_SHARECODES: $PLANT_BEAN_SHARECODES" serverless.yml; fi; if [ $SUPERMARKET_SHARECODES ]; then sed -i "/variables/a\ SUPERMARKET_SHARECODES: $SUPERMARKET_SHARECODES" serverless.yml; fi; if [ $DDFACTORY_SHARECODES ]; then sed -i "/variables/a\ DDFACTORY_SHARECODES: $DDFACTORY_SHARECODES" serverless.yml; fi; + if [ $DREAM_FACTORY_SHARE_CODES ]; then sed -i "/variables/a\ DREAM_FACTORY_SHARE_CODES: $DREAM_FACTORY_SHARE_CODES" serverless.yml; fi; if [ $TG_PROXY_HOST ]; then sed -i "/variables/a\ TG_PROXY_HOST: $TG_PROXY_HOST" serverless.yml; fi; if [ $TG_PROXY_PORT ]; then sed -i "/variables/a\ TG_PROXY_PORT: $TG_PROXY_PORT" serverless.yml; fi; if [ $MONEY_TREE_SELL_FRUIT ]; then sed -i "/variables/a\ MONEY_TREE_SELL_FRUIT: $MONEY_TREE_SELL_FRUIT" serverless.yml; fi; From 39d2cb3205773bbf8096f0500badd22aa7ed3207 Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Sat, 28 Nov 2020 15:35:36 +0800 Subject: [PATCH 187/290] Update githubAction.md --- githubAction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/githubAction.md b/githubAction.md index 0287af8..1d00731 100644 --- a/githubAction.md +++ b/githubAction.md @@ -110,7 +110,7 @@ | `PLANT_BEAN_SHARECODES` | 种豆得豆互助码 | 非必须 | 填写规则请看 [jdPlantBeanShareCodes.js](https://github.com/lxk0301/jd_scripts/blob/master/jdPlantBeanShareCodes.js) 或见下方[互助码的填写规则](#互助码的填写规则) | | `SUPERMARKET_SHARECODES`| 京小超商圈互助码 | 非必须 | 填写规则请看 [jdSuperMarketShareCodes.js](https://github.com/lxk0301/jd_scripts/blob/master/jdSuperMarketShareCodes.js) 或见下方[互助码的填写规则](#互助码的填写规则) | | `DDFACTORY_SHARECODES`| 东东工厂互助码 | 非必须 | 填写规则请看 [jdFactoryShareCodes.js](https://github.com/lxk0301/jd_scripts/blob/master/jdFactoryShareCodes.js) 或见下方[互助码的填写规则](#互助码的填写规则) | -| `DREAM_FACTORY_SHARE_CODES`| 京喜工厂互助码 | 非必须 | 填写规则请看 [jdFactoryShareCodes.js](https://github.com/lxk0301/jd_scripts/blob/master/jdDreamFactoryShareCodes.js) 或见下方[互助码的填写规则](#互助码的填写规则) | +| `DREAM_FACTORY_SHARE_CODES`| 京喜工厂互助码 | 非必须 | 填写规则请看 [jdDreamFactoryShareCodes.js](https://github.com/lxk0301/jd_scripts/blob/master/jdDreamFactoryShareCodes.js) 或见下方[互助码的填写规则](#互助码的填写规则) | | `TG_PROXY_HOST` | Telegram 代理的 IP | 非必须 | 代理类型为 http。例子:http代理 http://127.0.0.1:1080 则填写 127.0.0.1 | | `TG_PROXY_PORT` | Telegram 代理的端口 | 非必须 | 例子:http代理 http://127.0.0.1:1080 则填写 1080 | | `MONEY_TREE_SELL_FRUIT` | 摇钱树是否卖出金果 | 非必须 | 控制摇钱树脚本是否自动卖出金果兑换成金币,`true`卖出,`false`不卖出,默认`true` | From 21214e281aae6a503a5c1ca636ed960c93ae6634 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 28 Nov 2020 16:23:34 +0800 Subject: [PATCH 188/290] update --- jd_dreamFactory.js | 57 +++++++++++++++++++++++++++++++++++++++++++--- jd_jdfactory.js | 2 +- 2 files changed, 55 insertions(+), 4 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 628bfc3..217f789 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -84,6 +84,7 @@ if ($.isNode()) { async function jdDreamFactory() { await userInfo(); + await JoinTuan(); await helpFriends(); if (!$.unActive) return await getUserElectricity(); @@ -584,7 +585,57 @@ function getFactoryIdByPin(pin) { }) }) } - +//开团API +function CreateTuan() { + return new Promise((resolve) => { + $.get(taskurl('tuan/CreateTuan', `activeId=${escape('ilOin38J30PcT9xnWbx9lw==')}&isOpenApp=1&_time=${Date.now()}&_=${Date.now()}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`); + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + console.log(`开团成功tuanId为\n${data.data['tuanId']}`); + } else { + console.log(`异常:${JSON.stringify(data)}`); + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function JoinTuan() { + return new Promise((resolve) => { + $.get(taskurl('tuan/JoinTuan', `activeId=${escape('ilOin38J30PcT9xnWbx9lw==')}&tuanId=${escape('QvqM7GtgQQJUO8jaz1CYBA==')}&isOpenApp=1&_time=${Date.now()}&_=${Date.now()}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`); + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + console.log(`参团成功\n${data.data['tuanId']}`); + } else { + console.log(`参团成功异常:${JSON.stringify(data)}`); + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} async function showMsg() { return new Promise(async resolve => { let ctrTemp; @@ -616,7 +667,7 @@ function readShareCode() { console.log(`${$.name} API请求失败,请检查网路重试`) } else { if (data) { - console.log(`随机取个${randomCount}码放到您固定的互助码后面`) + console.log(`随机取${randomCount}个码放到您固定的互助码后面`) data = JSON.parse(data); } } @@ -729,7 +780,7 @@ function taskurl(functionId, body = '') { 'Host': 'm.jingxi.com', 'Accept': '*/*', 'Connection': 'keep-alive', - 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), + 'User-Agent': 'jdpingou;iPhone;3.14.4;14.0;ae75259f6ca8378672006fc41079cd8c90c53be8;network/wifi;model/iPhone10,2;appBuild/100351;ADID/00000000-0000-0000-0000-000000000000;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/1;hasOCPay/0;supportBestPay/0;session/62;pap/JA2015_311210;brand/apple;supportJDSHWK/1;Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148', 'Accept-Language': 'zh-cn', 'Referer': 'https://wqsd.jd.com/pingou/dream_factory/index.html', 'Accept-Encoding': 'gzip, deflate, br', diff --git a/jd_jdfactory.js b/jd_jdfactory.js index 0dc70aa..79dcdda 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -585,7 +585,7 @@ function readShareCode() { console.log(`${$.name} API请求失败,请检查网路重试`) } else { if (data) { - console.log(`随机取个${randomCount}码放到您固定的互助码后面`) + console.log(`随机取${randomCount}个码放到您固定的互助码后面`) data = JSON.parse(data); } } From f9122f1c2ccb63a4e51f5d493f3e6dc5d3d45d61 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 28 Nov 2020 16:25:17 +0800 Subject: [PATCH 189/290] update --- jd_dreamFactory.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 217f789..3f03e9c 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -69,6 +69,7 @@ if ($.isNode()) { } continue } + // await JoinTuan(); await shareCodesFormat(); await jdDreamFactory(); } @@ -613,7 +614,7 @@ function CreateTuan() { } function JoinTuan() { return new Promise((resolve) => { - $.get(taskurl('tuan/JoinTuan', `activeId=${escape('ilOin38J30PcT9xnWbx9lw==')}&tuanId=${escape('QvqM7GtgQQJUO8jaz1CYBA==')}&isOpenApp=1&_time=${Date.now()}&_=${Date.now()}`), (err, resp, data) => { + $.get(taskurl('tuan/JoinTuan', `activeId=${escape('ilOin38J30PcT9xnWbx9lw==')}&tuanId=${escape('QvqM7GtgQQJUO8jaz1CYBA==')}&_time=${Date.now()}&_=${Date.now()}`), (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) From 196c59ccb5acea266069609e5ab39d9398613d92 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 28 Nov 2020 20:52:33 +0800 Subject: [PATCH 190/290] update --- jd_dreamFactory.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 3f03e9c..894cf10 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -614,7 +614,20 @@ function CreateTuan() { } function JoinTuan() { return new Promise((resolve) => { - $.get(taskurl('tuan/JoinTuan', `activeId=${escape('ilOin38J30PcT9xnWbx9lw==')}&tuanId=${escape('QvqM7GtgQQJUO8jaz1CYBA==')}&_time=${Date.now()}&_=${Date.now()}`), (err, resp, data) => { + const options = { + 'url': `https://m.jingxi.com/dreamfactory/tuan/JoinTuan?activeId=${escape('ilOin38J30PcT9xnWbx9lw==')}&tuanId=${escape('QvqM7GtgQQJUO8jaz1CYBA==')}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Host": "m.jingxi.com", + "Referer": "https://st.jingxi.com/pingou/dream_factory/divide.html?exchange=%7B%22activeId%22:%22ilOin38J30PcT9xnWbx9lw%3D%3D%22,%22sTuanId%22:%22QvqM7GtgQQJUO8jaz1CYBA%3D%3D%22,%22sPin%22:%22V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k%3D%22,%22sType%22:%22101%22%7D&ptag=139022.1.2?srv=jinshusongjin_https://wq.jd.com/cube/front/activePublish/dream_factory_report/380556.html_jing", + "User-Agent": "jdpingou;iPhone;3.15.2;13.5.1;90bab9217f465a83a99c0b554a946b0b0d5c2f7a;network/wifi;model/iPhone12,1;appBuild/100365;ADID/696F8BD2-0820-405C-AFC0-3C6D028040E5;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/1;hasOCPay/0;supportBestPay/0;session/14;pap/JA2015_311210;brand/apple;supportJDSHWK/1;" + } + } + $.get(options, (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) @@ -625,7 +638,7 @@ function JoinTuan() { if (data['ret'] === 0) { console.log(`参团成功\n${data.data['tuanId']}`); } else { - console.log(`参团成功异常:${JSON.stringify(data)}`); + console.log(`参团失败:${JSON.stringify(data)}`); } } } From 0e9f277b555e14f525a463499c45bfbc25db8abe Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 28 Nov 2020 21:48:19 +0800 Subject: [PATCH 191/290] =?UTF-8?q?=E8=87=AA=E7=94=A8,=E5=8D=8A=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=8F=90=E9=86=92=E5=BF=83=E6=84=BF=E5=8D=9550?= =?UTF-8?q?=E4=BA=AC=E8=B1=86=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backUp/jd_Goods.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 backUp/jd_Goods.js diff --git a/backUp/jd_Goods.js b/backUp/jd_Goods.js new file mode 100644 index 0000000..319dc6a --- /dev/null +++ b/backUp/jd_Goods.js @@ -0,0 +1,11 @@ +// 半自动提醒心愿单50京豆。 +// 15 */4 * * * AlipayManor.js + +const $ = new Env('心愿单50京豆'); + +$.msg($.name, "领50京豆啦", "https://h5.m.jd.com/babelDiy/Zeus/3mTNcpWt5JYh3aUCyo6gqKuF4pnx/index.html", {"open-url": "openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/3mTNcpWt5JYh3aUCyo6gqKuF4pnx/index.html%22%20%7D"}); + +$.done(); + +// 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)} \ No newline at end of file From 37f2fc107de41f539a486ba6878f9994367cfbee Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 28 Nov 2020 21:49:10 +0800 Subject: [PATCH 192/290] update --- backUp/jd_Goods.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backUp/jd_Goods.js b/backUp/jd_Goods.js index 319dc6a..9c6e2ba 100644 --- a/backUp/jd_Goods.js +++ b/backUp/jd_Goods.js @@ -1,5 +1,5 @@ // 半自动提醒心愿单50京豆。 -// 15 */4 * * * AlipayManor.js +// 15 */4 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/jd_Goods.js const $ = new Env('心愿单50京豆'); From cc0c703ea12b109a28aaecdd243770a16419230d Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Sun, 29 Nov 2020 09:27:42 +0800 Subject: [PATCH 193/290] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=91=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E4=B8=9C=E4=B8=9C=E8=B6=85=E5=B8=82Cron?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化云函数东东超市Cron --- serverless.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverless.yml b/serverless.yml index 332cf3d..64e177e 100644 --- a/serverless.yml +++ b/serverless.yml @@ -61,7 +61,7 @@ inputs: - timer: # 东东超市 parameters: name: jd_superMarket - cronExpression: "0 11 1-23/5 * * * *" + cronExpression: "0 15 * * * * *" enable: true argument: jd_superMarket - timer: # 京豆变动通知 # 京东排行榜 From 9bbb2b56e5e1d347caf5eb077090beda006dcc0b Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sun, 29 Nov 2020 13:37:52 +0800 Subject: [PATCH 194/290] =?UTF-8?q?=E6=8D=A2=E7=94=A8=E4=BA=AC=E5=96=9CAPP?= =?UTF-8?q?=E7=9A=84UA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 894cf10..1518a3c 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -589,7 +589,20 @@ function getFactoryIdByPin(pin) { //开团API function CreateTuan() { return new Promise((resolve) => { - $.get(taskurl('tuan/CreateTuan', `activeId=${escape('ilOin38J30PcT9xnWbx9lw==')}&isOpenApp=1&_time=${Date.now()}&_=${Date.now()}`), (err, resp, data) => { + const options = { + 'url': `https://m.jingxi.com/dreamfactory/tuan/CreateTuan?activeId=${escape('ilOin38J30PcT9xnWbx9lw==')}&isOpenApp=1&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Host": "m.jingxi.com", + "Referer": "https://st.jingxi.com/pingou/dream_factory/divide.html", + "User-Agent": "jdpingou;iPhone;3.15.2;13.5.1;90bab9217f465a83a99c0b554a946b0b0d5c2f7a;network/wifi;model/iPhone12,1;appBuild/100365;ADID/696F8BD2-0820-405C-AFC0-3C6D028040E5;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/1;hasOCPay/0;supportBestPay/0;session/14;pap/JA2015_311210;brand/apple;supportJDSHWK/1;" + } + } + $.get(options, (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) @@ -615,7 +628,7 @@ function CreateTuan() { function JoinTuan() { return new Promise((resolve) => { const options = { - 'url': `https://m.jingxi.com/dreamfactory/tuan/JoinTuan?activeId=${escape('ilOin38J30PcT9xnWbx9lw==')}&tuanId=${escape('QvqM7GtgQQJUO8jaz1CYBA==')}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, + 'url': `https://m.jingxi.com/dreamfactory/tuan/JoinTuan?activeId=${escape('ilOin38J30PcT9xnWbx9lw==')}&tuanId=${escape('3lSXPWXkC_7a5fF1gwYCTA==')}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", @@ -813,7 +826,7 @@ function newtasksysUrl(functionId, taskId) { 'Host': 'm.jingxi.com', 'Accept': '*/*', 'Connection': 'keep-alive', - 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), + 'User-Agent': "jdpingou;iPhone;3.15.2;13.5.1;90bab9217f465a83a99c0b554a946b0b0d5c2f7a;network/wifi;model/iPhone12,1;appBuild/100365;ADID/696F8BD2-0820-405C-AFC0-3C6D028040E5;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/1;hasOCPay/0;supportBestPay/0;session/14;pap/JA2015_311210;brand/apple;supportJDSHWK/1;", 'Accept-Language': 'zh-cn', 'Referer': 'https://wqsd.jd.com/pingou/dream_factory/index.html', 'Accept-Encoding': 'gzip, deflate, br', From 81cd12e54e999e60c668bdbe5221e2ceb450c045 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sun, 29 Nov 2020 20:47:03 +0800 Subject: [PATCH 195/290] update --- jd_joy_run.js | 44 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/jd_joy_run.js b/jd_joy_run.js index 0856e26..e987f88 100644 --- a/jd_joy_run.js +++ b/jd_joy_run.js @@ -1,6 +1,6 @@ /** 宠汪汪邀请助力与赛跑助力脚本,感谢github@Zero-S1提供帮助 - 更新时间:2020-11-16(宠汪汪助力更新Token的配置正则表达式已改) + 更新时间:2020-11-29(宠汪汪助力更新Token的配置正则表达式已改) token时效很短,几个小时就失效了,闲麻烦的放弃就行 每天拿到token后,可一次性运行完毕即可。 @@ -43,7 +43,7 @@ let invite_pins = ["jd_6cd93e613b0e5,被折叠的记忆33,jd_704a2e5e28a66,jd_45 //给下面好友赛跑助力 let run_pins = ["jd_6cd93e613b0e5,被折叠的记忆33,jd_704a2e5e28a66,jd_45a6b5953b15b,zooooo58"]; // $.LKYLToken = '76fe7794c475c18711e3b47185f114b5' || $.getdata('jdJoyRunToken'); -$.LKYLToken = $.getdata('jdJoyRunToken'); +// $.LKYLToken = $.getdata('jdJoyRunToken'); //Node.js用户请在jdCookie.js处填写京东ck; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; //IOS等用户直接用NobyDa的jd cookie @@ -101,7 +101,7 @@ if ($.isNode()) { } //获取来客有礼Token -let count = 0, countFlag = 0; +let count = 0; function getToken() { const url = $request.url; $.log(`${$.name}url\n${url}\n`) @@ -118,6 +118,15 @@ function getToken() { count = 0; $.setdata(`${count}`, 'countFlag'); $.msg($.name, '更新Token: 成功🎉', ``); + console.log(`开始上传Token`) + $.http.get({url: `http://ec2-3-87-209-33.compute-1.amazonaws.com/api/v1/jd/joy/${LKYLToken}/`}).then((resp) => { + if (resp.statusCode === 200) { + let { body } = resp; + console.log(`Token提交结果:${body}`) + body = JSON.parse(body); + console.log(`${body.message}`) + } + }); } $.setdata(LKYLToken, 'jdJoyRunToken'); } @@ -144,12 +153,39 @@ function getToken() { $.done() } } +function readToken() { + return new Promise(async resolve => { + $.get({url: `http://ec2-3-87-209-33.compute-1.amazonaws.com/api/v1/jd/joy/read/1/`}, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + console.log(data) + data = JSON.parse(data); + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} async function main() { - console.log(`打印token \n${$.getdata('jdJoyRunToken')}\n`) if (!cookiesArr[0]) { $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); return; } + const readTokenRes = await readToken(); + if (readTokenRes && readTokenRes.code === 200) { + $.LKYLToken = readTokenRes.data[0] || $.getdata('jdJoyRunToken'); + } else { + $.LKYLToken = $.getdata('jdJoyRunToken'); + } + console.log(`打印token \n${$.LKYLToken}\n`) if (!$.LKYLToken) { $.msg($.name, '【提示】请先获取来客有礼宠汪汪token', "微信搜索'来客有礼'小程序\n点击底部的'发现'Tab\n即可获取Token"); return; From c1b84d4a5b1689c01bdafff3cbe7824539eb5063 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sun, 29 Nov 2020 23:02:08 +0800 Subject: [PATCH 196/290] =?UTF-8?q?=E4=B8=9C=E4=B8=9C=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=80=BB=E8=BE=91,=E5=9C=A8=E6=9C=AA?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E4=BB=BB=E4=BD=95=E5=95=86=E5=93=81=E7=9A=84?= =?UTF-8?q?=E6=83=85=E5=86=B5=E4=B8=8B,=E5=A6=82=E6=9E=9C=E6=AD=A4?= =?UTF-8?q?=E6=97=B6=E7=94=B5=E9=87=8F=E6=BB=A1=E8=B6=B3=E5=85=91=E6=8D=A2?= =?UTF-8?q?=E6=95=B0=E9=87=8F=E6=9C=80=E5=A4=9A=E7=9A=84=E5=95=86=E5=93=81?= =?UTF-8?q?=E6=97=B6,=E5=8F=91=E9=80=81=E6=8F=90=E9=86=92=E9=80=9A?= =?UTF-8?q?=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_jdfactory.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/jd_jdfactory.js b/jd_jdfactory.js index 79dcdda..1405a28 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -198,6 +198,13 @@ async function algorithm() { } } else { console.log(`BoxJs或环境变量暂未提供心仪商品\n如需兑换心仪商品,请提供心仪商品名称\n`); + await jdfactory_getProductList(true); + if ($.canMakeList[0].couponCount > 0 && $.batteryValue * 1 >= $.canMakeList[0].fullScore) { + $.msg($.name, '', `京东账号${$.index}${$.nickName}\n当前总电量为:${$.batteryValue * 1}\n当前总电量为:${$.batteryValue * 1}\n【满足】兑换${$.canMakeList[0].name}所需总电量:${$.canMakeList[0].totalScore}\n请点击弹窗直达活动页面\n选择此心仪商品并手动投入电量兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `当前总电量为:${$.batteryValue * 1}\n【满足】兑换${$.canMakeList[0].name}所需总电量:${$.canMakeList[0].totalScore}\n请速去活动页面查看`); + } else { + console.log(`\n目前电量${$.batteryValue * 1},不满足兑换\n`) + } } } } else { @@ -477,7 +484,7 @@ function queryVkComponent() { console.log(`${JSON.stringify(err)}`) console.log(`${$.name} API请求失败,请检查网路重试`) } else { - console.log('queryVkComponent', data) + // console.log('queryVkComponent', data) if (safeGet(data)) { data = JSON.parse(data); } @@ -491,7 +498,7 @@ function queryVkComponent() { }) } //查询当前商品列表 -function jdfactory_getProductList(flag) { +function jdfactory_getProductList(flag = false) { return new Promise(resolve => { $.post(taskPostUrl('jdfactory_getProductList'), async (err, resp, data) => { try { @@ -503,6 +510,7 @@ function jdfactory_getProductList(flag) { data = JSON.parse(data); if (data.data.bizCode === 0) { $.canMakeList = data.data.result.canMakeList;//当前可选商品列表 sellOut:1为已抢光,0为目前可选择 + $.canMakeList.sort(sortCouponCount); if (!flag) { console.log(`商品名称 可选状态 剩余量`) for (let item of $.canMakeList) { @@ -526,6 +534,9 @@ function jdfactory_getProductList(flag) { }) }) } +function sortCouponCount(a, b) { + return b['couponCount'] - a['couponCount'] +} function jdfactory_getHomeData() { return new Promise(resolve => { $.post(taskPostUrl('jdfactory_getHomeData'), async (err, resp, data) => { @@ -535,7 +546,7 @@ function jdfactory_getHomeData() { console.log(`${$.name} API请求失败,请检查网路重试`) } else { if (safeGet(data)) { - console.log(data); + // console.log(data); data = JSON.parse(data); if (data.data.bizCode === 0) { $.haveProduct = data.data.result.haveProduct; From 6989dd65d86441948736b9f98951036d36deb56f Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sun, 29 Nov 2020 23:56:22 +0800 Subject: [PATCH 197/290] update --- jd_dreamFactory.js | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 1518a3c..e3fc3ca 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -128,7 +128,11 @@ function collectElectricity(facId = $.factoryId, help = false, master) { message += `【收取发电站】收取成功,获得 ${data.data['CollectElectricity']} 电力\n` } } else { - console.log(data.msg) + if (help) { + console.log(`收取好友电力失败:${data.msg}\n`); + } else { + console.log(`收取电力失败:${data.msg}\n`); + } } } } @@ -241,9 +245,10 @@ function getUserElectricity() { if (safeGet(data)) { data = JSON.parse(data); if (data['ret'] === 0) { - console.log(`发电机:当前 ${data.data.currentElectricityQuantity} 电力,最大值 ${data.data.maxElectricityQuantity} 电力`) + console.log(`发电机:当前 ${data.data.currentElectricityQuantity} 电力,最大值 ${data.data.maxElectricityQuantity} 电力,达到最大电量才会进行收取`) if (data.data.currentElectricityQuantity === data.data.maxElectricityQuantity && data.data.doubleElectricityFlag) { console.log(`发电机:电力可翻倍并收获`) + await shareReport(); await collectElectricity() } else { message += `【发电机电力】当前 ${data.data.currentElectricityQuantity} 电力,未达到收获标准\n` @@ -259,7 +264,38 @@ function getUserElectricity() { }) }) } - +//满电力的时候分享,电力翻倍 +function shareReport() { + return new Promise(async resolve => { + const options = { + 'url': `https://wq.jd.com/activetmp/helpdraw/sharereport?call=reportshare&active=dreamfactory_platform_test&hj=app&sharetype=2&idctime=${Date.now()}&reportrefer=http%3A%2F%2Fwq.jd.com%2Fcube%2Ffront%2FactivePublish%2Fdream_factory_report%2F380556.html&_=${Date.now()}&sceneval=2&g_login_type=1`, + 'headers': { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Host": "wq.jd.com", + "Referer": "https://wqsd.jd.com/pingou/dream_factory/index.html", + "User-Agent": "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0", + } + } + $.get(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + console.log(`\n分享获取翻倍电力功能(测试中):${data}\n`); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} // 收取招工电力 function hireAward() { return new Promise(async resolve => { From 702a2d612f06b2f860079f6c47eda90c02c056c6 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 30 Nov 2020 07:50:33 +0800 Subject: [PATCH 198/290] update --- jd_dreamFactory.js | 4 ++-- jd_joy_run.js | 13 +++++++------ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index e3fc3ca..e227a8d 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -664,7 +664,7 @@ function CreateTuan() { function JoinTuan() { return new Promise((resolve) => { const options = { - 'url': `https://m.jingxi.com/dreamfactory/tuan/JoinTuan?activeId=${escape('ilOin38J30PcT9xnWbx9lw==')}&tuanId=${escape('3lSXPWXkC_7a5fF1gwYCTA==')}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, + 'url': `https://m.jingxi.com/dreamfactory/tuan/JoinTuan?activeId=${escape('ilOin38J30PcT9xnWbx9lw==')}&tuanId=${escape('8W4VdqMEQfzmZnSGRgMRCw==')}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", @@ -685,7 +685,7 @@ function JoinTuan() { if (safeGet(data)) { data = JSON.parse(data); if (data['ret'] === 0) { - console.log(`参团成功\n${data.data['tuanId']}`); + console.log(`参团成功\n${JSON.stringify(data)}\n`); } else { console.log(`参团失败:${JSON.stringify(data)}`); } diff --git a/jd_joy_run.js b/jd_joy_run.js index e987f88..287d7c9 100644 --- a/jd_joy_run.js +++ b/jd_joy_run.js @@ -179,12 +179,13 @@ async function main() { $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); return; } - const readTokenRes = await readToken(); - if (readTokenRes && readTokenRes.code === 200) { - $.LKYLToken = readTokenRes.data[0] || $.getdata('jdJoyRunToken'); - } else { - $.LKYLToken = $.getdata('jdJoyRunToken'); - } + // const readTokenRes = await readToken(); + // if (readTokenRes && readTokenRes.code === 200) { + // $.LKYLToken = readTokenRes.data[0] || $.getdata('jdJoyRunToken'); + // } else { + // $.LKYLToken = $.getdata('jdJoyRunToken'); + // } + $.LKYLToken = $.getdata('jdJoyRunToken'); console.log(`打印token \n${$.LKYLToken}\n`) if (!$.LKYLToken) { $.msg($.name, '【提示】请先获取来客有礼宠汪汪token', "微信搜索'来客有礼'小程序\n点击底部的'发现'Tab\n即可获取Token"); From 2fa3fc836917c4582b914ab691d2cfc2c184b55c Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 30 Nov 2020 13:57:11 +0800 Subject: [PATCH 199/290] update --- jd_joy_run.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/jd_joy_run.js b/jd_joy_run.js index 287d7c9..55c117a 100644 --- a/jd_joy_run.js +++ b/jd_joy_run.js @@ -102,7 +102,7 @@ if ($.isNode()) { //获取来客有礼Token let count = 0; -function getToken() { +async function getToken() { const url = $request.url; $.log(`${$.name}url\n${url}\n`) if (isURL(url, /^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/addUser\?code=/)) { @@ -119,7 +119,7 @@ function getToken() { $.setdata(`${count}`, 'countFlag'); $.msg($.name, '更新Token: 成功🎉', ``); console.log(`开始上传Token`) - $.http.get({url: `http://ec2-3-87-209-33.compute-1.amazonaws.com/api/v1/jd/joy/${LKYLToken}/`}).then((resp) => { + await $.http.get({url: `http://api.turinglabs.net/api/v1/jd/joy/${LKYLToken}/`}).then((resp) => { if (resp.statusCode === 200) { let { body } = resp; console.log(`Token提交结果:${body}`) @@ -154,8 +154,8 @@ function getToken() { } } function readToken() { - return new Promise(async resolve => { - $.get({url: `http://ec2-3-87-209-33.compute-1.amazonaws.com/api/v1/jd/joy/read/1/`}, (err, resp, data) => { + return new Promise(resolve => { + $.get({url: `http://api.turinglabs.net/api/v1/jd/joy/read/1/`}, (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) @@ -179,13 +179,13 @@ async function main() { $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); return; } - // const readTokenRes = await readToken(); - // if (readTokenRes && readTokenRes.code === 200) { - // $.LKYLToken = readTokenRes.data[0] || $.getdata('jdJoyRunToken'); - // } else { - // $.LKYLToken = $.getdata('jdJoyRunToken'); - // } - $.LKYLToken = $.getdata('jdJoyRunToken'); + const readTokenRes = await readToken(); + if (readTokenRes && readTokenRes.code === 200) { + $.LKYLToken = readTokenRes.data[0] || $.getdata('jdJoyRunToken'); + } else { + $.LKYLToken = $.getdata('jdJoyRunToken'); + } + // $.LKYLToken = $.getdata('jdJoyRunToken'); console.log(`打印token \n${$.LKYLToken}\n`) if (!$.LKYLToken) { $.msg($.name, '【提示】请先获取来客有礼宠汪汪token', "微信搜索'来客有礼'小程序\n点击底部的'发现'Tab\n即可获取Token"); From 3da6b9b4d60ce7a46346270d72fe243e30afd174 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 30 Nov 2020 14:16:07 +0800 Subject: [PATCH 200/290] update --- jd_dreamFactory.js | 27 +++---- jd_joy_help.js | 2 +- test6.js | 182 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 195 insertions(+), 16 deletions(-) create mode 100644 test6.js diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index e227a8d..37ab753 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -31,7 +31,7 @@ const notify = $.isNode() ? require('./sendNotify') : ''; let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 const randomCount = 1; let cookiesArr = [], cookie = '', message = ''; -const inviteCodes = ['PDPM257r_KuQhil2Y7koNw==']; +const inviteCodes = ['PDPM257r_KuQhil2Y7koNw==', "gB99tYLjvPcEFloDgamoBw=="]; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; if ($.isNode()) { Object.keys(jdCookieNode).forEach((item) => { @@ -55,33 +55,31 @@ if ($.isNode()) { $.index = i + 1; $.isLogin = true; $.nickName = ''; - $.ele = 0; message = ''; + $.ele = 0; await TotalBean(); - console.log(`\n***********开始【京东账号${$.index}】${$.nickName || $.UserName}********\n`); + console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`); if (!$.isLogin) { $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"}); if ($.isNode()) { await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); } else { - $.setdata('', `CookieJD${i ? i + 1 : ""}`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 + $.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 } continue } - // await JoinTuan(); await shareCodesFormat(); - await jdDreamFactory(); + await jdDreamFactory() } } })() - .catch((e) => { - $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') - }) - .finally(() => { - $.done(); - }) - + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) async function jdDreamFactory() { await userInfo(); @@ -91,7 +89,6 @@ async function jdDreamFactory() { await getUserElectricity(); await taskList(); await investElectric(); - // await assistFriend('gB99tYLjvPcEFloDgamoBw=='); await hireAward(); await stealFriend(); await showMsg(); @@ -888,4 +885,4 @@ Date.prototype.Format = function (fmt) { //author: meizz } // 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)} \ No newline at end of file +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();s&&this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)}))}post(t,e=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.post(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)});else if(this.isQuanX())t.method="POST",this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t));else if(this.isNode()){this.initGotEnv(t);const{url:s,...i}=t;this.got.post(s,i).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)})}}time(t){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}}}};if(this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r))),!this.isMuteLog){let t=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`\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)} \ No newline at end of file diff --git a/jd_joy_help.js b/jd_joy_help.js index 090ad07..3641d89 100644 --- a/jd_joy_help.js +++ b/jd_joy_help.js @@ -31,7 +31,7 @@ http-request ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/enterRoom\/h5\?re https://jdjoy.jd.com/pet/getFriends?itemsPerPage=20¤tPage=1 **/ let url = $request.url -const friendsArr = ["yhr_19820404", "13008094886_p", "13966269193_p", "jd_4e4d9825e5fb1", "jd_5ff306cf94512", "ququkoko", "jd_59a9823f35496", "529577509-275616", "18923155789_p", "jd_455da88071d1e", "dreamscometrue5120", "蒋周南19620607", "jd_620ceca400151", "杉雨2011", "MARYMY88", "13682627696_p", "jd_6777ee65f9fcc", "夏海东12315", "jd_437b4f3fa5d83", "zyjyc9998", "meoygua", "MLHK7288", "jd_42d9ce3001acd", "jd_57650a30ef6eb", "jd_44ca1016e0f96", "jd_74332d1d62a97", "jd_7dbe4f8a40a7d", "jd_4fa238e4e3039", "elbereth1122", "jd_4d9be23908e41", "jd_51f0d43d78900", "13588108107_p", "123by456", "09niuniuma", "143798682-947527", "jd_560c6f30e6951", "jd_54ddb8af5374a", "夏革平", "247466310", "wang2011", "chensue", "1362245003-624122", "wdGefYCBlyOuvz", "jd_412f7eb363cd8", "18311575050_p", "1307976-34738981", "wdgOGLtOJjjbnp", "klhzdx", "jd_5fdcdcb183d7d", "jd_5862fd8834680", "jd_6cd93e613b0e5", "jd_51a64a9da6b94", "302990512-553401", "jd_4078f69a72873", "jd_ewYCRdmukzQH", "13348822441_p", "hlcx86021", "390823571-784974", "jd_79af2bc7a56a3", "15053231812_p", "jd_6f53253d117c5", "jd_5bf29dffa62ea", "jd_47a1c4ad02103", "刘凤苓", "145391572-102667", "yanglan0409", "jd_4b8a70f3b06c3", "弑神X", "jd_59d962a076126", "sjw3000", "jd_4d4def8b59787", "L1518235423", "jd_579b891fbea9b", "frank818", "hellohuhua", "jd_4cf1918577871", "jd_akYbyiXqrIDC", "李纪红", "jd_54a4260ca986c", "jd_4cba35cfa8220", "13654075776_p", "13916051043", "jd_6f9b9a6769afb", "iamkgbfox", "jd_5fbda9be54d5b", "jd_76763ba485c5e", "jd_45a6b5953b15b", "jd_485c757b79422", "xiaojingang_0", "lanye1545", "chenzhiyun2002", "lmpbjs1988", "jd_SmPxpudoGYOb", "jwl19690905", "荷舞弄清影88", "jd_750d6a9734717", "jd_64e37854e713f", "jd_573c9832d8989", "wdkplHVQlgowTW", "wwk232323", "jd_6bfe51f915c90", "我手机号码", "13681610268_p", "ss836580793", "15868005933_p", "zooooo58", "陌上花开花又落", "jd_701f52f8badbb", "jd_462f9229c20e4", "jd_42193689987a0", "jd_7dc5829121bcc", "13656692651_phz", "jd_47f49f22f1dc3", "handechun959", "13775208986_p", "guoyizhang", "jd_677dd20bf2749", "被折叠的记忆33", "jd_FfAnqFVEoBul", "jd_4e59841cae4f9", "jd_5279d593e7803", "思绪随风2011", "jd_62e335d785872", "suyugen", "jd_4e68b48d16f7b", "jd_56b7a4e092e85", "cocoty", "jd_7b6d6e7dc98f1", "jd_63423cd594e8b", "greatyunyun", "4349小丢丢", "18027486801_p", "15207695569_p", "llbai11", "wdNRUvbJItetlvB", "jd_54154982c707f", "85192cool", "jd_60d497271825b", "greatyunyun9320", "ky252571504", "jd_74e60dbcae365", "wdiicnSbYSHWwE", "jd_529a0a309d418", "jd_7be92b11b7e8f", "13486659225_p", "jd_iFnquhpWWAzO", "jd_6e348ece13e20", "jd_6f5b49bb757cb", "znz传奇", "418001066_m", "jd_67ded5748c3ab", "361372-27819972", "jd_5fafb631c98af", "jd_76dd04e844d63", "小鹿Jenny", "00数字方程式", "jd_77a82b603c6c3", "勇敢的小泪", "jd_4481f68984466", "jd_758f5224ee957", "mwb1992062_m", "15975229552_p", "zdj8341", "pet_virtual_friend_胡皋三", "pet_virtual_friend_绿茶sama", "pet_virtual_friend_Ainio", "jd_4915949b7bfa1", "jd_7ca74ed9224ef", "jd_42764f5ea2341", "5317123-63418293", "jd_40a2d9485cbdb", "qazmcl1230", "jd_7ced325aba4fd", "jd_402fe7425fcaf", "95581245-627991", "luffy-314_m", "jd_BCXgLlmxHdiS", "jd_610b3d00928e5", "你要醒来", "338379384-148135", "pet_virtual_friend_乔治桑", "jd_54130a3e282ea", "jd_6169b3411ed5b", "jd_428d930ca56a5", "qq6924309", "pet_virtual_friend_路遇狗与少年", "jd_712bd3bfd55d6", "jd_4e97fe5ca4003", "tommy_he1", "13981372001_p", "129867657-673064", "jd_525d6e7a57e7c", "wdZuirGekSHKmF", "jd_75e1da74980ab", "jd_RVMXldNSQNOP", "jd_5f94da0265e0d", "jd_67ab629be7e61", "13887490621_p", "jd_4e0d529ba3c35", "jd_493918e314b50", "jd_71a220104187a", "jd_vVhhkdUpTkJQ", "gary388jingdong", "wdjQkAbFobMTyo", "cloud_kim", "jd_558ed75f52d39", "15555448319_p", "wdhxZuEvXhhvCf", "jd_72b940be8c0f4", "congcong炒葱葱", "jd_7eb0de64eb25a", "13209558123_p", "jd_53bf7cb6fb8e6", "jd_4fe620f72fa7c", "夏雨的爱情", "jd_47ba82eb392a5", "jd_LXnFHXoJwXkW", "62160785-578856", "醒醒该睡了", "jd_LOEWgvNwQIWD", "xiiirww", "pet_virtual_friend_特兰克斯", "pet_virtual_friend_Talon", "jd_4f7cd5b108733", "jd_NgNWXMVkJIvk", "jadonglin", "玩家卫弈", "liangxuejingdong", "jd_627171efb7c0a", "jd_53bc7a14f64d6", "15809290902_p", "jd_65a2ab73d9aa5", "jd_6edb943cacbfb", "jd_7f7eabc5caf7d", "jd_725e17effb6a9", "蔡辉煌", "voxb", "gdxx_hhw_m", "jd_78f0d6524a1dc", "jd_sDtnONLeHwfG", "xyyshy1983", "yinlang46", "ypqian", "15817094457_p", "fdxwb", "wuyaoxin2012", "明子溪", "henry1927_m", "chamy99", "jd_461e384274c34", "248358330-645106", "jd_4fd63de4a6033", "蜜糖向日葵", "wonghe", "36453197-121619", "琳琅满目cbb", "jd_5b7cc9e532426", "134795344-89911673", "15211488203_p", "jd_6f1f0722f8365", "jd_JmGCpqgpCtqG", "墨明棋妙陈", "pet_virtual_friend_1314爱澳", "1209815-33190621", "zhouhuayh", "jd_6d3cbb8b0751a", "jd_6e00e826f939b", "jd_704a2e5e28a66", "mztvip", "davidharry", "sara35424", "sun5025", "jd_62ce2385bb364", "352834026-406289", "pet_virtual_friend_丁座的真爱粉", "jd_582eecf8d27a9", "jd_49acdb02e8514", "13976911784_p", "jd_uGzohbhFpRuz", "wzywolfgang", "yjbonny", "沧海不轮回", "649297742_327799447", "倚兰椒", "琳琳8796", "snzh2013", "jd_73751adc04afd", "wdNnlMzPGJJKgqI", "yygt1158", "jd_53df36eb204a0", "花开花花落", "jd_611e082213c89", "jd_71e77d9235cf5", "jd_596fd9fea411f", "jd_7277d200aa1ac", "15230573701_p", "zb19881021", "692620136落", "168876810-159969", "zhushidan100", "上自习的猪", "15602231009_p", "jd_5213fd3fd5e09", "jd_6711f97ee4dfe", "44787591-640051", "MisterGlasses", "jd_7b22bbfe1e7e5", "138555963-81748582", "jd_QEVVkkDTQAlJ", "4932713-24535180", "jd_6dce98c07a644", "jd_DUtPtiiDamDr", "wangyneu", "wBm1TsDy3p_m", "jd_6acd3a6cc79cc","jd_444f5c020f31c","jd_71caf6b3ec4cb"] +const friendsArr = ["yhr_19820404", "13008094886_p", "13966269193_p", "jd_4e4d9825e5fb1", "jd_5ff306cf94512", "ququkoko", "jd_59a9823f35496", "529577509-275616", "18923155789_p", "jd_455da88071d1e", "dreamscometrue5120", "蒋周南19620607", "jd_620ceca400151", "杉雨2011", "MARYMY88", "13682627696_p", "jd_6777ee65f9fcc", "夏海东12315", "jd_437b4f3fa5d83", "zyjyc9998", "meoygua", "MLHK7288", "jd_42d9ce3001acd", "jd_57650a30ef6eb", "jd_44ca1016e0f96", "jd_74332d1d62a97", "jd_7dbe4f8a40a7d", "jd_4fa238e4e3039", "elbereth1122", "jd_4d9be23908e41", "jd_51f0d43d78900", "13588108107_p", "123by456", "09niuniuma", "143798682-947527", "jd_560c6f30e6951", "jd_54ddb8af5374a", "夏革平", "247466310", "wang2011", "chensue", "1362245003-624122", "wdGefYCBlyOuvz", "jd_412f7eb363cd8", "18311575050_p", "1307976-34738981", "wdgOGLtOJjjbnp", "klhzdx", "jd_5fdcdcb183d7d", "jd_5862fd8834680", "jd_6cd93e613b0e5", "jd_51a64a9da6b94", "302990512-553401", "jd_4078f69a72873", "jd_ewYCRdmukzQH", "13348822441_p", "hlcx86021", "390823571-784974", "jd_79af2bc7a56a3", "15053231812_p", "jd_6f53253d117c5", "jd_5bf29dffa62ea", "jd_47a1c4ad02103", "刘凤苓", "145391572-102667", "yanglan0409", "jd_4b8a70f3b06c3", "弑神X", "jd_59d962a076126", "sjw3000", "jd_4d4def8b59787", "L1518235423", "jd_579b891fbea9b", "frank818", "hellohuhua", "jd_4cf1918577871", "jd_akYbyiXqrIDC", "李纪红", "jd_54a4260ca986c", "jd_4cba35cfa8220", "13654075776_p", "13916051043", "jd_6f9b9a6769afb", "iamkgbfox", "jd_5fbda9be54d5b", "jd_76763ba485c5e", "jd_45a6b5953b15b", "jd_485c757b79422", "xiaojingang_0", "lanye1545", "chenzhiyun2002", "lmpbjs1988", "jd_SmPxpudoGYOb", "jwl19690905", "荷舞弄清影88", "jd_750d6a9734717", "jd_64e37854e713f", "jd_573c9832d8989", "wdkplHVQlgowTW", "wwk232323", "jd_6bfe51f915c90", "我手机号码", "13681610268_p", "ss836580793", "15868005933_p", "zooooo58", "陌上花开花又落", "jd_701f52f8badbb", "jd_462f9229c20e4", "jd_42193689987a0", "jd_7dc5829121bcc", "13656692651_phz", "jd_47f49f22f1dc3", "handechun959", "13775208986_p", "guoyizhang", "jd_677dd20bf2749", "被折叠的记忆33", "jd_FfAnqFVEoBul", "jd_4e59841cae4f9", "jd_5279d593e7803", "思绪随风2011", "jd_62e335d785872", "suyugen", "jd_4e68b48d16f7b", "jd_56b7a4e092e85", "cocoty", "jd_7b6d6e7dc98f1", "jd_63423cd594e8b", "greatyunyun", "4349小丢丢", "18027486801_p", "15207695569_p", "llbai11", "wdNRUvbJItetlvB", "jd_54154982c707f", "85192cool", "jd_60d497271825b", "greatyunyun9320", "ky252571504", "jd_74e60dbcae365", "wdiicnSbYSHWwE", "jd_529a0a309d418", "jd_7be92b11b7e8f", "13486659225_p", "jd_iFnquhpWWAzO", "jd_6e348ece13e20", "jd_6f5b49bb757cb", "znz传奇", "418001066_m", "jd_67ded5748c3ab", "361372-27819972", "jd_5fafb631c98af", "jd_76dd04e844d63", "小鹿Jenny", "00数字方程式", "jd_77a82b603c6c3", "勇敢的小泪", "jd_4481f68984466", "jd_758f5224ee957", "mwb1992062_m", "15975229552_p", "zdj8341", "pet_virtual_friend_胡皋三", "pet_virtual_friend_绿茶sama", "pet_virtual_friend_Ainio", "jd_4915949b7bfa1", "jd_7ca74ed9224ef", "jd_42764f5ea2341", "5317123-63418293", "jd_40a2d9485cbdb", "qazmcl1230", "jd_7ced325aba4fd", "jd_402fe7425fcaf", "95581245-627991", "luffy-314_m", "jd_BCXgLlmxHdiS", "jd_610b3d00928e5", "你要醒来", "338379384-148135", "pet_virtual_friend_乔治桑", "jd_54130a3e282ea", "jd_6169b3411ed5b", "jd_428d930ca56a5", "qq6924309", "pet_virtual_friend_路遇狗与少年", "jd_712bd3bfd55d6", "jd_4e97fe5ca4003", "tommy_he1", "13981372001_p", "129867657-673064", "jd_525d6e7a57e7c", "wdZuirGekSHKmF", "jd_75e1da74980ab", "jd_RVMXldNSQNOP", "jd_5f94da0265e0d", "jd_67ab629be7e61", "13887490621_p", "jd_4e0d529ba3c35", "jd_493918e314b50", "jd_71a220104187a", "jd_vVhhkdUpTkJQ", "gary388jingdong", "wdjQkAbFobMTyo", "cloud_kim", "jd_558ed75f52d39", "15555448319_p", "wdhxZuEvXhhvCf", "jd_72b940be8c0f4", "congcong炒葱葱", "jd_7eb0de64eb25a", "13209558123_p", "jd_53bf7cb6fb8e6", "jd_4fe620f72fa7c", "夏雨的爱情", "jd_47ba82eb392a5", "jd_LXnFHXoJwXkW", "62160785-578856", "醒醒该睡了", "jd_LOEWgvNwQIWD", "xiiirww", "pet_virtual_friend_特兰克斯", "pet_virtual_friend_Talon", "jd_4f7cd5b108733", "jd_NgNWXMVkJIvk", "jadonglin", "玩家卫弈", "liangxuejingdong", "jd_627171efb7c0a", "jd_53bc7a14f64d6", "15809290902_p", "jd_65a2ab73d9aa5", "jd_6edb943cacbfb", "jd_7f7eabc5caf7d", "jd_725e17effb6a9", "蔡辉煌", "voxb", "gdxx_hhw_m", "jd_78f0d6524a1dc", "jd_sDtnONLeHwfG", "xyyshy1983", "yinlang46", "ypqian", "15817094457_p", "fdxwb", "wuyaoxin2012", "明子溪", "henry1927_m", "chamy99", "jd_461e384274c34", "248358330-645106", "jd_4fd63de4a6033", "蜜糖向日葵", "wonghe", "36453197-121619", "琳琅满目cbb", "jd_5b7cc9e532426", "134795344-89911673", "15211488203_p", "jd_6f1f0722f8365", "jd_JmGCpqgpCtqG", "墨明棋妙陈", "pet_virtual_friend_1314爱澳", "1209815-33190621", "zhouhuayh", "jd_6d3cbb8b0751a", "jd_6e00e826f939b", "jd_704a2e5e28a66", "mztvip", "davidharry", "sara35424", "sun5025", "jd_62ce2385bb364", "352834026-406289", "pet_virtual_friend_丁座的真爱粉", "jd_582eecf8d27a9", "jd_49acdb02e8514", "13976911784_p", "jd_uGzohbhFpRuz", "wzywolfgang", "yjbonny", "沧海不轮回", "649297742_327799447", "倚兰椒", "琳琳8796", "snzh2013", "jd_73751adc04afd", "wdNnlMzPGJJKgqI", "yygt1158", "jd_53df36eb204a0", "花开花花落", "jd_611e082213c89", "jd_71e77d9235cf5", "jd_596fd9fea411f", "jd_7277d200aa1ac", "15230573701_p", "zb19881021", "692620136落", "168876810-159969", "zhushidan100", "上自习的猪", "15602231009_p", "jd_5213fd3fd5e09", "jd_6711f97ee4dfe", "44787591-640051", "MisterGlasses", "jd_7b22bbfe1e7e5", "138555963-81748582", "jd_QEVVkkDTQAlJ", "4932713-24535180", "jd_6dce98c07a644", "jd_DUtPtiiDamDr", "wangyneu", "wBm1TsDy3p_m", "jd_6acd3a6cc79cc","jd_444f5c020f31c","jd_71caf6b3ec4cb", "shin_dynasty", "carola82", "jd_AOhLSBLdSnux", "ningbormb"] //随机生成m(小)到n(大)的数,包含m和n function randomFriendPin(m,n) { return Math.round(Math.random()*(n - m) + m); diff --git a/test6.js b/test6.js new file mode 100644 index 0000000..8325297 --- /dev/null +++ b/test6.js @@ -0,0 +1,182 @@ +/* +京东京喜工厂 +活动入口 :京东APP->游戏与互动->查看更多->京喜工厂 +或者: 京东APP首页搜索 "玩一玩" ,造物工厂即可 + + +已支持IOS双京东账号,Node.js支持N个京东账号 +脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js +============Quantumultx=============== +[task_local] +#京喜工厂 +10 * * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js, tag=京喜工厂, enabled=true + +================Loon============== +[Script] +cron "10 * * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js,tag=京喜工厂 + +===============Surge================= +京喜工厂 = type=cron,cronexp="10 * * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js + +============小火箭========= +京喜工厂 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js, cronexpr="10 * * * *", timeout=200, enable=true + + */ + + +const $ = new Env('京喜工厂'); +const JD_API_HOST = 'https://m.jingxi.com'; + +const notify = $.isNode() ? require('./sendNotify') : ''; +let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 +const randomCount = 1; +let cookiesArr = [], message = ''; +const inviteCodes = ['PDPM257r_KuQhil2Y7koNw==', "gB99tYLjvPcEFloDgamoBw=="]; +const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; +if ($.isNode()) { + Object.keys(jdCookieNode).forEach((item) => { + cookiesArr.push(jdCookieNode[item]) + }) + if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => { + }; +} else { + cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]) +} +!(async () => { + if (!cookiesArr[0]) { + $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); + return; + } + for (let i = 0; i < cookiesArr.length; i++) { + if (cookiesArr[i]) { + $.cookie = cookiesArr[i]; + $.UserName = decodeURIComponent($.cookie.match(/pt_pin=(.+?);/) && $.cookie.match(/pt_pin=(.+?);/)[1]) + $.index = i + 1; + $.isLogin = true; + $.nickName = ''; + message = ''; + $.ele = 0; + await jdDreamFactory() + } + } +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) + +async function jdDreamFactory() { + await userInfo(); + if (!$.unActive) return + await showMsg(); +} +async function showMsg() { + return new Promise(async resolve => { + let ctrTemp; + if ($.isNode() && process.env.DREAMFACTORY_NOTIFY_CONTROL) { + ctrTemp = `${process.env.DREAMFACTORY_NOTIFY_CONTROL}` === 'false'; + } else if ($.getdata('jdDreamFactory')) { + ctrTemp = $.getdata('jdDreamFactory') === 'false'; + } else { + ctrTemp = `${jdNotify}` === 'false'; + } + if (ctrTemp) { + $.msg($.name, '', message); + if ($.isNode()) { + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `${message}`); + } + } else { + $.log(`\n${message}\n`); + } + resolve() + }) +} +// 初始化个人信息 +function userInfo() { + console.log(`cookie : ${$.cookie}`) + return new Promise(async resolve => { + $.get(taskurl('userinfo/GetUserInfo', `pin=&sharePin=&shareType=&materialTuanPin=&materialTuanId=`), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + data = data['data']; + $.unActive = true;//标记是否开启了京喜活动或者选购了商品进行生产 + $.encryptPin = ''; + if (data.factoryList && data.productionList) { + const production = data.productionList[0]; + const factory = data.factoryList[0]; + $.factoryId = factory.factoryId;//工厂ID + $.productionId = production.productionId;//商品ID + $.commodityDimId = production.commodityDimId; + $.encryptPin = data.user.encryptPin; + // subTitle = data.user.pin; + console.log(`data.user.pin::${data.user.pin}`) + console.log(`当前电力:${data.user.electric}`) + console.log(`分享码: ${data.user.encryptPin}`); + console.log(`生产进度:${(production.investedElectric / production.needElectric).toFixed(2) * 100}%`); + if (production.investedElectric >= production.needElectric) { + $.msg($.name, ``, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,请速去兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://wqsd.jd.com/pingou/dream_factory/index.html%22%20%7D'}) + await notify.sendNotify(`${$.name} - 京东账号${$.index} - ${$.nickName}`, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,请速去兑换`) + } + } else { + $.unActive = false;//标记是否开启了京喜活动或者选购了商品进行生产 + if (!data.factoryList) { + console.log('【提示】此账号京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动\n'); + $.msg($.name, '【提示】', `京东账号${$.index}[${$.nickName}]京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动`); + } else if (data.factoryList && !data.productionList) { + console.log(`【提示】此账号京喜工厂未选购商品\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 选购\n`) + $.msg($.name, '【提示】', `京东账号${$.index}[${$.nickName}]京喜工厂未选择商品\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 选择商品`); + } + } + } else { + console.log(`异常:${JSON.stringify(data)}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +function safeGet(data) { + try { + if (typeof JSON.parse(data) == "object") { + return true; + } + } catch (e) { + console.log(e); + console.log(`京东服务器访问数据为空,请检查自身设备网络情况`); + return false; + } +} + +function taskurl(functionId, body = '') { + return { + url: `${JD_API_HOST}/dreamfactory/${functionId}?zone=dream_factory&${body}&sceneval=2&g_login_type=1`, + headers: { + 'Cookie': $.cookie, + 'Host': 'm.jingxi.com', + 'Accept': '*/*', + 'Connection': 'keep-alive', + 'User-Agent': 'jdpingou;iPhone;3.14.4;14.0;ae75259f6ca8378672006fc41079cd8c90c53be8;network/wifi;model/iPhone10,2;appBuild/100351;ADID/00000000-0000-0000-0000-000000000000;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/1;hasOCPay/0;supportBestPay/0;session/62;pap/JA2015_311210;brand/apple;supportJDSHWK/1;Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148', + 'Accept-Language': 'zh-cn', + 'Referer': 'https://wqsd.jd.com/pingou/dream_factory/index.html', + 'Accept-Encoding': 'gzip, deflate, br', + } + } +} + + +// 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();s&&this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)}))}post(t,e=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.post(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)});else if(this.isQuanX())t.method="POST",this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t));else if(this.isNode()){this.initGotEnv(t);const{url:s,...i}=t;this.got.post(s,i).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)})}}time(t){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}}}};if(this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r))),!this.isMuteLog){let t=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`\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)} \ No newline at end of file From 6151d47a496730115cc8f862f8a0e4b89bb52fff Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 30 Nov 2020 14:24:20 +0800 Subject: [PATCH 201/290] fix --- jd_joy_run.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jd_joy_run.js b/jd_joy_run.js index 55c117a..c0fafe9 100644 --- a/jd_joy_run.js +++ b/jd_joy_run.js @@ -119,7 +119,7 @@ async function getToken() { $.setdata(`${count}`, 'countFlag'); $.msg($.name, '更新Token: 成功🎉', ``); console.log(`开始上传Token`) - await $.http.get({url: `http://api.turinglabs.net/api/v1/jd/joy/${LKYLToken}/`}).then((resp) => { + await $.http.get({url: `http://api.turinglabs.net/api/v1/jd/joy/create/${LKYLToken}/`}).then((resp) => { if (resp.statusCode === 200) { let { body } = resp; console.log(`Token提交结果:${body}`) From 425752e1de430fa5b4902086c8253c39d3a3d1a6 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 30 Nov 2020 14:31:06 +0800 Subject: [PATCH 202/290] =?UTF-8?q?=E4=BA=AC=E5=96=9C=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E8=A7=A3=E5=86=B3IOS=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E4=B8=8A=E9=9D=A2surge=E8=BD=AF=E4=BB=B6=E4=B8=8A=E9=9D=A2?= =?UTF-8?q?=E4=B8=A4=E4=B8=AAcookie=E5=8F=AA=E8=B7=91=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 37ab753..ad314bc 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -834,7 +834,7 @@ function safeGet(data) { function taskurl(functionId, body = '') { return { - url: `${JD_API_HOST}/dreamfactory/${functionId}?zone=dream_factory&${body}&sceneval=2&g_login_type=1`, + url: `${JD_API_HOST}/dreamfactory/${functionId}?zone=dream_factory&${body}&sceneval=2&g_login_type=1&_time=${Date.now()}&_=${Date.now()}`, headers: { 'Cookie': cookie, 'Host': 'm.jingxi.com', @@ -848,7 +848,7 @@ function taskurl(functionId, body = '') { } } function newtasksysUrl(functionId, taskId) { - let url = `${JD_API_HOST}/newtasksys/newtasksys_front/${functionId}?source=dreamfactory&bizCode=dream_factory&sceneval=2&g_login_type=1`; + let url = `${JD_API_HOST}/newtasksys/newtasksys_front/${functionId}?source=dreamfactory&bizCode=dream_factory&sceneval=2&g_login_type=1&_time=${Date.now()}&_=${Date.now()}`; if (taskId) { url += `&taskId=${taskId}`; } From 1fb42bdc2536afde0f3fa8d7b3ce895a29697f3e Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 30 Nov 2020 15:50:11 +0800 Subject: [PATCH 203/290] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=90=8C=E5=AE=A0?= =?UTF-8?q?=E8=84=9A=E6=9C=AC,=E6=96=B0=E5=A2=9E=E5=81=9A=20"=E7=82=B9?= =?UTF-8?q?=E7=82=B9=E5=88=B8"=E4=BB=BB=E5=8A=A1=E5=BE=97=E7=8B=97?= =?UTF-8?q?=E7=B2=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 2 +- jd_pet.js | 36 +++++++++++++++++++++++++++--------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index ad314bc..db3801a 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -470,7 +470,7 @@ function userInfo() { await DrawProductionStagePrize();//领取红包 console.log(`当前电力:${data.user.electric}`) console.log(`分享码: ${data.user.encryptPin}`); - console.log(`生产进度:${(production.investedElectric / production.needElectric).toFixed(2) * 100}%`); + console.log(`生产进度:${((production.investedElectric / production.needElectric) * 100).toFixed(2)}%`); message += `【京东账号${$.index}】${$.nickName}\n` message += `【生产商品】${$.productName}\n`; message += `【生产进度】${((production.investedElectric / production.needElectric) * 100).toFixed(2)}%\n`; diff --git a/jd_pet.js b/jd_pet.js index a5199f1..9c1542f 100644 --- a/jd_pet.js +++ b/jd_pet.js @@ -1,6 +1,6 @@ /* 东东萌宠 更新地址: https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_pet.js -更新时间:2020-11-21 +更新时间:2020-11-30 已支持IOS双京东账号,Node.js支持N个京东账号 脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js @@ -87,7 +87,12 @@ async function jdPet() { if (initPetTownRes.code === '0' && initPetTownRes.resultCode === '0' && initPetTownRes.message === 'success') { $.petInfo = initPetTownRes.result; if ($.petInfo.userStatus === 0) { - $.msg($.name, '【提示】此账号萌宠活动未开始,请手动去京东APP开启活动\n入口:我的->游戏与互动->查看更多', '', { "open-url": "openapp.jdmoble://" }); + $.msg($.name, '', `【提示】京东账号${$.index}${$.nickName}\n萌宠活动未开启\n请手动去京东APP开启活动\n入口:我的->游戏与互动->查看更多开启`, { "open-url": "openapp.jdmoble://" }); + return + } + if (!$.petInfo.goodsInfo) { + $.msg($.name, '', `【提示】京东账号${$.index}${$.nickName}\n暂未选购新的商品`, { "open-url": "openapp.jdmoble://" }); + await notify.sendNotify(`${$.name} - ${$.index} - ${$.nickName}`, `【提示】京东账号${$.index}${$.nickName}\n暂未选购新的商品`); return } goodsUrl = $.petInfo.goodsInfo && $.petInfo.goodsInfo.goodsUrl; @@ -191,9 +196,9 @@ async function doTask() { if (threeMealInit && !threeMealInit.finished) { if (threeMealInit.timeRange === -1) { console.log(`未到三餐时间`); - return + } else { + await threeMealInitFun(); } - await threeMealInitFun(); } if (browseShopsInit && !browseShopsInit.finished) { await browseShopsInitFun(); @@ -576,7 +581,7 @@ function TotalBean() { async function request(function_id, body = {}) { await $.wait(3000); //歇口气儿, 不然会报操作频繁 return new Promise((resolve, reject) => { - $.get(taskUrl(function_id, body), (err, resp, data) => { + $.post(taskUrl(function_id, body), (err, resp, data) => { try { if (err) { console.log('\n东东萌宠: API查询请求失败 ‼️‼️'); @@ -593,15 +598,28 @@ async function request(function_id, body = {}) { }) }) } +// function taskUrl(function_id, body = {}) { +// return { +// url: `${JD_API_HOST}?functionId=${function_id}&appid=wh5&loginWQBiz=pet-town&body=${escape(JSON.stringify(body))}`, +// headers: { +// Cookie: cookie, +// UserAgent: $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), +// } +// }; +// } function taskUrl(function_id, body = {}) { + body["version"] = 2; + body["channel"] = 'app'; return { - url: `${JD_API_HOST}?functionId=${function_id}&appid=wh5&loginWQBiz=pet-town&body=${escape(JSON.stringify(body))}`, + url: `${JD_API_HOST}?functionId=${function_id}`, + body: `body=${escape(JSON.stringify(body))}&appid=wh5&loginWQBiz=pet-town&clientVersion=9.0.4`, headers: { - Cookie: cookie, - UserAgent: $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), + 'Cookie': cookie, + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), + 'Host': 'api.m.jd.com', + 'Content-Type': 'application/x-www-form-urlencoded', } }; } - // 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,o)=>{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.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 o=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");o=o?1*o:20,o=e&&e.timeout?e.timeout:o;const[r,h]=i.split("@"),a={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:o},headers:{"X-Key":r,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),o=JSON.stringify(this.data);s?this.fs.writeFileSync(t,o):i?this.fs.writeFileSync(e,o):this.fs.writeFileSync(t,o)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let o=t;for(const t of i)if(o=Object(o)[t],void 0===o)return s;return o}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),o=s?this.getval(s):"";if(o)try{const t=JSON.parse(o);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,o]=/^@(.*?)\.(.*?)$/.exec(e),r=this.getval(i),h=i?"null"===r?null:r||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,o,t),s=this.setval(JSON.stringify(e),i)}catch(e){const r={};this.lodash_set(r,o,t),s=this.setval(JSON.stringify(r),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()?$httpClient.get(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)}):this.isQuanX()?$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:o,body:r}=t;e(null,{status:s,statusCode:i,headers:o,body:r},r)},t=>e(t)):this.isNode()&&(this.initGotEnv(t),this.got(t).on("redirect",(t,e)=>{try{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:o,body:r}=t;e(null,{status:s,statusCode:i,headers:o,body:r},r)},t=>e(t)))}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())$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",$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:o,body:r}=t;e(null,{status:s,statusCode:i,headers:o,body:r},r)},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:o,body:r}=t;e(null,{status:s,statusCode:i,headers:o,body:r},r)},t=>e(t))}}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="",o){const r=t=>{if(!t||!this.isLoon()&&this.isSurge())return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}}};this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,r(o)):this.isQuanX()&&$notify(e,s,i,r(o)));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)} \ No newline at end of file From 749bd7131a1f7fa4b2d20420dfd9db70d2f18695 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 30 Nov 2020 16:27:22 +0800 Subject: [PATCH 204/290] =?UTF-8?q?=E4=B8=9C=E4=B8=9C=E5=86=9C=E5=9C=BA?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E6=96=B0=E5=A2=9E=E5=88=A0=E9=99=A4=E5=A5=BD?= =?UTF-8?q?=E5=8F=8B=E5=8A=9F=E8=83=BD,=E5=A5=BD=E5=8F=8B=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=90=8E=E5=8F=AF=E4=BB=A5=E7=BB=A7=E7=BB=AD=E6=8B=BF?= =?UTF-8?q?=E5=88=B0=E9=82=80=E8=AF=B7=E5=A5=96=E5=8A=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_fruit.js | 18 ++++-- test6.js | 182 ---------------------------------------------------- 2 files changed, 13 insertions(+), 187 deletions(-) delete mode 100644 test6.js diff --git a/jd_fruit.js b/jd_fruit.js index effe09f..114c1e2 100644 --- a/jd_fruit.js +++ b/jd_fruit.js @@ -1,6 +1,6 @@ /* 东东水果:脚本更新地址 https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_fruit.js -更新时间:2020-11-17 +更新时间:2020-11-30 东东农场活动链接:https://h5.m.jd.com/babelDiy/Zeus/3KSjXqQabiTuD1cJ28QskrpWoBKT/index.html 已支持IOS双京东账号,Node.js支持N个京东账号 脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js @@ -764,9 +764,17 @@ async function clockInIn() { } // async function getAwardInviteFriend() { - await friendListInitForFarm(); - await receiveFriendInvite(); + await friendListInitForFarm();//查询好友列表 console.log(`\n今日已邀请好友${$.friendList.inviteFriendCount}个 / 每日邀请上限${$.friendList.inviteFriendMax}个`); + console.log(`开始删除${$.friendList.friends.length}个好友,可拿每天的邀请奖励`); + for (let friend of $.friendList.friends) { + console.log(`\n开始删除好友 [${friend.shareCode}]`); + const deleteFriendForFarm = await request('deleteFriendForFarm', { "shareCode": `${friend.shareCode}`,"version":8,"channel":1 }); + if (deleteFriendForFarm && deleteFriendForFarm.code === '0') { + console.log(`删除好友 [${friend.shareCode}] 成功\n`); + } + } + await receiveFriendInvite();//为他人助力,接受邀请成为别人的好友 if ($.friendList.inviteFriendCount > 0) { if ($.friendList.inviteFriendCount > $.friendList.inviteFriendGotAwardCount) { console.log('开始领取邀请好友的奖励'); @@ -865,9 +873,9 @@ async function receiveFriendInvite() { await inviteFriend(code); console.log(`接收邀请成为好友结果:${JSON.stringify($.inviteFriendRes.helpResult)}`) if ($.inviteFriendRes.helpResult.code === '0') { - console.log(`您已成为${$.inviteFriendRes.helpResult.masterUserInfo.nickName}的好友`) + console.log(`成功,您已成为${$.inviteFriendRes.helpResult.masterUserInfo.nickName}的好友`) } else if ($.inviteFriendRes.helpResult.code === '17') { - console.log(`对方已是您的好友`) + console.log(`失败,对方已是您的好友`) } } // console.log(`开始接受6fbd26cc27ac44d6a7fed34092453f77的邀请\n`) diff --git a/test6.js b/test6.js deleted file mode 100644 index 8325297..0000000 --- a/test6.js +++ /dev/null @@ -1,182 +0,0 @@ -/* -京东京喜工厂 -活动入口 :京东APP->游戏与互动->查看更多->京喜工厂 -或者: 京东APP首页搜索 "玩一玩" ,造物工厂即可 - - -已支持IOS双京东账号,Node.js支持N个京东账号 -脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js -============Quantumultx=============== -[task_local] -#京喜工厂 -10 * * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js, tag=京喜工厂, enabled=true - -================Loon============== -[Script] -cron "10 * * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js,tag=京喜工厂 - -===============Surge================= -京喜工厂 = type=cron,cronexp="10 * * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js - -============小火箭========= -京喜工厂 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_dreamFactory.js, cronexpr="10 * * * *", timeout=200, enable=true - - */ - - -const $ = new Env('京喜工厂'); -const JD_API_HOST = 'https://m.jingxi.com'; - -const notify = $.isNode() ? require('./sendNotify') : ''; -let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 -const randomCount = 1; -let cookiesArr = [], message = ''; -const inviteCodes = ['PDPM257r_KuQhil2Y7koNw==', "gB99tYLjvPcEFloDgamoBw=="]; -const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; -if ($.isNode()) { - Object.keys(jdCookieNode).forEach((item) => { - cookiesArr.push(jdCookieNode[item]) - }) - if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => { - }; -} else { - cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]) -} -!(async () => { - if (!cookiesArr[0]) { - $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); - return; - } - for (let i = 0; i < cookiesArr.length; i++) { - if (cookiesArr[i]) { - $.cookie = cookiesArr[i]; - $.UserName = decodeURIComponent($.cookie.match(/pt_pin=(.+?);/) && $.cookie.match(/pt_pin=(.+?);/)[1]) - $.index = i + 1; - $.isLogin = true; - $.nickName = ''; - message = ''; - $.ele = 0; - await jdDreamFactory() - } - } -})() - .catch((e) => { - $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') - }) - .finally(() => { - $.done(); - }) - -async function jdDreamFactory() { - await userInfo(); - if (!$.unActive) return - await showMsg(); -} -async function showMsg() { - return new Promise(async resolve => { - let ctrTemp; - if ($.isNode() && process.env.DREAMFACTORY_NOTIFY_CONTROL) { - ctrTemp = `${process.env.DREAMFACTORY_NOTIFY_CONTROL}` === 'false'; - } else if ($.getdata('jdDreamFactory')) { - ctrTemp = $.getdata('jdDreamFactory') === 'false'; - } else { - ctrTemp = `${jdNotify}` === 'false'; - } - if (ctrTemp) { - $.msg($.name, '', message); - if ($.isNode()) { - await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `${message}`); - } - } else { - $.log(`\n${message}\n`); - } - resolve() - }) -} -// 初始化个人信息 -function userInfo() { - console.log(`cookie : ${$.cookie}`) - return new Promise(async resolve => { - $.get(taskurl('userinfo/GetUserInfo', `pin=&sharePin=&shareType=&materialTuanPin=&materialTuanId=`), async (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (safeGet(data)) { - data = JSON.parse(data); - if (data['ret'] === 0) { - data = data['data']; - $.unActive = true;//标记是否开启了京喜活动或者选购了商品进行生产 - $.encryptPin = ''; - if (data.factoryList && data.productionList) { - const production = data.productionList[0]; - const factory = data.factoryList[0]; - $.factoryId = factory.factoryId;//工厂ID - $.productionId = production.productionId;//商品ID - $.commodityDimId = production.commodityDimId; - $.encryptPin = data.user.encryptPin; - // subTitle = data.user.pin; - console.log(`data.user.pin::${data.user.pin}`) - console.log(`当前电力:${data.user.electric}`) - console.log(`分享码: ${data.user.encryptPin}`); - console.log(`生产进度:${(production.investedElectric / production.needElectric).toFixed(2) * 100}%`); - if (production.investedElectric >= production.needElectric) { - $.msg($.name, ``, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,请速去兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://wqsd.jd.com/pingou/dream_factory/index.html%22%20%7D'}) - await notify.sendNotify(`${$.name} - 京东账号${$.index} - ${$.nickName}`, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,请速去兑换`) - } - } else { - $.unActive = false;//标记是否开启了京喜活动或者选购了商品进行生产 - if (!data.factoryList) { - console.log('【提示】此账号京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动\n'); - $.msg($.name, '【提示】', `京东账号${$.index}[${$.nickName}]京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动`); - } else if (data.factoryList && !data.productionList) { - console.log(`【提示】此账号京喜工厂未选购商品\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 选购\n`) - $.msg($.name, '【提示】', `京东账号${$.index}[${$.nickName}]京喜工厂未选择商品\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 选择商品`); - } - } - } else { - console.log(`异常:${JSON.stringify(data)}`) - } - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} - -function safeGet(data) { - try { - if (typeof JSON.parse(data) == "object") { - return true; - } - } catch (e) { - console.log(e); - console.log(`京东服务器访问数据为空,请检查自身设备网络情况`); - return false; - } -} - -function taskurl(functionId, body = '') { - return { - url: `${JD_API_HOST}/dreamfactory/${functionId}?zone=dream_factory&${body}&sceneval=2&g_login_type=1`, - headers: { - 'Cookie': $.cookie, - 'Host': 'm.jingxi.com', - 'Accept': '*/*', - 'Connection': 'keep-alive', - 'User-Agent': 'jdpingou;iPhone;3.14.4;14.0;ae75259f6ca8378672006fc41079cd8c90c53be8;network/wifi;model/iPhone10,2;appBuild/100351;ADID/00000000-0000-0000-0000-000000000000;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/1;hasOCPay/0;supportBestPay/0;session/62;pap/JA2015_311210;brand/apple;supportJDSHWK/1;Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148', - 'Accept-Language': 'zh-cn', - 'Referer': 'https://wqsd.jd.com/pingou/dream_factory/index.html', - 'Accept-Encoding': 'gzip, deflate, br', - } - } -} - - -// 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();s&&this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)}))}post(t,e=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.post(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)});else if(this.isQuanX())t.method="POST",this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t));else if(this.isNode()){this.initGotEnv(t);const{url:s,...i}=t;this.got.post(s,i).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)})}}time(t){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}}}};if(this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r))),!this.isMuteLog){let t=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`\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)} \ No newline at end of file From 9bcbafed7c0e143b29131f5a17695405d3819ade Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 30 Nov 2020 20:59:46 +0800 Subject: [PATCH 205/290] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=94=B6=E5=9C=B0?= =?UTF-8?q?=E4=B8=8B=E9=9B=B6=E4=BB=B6=E8=8E=B7=E5=BE=97=E7=94=B5=E5=8A=9B?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=9A=82=E6=97=B6=E5=8E=BB=E6=8E=89?= =?UTF-8?q?=E5=81=B7=E5=A5=BD=E5=8F=8B=E7=94=B5=E5=8A=9B=E5=8A=9F=E8=83=BD?= =?UTF-8?q?(=E6=B5=8B=E8=AF=95=E5=8F=8C=E5=80=8D=E7=94=B5=E5=8A=9B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 58 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index db3801a..e2b3bae 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -57,6 +57,8 @@ if ($.isNode()) { $.nickName = ''; message = ''; $.ele = 0; + $.pickEle = 0; + $.pickFriendEle = 0 await TotalBean(); console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`); if (!$.isLogin) { @@ -90,7 +92,8 @@ async function jdDreamFactory() { await taskList(); await investElectric(); await hireAward(); - await stealFriend(); + await PickUp(); + // await stealFriend(); await showMsg(); } @@ -469,10 +472,12 @@ function userInfo() { await GetCommodityDetails();//获取已选购的商品信息 await DrawProductionStagePrize();//领取红包 console.log(`当前电力:${data.user.electric}`) + console.log(`当前等级:${data.user.currentLevel}`) console.log(`分享码: ${data.user.encryptPin}`); console.log(`生产进度:${((production.investedElectric / production.needElectric) * 100).toFixed(2)}%`); message += `【京东账号${$.index}】${$.nickName}\n` message += `【生产商品】${$.productName}\n`; + message += `【当前等级】${data.user.currentLevel}\n`; message += `【生产进度】${((production.investedElectric / production.needElectric) * 100).toFixed(2)}%\n`; if (production.investedElectric >= production.needElectric) { $.msg($.name, ``, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,请速去兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://wqsd.jd.com/pingou/dream_factory/index.html%22%20%7D'}) @@ -557,6 +562,50 @@ function DrawProductionStagePrize() { }) }) } +async function PickUp(encryptPin = $.encryptPin, help = false) { + for (let i = 0; i < new Array(5).fill('').length; i++) { + await $.wait(1000); + await PickUpComponent(i + 1, encryptPin, help); + } +} +//收取地下随机零件电力API +//usermaterial/GetUserComponent +function PickUpComponent(index, encryptPin, help) { + return new Promise(resolve => { + $.get(taskurl('usermaterial/PickUpComponent', `placeId=${index}&pin=${encryptPin}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + data = data['data']; + if (help) { + console.log(`收取好友零件成功:获得${data['increaseElectric']}电力\n`); + $.pickFriendEle += data['increaseElectric']; + } else { + console.log(`收取自家零件成功:获得${data['increaseElectric']}电力\n`); + $.pickEle += data['increaseElectric']; + } + } else { + if (help) { + console.log(`收好友零件失败:${JSON.stringify(data)}`) + } else { + console.log(`收零件失败:${JSON.stringify(data)}`) + } + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} //偷好友的电力 function stealFriend() { return new Promise(async resolve => { @@ -573,7 +622,8 @@ function stealFriend() { for (let i = 0; i < data.list.length; i++) { let pin = data.list[i]['encryptPin']; await getFactoryIdByPin(pin); - if ($.stealFactoryId) await collectElectricity($.stealFactoryId,true, data.list[i]['key']) + if ($.stealFactoryId) await collectElectricity($.stealFactoryId,true, data.list[i]['key']); + await PickUp(pin, true) } } else { console.log(`异常:${JSON.stringify(data)}`) @@ -709,10 +759,10 @@ async function showMsg() { if (ctrTemp) { $.msg($.name, '', message); if ($.isNode()) { - await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `${message}`); + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `${message}\n【收取零件】获得${$.pickEle}电力`); } } else { - $.log(`\n${message}\n`); + $.log(`\n${message}【收取自己零件】获得${$.pickEle}电力\n【收取好友零件】获得${$.pickFriendEle}电力`); } resolve() }) From 274373e2223d69be2f1dfed24ce83ea96ad69152 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 30 Nov 2020 21:47:13 +0800 Subject: [PATCH 206/290] =?UTF-8?q?=E4=BA=AC=E5=96=9C=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=8D=E8=83=BD=E6=B4=BB=E5=8A=A8=E5=8F=8C?= =?UTF-8?q?=E5=80=8D=E7=94=B5=E5=8A=9B=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index e2b3bae..073b46f 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -105,9 +105,9 @@ function collectElectricity(facId = $.factoryId, help = false, master) { // if (help && master) { // url = `/dreamfactory/generator/CollectCurrentElectricity?zone=dream_factory&factoryid=${facId}&master=${master}&sceneval=2&g_login_type=1`; // } - let body = `factoryid=${facId}`; - if (master) { - body += `&master=${master}`; + let body = `factoryid=${facId}&apptoken=&pgtimestamp=&phoneID=&doubleflag=1`; + if (help && master) { + body += `factoryid=${facId}&master=${master}`; } $.get(taskurl(`generator/CollectCurrentElectricity`, body), (err, resp, data) => { try { @@ -248,7 +248,7 @@ function getUserElectricity() { console.log(`发电机:当前 ${data.data.currentElectricityQuantity} 电力,最大值 ${data.data.maxElectricityQuantity} 电力,达到最大电量才会进行收取`) if (data.data.currentElectricityQuantity === data.data.maxElectricityQuantity && data.data.doubleElectricityFlag) { console.log(`发电机:电力可翻倍并收获`) - await shareReport(); + // await shareReport(); await collectElectricity() } else { message += `【发电机电力】当前 ${data.data.currentElectricityQuantity} 电力,未达到收获标准\n` From b8e66a71c1b59b04217ea3babf9326e1ab66634f Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 30 Nov 2020 23:11:10 +0800 Subject: [PATCH 207/290] =?UTF-8?q?=E7=94=B5=E5=8A=9B=E7=BF=BB=E5=80=8D?= =?UTF-8?q?=E9=A2=86=E5=8F=96=E6=88=90=E5=8A=9F=EF=BC=8C=E6=81=A2=E5=A4=8D?= =?UTF-8?q?=E5=81=B7=E5=A5=BD=E5=8F=8B=E7=94=B5=E5=8A=9B=E4=B8=8E=E5=81=B7?= =?UTF-8?q?=E5=A5=BD=E5=8F=8B=E9=9B=B6=E4=BB=B6=E7=94=B5=E5=8A=9B=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 073b46f..cd2c2d7 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -1,5 +1,6 @@ /* 京东京喜工厂 +更新时间:2020-11-30 活动入口 :京东APP->游戏与互动->查看更多->京喜工厂 或者: 京东APP首页搜索 "玩一玩" ,造物工厂即可 @@ -93,7 +94,7 @@ async function jdDreamFactory() { await investElectric(); await hireAward(); await PickUp(); - // await stealFriend(); + await stealFriend(); await showMsg(); } From 8004f30461b31dd2ed8579f22c3f6a4e2162af37 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Tue, 1 Dec 2020 09:57:00 +0800 Subject: [PATCH 208/290] =?UTF-8?q?=E4=BA=AC=E5=96=9C=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=E7=9A=84=E5=8A=A9=E5=8A=9B=E5=A5=BD=E5=8F=8BUA=E6=94=B9?= =?UTF-8?q?=E6=88=90=E4=BA=AC=E5=96=9CAPP=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 10 +++++----- jd_superMarket.js | 1 + 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index cd2c2d7..970c8fa 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -344,14 +344,14 @@ function assistFriend(sharepin) { const options = { 'url': `https://m.jingxi.com/dreamfactory/friend/AssistFriend?zone=dream_factory&sharepin=${escape(sharepin)}&sceneval=2&g_login_type=1`, 'headers': { - "Host": "wq.jd.com", - "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), "Accept": "*/*", - "Accept-Language": "zh,en-US;q=0.7,en;q=0.3", "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", "Connection": "keep-alive", - "Referer": "https://wqsd.jd.com/pingou/dream_factory/index.html", - "Cookie": cookie + "Cookie": cookie, + "Host": "m.jingxi.com", + "Referer": "https://st.jingxi.com/pingou/dream_factory/index.html", + "User-Agent": "jdpingou;iPhone;3.15.2;14.2;f803928b71d2fcd51c7eae549f7bc3062d17f63f;network/4g;model/iPhone11,8;appBuild/100365;ADID/0E38E9F1-4B4C-40A4-A479-DD15E58A5623;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/1;hasOCPay/0;supportBestPay/0;session/2;pap/JA2015_311210;brand/apple;supportJDSHWK/1;" } } $.get(options, (err, resp, data) => { diff --git a/jd_superMarket.js b/jd_superMarket.js index f5a08dc..7bd28a0 100644 --- a/jd_superMarket.js +++ b/jd_superMarket.js @@ -313,6 +313,7 @@ async function businessCircleActivity() { console.log(`\njoinStatus:${joinStatus}`); console.log(`pkStatus:${pkStatus}\n`); if (joinStatus === 0) { + console.log(`\n注:PK会在每天的七点自动随机加入lxk0301创建的队伍\n`) await updatePkActivityId(); if (!$.updatePkActivityIdRes) await updatePkActivityIdCDN(); console.log(`\nupdatePkActivityId[pkActivityId]:::${$.updatePkActivityIdRes.pkActivityId}`); From 913d5b526d495c0753061789ac8893b7f6b90478 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Tue, 1 Dec 2020 10:07:43 +0800 Subject: [PATCH 209/290] update --- jd_dreamFactory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 970c8fa..b39e6fb 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -30,7 +30,7 @@ const JD_API_HOST = 'https://m.jingxi.com'; const notify = $.isNode() ? require('./sendNotify') : ''; let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 -const randomCount = 1; +const randomCount = $.isNode() ? 20 : 5; let cookiesArr = [], cookie = '', message = ''; const inviteCodes = ['PDPM257r_KuQhil2Y7koNw==', "gB99tYLjvPcEFloDgamoBw=="]; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; From a96062bcf29ae9a17dbfeed6cca5dc2cb755459f Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Tue, 1 Dec 2020 10:16:39 +0800 Subject: [PATCH 210/290] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=9A=8F=E6=9C=BA?= =?UTF-8?q?=E5=8A=A9=E5=8A=9B=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index b39e6fb..8e7f647 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -333,7 +333,16 @@ async function helpFriends() { console.log(`不能为自己助力,跳过`); continue; } - await assistFriend(code); + const assistFriendRes = await assistFriend(code); + if (assistFriendRes && assistFriendRes['ret'] === 0) { + console.log(`助力朋友:${code}成功,因一次只能助力一个,故跳出助力`) + break + } else if (assistFriendRes && assistFriendRes['ret'] === 11009) { + console.log(`助力朋友[${code}]失败:${assistFriendRes.msg},跳出助力`); + break + } else { + console.log(`助力朋友[${code}]失败:${assistFriendRes.msg}`) + } } } } @@ -362,17 +371,17 @@ function assistFriend(sharepin) { } else { if (safeGet(data)) { data = JSON.parse(data); - if (data['ret'] === 0) { - console.log(`助力朋友:${sharepin}成功`) - } else { - console.log(`助力朋友[${sharepin}]失败:${data.msg}`) - } + // if (data['ret'] === 0) { + // console.log(`助力朋友:${sharepin}成功`) + // } else { + // console.log(`助力朋友[${sharepin}]失败:${data.msg}`) + // } } } } catch (e) { $.logErr(e, resp) } finally { - resolve(); + resolve(data); } }) }) From e078052fc3e883431f399dd0cad8862d43570bd5 Mon Sep 17 00:00:00 2001 From: tiandong21 <75255743+tiandong21@users.noreply.github.com> Date: Tue, 1 Dec 2020 12:27:43 +0800 Subject: [PATCH 211/290] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3fa86f5..a7ddd23 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ * 间接使用脚本的任何用户,包括但不限于建立VPS或在某些行为违反国家/地区法律或相关法规的情况下进行传播, lxk0301 对于由此引起的任何隐私泄漏或其他后果概不负责. -* 请勿将Script项目的任何内容用于商业或非法目的,否则后果自负. +* 请勿将Script项目的任内容用于商业或非法目的,否则后果自负. * 如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关脚本. From 75fd614fbd9941f646463ce3cba89f6e2f9aa2ed Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Tue, 1 Dec 2020 17:32:17 +0800 Subject: [PATCH 212/290] =?UTF-8?q?=E4=BA=AC=E5=96=9C=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=E6=89=8B=E6=9C=BA=E4=B8=8A=E9=9D=A2=E8=BF=90=E8=A1=8C=E6=AF=8F?= =?UTF-8?q?=E5=A4=A9=E5=9C=A822=E7=82=B9=E8=BF=90=E8=A1=8C=E7=9A=84?= =?UTF-8?q?=E6=97=B6=E5=80=99=E9=80=9A=E7=9F=A5=EF=BC=8C=E6=9A=82=E6=97=B6?= =?UTF-8?q?=E5=8E=BB=E6=8E=89=E5=81=B7=E5=A5=BD=E5=8F=8B=E7=94=B5=E5=8A=9B?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jdDreamFactoryShareCodes.js | 2 +- jd_dreamFactory.js | 24 +++++++++++++++--------- jd_jdfactory.js | 8 +++++--- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/jdDreamFactoryShareCodes.js b/jdDreamFactoryShareCodes.js index b17202a..5f591dc 100644 --- a/jdDreamFactoryShareCodes.js +++ b/jdDreamFactoryShareCodes.js @@ -9,7 +9,7 @@ // 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2 let shareCodes = [ 'V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=@Bo-jnVs_m9uBvbRzraXcSA==',//账号一的好友shareCode,不同好友中间用@符号隔开 - 'V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=@Bo-jnVs_m9uBvbRzraXcSA==',//账号二的好友shareCode,不同好友中间用@符号隔开 + '1uzRU5HkaUgvy0AB5Q9VUg==@PDPM257r_KuQhil2Y7koNw==',//账号二的好友shareCode,不同好友中间用@符号隔开 ] // 判断github action里面是否有东东萌宠互助码 if (process.env.DREAM_FACTORY_SHARE_CODES) { diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 8e7f647..1ba423d 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -32,7 +32,7 @@ const notify = $.isNode() ? require('./sendNotify') : ''; let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 const randomCount = $.isNode() ? 20 : 5; let cookiesArr = [], cookie = '', message = ''; -const inviteCodes = ['PDPM257r_KuQhil2Y7koNw==', "gB99tYLjvPcEFloDgamoBw=="]; +const inviteCodes = ['V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=', 'PDPM257r_KuQhil2Y7koNw==', "gB99tYLjvPcEFloDgamoBw=="]; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; if ($.isNode()) { Object.keys(jdCookieNode).forEach((item) => { @@ -86,7 +86,7 @@ if ($.isNode()) { async function jdDreamFactory() { await userInfo(); - await JoinTuan(); + // await JoinTuan();参团功能暂时无效, await helpFriends(); if (!$.unActive) return await getUserElectricity(); @@ -487,7 +487,7 @@ function userInfo() { console.log(`生产进度:${((production.investedElectric / production.needElectric) * 100).toFixed(2)}%`); message += `【京东账号${$.index}】${$.nickName}\n` message += `【生产商品】${$.productName}\n`; - message += `【当前等级】${data.user.currentLevel}\n`; + message += `【当前等级】${data.user.userIdentity} ${data.user.currentLevel}\n`; message += `【生产进度】${((production.investedElectric / production.needElectric) * 100).toFixed(2)}%\n`; if (production.investedElectric >= production.needElectric) { $.msg($.name, ``, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,请速去兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://wqsd.jd.com/pingou/dream_factory/index.html%22%20%7D'}) @@ -593,7 +593,7 @@ function PickUpComponent(index, encryptPin, help) { if (data['ret'] === 0) { data = data['data']; if (help) { - console.log(`收取好友零件成功:获得${data['increaseElectric']}电力\n`); + console.log(`收取好友[${encryptPin}]零件成功:获得${data['increaseElectric']}电力\n`); $.pickFriendEle += data['increaseElectric']; } else { console.log(`收取自家零件成功:获得${data['increaseElectric']}电力\n`); @@ -601,7 +601,7 @@ function PickUpComponent(index, encryptPin, help) { } } else { if (help) { - console.log(`收好友零件失败:${JSON.stringify(data)}`) + console.log(`收好友[${encryptPin}]零件失败:${JSON.stringify(data)}`) } else { console.log(`收零件失败:${JSON.stringify(data)}`) } @@ -630,10 +630,13 @@ function stealFriend() { if (data['ret'] === 0) { data = data['data']; for (let i = 0; i < data.list.length; i++) { - let pin = data.list[i]['encryptPin']; - await getFactoryIdByPin(pin); - if ($.stealFactoryId) await collectElectricity($.stealFactoryId,true, data.list[i]['key']); - await PickUp(pin, true) + let pin = data.list[i]['encryptPin'];//好友的encryptPin + if (pin === 'V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=' || pin === 'Bo-jnVs_m9uBvbRzraXcSA==') { + continue + } + await PickUp(pin, true); + // await getFactoryIdByPin(pin);//获取好友工厂ID + // if ($.stealFactoryId) await collectElectricity($.stealFactoryId,true, pin); } } else { console.log(`异常:${JSON.stringify(data)}`) @@ -771,6 +774,9 @@ async function showMsg() { if ($.isNode()) { await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `${message}\n【收取零件】获得${$.pickEle}电力`); } + } else if (new Date().getHours() === 22) { + $.msg($.name, '', `${message}【收取自己零件】获得${$.pickEle}电力\n【收取好友零件】获得${$.pickFriendEle}电力`) + $.log(`\n${message}【收取自己零件】获得${$.pickEle}电力\n【收取好友零件】获得${$.pickFriendEle}电力`); } else { $.log(`\n${message}【收取自己零件】获得${$.pickEle}电力\n【收取好友零件】获得${$.pickFriendEle}电力`); } diff --git a/jd_jdfactory.js b/jd_jdfactory.js index 1405a28..e13a136 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -203,7 +203,7 @@ async function algorithm() { $.msg($.name, '', `京东账号${$.index}${$.nickName}\n当前总电量为:${$.batteryValue * 1}\n当前总电量为:${$.batteryValue * 1}\n【满足】兑换${$.canMakeList[0].name}所需总电量:${$.canMakeList[0].totalScore}\n请点击弹窗直达活动页面\n选择此心仪商品并手动投入电量兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `当前总电量为:${$.batteryValue * 1}\n【满足】兑换${$.canMakeList[0].name}所需总电量:${$.canMakeList[0].totalScore}\n请速去活动页面查看`); } else { - console.log(`\n目前电量${$.batteryValue * 1},不满足兑换\n`) + console.log(`\n目前电量${$.batteryValue * 1},不满足兑换 ${$.canMakeList[0].name}所需的 ${$.canMakeList[0].fullScore}电量\n`) } } } @@ -511,10 +511,12 @@ function jdfactory_getProductList(flag = false) { if (data.data.bizCode === 0) { $.canMakeList = data.data.result.canMakeList;//当前可选商品列表 sellOut:1为已抢光,0为目前可选择 $.canMakeList.sort(sortCouponCount); + console.log(`商品名称 可选状态 剩余量`) + for (let item of $.canMakeList) { + console.log(`${item.name.slice(-4)} ${item.sellOut === 1 ? '已抢光':'可 选'} ${item.couponCount}`); + } if (!flag) { - console.log(`商品名称 可选状态 剩余量`) for (let item of $.canMakeList) { - console.log(`${item.name.slice(-4)} ${item.sellOut === 1 ? '已抢光':'可选'} ${item.couponCount}`); if (item.name.indexOf(wantProduct) > -1 && item.couponCount > 0 && item.sellOut === 0) { await jdfactory_makeProduct(item.skuId); break From 82f30b9ccbdae47f38506f020904c3ee307cc07c Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Tue, 1 Dec 2020 17:57:46 +0800 Subject: [PATCH 213/290] =?UTF-8?q?=E4=B8=9C=E4=B8=9C=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=E6=89=8B=E6=9C=BA=E7=AB=AF=E6=AF=8F=E5=A4=A923=E7=82=B9?= =?UTF-8?q?=E8=BF=90=E8=A1=8C=E6=97=B6=E5=BC=B9=E7=AA=97=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_jdfactory.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/jd_jdfactory.js b/jd_jdfactory.js index e13a136..cd86a35 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -102,7 +102,10 @@ function showMsg() { if (!jdNotify) { $.msg($.name, '', `${message}`); } else { - $.log(message); + $.log(`京东账号${$.index}${$.nickName}\n${message}`); + } + if (new Date().getHours() === 23) { + $.msg($.name, '', `京东账号${$.index}${$.nickName}\n${message}`); } resolve() }) @@ -174,6 +177,8 @@ async function algorithm() { } } else { console.log(`\n此账号${$.index}${$.nickName}暂未选择商品\n`); + message += `已选商品:暂无\n`; + message += `心仪商品:${wantProduct ? wantProduct : '暂无'}\n`; if (wantProduct) { console.log(`BoxJs或环境变量提供的心仪商品:${wantProduct}\n`); await jdfactory_getProductList(true); @@ -188,6 +193,9 @@ async function algorithm() { wantProductSkuId = item.skuId; } } + message += `心仪商品数量:${couponCount}\n`; + message += `心仪商品所需电量:${totalScore}\n`; + message += `您当前总电量:${$.batteryValue * 1}\n`; if (wantProductSkuId && (($.batteryValue * 1) >= (totalScore))) { console.log(`\n提供的心仪商品${name}目前数量:${couponCount},且当前总电量为:${$.batteryValue * 1},【满足】兑换此商品所需总电量:${totalScore}`); console.log(`请去活动页面选择心仪商品并手动投入电量兑换\n`); @@ -199,6 +207,9 @@ async function algorithm() { } else { console.log(`BoxJs或环境变量暂未提供心仪商品\n如需兑换心仪商品,请提供心仪商品名称\n`); await jdfactory_getProductList(true); + message += `当前剩余最多商品:${$.canMakeList[0].name}\n`; + message += `兑换所需电量:${$.canMakeList[0].fullScore}\n`; + message += `您当前总电量:${$.batteryValue * 1}\n`; if ($.canMakeList[0].couponCount > 0 && $.batteryValue * 1 >= $.canMakeList[0].fullScore) { $.msg($.name, '', `京东账号${$.index}${$.nickName}\n当前总电量为:${$.batteryValue * 1}\n当前总电量为:${$.batteryValue * 1}\n【满足】兑换${$.canMakeList[0].name}所需总电量:${$.canMakeList[0].totalScore}\n请点击弹窗直达活动页面\n选择此心仪商品并手动投入电量兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `当前总电量为:${$.batteryValue * 1}\n【满足】兑换${$.canMakeList[0].name}所需总电量:${$.canMakeList[0].totalScore}\n请速去活动页面查看`); From 467ad83f408b3a8dd3bcef943fb1607e4bdab6f9 Mon Sep 17 00:00:00 2001 From: shylocks Date: Wed, 2 Dec 2020 00:35:16 +0800 Subject: [PATCH 214/290] =?UTF-8?q?feat:=20=E4=BA=AC=E5=96=9C=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E7=93=9C=E5=88=861=E4=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_jxstory.js | 693 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 693 insertions(+) create mode 100644 jd_jxstory.js diff --git a/jd_jxstory.js b/jd_jxstory.js new file mode 100644 index 0000000..656bbbb --- /dev/null +++ b/jd_jxstory.js @@ -0,0 +1,693 @@ +/* +京喜故事 +活动入口 :京喜APP->首页浮动窗口去领钱 +每天运行一次即可 + + +已支持IOS双京东账号,Node.js支持N个京东账号 +脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js +============Quantumultx=============== +[task_local] +#京喜故事 +10 7 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jxstory.js, tag=京喜故事, enabled=true + +================Loon============== +[Script] +cron "10 7 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jxstory.js,tag=京喜故事 + +===============Surge================= +京喜故事 = type=cron,cronexp="10 * * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jxstory.js + +============小火箭========= +京喜故事 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jxstory.js, cronexpr="10 * * * *", timeout=200, enable=true + + */ + + +const $ = new Env('京喜故事'); +const JD_API_HOST = 'https://m.jingxi.com'; + +const notify = $.isNode() ? require('./sendNotify') : ''; +let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 +const randomCount = 1; +let cookiesArr = [], cookie = '', message = ''; +const inviteCodes = ['PDPM257r_KuQhil2Y7koNw==', "gB99tYLjvPcEFloDgamoBw=="]; +const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; +if ($.isNode()) { + Object.keys(jdCookieNode).forEach((item) => { + cookiesArr.push(jdCookieNode[item]) + }) + if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => { + }; +} else { + cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]) +} +!(async () => { + await requireConfig(); + if (!cookiesArr[0]) { + $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); + return; + } + for (let i = 0; i < cookiesArr.length; i++) { + if (cookiesArr[i]) { + cookie = cookiesArr[i]; + $.UserName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]) + $.index = i + 1; + $.isLogin = true; + $.nickName = ''; + message = ''; + $.ele = 0; + await TotalBean(); + console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`); + if (!$.isLogin) { + $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"}); + + if ($.isNode()) { + await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); + } else { + $.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 + } + continue + } + await shareCodesFormat(); + await jdDreamFactory() + } + } +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) + +async function jdDreamFactory() { + await sign() + await taskList() + await userInfo() + for(let i =0;i { + $.get(taskurl('SignIn', `date=${new Date().Format("yyyyMMdd")}&type=0`), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + console.log(`签到钞票:收取成功,获得 ${data['data']['rewardMoneyToday']}`) + message += `【签到钞票】:收取成功,获得 ${data['data']['rewardMoneyToday']}\n` + } else { + console.log(`签到钞票:收取失败,${data.msg}`) + message += `【签到钞票】收取失败,${data.msg}\n` + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +// 初始化任务 +function taskList() { + return new Promise(async resolve => { + // const url = `/newtasksys/newtasksys_front/GetUserTaskStatusList?source=dreamfactory&bizCode=dream_factory&sceneval=2&g_login_type=1`; + $.get(newtasksysUrl('GetUserTaskStatusList'), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + let userTaskStatusList = data['data']['userTaskStatusList']; + for (let i = 0; i < userTaskStatusList.length; i++) { + const vo = userTaskStatusList[i]; + if (vo['awardStatus'] !== 1) { + if (vo.completedTimes >= vo.targetTimes) { + console.log(`任务:${vo.description}可完成`) + await completeTask(vo.taskId, vo.taskName) + await $.wait(1000);//延迟等待一秒 + } else { + switch (vo.taskType) { + case 2: // 逛一逛任务 + case 6: // 浏览商品任务 + case 9: // 开宝箱 + for (let i = vo.completedTimes; i <= vo.configTargetTimes; ++i) { + console.log(`去做任务:${vo.taskName}`) + await doTask(vo.taskId) + await completeTask(vo.taskId, vo.taskName) + await $.wait(1000);//延迟等待一秒 + } + break + case 4: // 招工 + break + case 5: // 京喜工厂投入电力 + console.log(`去做任务:${vo.taskName}`) + await doTask(vo.taskId) + await completeTask(vo.taskId, vo.taskName) + await $.wait(1000);//延迟等待一秒 + break + case 1: // 登陆领奖 + default: + break + } + } + } + } + console.log(`完成任务:共领取${$.ele}钞票`) + message += `【每日任务】领奖成功,共计 ${$.ele} 钞票\n`; + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +// 钞票翻倍任务 +async function cardList() { + for (let i = 0; i < 10; ++i) { + await readyCard(); + } +} +function readyCard() { + return new Promise(async resolve => { + $.get(taskurl('ReadyCard'), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + + if(data['ret']===0 && data['data']['flopFinishNumber']{ + return { + "cardId" : vo['cardId'], + "cardPosition" : index+1, + "cardStatus" :0 + } + }) + cardInfo[0]['cardStatus'] = 1 + + await selectCard(cardInfo) + // await $.wait(1000); + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +// 选择卡片 +function selectCard(cardInfo) { + return new Promise(async resolve => { + $.get(taskurl('SelectCard',`cardInfo=${JSON.stringify({"cardInfo":cardInfo})}`), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret']===0){ + await $.wait(10000); + await finishCard(cardInfo[0]['cardId']) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +// 完成卡片 +function finishCard(cardId) { + return new Promise(async resolve => { + $.get(taskurl('FinishCard',`cardid=${cardId}`), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret']===0){ + let ratio = data['data']['cardInfo'].filter(vo=>vo['cardId']===cardId)[0]['cardRatio'] + console.log(`翻倍成功,获得${ratio}%,共计获得${data['data']['earnRatio']}%`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +// 升级 +function upgrade() { + return new Promise(async resolve => { + // const url = `/dreamfactory/friend/HireAward?zone=dream_factory&date=${new Date().Format("yyyyMMdd")}&type=0&sceneval=2&g_login_type=1` + $.get(taskurl('UpgradeUserLevelDraw', `date=${new Date().Format("yyyyMMdd")}&type=0`), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0&&data['data']['active']!=='') { + console.log(`升级成功,获得${JSON.stringify(data['data'])}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +async function helpFriends() { + for (let code of $.newShareCodes) { + if (code) { + if ($.encryptPin === code) { + console.log(`不能为自己助力,跳过`); + continue; + } + await assistFriend(code); + } + } +} +// 帮助用户 +function assistFriend(sharepin) { + return new Promise(async resolve => { + // const url = `/dreamfactory/friend/AssistFriend?zone=dream_factory&sharepin=${escape(sharepin)}&sceneval=2&g_login_type=1` + const options = { + 'url': `https://m.jingxi.com/dreamfactory/friend/AssistFriend?zone=dream_factory&sharepin=${escape(sharepin)}&sceneval=2&g_login_type=1`, + 'headers': { + "Host": "wq.jd.com", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), + "Accept": "*/*", + "Accept-Language": "zh,en-US;q=0.7,en;q=0.3", + "Accept-Encoding": "gzip, deflate, br", + "Connection": "keep-alive", + "Referer": "https://wqsd.jd.com/pingou/dream_factory/index.html", + "Cookie": cookie + } + } + $.get(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + console.log(`助力朋友:${sharepin}成功`) + } else { + console.log(`助力朋友[${sharepin}]失败:${data.msg}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +// 任务领奖 +function completeTask(taskId, taskName) { + return new Promise(async resolve => { + // const url = `/newtasksys/newtasksys_front/Award?source=dreamfactory&bizCode=dream_factory&taskId=${taskId}&sceneval=2&g_login_type=1`; + $.get(newtasksysUrl('Award', taskId), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + switch (data['data']['awardStatus']) { + case 1: + $.ele += Number(data['data']['prizeInfo'].replace('\\n', '')) + console.log(`领取${taskName}任务奖励成功,收获:${Number(data['data']['prizeInfo'].replace('\\n', ''))}钞票`); + break + case 1013: + case 0: + console.log(`领取${taskName}任务奖励失败,任务已领奖`); + break + default: + console.log(`领取${taskName}任务奖励失败,${data['msg']}`) + break + } + // if (data['ret'] === 0) { + // console.log("做任务完成!") + // } else { + // console.log(`异常:${JSON.stringify(data)}`) + // } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +// 完成任务 +function doTask(taskId) { + return new Promise(async resolve => { + // const url = `/newtasksys/newtasksys_front/DoTask?source=dreamfactory&bizCode=dream_factory&taskId=${taskId}&sceneval=2&g_login_type=1`; + $.get(newtasksysUrl('DoTask', taskId), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + console.log("做任务完成!") + } else { + console.log(`异常:${JSON.stringify(data)}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +// 初始化个人信息 +function userInfo() { + return new Promise(async resolve => { + $.get(taskurl('GetUserInfo', ), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + data = data['data']; + $.unActive = true;//标记是否开启了京喜活动或者选购了商品进行生产 + $.encryptPin = data.encryptPin; + $.currentMoneyNum = data.currentMoneyNum; + } else { + console.log(`异常:${JSON.stringify(data)}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +//领取红包 +function DrawProductionStagePrize() { + return new Promise(async resolve => { + // const url = `/dreamfactory/userinfo/DrawProductionStagePrize?zone=dream_factory&sceneval=2&g_login_type=1&productionId=${$.productionId}`; + $.get(taskurl('userinfo/DrawProductionStagePrize', `productionId=${$.productionId}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + console.log(`领取红包功能(测试中):${data}`); + // if (safeGet(data)) { + // data = JSON.parse(data); + // if (data['ret'] === 0) { + // + // } else { + // console.log(`异常:${JSON.stringify(data)}`) + // } + // } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +function getFactoryIdByPin(pin) { + return new Promise((resolve, reject) => { + // const url = `/dreamfactory/userinfo/GetUserInfoByPin?zone=dream_factory&pin=${pin}&sceneval=2`; + $.get(taskurl('userinfo/GetUserInfoByPin', `pin=${pin}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + if (data.data.factoryList) { + //做此判断,有时候返回factoryList为null + // resolve(data['data']['factoryList'][0]['factoryId']) + $.stealFactoryId = data['data']['factoryList'][0]['factoryId']; + } + } else { + console.log(`异常:${JSON.stringify(data)}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +async function showMsg() { + return new Promise(async resolve => { + let ctrTemp; + if ($.isNode() && process.env.DREAMFACTORY_NOTIFY_CONTROL) { + ctrTemp = `${process.env.DREAMFACTORY_NOTIFY_CONTROL}` === 'false'; + } else if ($.getdata('jdDreamFactory')) { + ctrTemp = $.getdata('jdDreamFactory') === 'false'; + } else { + ctrTemp = `${jdNotify}` === 'false'; + } + if (ctrTemp) { + $.msg($.name, '', message); + if ($.isNode()) { + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `${message}`); + } + } else { + $.log(`\n${message}\n`); + } + resolve() + }) +} +function readShareCode() { + console.log(`开始`) + return new Promise(async resolve => { + $.get({url: `http://api.turinglabs.net/api/v1/jd/jxfactory/read/${randomCount}/`}, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + console.log(`随机取${randomCount}个码放到您固定的互助码后面`) + data = JSON.parse(data); + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + // await $.wait(2000); + // resolve() + }) +} +//格式化助力码 +function shareCodesFormat() { + return new Promise(async resolve => { + // console.log(`第${$.index}个京东账号的助力码:::${$.shareCodesArr[$.index - 1]}`) + $.newShareCodes = []; + if ($.shareCodesArr[$.index - 1]) { + $.newShareCodes = $.shareCodesArr[$.index - 1].split('@'); + } else { + console.log(`由于您第${$.index}个京东账号未提供shareCode,将采纳本脚本自带的助力码\n`) + const tempIndex = $.index > inviteCodes.length ? (inviteCodes.length - 1) : ($.index - 1); + $.newShareCodes = inviteCodes[tempIndex].split('@'); + } + const readShareCodeRes = await readShareCode(); + if (readShareCodeRes && readShareCodeRes.code === 200) { + $.newShareCodes = [...new Set([...$.newShareCodes, ...(readShareCodeRes.data || [])])]; + } + console.log(`第${$.index}个京东账号将要助力的好友${JSON.stringify($.newShareCodes)}`) + resolve(); + }) +} +function requireConfig() { + return new Promise(resolve => { + console.log(`开始获取${$.name}配置文件\n`); + //Node.js用户请在jdCookie.js处填写京东ck; + const shareCodes = $.isNode() ? require('./jdDreamFactoryShareCodes.js') : ''; + console.log(`共${cookiesArr.length}个京东账号\n`); + $.shareCodesArr = []; + if ($.isNode()) { + Object.keys(shareCodes).forEach((item) => { + if (shareCodes[item]) { + $.shareCodesArr.push(shareCodes[item]) + } + }) + } + // console.log(`\n种豆得豆助力码::${JSON.stringify($.shareCodesArr)}`); + console.log(`您提供了${$.shareCodesArr.length}个账号的${$.name}助力码\n`); + resolve() + }) +} +function TotalBean() { + return new Promise(async resolve => { + const options = { + "url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`, + "headers": { + "Accept": "application/json,text/plain, */*", + "Content-Type": "application/x-www-form-urlencoded", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", + "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1" + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + data = JSON.parse(data); + if (data['retcode'] === 13) { + $.isLogin = false; //cookie过期 + return + } + $.nickName = data['base'].nickname; + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function safeGet(data) { + try { + if (typeof JSON.parse(data) == "object") { + return true; + } + } catch (e) { + console.log(e); + console.log(`京东服务器访问数据为空,请检查自身设备网络情况`); + return false; + } +} + +function taskurl(functionId, body = '') { + return { + url: `${JD_API_HOST}/jxstory/userinfo/${functionId}?bizcode=jxstory&${body}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, + headers: { + 'Cookie': cookie, + 'Host': 'm.jingxi.com', + 'Accept': '*/*', + 'Connection': 'keep-alive', + 'User-Agent': 'jdpingou;iPhone;3.15.2;14.2;ae75259f6ca8378672006fc41079cd8c90c53be8;network/wifi;model/iPhone10,2;appBuild/100365;ADID/00000000-0000-0000-0000-000000000000;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/0;hasOCPay/0;supportBestPay/0;session/158;pap/JA2015_311210;brand/apple;supportJDSHWK/1;Mozilla/5.0 (iPhone; CPU iPhone OS 14_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148', + 'Accept-Language': 'zh-cn', + 'Referer': 'https://st.jingxi.com/pingou/jx_factory_story/index.html?ptag=138963.4.3', + 'Accept-Encoding': 'gzip, deflate, br', + } + } +} +function newtasksysUrl(functionId, taskId) { + let url = `${JD_API_HOST}/newtasksys/newtasksys_front/${functionId}?source=jxstory&bizCode=jxstory&sceneval=2&g_login_type=1&_time=${Date.now()}&_=${Date.now()}`; + if (taskId) { + url += `&taskId=${taskId}`; + } + return { + url, + "headers": { + 'Cookie': cookie, + 'Host': 'm.jingxi.com', + 'Accept': '*/*', + 'Connection': 'keep-alive', + 'User-Agent': "jdpingou;iPhone;3.15.2;13.5.1;90bab9217f465a83a99c0b554a946b0b0d5c2f7a;network/wifi;model/iPhone12,1;appBuild/100365;ADID/696F8BD2-0820-405C-AFC0-3C6D028040E5;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/1;hasOCPay/0;supportBestPay/0;session/14;pap/JA2015_311210;brand/apple;supportJDSHWK/1;", + 'Accept-Language': 'zh-cn', + 'Referer': 'https://wqsd.jd.com/pingou/dream_factory/index.html', + 'Accept-Encoding': 'gzip, deflate, br', + } + } +} +Date.prototype.Format = function (fmt) { //author: meizz + var o = { + "M+": this.getMonth() + 1, //月份 + "d+": this.getDate(), //日 + "h+": this.getHours(), //小时 + "m+": this.getMinutes(), //分 + "s+": this.getSeconds(), //秒 + "q+": Math.floor((this.getMonth() + 3) / 3), //季度 + "S": this.getMilliseconds() //毫秒 + }; + if (/(y+)/.test(fmt)) + fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); + for (var k in o) + if (new RegExp("(" + k + ")").test(fmt)) + fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); + return fmt; +} + +// 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();s&&this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)}))}post(t,e=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.post(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)});else if(this.isQuanX())t.method="POST",this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t));else if(this.isNode()){this.initGotEnv(t);const{url:s,...i}=t;this.got.post(s,i).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)})}}time(t){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}}}};if(this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r))),!this.isMuteLog){let t=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`\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 2ac58bc589afcb4d97906a39f82dffd321da6961 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 2 Dec 2020 09:36:15 +0800 Subject: [PATCH 215/290] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=83=A8=E5=88=86?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=B8=8D=E8=83=BD=E9=A2=86=E5=8F=96=E6=8B=9B?= =?UTF-8?q?=E5=B7=A5=E7=94=B5=E5=8A=9B=E5=A5=96=E5=8A=B1=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 1ba423d..523c821 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -1,6 +1,6 @@ /* 京东京喜工厂 -更新时间:2020-11-30 +更新时间:2020-12-02 活动入口 :京东APP->游戏与互动->查看更多->京喜工厂 或者: 京东APP首页搜索 "玩一玩" ,造物工厂即可 @@ -92,7 +92,7 @@ async function jdDreamFactory() { await getUserElectricity(); await taskList(); await investElectric(); - await hireAward(); + await QueryHireReward();//收取招工电力 await PickUp(); await stealFriend(); await showMsg(); @@ -297,11 +297,42 @@ function shareReport() { }) }) } -// 收取招工电力 -function hireAward() { +//查询有多少的招工电力可收取 +function QueryHireReward() { return new Promise(async resolve => { // const url = `/dreamfactory/friend/HireAward?zone=dream_factory&date=${new Date().Format("yyyyMMdd")}&type=0&sceneval=2&g_login_type=1` - $.get(taskurl('friend/HireAward', `date=${new Date().Format("yyyyMMdd")}&type=0`), async (err, resp, data) => { + $.get(taskurl('friend/QueryHireReward'), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + for (let item of data['data']['hireReward']) { + if (item.date !== new Date(new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000).Format("yyyyMMdd")) { + await hireAward(item.date); + } + } + } else { + console.log(`异常:${JSON.stringify(data)}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +// 收取招工电力 +function hireAward(date) { + return new Promise(async resolve => { + // const url = `/dreamfactory/friend/HireAward?zone=dream_factory&date=${new Date().Format("yyyyMMdd")}&type=0&sceneval=2&g_login_type=1` + $.get(taskurl('friend/HireAward', `date=${date}&type=0`), async (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) From fec707b83865e293a529e6893a7b2ca7eb6cd999 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 2 Dec 2020 11:52:35 +0800 Subject: [PATCH 216/290] =?UTF-8?q?=E8=87=AA=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backUp/mySelf.boxjs.json | 34 ++ backUp/qqread.js | 726 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 760 insertions(+) create mode 100644 backUp/mySelf.boxjs.json create mode 100644 backUp/qqread.js diff --git a/backUp/mySelf.boxjs.json b/backUp/mySelf.boxjs.json new file mode 100644 index 0000000..402cd5b --- /dev/null +++ b/backUp/mySelf.boxjs.json @@ -0,0 +1,34 @@ +{ + "id": "lxk0301.app.sub2", + "name": "自用", + "author": "@lxk0301", + "icon": "https://avatars0.githubusercontent.com/u/21308593?s=52&v=4", + "repo": "https://github.com/lxk0301/jd_scripts/", + "apps": [ + { + "id": "QQ_READ", + "name": "企鹅阅读(QQ小程序)", + "keys": [ + "qqreadurl1", + "qqreadhd1", + "qqreadtimeurl1", + "qqreadtimehd1" + ], + "settings": [ + { + "id": "qqreadurl1", + "name": "qqreadurlVal", + "val": "https://mqqapi.reader.qq.com/mqq/user/init", + "type": "text", + "desc": "" + } + ], + "author": "@ziye12", + "repo": "https://github.com/ziye12/JavaScript ", + "icons": [ + "https://raw.githubusercontent.com/Orz-3/mini/master/jd.png", + "https://raw.githubusercontent.com/Orz-3/task/master/jd.png" + ] + } + ] +} diff --git a/backUp/qqread.js b/backUp/qqread.js new file mode 100644 index 0000000..6d9f27f --- /dev/null +++ b/backUp/qqread.js @@ -0,0 +1,726 @@ +/* + 改用,nodejs云端专用。可N个账号。by;lxk0301 + +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 + +#企鹅读书获取cookie +https:\/\/mqqapi\.reader\.qq\.com\/mqq\/user\/init url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/qqread.js + +#企鹅读书获取时长cookie +https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid? url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/qqread.js + + +############## loon + +//企鹅读书获取cookie +http-request https:\/\/mqqapi\.reader\.qq\.com\/mqq\/user\/init script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/qqread.js,requires-header=true, tag=企鹅读书获取cookie + +//企鹅读书获取时长cookie +http-request https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid? script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/qqread.js, requires-header=true, tag=企鹅读书获取时长cookie + + +############## surge + +//企鹅读书获取cookie +企鹅读书 = type=http-request,pattern=https:\/\/mqqapi\.reader\.qq\.com\/mqq\/user\/init,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/qqread.js, requires-header=true + +//企鹅读书获取时长cookie +企鹅读书 = type=http-request,pattern=https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid?,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/qqread.js, requires-header=true + + +*/ + +const jsname = '企鹅读书' +const $ = Env(jsname) + +console.log(`\n========= 脚本执行时间(TM):${new Date(new Date().getTime() + 0 * 60 * 60 * 1000).toLocaleString('zh', {hour12: false})} =========\n`) + +const logs = 0; //0为关闭日志,1为开启 +const notifyInterval = 3 +//0为关闭通知,1为所有通知,2为宝箱领取成功通知,3为宝箱每15次通知一次 + +const jbid = 1//换号则修改这个值,默认账号1 +const dd = 1//单次任务延迟,默认1秒 +const TIME = 30//单次时长上传限制,默认5分钟 +const maxtime = 20//每日上传时长限制,默认20小时 +const wktimess = 1200//周奖励领取标准,默认1200分钟 +var tz = '' +const qqreadurlVal = `https://mqqapi.reader.qq.com/mqq/user/init`; +// const qqreadurlKey = 'qqreadurl' + jbid +// const qqreadurlVal = $.getdata(qqreadurlKey) + +const qqreadheaderKey = 'qqreadhd' + jbid +let qqreadheaderVal = $.getdata(qqreadheaderKey) + +const qqreadtimeurlKey = 'qqreadtimeurl' + jbid +let qqreadtimeurlVal = $.getdata(qqreadtimeurlKey) + +const qqreadtimeheaderKey = 'qqreadtimehd' + jbid +let qqreadtimeheaderVal = $.getdata(qqreadtimeheaderKey) +//云函数使用在下面填写 +let QQ_READ_COOKIES = [ + { + qqreadurlVal, + "qqreadheaderVal": "", + "qqreadtimeurlVal": "", + "qqreadtimeheaderVal": "" + } +] +function getNodeCookie() { + if ($.isNode()) { + let QQ_READ_HEADER_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_HEADER_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_HEADER_VAL = process.env.QQ_READ_HEADER_VAL.split('\n'); + } else { + QQ_READ_HEADER_VAL = [process.env.QQ_READ_HEADER_VAL]; + } + // QQ_READ_HEADER_VAL = [...new Set(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_HEADER_VAL && QQ_READ_HEADER_VAL.length > 0) QQ_READ_COOKIES = []; + for (let i = 0; i < QQ_READ_HEADER_VAL.length; i ++) { + QQ_READ_COOKIES.push({ + qqreadurlVal, + "qqreadheaderVal": QQ_READ_HEADER_VAL[i] || "", + "qqreadtimeurlVal": QQ_READ_TIME_URL_VAL[i] || "", + "qqreadtimeheaderVal": QQ_READ_TIME_HEADER_VAL[i] || "" + }) + } + } +} +//CK运行 +let isGetCookie = typeof $request !== 'undefined' +if (isGetCookie) { + GetCookie() +} else { + !(async () => { + await getNodeCookie(); + await all(); + })() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) +} + +function GetCookie() { + + if ($request && $request.url.indexOf("init") >= 0) { + + // const qqreadurlVal = $request.url + // if (qqreadurlVal) $.setdata(qqreadurlVal, qqreadurlKey) + // $.log(`[${jsname}] 获取url请求: 成功,qqreadurlVal: ${qqreadurlVal}`) + + // const qqreadbodyVal = $request.body + // if (qqreadbodyVal) $.setdata(qqreadbodyVal, qqreadbodyKey) + // $.log(`[${jsname}] 获取阅读: 成功,qqreadbodyVal: ${qqreadbodyVal}`) + + + const qqreadheaderVal = JSON.stringify($request.headers) + if (qqreadheaderVal) $.setdata(qqreadheaderVal, qqreadheaderKey) + $.log(`[${jsname}] 获取Cookie: 成功,qqreadheaderVal: ${qqreadheaderVal}`) + $.msg(qqreadheaderKey, `获取cookie: 成功🎉`, ``) + + } else 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(); +} + + +function all() { + for (let item of QQ_READ_COOKIES) { + if (!item["qqreadheaderVal"] || !item['qqreadtimeurlVal'] || !item['qqreadtimeheaderVal']) { + $.log(`账号暂未提供脚本执行所需的cookie`); + continue + } + qqreadheaderVal = item['qqreadheaderVal']; + qqreadtimeurlVal = item['qqreadtimeurlVal']; + qqreadtimeheaderVal = item['qqreadtimeheaderVal']; + for (let i = 0; i < 18; i++) { + (function (i) { + setTimeout(function () { + if (i == 0) + qqreadinfo();//用户名 + + else if (i == 1) + qqreadconfig();//时长查询 + + else if (i == 2) + qqreadtask();//任务列表 + + else if (i == 3 && task.data.taskList[0].doneFlag == 0) + qqreadsign();//金币签到 + + else if (i == 4 && task.data.treasureBox.doneFlag == 0) + qqreadbox();//宝箱 + + else if (i == 5 && task.data.taskList[2].doneFlag == 0) + qqreadssr1();//阅读金币1 + + else if (i == 6 && config.data.pageParams.todayReadSeconds / 3600 <= maxtime) + qqreadtime();//上传时长 + + else if (i == 7 && task.data.taskList[0].doneFlag == 0) + qqreadtake();//阅豆签到 + + else if (i == 8 && task.data.taskList[1].doneFlag == 0) + qqreaddayread();//阅读任务 + + else if (i == 9 && task.data.taskList[2].doneFlag == 0) + qqreadssr2();//阅读金币2 + + else if (i == 10 && task.data.taskList[3].doneFlag == 0) + qqreadvideo();//视频任务 + + else if (i == 11 && task.data.taskList[0].doneFlag == 0) + qqreadsign2();//签到翻倍 + + else if (i == 12 && task.data.treasureBox.videoDoneFlag == 0) + qqreadbox2();//宝箱翻倍 + + else if (i == 13 && task.data.taskList[2].doneFlag == 0) + qqreadssr3();//阅读金币3 + + else if (i == 14) + qqreadwktime();//周时长查询 + + else if (i == 15) + qqreadpick();//领周时长奖励 + + else if (i == 16) + showmsg();//通知 + + else if (i == 17) + $.done();//结束 + + } + , (i + 1) * dd * 1000); + })(i) + } + } +} + + +//任务列表 +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 / 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 qqreadinfo() { + return new Promise((resolve, reject) => { + const toqqreadinfourl = { + url: qqreadurlVal, + headers: JSON.parse(qqreadheaderVal), + timeout: 60000 + }; + $.get(toqqreadinfourl, (error, response, data) => { + if (logs) $.log(`${jsname}, 用户名: ${data}`) + info = JSON.parse(data) + tz += + '【用户信息】:' + 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}`) + 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}`) + 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(qqreadheaderVal), + timeout: 60000 + }; + if (config.data.pageParams.todayReadSeconds / 60 >= 1) { + + $.get(toqqreadssr1url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币奖励1: ${data}`) + 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(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.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(qqreadheaderVal), + timeout: 60000 + }; + + if (config.data.pageParams.todayReadSeconds / 60 >= 30) { + + $.get(toqqreadssr3url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币奖励3: ${data}`) + 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(qqreadheaderVal), + 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(qqreadheaderVal), + timeout: 60000 + }; + $.get(toqqreadsign2url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币签到翻倍: ${data}`) + 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}`) + 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}`) + 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}`) + 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}`) + 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}`) + 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}`) + Package = JSON.parse(data) + if (Package.code == 0) + tz += '【周时长奖励' + (i + 1) + '】:领取' + Packageid[i] + '阅豆\n' + }) + + }, i * 100) + } + + }) + resolve() + } + }) +} + + +function showmsg() { + 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次通知一次 + +} + + +// 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 53f4e9b571ed9521ebf46f2816858cf8fbfbd907 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 2 Dec 2020 12:21:17 +0800 Subject: [PATCH 217/290] update --- backUp/mySelf.boxjs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backUp/mySelf.boxjs.json b/backUp/mySelf.boxjs.json index 402cd5b..c1b65db 100644 --- a/backUp/mySelf.boxjs.json +++ b/backUp/mySelf.boxjs.json @@ -17,7 +17,7 @@ "settings": [ { "id": "qqreadurl1", - "name": "qqreadurlVal", + "name": "qqreadurl1", "val": "https://mqqapi.reader.qq.com/mqq/user/init", "type": "text", "desc": "" From 470015e2bc8912f1dccc1b76358aac288baa1cb5 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 2 Dec 2020 12:26:09 +0800 Subject: [PATCH 218/290] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BC=81=E9=B9=85?= =?UTF-8?q?=E9=98=85=E8=AF=BB=EF=BC=8C=E4=BA=91=E7=AB=AFNode.js=E4=B8=93?= =?UTF-8?q?=E7=94=A8=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backUp/mySelf.boxjs.json | 10 +--------- backUp/qqread.js | 4 ++-- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/backUp/mySelf.boxjs.json b/backUp/mySelf.boxjs.json index c1b65db..d7d9984 100644 --- a/backUp/mySelf.boxjs.json +++ b/backUp/mySelf.boxjs.json @@ -14,15 +14,7 @@ "qqreadtimeurl1", "qqreadtimehd1" ], - "settings": [ - { - "id": "qqreadurl1", - "name": "qqreadurl1", - "val": "https://mqqapi.reader.qq.com/mqq/user/init", - "type": "text", - "desc": "" - } - ], + "settings": [], "author": "@ziye12", "repo": "https://github.com/ziye12/JavaScript ", "icons": [ diff --git a/backUp/qqread.js b/backUp/qqread.js index 6d9f27f..add9592 100644 --- a/backUp/qqread.js +++ b/backUp/qqread.js @@ -75,7 +75,7 @@ const maxtime = 20//每日上传时长限制,默认20小时 const wktimess = 1200//周奖励领取标准,默认1200分钟 var tz = '' const qqreadurlVal = `https://mqqapi.reader.qq.com/mqq/user/init`; -// const qqreadurlKey = 'qqreadurl' + jbid +const qqreadurlKey = 'qqreadurl' + jbid // const qqreadurlVal = $.getdata(qqreadurlKey) const qqreadheaderKey = 'qqreadhd' + jbid @@ -174,7 +174,7 @@ function GetCookie() { // if (qqreadbodyVal) $.setdata(qqreadbodyVal, qqreadbodyKey) // $.log(`[${jsname}] 获取阅读: 成功,qqreadbodyVal: ${qqreadbodyVal}`) - + $.setdata(qqreadurlVal, qqreadurlKey); const qqreadheaderVal = JSON.stringify($request.headers) if (qqreadheaderVal) $.setdata(qqreadheaderVal, qqreadheaderKey) $.log(`[${jsname}] 获取Cookie: 成功,qqreadheaderVal: ${qqreadheaderVal}`) From 97aa5cdf7291af2a7a607f7e7d6d5739280de15a Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 2 Dec 2020 14:02:14 +0800 Subject: [PATCH 219/290] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BC=81=E9=B9=85?= =?UTF-8?q?=E8=AF=BB=E4=B9=A6=E8=84=9A=E6=9C=AC=EF=BC=8C=E8=87=AA=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backUp/qqread.js | 153 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 105 insertions(+), 48 deletions(-) diff --git a/backUp/qqread.js b/backUp/qqread.js index add9592..495ad64 100644 --- a/backUp/qqread.js +++ b/backUp/qqread.js @@ -33,38 +33,38 @@ hostname=mqqapi.reader.qq.com ############## 圈x #企鹅读书获取cookie -https:\/\/mqqapi\.reader\.qq\.com\/mqq\/user\/init url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/qqread.js +https:\/\/mqqapi\.reader\.qq\.com\/mqq\/user\/init url script-request-header 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/ziye12/JavaScript/master/qqread.js +https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid? url script-request-header https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js ############## loon //企鹅读书获取cookie -http-request https:\/\/mqqapi\.reader\.qq\.com\/mqq\/user\/init script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/qqread.js,requires-header=true, tag=企鹅读书获取cookie +http-request https:\/\/mqqapi\.reader\.qq\.com\/mqq\/user\/init script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js,requires-header=true, tag=企鹅读书获取cookie //企鹅读书获取时长cookie -http-request https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid? script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/qqread.js, requires-header=true, tag=企鹅读书获取时长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 //企鹅读书获取cookie -企鹅读书 = type=http-request,pattern=https:\/\/mqqapi\.reader\.qq\.com\/mqq\/user\/init,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/qqread.js, requires-header=true +企鹅读书 = type=http-request,pattern=https:\/\/mqqapi\.reader\.qq\.com\/mqq\/user\/init,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js, requires-header=true //企鹅读书获取时长cookie -企鹅读书 = type=http-request,pattern=https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid?,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/qqread.js, requires-header=true +企鹅读书 = type=http-request,pattern=https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid?,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/qqread.js, requires-header=true */ const jsname = '企鹅读书' const $ = Env(jsname) - +let task = '', config, ssr2 = '', wktime; console.log(`\n========= 脚本执行时间(TM):${new Date(new Date().getTime() + 0 * 60 * 60 * 1000).toLocaleString('zh', {hour12: false})} =========\n`) -const logs = 0; //0为关闭日志,1为开启 +const logs = 1; //0为关闭日志,1为开启 const notifyInterval = 3 //0为关闭通知,1为所有通知,2为宝箱领取成功通知,3为宝箱每15次通知一次 @@ -90,9 +90,9 @@ let qqreadtimeheaderVal = $.getdata(qqreadtimeheaderKey) let QQ_READ_COOKIES = [ { qqreadurlVal, - "qqreadheaderVal": "", - "qqreadtimeurlVal": "", - "qqreadtimeheaderVal": "" + "qqreadheaderVal": "{\"Accept\":\"*/*\",\"ywsession\":\"s8cyzgxftx92qajavwrxhyag56pekx4h\",\"Connection\":\"keep-alive\",\"Content-Type\":\"application/json\",\"Cookie\":\"ywguid=778732665;ywkey=ywlCt7NxTRWO;platform=ios;channel=mqqmina;mpVersion=0.30.0\",\"Host\":\"mqqapi.reader.qq.com\",\"User-Agent\":\"QQ/8.4.17.638 CFNetwork/1206 Darwin/20.1.0\",\"Referer\":\"https://appservice.qq.com/1110657249/0.30.0/page-frame.html\",\"Accept-Language\":\"zh-cn\",\"Accept-Encoding\":\"gzip, deflate, br\",\"mpversion\":\"0.30.0\"}", + "qqreadtimeurlVal": "https://mqqapi.reader.qq.com/mqq/addReadTimeWithBid?scene=3026&refer=-1&bid=186503&readTime=6415&read_type=0&conttype=1&read_status=0&chapter_info=%5B%7B%221%22%3A%7B%22readTime%22%3A6415%2C%22pay_status%22%3A0%7D%7D%5D&sp=-1", + "qqreadtimeheaderVal": "{\"Accept\":\"*/*\",\"ywsession\":\"s8cyzgxftx92qajavwrxhyag56pekx4h\",\"Connection\":\"keep-alive\",\"Content-Type\":\"application/json\",\"Cookie\":\"ywguid=778732665;ywkey=ywlCt7NxTRWO;platform=ios;channel=mqqmina;mpVersion=0.30.0;qq_ver=8.4.17;os_ver=iOS 14.2;mpos_ver=1.21.0;platform=ios;openid=206EB8919712F9C70C64A938DAC4D567\",\"Host\":\"mqqapi.reader.qq.com\",\"User-Agent\":\"QQ/8.4.17.638 CFNetwork/1206 Darwin/20.1.0\",\"Referer\":\"https://appservice.qq.com/1110657249/0.30.0/page-frame.html\",\"Accept-Language\":\"zh-cn\",\"Accept-Encoding\":\"gzip, deflate, br\",\"mpversion\":\"0.30.0\"}" } ] function getNodeCookie() { @@ -152,7 +152,8 @@ if (isGetCookie) { } else { !(async () => { await getNodeCookie(); - await all(); + await QQ_READ(); + // await all(); })() .catch((e) => { $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') @@ -193,7 +194,64 @@ function GetCookie() { } $.done(); } +async function QQ_READ() { + for (let item of QQ_READ_COOKIES) { + if (!item["qqreadheaderVal"] || !item['qqreadtimeurlVal'] || !item['qqreadtimeheaderVal']) { + $.log(`账号暂未提供脚本执行所需的cookie`); + continue + } + qqreadheaderVal = item['qqreadheaderVal']; + qqreadtimeurlVal = item['qqreadtimeurlVal']; + qqreadtimeheaderVal = item['qqreadtimeheaderVal']; + await qqreadinfo();//用户名 + // await $.wait(2000) + await qqreadconfig();//时长查询 + // await $.wait(2000) + await qqreadtask();//任务列表 + if (task.data.taskList[1].doneFlag == 0) { + // await $.wait(2000) + await qqreaddayread();//阅读任务 + } + if (task.data.taskList[0].doneFlag == 0) { + // await $.wait(2000) + await qqreadsign();//金币签到 + // await $.wait(2000) + await qqreadtake();//阅豆签到 + // await $.wait(2000) + await qqreadsign2();//签到翻倍 + } + + if (task.data.treasureBox.doneFlag == 0) { + // await $.wait(2000) + await qqreadbox();//宝箱 + } + if (task.data.taskList[2].doneFlag == 0) { + // await $.wait(2000) + await qqreadssr1();//阅读金币1 + await $.wait(3000) + await qqreadssr2();//阅读金币2 + await $.wait(5000) + await qqreadssr3();//阅读金币3 + } + if (task.data.taskList[3].doneFlag == 0) { + // await $.wait(2000) + await qqreadvideo();//视频奖励 + } + if (task.data.treasureBox.videoDoneFlag == 0) { + // await $.wait(2000) + await qqreadbox2();//宝箱翻倍 + } + if (config.data.pageParams.todayReadSeconds / 3600 <= maxtime) { + // await $.wait(2000) + await qqreadtime(); + } + + await qqreadwktime();//周时长查询 + await qqreadpick();//领周时长奖励 + await showmsg();//通知 + } +} function all() { for (let item of QQ_READ_COOKIES) { @@ -354,7 +412,7 @@ function qqreadinfo() { }; $.get(toqqreadinfourl, (error, response, data) => { if (logs) $.log(`${jsname}, 用户名: ${data}`) - info = JSON.parse(data) + const info = JSON.parse(data) tz += '【用户信息】:' + info.data.user.nickName + '\n' @@ -374,7 +432,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' @@ -417,11 +475,8 @@ function qqreadtime() { $.get(toqqreadtimeurl, (error, response, data) => { if (logs) $.log(`${jsname}, 阅读时长: ${data}`) - time = JSON.parse(data) - if (time.code == 0) - tz += '【阅读时长】:上传' + TIME / 6 + '分钟\n' - - + let time = JSON.parse(data) + if (time.code == 0) tz += '【阅读时长】:上传' + TIME / 6 + '分钟\n' resolve() }) }) @@ -440,7 +495,7 @@ function qqreadssr1() { $.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' @@ -465,12 +520,13 @@ function qqreadssr2() { $.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' - + if (ssr2.code === 0) { + if (ssr2.data.amount > 0) tz += '【阅读金币2】获得' + ssr2.data.amount + '金币\n' + } resolve() }) } + resolve() }) } @@ -488,14 +544,14 @@ function qqreadssr3() { $.get(toqqreadssr3url, (error, response, data) => { if (logs) $.log(`${jsname}, 金币奖励3: ${data}`) - ssr3 = JSON.parse(data) - if (ssr3.data.amount > 0) - tz += '【阅读金币3】获得' + ssr3.data.amount + '金币\n' - - + let ssr3 = JSON.parse(data) + if (ssr3.code === 0) { + if (ssr3.data.amount > 0) tz += '【阅读金币3】获得' + ssr3.data.amount + '金币\n' + } resolve() }) } + resolve() }) } @@ -510,7 +566,7 @@ function qqreadsign() { }; $.get(toqqreadsignurl, (error, response, data) => { if (logs) $.log(`${jsname}, 金币签到: ${data}`) - sign = JSON.parse(data) + let sign = JSON.parse(data) if (sign.data.videoDoneFlag) { tz += @@ -534,7 +590,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 += @@ -557,7 +613,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' @@ -580,7 +636,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 += @@ -606,7 +662,7 @@ function qqreadbox() { }; $.get(toqqreadboxurl, (error, response, data) => { if (logs) $.log(`${jsname}, 宝箱奖励: ${data}`) - box = JSON.parse(data) + const box = JSON.parse(data) if (box.data.count >= 0) { tz += @@ -631,7 +687,7 @@ function qqreadbox2() { }; $.get(toqqreadbox2url, (error, response, data) => { if (logs) $.log(`${jsname}, 宝箱奖励翻倍: ${data}`) - box2 = JSON.parse(data) + let box2 = JSON.parse(data) if (box2.code == 0) { tz += @@ -656,11 +712,9 @@ function qqreadwktime() { }; $.get(toqqreadwktimeurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅读时长: ${data}`) + if (logs) $.log(`${jsname}, qqreadwktime 阅读时长: ${data}`) wktime = JSON.parse(data) - if (wktime.code == 0) - tz += '【本周阅读时长】:' + wktime.data.readTime + '分钟\n' - + if (wktime.code == 0) tz += '【本周阅读时长】:' + wktime.data.readTime + '分钟\n' resolve() }) }) @@ -678,7 +732,7 @@ function qqreadpick() { if (wktime.data.readTime >= wktimess) { $.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++) { @@ -692,7 +746,7 @@ function qqreadpick() { }; $.get(toqqreadPackageurl, (error, response, data) => { if (logs) $.log(`${jsname}, 领周阅读时长: ${data}`) - Package = JSON.parse(data) + let Package = JSON.parse(data) if (Package.code == 0) tz += '【周时长奖励' + (i + 1) + '】:领取' + Packageid[i] + '阅豆\n' }) @@ -703,22 +757,25 @@ function qqreadpick() { }) resolve() } + resolve() }) } function showmsg() { - console.log(tz) + return new Promise(async resolve => { + console.log(tz) - if (notifyInterval == 1) - $.msg(jsname, '', 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次通知一次 + 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 91d5952d2c939a47c5548a21b0176be76dddef31 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 2 Dec 2020 14:03:11 +0800 Subject: [PATCH 220/290] update --- backUp/qqread.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backUp/qqread.js b/backUp/qqread.js index 495ad64..80e1886 100644 --- a/backUp/qqread.js +++ b/backUp/qqread.js @@ -90,9 +90,9 @@ let qqreadtimeheaderVal = $.getdata(qqreadtimeheaderKey) let QQ_READ_COOKIES = [ { qqreadurlVal, - "qqreadheaderVal": "{\"Accept\":\"*/*\",\"ywsession\":\"s8cyzgxftx92qajavwrxhyag56pekx4h\",\"Connection\":\"keep-alive\",\"Content-Type\":\"application/json\",\"Cookie\":\"ywguid=778732665;ywkey=ywlCt7NxTRWO;platform=ios;channel=mqqmina;mpVersion=0.30.0\",\"Host\":\"mqqapi.reader.qq.com\",\"User-Agent\":\"QQ/8.4.17.638 CFNetwork/1206 Darwin/20.1.0\",\"Referer\":\"https://appservice.qq.com/1110657249/0.30.0/page-frame.html\",\"Accept-Language\":\"zh-cn\",\"Accept-Encoding\":\"gzip, deflate, br\",\"mpversion\":\"0.30.0\"}", - "qqreadtimeurlVal": "https://mqqapi.reader.qq.com/mqq/addReadTimeWithBid?scene=3026&refer=-1&bid=186503&readTime=6415&read_type=0&conttype=1&read_status=0&chapter_info=%5B%7B%221%22%3A%7B%22readTime%22%3A6415%2C%22pay_status%22%3A0%7D%7D%5D&sp=-1", - "qqreadtimeheaderVal": "{\"Accept\":\"*/*\",\"ywsession\":\"s8cyzgxftx92qajavwrxhyag56pekx4h\",\"Connection\":\"keep-alive\",\"Content-Type\":\"application/json\",\"Cookie\":\"ywguid=778732665;ywkey=ywlCt7NxTRWO;platform=ios;channel=mqqmina;mpVersion=0.30.0;qq_ver=8.4.17;os_ver=iOS 14.2;mpos_ver=1.21.0;platform=ios;openid=206EB8919712F9C70C64A938DAC4D567\",\"Host\":\"mqqapi.reader.qq.com\",\"User-Agent\":\"QQ/8.4.17.638 CFNetwork/1206 Darwin/20.1.0\",\"Referer\":\"https://appservice.qq.com/1110657249/0.30.0/page-frame.html\",\"Accept-Language\":\"zh-cn\",\"Accept-Encoding\":\"gzip, deflate, br\",\"mpversion\":\"0.30.0\"}" + "qqreadheaderVal": "", + "qqreadtimeurlVal": "", + "qqreadtimeheaderVal": "" } ] function getNodeCookie() { From 008ac279c0a1072bee182cf3c55b65bf8a7821c1 Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Wed, 2 Dec 2020 14:28:26 +0800 Subject: [PATCH 221/290] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=8F=8F=E8=BF=B0?= =?UTF-8?q?=E6=80=A7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修正描述性问题 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a7ddd23..3fa86f5 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ * 间接使用脚本的任何用户,包括但不限于建立VPS或在某些行为违反国家/地区法律或相关法规的情况下进行传播, lxk0301 对于由此引起的任何隐私泄漏或其他后果概不负责. -* 请勿将Script项目的任内容用于商业或非法目的,否则后果自负. +* 请勿将Script项目的任何内容用于商业或非法目的,否则后果自负. * 如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关脚本. From 24cc97580c93ab0ee8907c50b6c03dde1883763b Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 2 Dec 2020 14:37:42 +0800 Subject: [PATCH 222/290] update --- backUp/qqread.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backUp/qqread.js b/backUp/qqread.js index 80e1886..73946be 100644 --- a/backUp/qqread.js +++ b/backUp/qqread.js @@ -476,7 +476,7 @@ function qqreadtime() { $.get(toqqreadtimeurl, (error, response, data) => { if (logs) $.log(`${jsname}, 阅读时长: ${data}`) let time = JSON.parse(data) - if (time.code == 0) tz += '【阅读时长】:上传' + TIME / 6 + '分钟\n' + if (time && time.code == 0) tz += '【阅读时长】:上传' + TIME / 6 + '分钟\n' resolve() }) }) From f13c00efff22678f410a577954e099acdd27e784 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 2 Dec 2020 15:09:29 +0800 Subject: [PATCH 223/290] update --- backUp/qqread.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backUp/qqread.js b/backUp/qqread.js index 73946be..f20bbcb 100644 --- a/backUp/qqread.js +++ b/backUp/qqread.js @@ -474,7 +474,7 @@ function qqreadtime() { }; $.get(toqqreadtimeurl, (error, response, data) => { - if (logs) $.log(`${jsname}, 阅读时长: ${data}`) + if (logs) $.log(`${jsname}, qqreadtime-阅读时长: ${data}`) let time = JSON.parse(data) if (time && time.code == 0) tz += '【阅读时长】:上传' + TIME / 6 + '分钟\n' resolve() From 4078d993740ab74c3782e4007bc5ea73f9474aa5 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 2 Dec 2020 15:24:34 +0800 Subject: [PATCH 224/290] =?UTF-8?q?=E5=8F=91=E7=8E=B0=E9=83=A8=E5=88=86?= =?UTF-8?q?=E6=89=80=E9=9C=80=E7=9A=84token=E5=8F=82=E6=95=B0=E9=87=8C?= =?UTF-8?q?=E9=9D=A2=E5=B8=A6=E6=9C=89&=E7=AC=A6=E5=8F=B7=EF=BC=8C?= =?UTF-8?q?=E6=95=85=E6=8D=A2=E6=88=90@=E5=88=86=E5=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backUp/qqread.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/backUp/qqread.js b/backUp/qqread.js index f20bbcb..b386c83 100644 --- a/backUp/qqread.js +++ b/backUp/qqread.js @@ -99,8 +99,8 @@ function getNodeCookie() { if ($.isNode()) { let QQ_READ_HEADER_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`) + if (process.env.QQ_READ_HEADER_VAL.indexOf('@') > -1) { + console.log(`您的QQ_READ_HEADER_VAL选择的是用@隔开\n`) QQ_READ_HEADER_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`) @@ -111,8 +111,8 @@ function getNodeCookie() { // QQ_READ_HEADER_VAL = [...new Set(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`) + 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`) @@ -123,8 +123,8 @@ function getNodeCookie() { // 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`) + 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`) From ca385ad4860621ab81d5ad94f1adf3991fb31521 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 2 Dec 2020 15:48:52 +0800 Subject: [PATCH 225/290] update --- backUp/qqread.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/backUp/qqread.js b/backUp/qqread.js index b386c83..527b565 100644 --- a/backUp/qqread.js +++ b/backUp/qqread.js @@ -101,7 +101,7 @@ function getNodeCookie() { 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_HEADER_VAL = process.env.QQ_READ_HEADER_VAL.split('&'); + QQ_READ_HEADER_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_HEADER_VAL = process.env.QQ_READ_HEADER_VAL.split('\n'); @@ -109,11 +109,12 @@ function getNodeCookie() { QQ_READ_HEADER_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('&'); + 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'); @@ -125,7 +126,7 @@ function getNodeCookie() { 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('&'); + 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'); @@ -143,6 +144,7 @@ function getNodeCookie() { "qqreadtimeheaderVal": QQ_READ_TIME_HEADER_VAL[i] || "" }) } + // console.log(`${JSON.stringify(QQ_READ_COOKIES)}`) } } //CK运行 From ce4ac9e57032be63ed159fab077e17bad79f2133 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 2 Dec 2020 16:04:14 +0800 Subject: [PATCH 226/290] update --- backUp/qqread.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backUp/qqread.js b/backUp/qqread.js index 527b565..204e04a 100644 --- a/backUp/qqread.js +++ b/backUp/qqread.js @@ -109,7 +109,7 @@ function getNodeCookie() { QQ_READ_HEADER_VAL = [process.env.QQ_READ_HEADER_VAL]; } // QQ_READ_HEADER_VAL = [...new Set(QQ_READ_HEADER_VAL)] - $.log(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) { @@ -198,6 +198,7 @@ function GetCookie() { } async function QQ_READ() { for (let item of QQ_READ_COOKIES) { + tz = ''; if (!item["qqreadheaderVal"] || !item['qqreadtimeurlVal'] || !item['qqreadtimeheaderVal']) { $.log(`账号暂未提供脚本执行所需的cookie`); continue @@ -505,6 +506,7 @@ function qqreadssr1() { resolve() }) } + resolve() }) } From 3aba5fddc3fc26626c12a49767e1542e44b32c34 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 2 Dec 2020 16:28:35 +0800 Subject: [PATCH 227/290] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=91=E7=AB=AF?= =?UTF-8?q?=E7=AE=80=E8=A6=81=E4=BD=BF=E7=94=A8=E8=AF=B4=E6=98=8E=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BC=81=E9=B9=85=E9=98=85=E8=AF=BBBoxJs?= =?UTF-8?q?=E8=AE=A2=E9=98=85=EF=BC=88=E8=87=AA=E7=94=A8=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backUp/qqread.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/backUp/qqread.js b/backUp/qqread.js index 204e04a..bd3a19c 100644 --- a/backUp/qqread.js +++ b/backUp/qqread.js @@ -1,6 +1,15 @@ /* +****************************************************************************** 改用,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 ------》 qqreadhd1 + QQ_READ_TIME_URL_VAL ------》 qqreadtimeurl1 + QQ_READ_TIME_HEADER_VAL ------》 qqreadtimehd1 + ***************************************************************************************************************** ziye 本人github地址 https://github.com/ziye12/JavaScript 转载请备注个名字,谢谢 From fccacffc5031e8be624277f2db2b855701b622e5 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Wed, 2 Dec 2020 17:04:27 +0800 Subject: [PATCH 228/290] update --- backUp/mySelf.boxjs.json | 8 +-- backUp/qqread.js | 108 ++++++--------------------------------- 2 files changed, 21 insertions(+), 95 deletions(-) diff --git a/backUp/mySelf.boxjs.json b/backUp/mySelf.boxjs.json index d7d9984..2367201 100644 --- a/backUp/mySelf.boxjs.json +++ b/backUp/mySelf.boxjs.json @@ -9,10 +9,10 @@ "id": "QQ_READ", "name": "企鹅阅读(QQ小程序)", "keys": [ - "qqreadurl1", - "qqreadhd1", - "qqreadtimeurl1", - "qqreadtimehd1" + "qqreadurl", + "qqreadhd", + "qqreadtimeurl", + "qqreadtimehd" ], "settings": [], "author": "@ziye12", diff --git a/backUp/qqread.js b/backUp/qqread.js index bd3a19c..308b418 100644 --- a/backUp/qqread.js +++ b/backUp/qqread.js @@ -6,9 +6,9 @@ 多个账号 对应三个环境变量/secret 使用@符号或者换行隔开 iOS可使用BoxJs可使用此订阅修改复制所需的环境变量 https://raw.githubusercontent.com/lxk0301/jd_scripts/master/backUp/mySelf.boxjs.json 环境变量与BoxJs里面对应关系 - QQ_READ_HEADER_VAL ------》 qqreadhd1 - QQ_READ_TIME_URL_VAL ------》 qqreadtimeurl1 - QQ_READ_TIME_HEADER_VAL ------》 qqreadtimehd1 + QQ_READ_HEADER_VAL ------》 qqreadhd + QQ_READ_TIME_URL_VAL ------》 qqreadtimeurl + QQ_READ_TIME_HEADER_VAL ------》 qqreadtimehd ***************************************************************************************************************** ziye 本人github地址 https://github.com/ziye12/JavaScript @@ -77,23 +77,22 @@ const logs = 1; //0为关闭日志,1为开启 const notifyInterval = 3 //0为关闭通知,1为所有通知,2为宝箱领取成功通知,3为宝箱每15次通知一次 -const jbid = 1//换号则修改这个值,默认账号1 const dd = 1//单次任务延迟,默认1秒 const TIME = 30//单次时长上传限制,默认5分钟 const maxtime = 20//每日上传时长限制,默认20小时 const wktimess = 1200//周奖励领取标准,默认1200分钟 var tz = '' const qqreadurlVal = `https://mqqapi.reader.qq.com/mqq/user/init`; -const qqreadurlKey = 'qqreadurl' + jbid +const qqreadurlKey = 'qqreadurl' // const qqreadurlVal = $.getdata(qqreadurlKey) -const qqreadheaderKey = 'qqreadhd' + jbid +const qqreadheaderKey = 'qqreadhd' let qqreadheaderVal = $.getdata(qqreadheaderKey) -const qqreadtimeurlKey = 'qqreadtimeurl' + jbid +const qqreadtimeurlKey = 'qqreadtimeurl' let qqreadtimeurlVal = $.getdata(qqreadtimeurlKey) -const qqreadtimeheaderKey = 'qqreadtimehd' + jbid +const qqreadtimeheaderKey = 'qqreadtimehd' let qqreadtimeheaderVal = $.getdata(qqreadtimeheaderKey) //云函数使用在下面填写 let QQ_READ_COOKIES = [ @@ -206,26 +205,27 @@ function GetCookie() { $.done(); } async function QQ_READ() { - for (let item of QQ_READ_COOKIES) { + for (let i = 0; i < QQ_READ_COOKIES.length; i++) { + $.log(`\n*************开始QQ账号${i + 1}**************\n`); tz = ''; - if (!item["qqreadheaderVal"] || !item['qqreadtimeurlVal'] || !item['qqreadtimeheaderVal']) { - $.log(`账号暂未提供脚本执行所需的cookie`); + if (!QQ_READ_COOKIES[i]["qqreadheaderVal"] || !QQ_READ_COOKIES[i]['qqreadtimeurlVal'] || !QQ_READ_COOKIES[i]['qqreadtimeheaderVal']) { + $.log(`账号${i + 1}暂未提供脚本执行所需的cookie`); continue } - qqreadheaderVal = item['qqreadheaderVal']; - qqreadtimeurlVal = item['qqreadtimeurlVal']; - qqreadtimeheaderVal = item['qqreadtimeheaderVal']; + qqreadheaderVal = QQ_READ_COOKIES[i]['qqreadheaderVal']; + qqreadtimeurlVal = QQ_READ_COOKIES[i]['qqreadtimeurlVal']; + qqreadtimeheaderVal = QQ_READ_COOKIES[i]['qqreadtimeheaderVal']; await qqreadinfo();//用户名 // await $.wait(2000) await qqreadconfig();//时长查询 // await $.wait(2000) await qqreadtask();//任务列表 - if (task.data.taskList[1].doneFlag == 0) { + if (task.data.taskList[0].doneFlag == 0) { // await $.wait(2000) await qqreaddayread();//阅读任务 } - if (task.data.taskList[0].doneFlag == 0) { + if (task.data.taskList[2].doneFlag == 0) { // await $.wait(2000) await qqreadsign();//金币签到 // await $.wait(2000) @@ -238,7 +238,7 @@ async function QQ_READ() { // await $.wait(2000) await qqreadbox();//宝箱 } - if (task.data.taskList[2].doneFlag == 0) { + if (task.data.taskList[1].doneFlag == 0) { // await $.wait(2000) await qqreadssr1();//阅读金币1 await $.wait(3000) @@ -265,80 +265,6 @@ async function QQ_READ() { } } -function all() { - for (let item of QQ_READ_COOKIES) { - if (!item["qqreadheaderVal"] || !item['qqreadtimeurlVal'] || !item['qqreadtimeheaderVal']) { - $.log(`账号暂未提供脚本执行所需的cookie`); - continue - } - qqreadheaderVal = item['qqreadheaderVal']; - qqreadtimeurlVal = item['qqreadtimeurlVal']; - qqreadtimeheaderVal = item['qqreadtimeheaderVal']; - for (let i = 0; i < 18; i++) { - (function (i) { - setTimeout(function () { - if (i == 0) - qqreadinfo();//用户名 - - else if (i == 1) - qqreadconfig();//时长查询 - - else if (i == 2) - qqreadtask();//任务列表 - - else if (i == 3 && task.data.taskList[0].doneFlag == 0) - qqreadsign();//金币签到 - - else if (i == 4 && task.data.treasureBox.doneFlag == 0) - qqreadbox();//宝箱 - - else if (i == 5 && task.data.taskList[2].doneFlag == 0) - qqreadssr1();//阅读金币1 - - else if (i == 6 && config.data.pageParams.todayReadSeconds / 3600 <= maxtime) - qqreadtime();//上传时长 - - else if (i == 7 && task.data.taskList[0].doneFlag == 0) - qqreadtake();//阅豆签到 - - else if (i == 8 && task.data.taskList[1].doneFlag == 0) - qqreaddayread();//阅读任务 - - else if (i == 9 && task.data.taskList[2].doneFlag == 0) - qqreadssr2();//阅读金币2 - - else if (i == 10 && task.data.taskList[3].doneFlag == 0) - qqreadvideo();//视频任务 - - else if (i == 11 && task.data.taskList[0].doneFlag == 0) - qqreadsign2();//签到翻倍 - - else if (i == 12 && task.data.treasureBox.videoDoneFlag == 0) - qqreadbox2();//宝箱翻倍 - - else if (i == 13 && task.data.taskList[2].doneFlag == 0) - qqreadssr3();//阅读金币3 - - else if (i == 14) - qqreadwktime();//周时长查询 - - else if (i == 15) - qqreadpick();//领周时长奖励 - - else if (i == 16) - showmsg();//通知 - - else if (i == 17) - $.done();//结束 - - } - , (i + 1) * dd * 1000); - })(i) - } - } -} - - //任务列表 function qqreadtask() { return new Promise((resolve, reject) => { From 47e1ccaca82d111cc47d597ae33f18e6d10c490f Mon Sep 17 00:00:00 2001 From: JohnED512 <55294216+JohnED512@users.noreply.github.com> Date: Wed, 2 Dec 2020 22:43:46 +0800 Subject: [PATCH 229/290] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=BC=BA=E5=B0=91?= =?UTF-8?q?=E7=9A=84=E4=BA=AC=E5=96=9C=E5=B7=A5=E5=8E=82=E4=BA=92=E5=8A=A9?= =?UTF-8?q?=E7=A0=81secrets=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy_tencent_scf.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml index 0450fda..18b7973 100644 --- a/.github/workflows/deploy_tencent_scf.yml +++ b/.github/workflows/deploy_tencent_scf.yml @@ -99,6 +99,7 @@ jobs: PLANT_BEAN_SHARECODES: ${{ secrets.PLANT_BEAN_SHARECODES}} SUPERMARKET_SHARECODES: ${{ secrets.SUPERMARKET_SHARECODES}} DDFACTORY_SHARECODES: ${{ secrets.DDFACTORY_SHARECODES}} + DREAM_FACTORY_SHARE_CODES: ${{ secrets.DREAM_FACTORY_SHARE_CODES}} TG_PROXY_HOST: ${{ secrets.TG_PROXY_HOST}} TG_PROXY_PORT: ${{ secrets.TG_PROXY_PORT}} MONEY_TREE_SELL_FRUIT: ${{ secrets.MONEY_TREE_SELL_FRUIT}} From 2c6b6eb1a5ebf58e1b1b0ef7c87d730172f77f23 Mon Sep 17 00:00:00 2001 From: deepdark111 <67956668+deepdark111@users.noreply.github.com> Date: Thu, 3 Dec 2020 00:52:26 +0800 Subject: [PATCH 230/290] =?UTF-8?q?docker=E6=B7=BB=E5=8A=A0=E4=BA=AC?= =?UTF-8?q?=E5=96=9C=E6=95=85=E4=BA=8Bcron?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/crontab_list.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index 9d02d02..27e713c 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -6,8 +6,8 @@ ##############短期活动############## -# 暂无 - +# 京喜故事 +10 7 * * * node /scripts/jd_jxstory.js >> /scripts/logs/jd_jxstory.log 2>&1 ##############长期活动############## @@ -62,4 +62,4 @@ # 东东工厂 36 * * * * node /scripts/jd_jdfactory.js >> /scripts/logs/jd_jdfactory.log 2>&1 #十元街 -36 8 * * * node /scripts/jd_syj.js >> /scripts/logs/jd_syj.log 2>&1 \ No newline at end of file +36 8 * * * node /scripts/jd_syj.js >> /scripts/logs/jd_syj.log 2>&1 From c1f847c086e0b5e34babd93efae8243f32ddbd00 Mon Sep 17 00:00:00 2001 From: deepdark111 <67956668+deepdark111@users.noreply.github.com> Date: Thu, 3 Dec 2020 00:53:29 +0800 Subject: [PATCH 231/290] =?UTF-8?q?docker=E6=B7=BB=E5=8A=A0=E4=BA=AC?= =?UTF-8?q?=E5=96=9C=E6=95=85=E4=BA=8Bcron?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/crontab_list_ts.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index d525d30..d40db1b 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -6,7 +6,8 @@ ##############短期活动############## -# 暂无 +# 京喜故事 +10 7 * * * node /scripts/jd_jxstory.js |ts >> /scripts/logs/jd_jxstory.log 2>&1 ##############长期活动############## @@ -62,4 +63,4 @@ # 东东工厂 36 * * * * node /scripts/jd_jdfactory.js |ts >> /scripts/logs/jd_jdfactory.log 2>&1 #十元街 -36 8 * * * node /scripts/jd_syj.js |ts >> /scripts/logs/jd_syj.log 2>&1 \ No newline at end of file +36 8 * * * node /scripts/jd_syj.js |ts >> /scripts/logs/jd_syj.log 2>&1 From 44b63ec34339f8a1bddab6c6a4b02f9b62c6f1eb Mon Sep 17 00:00:00 2001 From: deepdark111 <67956668+deepdark111@users.noreply.github.com> Date: Thu, 3 Dec 2020 00:54:04 +0800 Subject: [PATCH 232/290] =?UTF-8?q?docker=E6=B7=BB=E5=8A=A0=E4=BA=AC?= =?UTF-8?q?=E5=96=9C=E6=95=85=E4=BA=8Bcron?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/crontab_list.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index 27e713c..c6ea1ea 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -7,7 +7,7 @@ ##############短期活动############## # 京喜故事 -10 7 * * * node /scripts/jd_jxstory.js >> /scripts/logs/jd_jxstory.log 2>&1 +10 7 * * * node /scripts/jd_jxstory.js >> /scripts/logs/jd_jxstory.log 2>&1 ##############长期活动############## From 259d1f1af58a30fd7c75d15e0cbfb40990c2b15c Mon Sep 17 00:00:00 2001 From: shylocks Date: Thu, 3 Dec 2020 00:54:52 +0800 Subject: [PATCH 233/290] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=E5=A5=BD?= =?UTF-8?q?=E5=8F=8B=E5=8A=A9=E5=8A=9B=E4=B8=8E=E7=82=B9=E5=87=BB=E5=8E=82?= =?UTF-8?q?=E9=95=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jdJxStoryShareCodes.js | 30 +++++++ jd_jxstory.js | 174 ++++++++++++++++------------------------- 2 files changed, 96 insertions(+), 108 deletions(-) create mode 100644 jdJxStoryShareCodes.js diff --git a/jdJxStoryShareCodes.js b/jdJxStoryShareCodes.js new file mode 100644 index 0000000..9453429 --- /dev/null +++ b/jdJxStoryShareCodes.js @@ -0,0 +1,30 @@ +/* +京喜故事互助码 +此文件为Node.js专用。其他用户请忽略 +支持京东N个账号 + */ +//云服务器腾讯云函数等Node.js用户在此处填写京喜故事的好友码。 +// github action用户的好友互助码填写到Action->Settings->Secrets->new Secret里面(Name填写 JXSTORY_SHARECODES(此处的Name必须按此来写,不能随意更改),内容处填写互助码,填写规则如下) +// 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例 +// 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2 +let shareCodes = [ + '',//账号一的好友shareCode,不同好友中间用@符号隔开 + '',//账号二的好友shareCode +] +// 判断github action里面是否有京喜故事互助码 +if (process.env.JXSTORY_SHARECODES) {if (process.env.JXSTORY_SHARECODES.indexOf('&') > -1) { + console.log(`您的互助码选择的是用&隔开\n`) + shareCodes = process.env.JXSTORY_SHARECODES.split('&'); + } else if (process.env.JXSTORY_SHARECODES.indexOf('\n') > -1) { + console.log(`您的互助码选择的是用换行隔开\n`) + shareCodes = process.env.JXSTORY_SHARECODES.split('\n'); + } else { + shareCodes = process.env.JXSTORY_SHARECODES.split(); + } +} else if (process.env.JXSTORY_SHARECODES) { + console.log(`由于您secret里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`) +} +for (let i = 0; i < shareCodes.length; i++) { + const index = (i + 1 === 1) ? '' : (i + 1); + exports['shareCodes' + index] = shareCodes[i]; +} diff --git a/jd_jxstory.js b/jd_jxstory.js index 656bbbb..a7afb5b 100644 --- a/jd_jxstory.js +++ b/jd_jxstory.js @@ -1,6 +1,6 @@ /* 京喜故事 -活动入口 :京喜APP->首页浮动窗口去领钱 +活动入口 :京喜APP->首页浮动窗口去领钱/京喜工厂-金牌厂长 每天运行一次即可 @@ -29,9 +29,9 @@ const JD_API_HOST = 'https://m.jingxi.com'; const notify = $.isNode() ? require('./sendNotify') : ''; let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 -const randomCount = 1; +const randomCount = 3; let cookiesArr = [], cookie = '', message = ''; -const inviteCodes = ['PDPM257r_KuQhil2Y7koNw==', "gB99tYLjvPcEFloDgamoBw=="]; +const inviteCodes = ['qSDHMwUOz7onHcMyaju4KmdSXWf0dlv7LVnTt1Wzemo=']; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; if ($.isNode()) { Object.keys(jdCookieNode).forEach((item) => { @@ -70,7 +70,7 @@ if ($.isNode()) { continue } await shareCodesFormat(); - await jdDreamFactory() + await jdJxStory() } } })() @@ -81,14 +81,19 @@ if ($.isNode()) { $.done(); }) -async function jdDreamFactory() { +async function jdJxStory() { + await userInfo() + await helpFriends() await sign() await taskList() - await userInfo() for(let i =0;i { - // const url = `/newtasksys/newtasksys_front/GetUserTaskStatusList?source=dreamfactory&bizCode=dream_factory&sceneval=2&g_login_type=1`; $.get(newtasksysUrl('GetUserTaskStatusList'), async (err, resp, data) => { try { if (err) { @@ -270,7 +274,6 @@ function finishCard(cardId) { // 升级 function upgrade() { return new Promise(async resolve => { - // const url = `/dreamfactory/friend/HireAward?zone=dream_factory&date=${new Date().Format("yyyyMMdd")}&type=0&sceneval=2&g_login_type=1` $.get(taskurl('UpgradeUserLevelDraw', `date=${new Date().Format("yyyyMMdd")}&type=0`), async (err, resp, data) => { try { if (err) { @@ -292,35 +295,10 @@ function upgrade() { }) }) } -async function helpFriends() { - for (let code of $.newShareCodes) { - if (code) { - if ($.encryptPin === code) { - console.log(`不能为自己助力,跳过`); - continue; - } - await assistFriend(code); - } - } -} -// 帮助用户 -function assistFriend(sharepin) { +// 点击 +function increase() { return new Promise(async resolve => { - // const url = `/dreamfactory/friend/AssistFriend?zone=dream_factory&sharepin=${escape(sharepin)}&sceneval=2&g_login_type=1` - const options = { - 'url': `https://m.jingxi.com/dreamfactory/friend/AssistFriend?zone=dream_factory&sharepin=${escape(sharepin)}&sceneval=2&g_login_type=1`, - 'headers': { - "Host": "wq.jd.com", - "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), - "Accept": "*/*", - "Accept-Language": "zh,en-US;q=0.7,en;q=0.3", - "Accept-Encoding": "gzip, deflate, br", - "Connection": "keep-alive", - "Referer": "https://wqsd.jd.com/pingou/dream_factory/index.html", - "Cookie": cookie - } - } - $.get(options, (err, resp, data) => { + $.get(taskurl('IncreaseUserMoney'), async (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) @@ -329,9 +307,50 @@ function assistFriend(sharepin) { if (safeGet(data)) { data = JSON.parse(data); if (data['ret'] === 0) { - console.log(`助力朋友:${sharepin}成功`) + console.log(`点击厂长成功,获得 ${data['data']['moneyNum']} 钞票`) + }else if(data['ret'] === 2005){ + // 点击上限 + $.click = false + }else{ + console.log(`点击厂长过快,休息25秒`) + await $.wait(25000); + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +async function helpFriends() { + for (let code of $.newShareCodes) { + if (code) { + if ($.shareId === code) { + console.log(`不能为自己助力,跳过`); + continue; + } + await assistFriend(code); + } + } +} +// 帮助用户 +function assistFriend(shareId) { + return new Promise(async resolve => { + $.get(taskurl('AssistFriend',`shareId=${escape(shareId)}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + console.log(`助力朋友:${shareId}成功`) } else { - console.log(`助力朋友[${sharepin}]失败:${data.msg}`) + console.log(`助力朋友[${shareId}]失败:${data.msg}`) } } } @@ -347,7 +366,6 @@ function assistFriend(sharepin) { // 任务领奖 function completeTask(taskId, taskName) { return new Promise(async resolve => { - // const url = `/newtasksys/newtasksys_front/Award?source=dreamfactory&bizCode=dream_factory&taskId=${taskId}&sceneval=2&g_login_type=1`; $.get(newtasksysUrl('Award', taskId), (err, resp, data) => { try { if (err) { @@ -388,7 +406,6 @@ function completeTask(taskId, taskName) { // 完成任务 function doTask(taskId) { return new Promise(async resolve => { - // const url = `/newtasksys/newtasksys_front/DoTask?source=dreamfactory&bizCode=dream_factory&taskId=${taskId}&sceneval=2&g_login_type=1`; $.get(newtasksysUrl('DoTask', taskId), (err, resp, data) => { try { if (err) { @@ -426,8 +443,8 @@ function userInfo() { data = JSON.parse(data); if (data['ret'] === 0) { data = data['data']; - $.unActive = true;//标记是否开启了京喜活动或者选购了商品进行生产 - $.encryptPin = data.encryptPin; + $.shareId = data['shareId']; + console.log(`分享码: ${data['shareId']}`); $.currentMoneyNum = data.currentMoneyNum; } else { console.log(`异常:${JSON.stringify(data)}`) @@ -442,72 +459,13 @@ function userInfo() { }) }) } -//领取红包 -function DrawProductionStagePrize() { - return new Promise(async resolve => { - // const url = `/dreamfactory/userinfo/DrawProductionStagePrize?zone=dream_factory&sceneval=2&g_login_type=1&productionId=${$.productionId}`; - $.get(taskurl('userinfo/DrawProductionStagePrize', `productionId=${$.productionId}`), (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - console.log(`领取红包功能(测试中):${data}`); - // if (safeGet(data)) { - // data = JSON.parse(data); - // if (data['ret'] === 0) { - // - // } else { - // console.log(`异常:${JSON.stringify(data)}`) - // } - // } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} - -function getFactoryIdByPin(pin) { - return new Promise((resolve, reject) => { - // const url = `/dreamfactory/userinfo/GetUserInfoByPin?zone=dream_factory&pin=${pin}&sceneval=2`; - $.get(taskurl('userinfo/GetUserInfoByPin', `pin=${pin}`), (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (safeGet(data)) { - data = JSON.parse(data); - if (data['ret'] === 0) { - if (data.data.factoryList) { - //做此判断,有时候返回factoryList为null - // resolve(data['data']['factoryList'][0]['factoryId']) - $.stealFactoryId = data['data']['factoryList'][0]['factoryId']; - } - } else { - console.log(`异常:${JSON.stringify(data)}`) - } - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} async function showMsg() { return new Promise(async resolve => { let ctrTemp; - if ($.isNode() && process.env.DREAMFACTORY_NOTIFY_CONTROL) { - ctrTemp = `${process.env.DREAMFACTORY_NOTIFY_CONTROL}` === 'false'; - } else if ($.getdata('jdDreamFactory')) { - ctrTemp = $.getdata('jdDreamFactory') === 'false'; + if ($.isNode() && process.env.JXSTORY_NOTIFY_CONTROL) { + ctrTemp = `${process.env.JXSTORY_NOTIFY_CONTROL}` === 'false'; + } else if ($.getdata('jdJxStory')) { + ctrTemp = $.getdata('jdJxStory') === 'false'; } else { ctrTemp = `${jdNotify}` === 'false'; } @@ -525,7 +483,7 @@ async function showMsg() { function readShareCode() { console.log(`开始`) return new Promise(async resolve => { - $.get({url: `http://api.turinglabs.net/api/v1/jd/jxfactory/read/${randomCount}/`}, (err, resp, data) => { + $.get({url: `http://api.turinglabs.net/api/v1/jd/jxstory/read/${randomCount}/`}, (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) @@ -570,7 +528,7 @@ function requireConfig() { return new Promise(resolve => { console.log(`开始获取${$.name}配置文件\n`); //Node.js用户请在jdCookie.js处填写京东ck; - const shareCodes = $.isNode() ? require('./jdDreamFactoryShareCodes.js') : ''; + const shareCodes = $.isNode() ? require('./jdJxStoryShareCodes.js') : ''; console.log(`共${cookiesArr.length}个京东账号\n`); $.shareCodesArr = []; if ($.isNode()) { @@ -666,7 +624,7 @@ function newtasksysUrl(functionId, taskId) { 'Connection': 'keep-alive', 'User-Agent': "jdpingou;iPhone;3.15.2;13.5.1;90bab9217f465a83a99c0b554a946b0b0d5c2f7a;network/wifi;model/iPhone12,1;appBuild/100365;ADID/696F8BD2-0820-405C-AFC0-3C6D028040E5;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/1;hasOCPay/0;supportBestPay/0;session/14;pap/JA2015_311210;brand/apple;supportJDSHWK/1;", 'Accept-Language': 'zh-cn', - 'Referer': 'https://wqsd.jd.com/pingou/dream_factory/index.html', + 'Referer': 'https://st.jingxi.com/pingou/jx_factory_story/index.html', 'Accept-Encoding': 'gzip, deflate, br', } } From 9241ec1fefd80655863412b1c46a0a60044b1d4d Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 3 Dec 2020 15:24:44 +0800 Subject: [PATCH 234/290] update --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a8ffa8b..3b50818 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ /node_modules/ /.idea -/index.js /.history /box.dat /CookieSet.json +/jdCookie.js From e7b60367ca3099aea243118957f610ff9d085615 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 3 Dec 2020 16:32:57 +0800 Subject: [PATCH 235/290] =?UTF-8?q?=E7=82=B9=E5=87=BB=E5=8E=82=E9=95=BF?= =?UTF-8?q?=E5=BE=97=E9=92=9E=E7=A5=A8=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=8C=BA?= =?UTF-8?q?=E5=88=86=E4=B8=80=E4=B8=8B=E6=89=8B=E6=9C=BA=E7=AB=AF=E5=92=8C?= =?UTF-8?q?=E4=BA=91=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/crontab_list.sh | 4 ++-- docker/crontab_list_ts.sh | 4 ++-- jd_jxstory.js | 18 +++++++++++------- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index c6ea1ea..a6bb4ba 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -6,8 +6,8 @@ ##############短期活动############## -# 京喜故事 -10 7 * * * node /scripts/jd_jxstory.js >> /scripts/logs/jd_jxstory.log 2>&1 +# 京喜故事(2020.12.12活动过期) +10 * * * * node /scripts/jd_jxstory.js >> /scripts/logs/jd_jxstory.log 2>&1 ##############长期活动############## diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index d40db1b..0b13ca1 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -6,8 +6,8 @@ ##############短期活动############## -# 京喜故事 -10 7 * * * node /scripts/jd_jxstory.js |ts >> /scripts/logs/jd_jxstory.log 2>&1 +# 京喜故事(2020.12.12活动过期) +10 * * * * node /scripts/jd_jxstory.js |ts >> /scripts/logs/jd_jxstory.log 2>&1 ##############长期活动############## diff --git a/jd_jxstory.js b/jd_jxstory.js index a7afb5b..7c1260c 100644 --- a/jd_jxstory.js +++ b/jd_jxstory.js @@ -31,7 +31,7 @@ const notify = $.isNode() ? require('./sendNotify') : ''; let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 const randomCount = 3; let cookiesArr = [], cookie = '', message = ''; -const inviteCodes = ['qSDHMwUOz7onHcMyaju4KmdSXWf0dlv7LVnTt1Wzemo=']; +const inviteCodes = ['qSDHMwUOz7onHcMyaju4KmdSXWf0dlv7LVnTt1Wzemo=@iuGNoGYvk9YdEImUAz25Wyzm7oeggrm0JSIYgZdHJGI=', 'iuGNoGYvk9YdEImUAz25Wyzm7oeggrm0JSIYgZdHJGI=']; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; if ($.isNode()) { Object.keys(jdCookieNode).forEach((item) => { @@ -90,8 +90,12 @@ async function jdJxStory() { await upgrade(); } await cardList() - $.click = true; - while($.click){ + if ($.isNode()) { + $.click = true; + while($.click){ + await increase() + } + } else { await increase() } } @@ -516,10 +520,10 @@ function shareCodesFormat() { const tempIndex = $.index > inviteCodes.length ? (inviteCodes.length - 1) : ($.index - 1); $.newShareCodes = inviteCodes[tempIndex].split('@'); } - const readShareCodeRes = await readShareCode(); - if (readShareCodeRes && readShareCodeRes.code === 200) { - $.newShareCodes = [...new Set([...$.newShareCodes, ...(readShareCodeRes.data || [])])]; - } + // const readShareCodeRes = await readShareCode(); + // if (readShareCodeRes && readShareCodeRes.code === 200) { + // $.newShareCodes = [...new Set([...$.newShareCodes, ...(readShareCodeRes.data || [])])]; + // } console.log(`第${$.index}个京东账号将要助力的好友${JSON.stringify($.newShareCodes)}`) resolve(); }) From f4f55b6ff52982c9bbdc1462887f4e9fe901c081 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 3 Dec 2020 16:57:50 +0800 Subject: [PATCH 236/290] update --- backUp/mySelf.boxjs.json | 1 - backUp/qqread.js | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/backUp/mySelf.boxjs.json b/backUp/mySelf.boxjs.json index 2367201..0aa942c 100644 --- a/backUp/mySelf.boxjs.json +++ b/backUp/mySelf.boxjs.json @@ -9,7 +9,6 @@ "id": "QQ_READ", "name": "企鹅阅读(QQ小程序)", "keys": [ - "qqreadurl", "qqreadhd", "qqreadtimeurl", "qqreadtimehd" diff --git a/backUp/qqread.js b/backUp/qqread.js index 308b418..767c34c 100644 --- a/backUp/qqread.js +++ b/backUp/qqread.js @@ -98,9 +98,9 @@ let qqreadtimeheaderVal = $.getdata(qqreadtimeheaderKey) let QQ_READ_COOKIES = [ { qqreadurlVal, - "qqreadheaderVal": "", - "qqreadtimeurlVal": "", - "qqreadtimeheaderVal": "" + "qqreadheaderVal": ``, + "qqreadtimeurlVal": ``, + "qqreadtimeheaderVal": `` } ] function getNodeCookie() { @@ -185,7 +185,7 @@ function GetCookie() { // if (qqreadbodyVal) $.setdata(qqreadbodyVal, qqreadbodyKey) // $.log(`[${jsname}] 获取阅读: 成功,qqreadbodyVal: ${qqreadbodyVal}`) - $.setdata(qqreadurlVal, qqreadurlKey); + // $.setdata(qqreadurlVal, qqreadurlKey); const qqreadheaderVal = JSON.stringify($request.headers) if (qqreadheaderVal) $.setdata(qqreadheaderVal, qqreadheaderKey) $.log(`[${jsname}] 获取Cookie: 成功,qqreadheaderVal: ${qqreadheaderVal}`) From fc6ac51c0c104de1e3c553ebbf095bcd4d6b2a14 Mon Sep 17 00:00:00 2001 From: chongshengB <53459145+chongshengB@users.noreply.github.com> Date: Thu, 3 Dec 2020 17:02:27 +0800 Subject: [PATCH 237/290] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E4=BA=AC=E5=96=9C?= =?UTF-8?q?=E5=B7=A5=E5=8E=82ua?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 脚本自带的ua不能正常给别人助力,替换后正常 --- jd_dreamFactory.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 523c821..fc78f9e 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -391,7 +391,7 @@ function assistFriend(sharepin) { "Cookie": cookie, "Host": "m.jingxi.com", "Referer": "https://st.jingxi.com/pingou/dream_factory/index.html", - "User-Agent": "jdpingou;iPhone;3.15.2;14.2;f803928b71d2fcd51c7eae549f7bc3062d17f63f;network/4g;model/iPhone11,8;appBuild/100365;ADID/0E38E9F1-4B4C-40A4-A479-DD15E58A5623;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/1;hasOCPay/0;supportBestPay/0;session/2;pap/JA2015_311210;brand/apple;supportJDSHWK/1;" + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36" } } $.get(options, (err, resp, data) => { @@ -982,4 +982,4 @@ Date.prototype.Format = function (fmt) { //author: meizz } // 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();s&&this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)}))}post(t,e=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.post(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)});else if(this.isQuanX())t.method="POST",this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t));else if(this.isNode()){this.initGotEnv(t);const{url:s,...i}=t;this.got.post(s,i).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)})}}time(t){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}}}};if(this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r))),!this.isMuteLog){let t=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`\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)} \ No newline at end of file +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();s&&this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)}))}post(t,e=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.post(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)});else if(this.isQuanX())t.method="POST",this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t));else if(this.isNode()){this.initGotEnv(t);const{url:s,...i}=t;this.got.post(s,i).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)})}}time(t){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}}}};if(this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r))),!this.isMuteLog){let t=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`\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 1717ee773dd6e117395887943b23184aa0c7090a Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 3 Dec 2020 17:33:54 +0800 Subject: [PATCH 238/290] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=98=BE=E7=A4=BA=20?= =?UTF-8?q?=E6=94=B6=E5=8F=960=E7=94=B5=E5=8A=9B=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=88=A4=E6=96=AD=E5=A6=82?= =?UTF-8?q?=E9=81=87=E5=88=B0=E5=8F=8C=E5=80=8D=E7=94=B5=E5=8A=9B=E6=94=B6?= =?UTF-8?q?=E5=8F=96=E8=BE=BE=E5=88=B0=E4=B8=8A=E9=99=90=E5=90=8E=EF=BC=8C?= =?UTF-8?q?=E4=B8=8D=E5=86=8D=E7=AD=89=E9=9B=86=E6=BB=A1=E5=86=8D=E6=94=B6?= =?UTF-8?q?=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 523c821..3f78bf1 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -125,7 +125,7 @@ function collectElectricity(facId = $.factoryId, help = false, master) { message += `【帮助好友】帮助成功,获得 ${data.data['loginPinCollectElectricity']} 电力\n` } else { $.ele += Number(data.data['CollectElectricity']) - console.log(`收取 ${data.data['loginPinCollectElectricity']} 电力`); + console.log(`收取 ${data.data['CollectElectricity']} 电力`); message += `【收取发电站】收取成功,获得 ${data.data['CollectElectricity']} 电力\n` } } else { @@ -246,13 +246,21 @@ function getUserElectricity() { if (safeGet(data)) { data = JSON.parse(data); if (data['ret'] === 0) { - console.log(`发电机:当前 ${data.data.currentElectricityQuantity} 电力,最大值 ${data.data.maxElectricityQuantity} 电力,达到最大电量才会进行收取`) - if (data.data.currentElectricityQuantity === data.data.maxElectricityQuantity && data.data.doubleElectricityFlag) { - console.log(`发电机:电力可翻倍并收获`) - // await shareReport(); - await collectElectricity() + console.log(`\nnextCollectDoubleFlag::${data.data.nextCollectDoubleFlag}`); + console.log(`nextCollectDoubleType::${data.data.nextCollectDoubleType}\n`); + $.log(`下次集满收取${data.data.nextCollectDoubleFlag === 1 ? '可' : '不可'}双倍电力`) + console.log(`发电机:当前 ${data.data.currentElectricityQuantity} 电力,最大值 ${data.data.maxElectricityQuantity} 电力`) + if (data.data.nextCollectDoubleFlag === 1) { + if (data.data.currentElectricityQuantity === data.data.maxElectricityQuantity && data.data.doubleElectricityFlag) { + console.log(`发电机:电力可翻倍并收获`) + // await shareReport(); + await collectElectricity() + } else { + message += `【发电机电力】当前 ${data.data.currentElectricityQuantity} 电力,未达到收获标准\n` + } } else { - message += `【发电机电力】当前 ${data.data.currentElectricityQuantity} 电力,未达到收获标准\n` + //再收取双倍电力达到上限时,直接收取,不再等到满级 + await collectElectricity() } } } From 7e23a8fd8911d9cb95c0fb898b4a478798181174 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 3 Dec 2020 18:57:41 +0800 Subject: [PATCH 239/290] Update jd_dreamFactory.js --- jd_dreamFactory.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index a20fb2e..b510c31 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -1,6 +1,6 @@ /* 京东京喜工厂 -更新时间:2020-12-02 +更新时间:2020-12-03 活动入口 :京东APP->游戏与互动->查看更多->京喜工厂 或者: 京东APP首页搜索 "玩一玩" ,造物工厂即可 @@ -86,7 +86,7 @@ if ($.isNode()) { async function jdDreamFactory() { await userInfo(); - // await JoinTuan();参团功能暂时无效, + await JoinTuan();参团功能暂时无效, await helpFriends(); if (!$.unActive) return await getUserElectricity(); @@ -763,7 +763,7 @@ function CreateTuan() { function JoinTuan() { return new Promise((resolve) => { const options = { - 'url': `https://m.jingxi.com/dreamfactory/tuan/JoinTuan?activeId=${escape('ilOin38J30PcT9xnWbx9lw==')}&tuanId=${escape('8W4VdqMEQfzmZnSGRgMRCw==')}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, + 'url': `https://m.jingxi.com/dreamfactory/tuan/JoinTuan?activeId=${escape('jfkcidGQavswLOBcAWljrw==')}&tuanId=${escape('Vvx2b7wVTWaeqwm9Yf5Kfw==')}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", @@ -772,7 +772,7 @@ function JoinTuan() { "Cookie": cookie, "Host": "m.jingxi.com", "Referer": "https://st.jingxi.com/pingou/dream_factory/divide.html?exchange=%7B%22activeId%22:%22ilOin38J30PcT9xnWbx9lw%3D%3D%22,%22sTuanId%22:%22QvqM7GtgQQJUO8jaz1CYBA%3D%3D%22,%22sPin%22:%22V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k%3D%22,%22sType%22:%22101%22%7D&ptag=139022.1.2?srv=jinshusongjin_https://wq.jd.com/cube/front/activePublish/dream_factory_report/380556.html_jing", - "User-Agent": "jdpingou;iPhone;3.15.2;13.5.1;90bab9217f465a83a99c0b554a946b0b0d5c2f7a;network/wifi;model/iPhone12,1;appBuild/100365;ADID/696F8BD2-0820-405C-AFC0-3C6D028040E5;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/1;hasOCPay/0;supportBestPay/0;session/14;pap/JA2015_311210;brand/apple;supportJDSHWK/1;" + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36" } } $.get(options, (err, resp, data) => { From c371e27e2a7a9547f4f82568799dbb379a50da29 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 3 Dec 2020 19:11:33 +0800 Subject: [PATCH 240/290] Update jd_dreamFactory.js --- jd_dreamFactory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index b510c31..20a2e2c 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -86,7 +86,7 @@ if ($.isNode()) { async function jdDreamFactory() { await userInfo(); - await JoinTuan();参团功能暂时无效, + await JoinTuan();//参团功能暂时无效, await helpFriends(); if (!$.unActive) return await getUserElectricity(); From 6435999b801fd6513e75b4876988749298e74236 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 4 Dec 2020 08:11:27 +0800 Subject: [PATCH 241/290] Update jd_dreamFactory.js --- jd_dreamFactory.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 20a2e2c..ac9f32b 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -763,7 +763,7 @@ function CreateTuan() { function JoinTuan() { return new Promise((resolve) => { const options = { - 'url': `https://m.jingxi.com/dreamfactory/tuan/JoinTuan?activeId=${escape('jfkcidGQavswLOBcAWljrw==')}&tuanId=${escape('Vvx2b7wVTWaeqwm9Yf5Kfw==')}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, + 'url': `https://m.jingxi.com/dreamfactory/tuan/JoinTuan?activeId=${escape('jfkcidGQavswLOBcAWljrw==')}&tuanId=${escape('DIgeLKl6_15TRDSHgzqc1A==')}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", @@ -772,7 +772,7 @@ function JoinTuan() { "Cookie": cookie, "Host": "m.jingxi.com", "Referer": "https://st.jingxi.com/pingou/dream_factory/divide.html?exchange=%7B%22activeId%22:%22ilOin38J30PcT9xnWbx9lw%3D%3D%22,%22sTuanId%22:%22QvqM7GtgQQJUO8jaz1CYBA%3D%3D%22,%22sPin%22:%22V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k%3D%22,%22sType%22:%22101%22%7D&ptag=139022.1.2?srv=jinshusongjin_https://wq.jd.com/cube/front/activePublish/dream_factory_report/380556.html_jing", - "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36" + "User-Agent": "jdpingou" } } $.get(options, (err, resp, data) => { From b82892707f7b2967bc40e76268105352cbf756e3 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 4 Dec 2020 08:27:37 +0800 Subject: [PATCH 242/290] Update jd_dreamFactory.js --- jd_dreamFactory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index ac9f32b..f8e5adc 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -763,7 +763,7 @@ function CreateTuan() { function JoinTuan() { return new Promise((resolve) => { const options = { - 'url': `https://m.jingxi.com/dreamfactory/tuan/JoinTuan?activeId=${escape('jfkcidGQavswLOBcAWljrw==')}&tuanId=${escape('DIgeLKl6_15TRDSHgzqc1A==')}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, + 'url': `https://m.jingxi.com/dreamfactory/tuan/JoinTuan?activeId=${escape('jfkcidGQavswLOBcAWljrw==')}&tuanId=${escape('CATqQ7rzehBqvRdZTpXgdA==')}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", From 5e381c5cec4912a4c225a7e83805e7ed8b138a58 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 4 Dec 2020 10:19:46 +0800 Subject: [PATCH 243/290] fix bug --- jd_jdfactory.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jd_jdfactory.js b/jd_jdfactory.js index cd86a35..865bf0a 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -211,8 +211,8 @@ async function algorithm() { message += `兑换所需电量:${$.canMakeList[0].fullScore}\n`; message += `您当前总电量:${$.batteryValue * 1}\n`; if ($.canMakeList[0].couponCount > 0 && $.batteryValue * 1 >= $.canMakeList[0].fullScore) { - $.msg($.name, '', `京东账号${$.index}${$.nickName}\n当前总电量为:${$.batteryValue * 1}\n当前总电量为:${$.batteryValue * 1}\n【满足】兑换${$.canMakeList[0].name}所需总电量:${$.canMakeList[0].totalScore}\n请点击弹窗直达活动页面\n选择此心仪商品并手动投入电量兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); - await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `当前总电量为:${$.batteryValue * 1}\n【满足】兑换${$.canMakeList[0].name}所需总电量:${$.canMakeList[0].totalScore}\n请速去活动页面查看`); + $.msg($.name, '', `京东账号${$.index}${$.nickName}\n${message}【满足】兑换${$.canMakeList[0].name}所需总电量:${$.canMakeList[0].fullScore}\n请点击弹窗直达活动页面\n选择此心仪商品并手动投入电量兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `${message}【满足】兑换${$.canMakeList[0].name}所需总电量:${$.canMakeList[0].fullScore}\n请速去活动页面查看`); } else { console.log(`\n目前电量${$.batteryValue * 1},不满足兑换 ${$.canMakeList[0].name}所需的 ${$.canMakeList[0].fullScore}电量\n`) } From 98c82d4eb952284463b42868074cefca6838e72e Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 4 Dec 2020 11:54:35 +0800 Subject: [PATCH 244/290] =?UTF-8?q?=E5=8F=82=E5=9B=A2=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?=E9=A2=86=E5=8F=96=E5=9B=A2=E5=A5=96=E5=8A=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 159 +++++++++++++++++++++++++++++++++++++++++++-- jd_jdfactory.js | 8 +-- 2 files changed, 159 insertions(+), 8 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index f8e5adc..0226fb0 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -86,7 +86,7 @@ if ($.isNode()) { async function jdDreamFactory() { await userInfo(); - await JoinTuan();//参团功能暂时无效, + await JoinTuan();//参团 await helpFriends(); if (!$.unActive) return await getUserElectricity(); @@ -95,6 +95,7 @@ async function jdDreamFactory() { await QueryHireReward();//收取招工电力 await PickUp(); await stealFriend(); + await tuanActivity(); await showMsg(); } @@ -721,11 +722,118 @@ function getFactoryIdByPin(pin) { }) }) } +async function tuanActivity() { + const tuanConfig = await QueryActiveConfig(); + if (tuanConfig && tuanConfig.ret === 0) { + const { activeId, surplusOpenTuanNum, tuanId } = tuanConfig['data']['userTuanInfo']; + if (!tuanId && surplusOpenTuanNum > 0) { + //开团 + $.log(`准备开团`) + await CreateTuan(); + } else if (tuanId) { + //查询词团信息 + const QueryTuanRes = await QueryTuan(activeId, tuanId); + if (QueryTuanRes && QueryTuanRes.ret === 0) { + const { tuanInfo } = QueryTuanRes.data; + for (let item of tuanInfo) { + const { realTuanNum, tuanNum } = item; + $.log(`\n开团情况:${realTuanNum}/${tuanNum}\n`) + if (realTuanNum === tuanNum) { + $.log(`开始领取开团奖励`); + await tuanAward(activeId, tuanId); + } else { + $.log(`\n此团未达领取团奖励人数:${tuanNum}人\n`) + } + } + } + } + } +} +//可获取开团后的团ID,如果团ID为空并且surplusOpenTuanNum>0,则可继续开团 +//如果团ID不为空,则查询QueryTuan() +function QueryActiveConfig() { + return new Promise((resolve) => { + const options = { + 'url': `https://m.jingxi.com/dreamfactory/tuan/QueryActiveConfig?activeId=${escape('jfkcidGQavswLOBcAWljrw==')}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Host": "m.jingxi.com", + "Referer": "https://st.jingxi.com/pingou/dream_factory/divide.html", + "User-Agent": "jdpingou;iPhone;3.15.2;13.5.1;90bab9217f465a83a99c0b554a946b0b0d5c2f7a;network/wifi;model/iPhone12,1;appBuild/100365;ADID/696F8BD2-0820-405C-AFC0-3C6D028040E5;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/1;hasOCPay/0;supportBestPay/0;session/14;pap/JA2015_311210;brand/apple;supportJDSHWK/1;" + } + } + $.get(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`); + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + const { userTuanInfo } = data['data']; + console.log(`\n团活动ID ${userTuanInfo.activeId}`); + console.log(`团ID ${userTuanInfo.tuanId}\n`); + } else { + console.log(`QueryActiveConfig异常:${JSON.stringify(data)}`); + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} +function QueryTuan(activeId, tuanId) { + return new Promise((resolve) => { + const options = { + 'url': `https://m.jingxi.com/dreamfactory/tuan/QueryTuan?activeId=${escape(activeId)}&tuanId=${escape(tuanId)}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Host": "m.jingxi.com", + "Referer": "https://st.jingxi.com/pingou/dream_factory/divide.html", + "User-Agent": "jdpingou;iPhone;3.15.2;13.5.1;90bab9217f465a83a99c0b554a946b0b0d5c2f7a;network/wifi;model/iPhone12,1;appBuild/100365;ADID/696F8BD2-0820-405C-AFC0-3C6D028040E5;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/1;hasOCPay/0;supportBestPay/0;session/14;pap/JA2015_311210;brand/apple;supportJDSHWK/1;" + } + } + $.get(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`); + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + // $.log(`\n开团情况:${data.data.tuanInfo.realTuanNum}/${data.data.tuanInfo.tuanNum}\n`) + } else { + console.log(`异常:${JSON.stringify(data)}`); + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} //开团API function CreateTuan() { return new Promise((resolve) => { const options = { - 'url': `https://m.jingxi.com/dreamfactory/tuan/CreateTuan?activeId=${escape('ilOin38J30PcT9xnWbx9lw==')}&isOpenApp=1&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, + 'url': `https://m.jingxi.com/dreamfactory/tuan/CreateTuan?activeId=${escape('jfkcidGQavswLOBcAWljrw==')}&isOpenApp=1&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", @@ -760,10 +868,10 @@ function CreateTuan() { }) }) } -function JoinTuan() { +function JoinTuan(tuanId = 'V74lkIg_O8jWXDkl_2swMA==') { return new Promise((resolve) => { const options = { - 'url': `https://m.jingxi.com/dreamfactory/tuan/JoinTuan?activeId=${escape('jfkcidGQavswLOBcAWljrw==')}&tuanId=${escape('CATqQ7rzehBqvRdZTpXgdA==')}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, + 'url': `https://m.jingxi.com/dreamfactory/tuan/JoinTuan?activeId=${escape('jfkcidGQavswLOBcAWljrw==')}&tuanId=${escape(tuanId)}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", @@ -798,6 +906,49 @@ function JoinTuan() { }) }) } +function tuanAward(activeId, tuanId) { + return new Promise((resolve) => { + const options = { + 'url': `https://m.jingxi.com/dreamfactory/tuan/Award?activeId=${escape(activeId)}&tuanId=${escape(tuanId)}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Host": "m.jingxi.com", + "Referer": "https://st.jingxi.com/pingou/dream_factory/divide.html", + "User-Agent": "jdpingou;iPhone;3.15.2;13.5.1;90bab9217f465a83a99c0b554a946b0b0d5c2f7a;network/wifi;model/iPhone12,1;appBuild/100365;ADID/696F8BD2-0820-405C-AFC0-3C6D028040E5;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/1;hasOCPay/0;supportBestPay/0;session/14;pap/JA2015_311210;brand/apple;supportJDSHWK/1;" + } + } + $.get(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`); + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + console.log(`开团奖励${data.data['electric']}领取成功`); + message += `【开团奖励】${data.data['electric']}领取成功\n`; + } else if (data['ret'] === 10212) { + console.log(`${JSON.stringify(data)}`); + $.log(`准备开团`) + await CreateTuan(); + } else { + console.log(`异常:${JSON.stringify(data)}`); + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} async function showMsg() { return new Promise(async resolve => { let ctrTemp; diff --git a/jd_jdfactory.js b/jd_jdfactory.js index 865bf0a..b6ee71f 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -158,7 +158,7 @@ async function algorithm() { console.log(`\n提供的心仪商品${name}目前数量:${couponCount},且当前总电量为:${remainScore * 1 + useScore * 1},【满足】兑换此商品所需总电量:${totalScore + 100000}`); console.log(`请去活动页面更换成心仪商品并手动投入电量兑换\n`); $.msg($.name, '', `京东账号${$.index}${$.nickName}\n您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${remainScore * 1 + useScore * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请点击弹窗直达活动页面\n更换成心仪商品并手动投入电量兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); - await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${remainScore * 1 + useScore * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请去活动页面更换成心仪商品并手动投入电量兑换`); + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `【京东账号${$.index}】${$.nickName}\n您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${remainScore * 1 + useScore * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请去活动页面更换成心仪商品并手动投入电量兑换`); } else { console.log(`您心仪商品${name}\n当前数量为:${couponCount}\n兑换所需电量为:${totalScore}\n您当前总电量为:${remainScore * 1 + useScore * 1}\n不满足兑换心仪商品的条件\n`) } @@ -169,7 +169,7 @@ async function algorithm() { console.log(`BoxJs或环境变量暂未提供心仪商品,下面为您目前选的${name} 发送提示通知\n`); // await jdfactory_addEnergy(); $.msg($.name, '', `京东账号${$.index}${$.nickName}\n您所选商品${name}目前数量:${couponCount}\n当前总电量为:${remainScore * 1 + useScore * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请点击弹窗直达活动页面查看`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); - await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `所选商品${name}目前数量:${couponCount}\n当前总电量为:${remainScore * 1 + useScore * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请速去活动页面查看`); + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `【京东账号${$.index}】${$.nickName}\n所选商品${name}目前数量:${couponCount}\n当前总电量为:${remainScore * 1 + useScore * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请速去活动页面查看`); } else { console.log(`\n所选商品${name}目前数量:${couponCount},且当前总电量为:${remainScore * 1 + useScore * 1},【不满足】兑换此商品所需总电量:${totalScore}`) console.log(`故不一次性投入电力,一直放到蓄电池累计\n`); @@ -200,7 +200,7 @@ async function algorithm() { console.log(`\n提供的心仪商品${name}目前数量:${couponCount},且当前总电量为:${$.batteryValue * 1},【满足】兑换此商品所需总电量:${totalScore}`); console.log(`请去活动页面选择心仪商品并手动投入电量兑换\n`); $.msg($.name, '', `京东账号${$.index}${$.nickName}\n您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${$.batteryValue * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请点击弹窗直达活动页面\n选择此心仪商品并手动投入电量兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); - await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${$.batteryValue * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请去活动页面选择此心仪商品并手动投入电量兑换`); + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `【京东账号${$.index}】${$.nickName}\n您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${$.batteryValue * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请去活动页面选择此心仪商品并手动投入电量兑换`); } else { console.log(`您心仪商品${name}\n当前数量为:${couponCount}\n兑换所需电量为:${totalScore}\n您当前总电量为:${$.batteryValue * 1}\n不满足兑换心仪商品的条件\n`) } @@ -212,7 +212,7 @@ async function algorithm() { message += `您当前总电量:${$.batteryValue * 1}\n`; if ($.canMakeList[0].couponCount > 0 && $.batteryValue * 1 >= $.canMakeList[0].fullScore) { $.msg($.name, '', `京东账号${$.index}${$.nickName}\n${message}【满足】兑换${$.canMakeList[0].name}所需总电量:${$.canMakeList[0].fullScore}\n请点击弹窗直达活动页面\n选择此心仪商品并手动投入电量兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); - await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `${message}【满足】兑换${$.canMakeList[0].name}所需总电量:${$.canMakeList[0].fullScore}\n请速去活动页面查看`); + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `【京东账号${$.index}】${$.nickName}\n${message}【满足】兑换${$.canMakeList[0].name}所需总电量:${$.canMakeList[0].fullScore}\n请速去活动页面查看`); } else { console.log(`\n目前电量${$.batteryValue * 1},不满足兑换 ${$.canMakeList[0].name}所需的 ${$.canMakeList[0].fullScore}电量\n`) } From 1c8bc41ed710436ff7de041e9db9e75a0c623e5e Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 4 Dec 2020 15:07:31 +0800 Subject: [PATCH 245/290] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E9=A2=86=E5=8F=96=E5=8F=82=E5=9B=A2=E7=9A=84=E5=A5=96=E5=8A=B1?= =?UTF-8?q?(500=E7=94=B5=E5=8A=9B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 122 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 106 insertions(+), 16 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 0226fb0..b528e22 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -31,6 +31,12 @@ const JD_API_HOST = 'https://m.jingxi.com'; const notify = $.isNode() ? require('./sendNotify') : ''; let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 const randomCount = $.isNode() ? 20 : 5; +const tuanActiveId = `jfkcidGQavswLOBcAWljrw==`; +const tuanIDs = [ + 'VOcrtYB9nzwxcRGHZAIirA==', + 'A-CujUJn3N3XDU4y7Yusvg==', + '22uTFAf6W--EBN0Z64tXZg==', +] let cookiesArr = [], cookie = '', message = ''; const inviteCodes = ['V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=', 'PDPM257r_KuQhil2Y7koNw==', "gB99tYLjvPcEFloDgamoBw=="]; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; @@ -86,7 +92,7 @@ if ($.isNode()) { async function jdDreamFactory() { await userInfo(); - await JoinTuan();//参团 + await joinLeaderTuan();//参团 await helpFriends(); if (!$.unActive) return await getUserElectricity(); @@ -96,6 +102,7 @@ async function jdDreamFactory() { await PickUp(); await stealFriend(); await tuanActivity(); + await QueryAllTuan(); await showMsg(); } @@ -726,6 +733,8 @@ async function tuanActivity() { const tuanConfig = await QueryActiveConfig(); if (tuanConfig && tuanConfig.ret === 0) { const { activeId, surplusOpenTuanNum, tuanId } = tuanConfig['data']['userTuanInfo']; + console.log(`今日剩余开团次数:${surplusOpenTuanNum}次`); + $.surplusOpenTuanNum = surplusOpenTuanNum; if (!tuanId && surplusOpenTuanNum > 0) { //开团 $.log(`准备开团`) @@ -736,11 +745,19 @@ async function tuanActivity() { if (QueryTuanRes && QueryTuanRes.ret === 0) { const { tuanInfo } = QueryTuanRes.data; for (let item of tuanInfo) { - const { realTuanNum, tuanNum } = item; - $.log(`\n开团情况:${realTuanNum}/${tuanNum}\n`) + const { realTuanNum, tuanNum, userInfo } = item; + $.log(`\n开团情况:${realTuanNum}/${tuanNum}\n`); if (realTuanNum === tuanNum) { - $.log(`开始领取开团奖励`); - await tuanAward(activeId, tuanId); + for (let user of userInfo) { + if (user.encryptPin === $.encryptPin) { + if (user.receiveElectric && user.receiveElectric > 0) { + console.log(`您在${new Date(user.joinTime * 1000).toLocaleString()}开团奖励已经领取成功\n`) + } else { + $.log(`开始领取开团奖励`); + await tuanAward(item.tuanActiveId, item.tuanId);//isTuanLeader + } + } + } } else { $.log(`\n此团未达领取团奖励人数:${tuanNum}人\n`) } @@ -754,7 +771,7 @@ async function tuanActivity() { function QueryActiveConfig() { return new Promise((resolve) => { const options = { - 'url': `https://m.jingxi.com/dreamfactory/tuan/QueryActiveConfig?activeId=${escape('jfkcidGQavswLOBcAWljrw==')}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, + 'url': `https://m.jingxi.com/dreamfactory/tuan/QueryActiveConfig?activeId=${escape(tuanActiveId)}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", @@ -833,7 +850,7 @@ function QueryTuan(activeId, tuanId) { function CreateTuan() { return new Promise((resolve) => { const options = { - 'url': `https://m.jingxi.com/dreamfactory/tuan/CreateTuan?activeId=${escape('jfkcidGQavswLOBcAWljrw==')}&isOpenApp=1&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, + 'url': `https://m.jingxi.com/dreamfactory/tuan/CreateTuan?activeId=${escape(tuanActiveId)}&isOpenApp=1&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", @@ -868,10 +885,17 @@ function CreateTuan() { }) }) } -function JoinTuan(tuanId = 'V74lkIg_O8jWXDkl_2swMA==') { +async function joinLeaderTuan() { + for (let tuanId of tuanIDs) { + if (tuanId) { + await JoinTuan(tuanId); + } + } +} +function JoinTuan(tuanId) { return new Promise((resolve) => { const options = { - 'url': `https://m.jingxi.com/dreamfactory/tuan/JoinTuan?activeId=${escape('jfkcidGQavswLOBcAWljrw==')}&tuanId=${escape(tuanId)}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, + 'url': `https://m.jingxi.com/dreamfactory/tuan/JoinTuan?activeId=${escape(tuanActiveId)}&tuanId=${escape(tuanId)}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", @@ -906,7 +930,65 @@ function JoinTuan(tuanId = 'V74lkIg_O8jWXDkl_2swMA==') { }) }) } -function tuanAward(activeId, tuanId) { +//查询所有的团情况(自己开团以及参加别人的团) +function QueryAllTuan() { + return new Promise((resolve) => { + const options = { + 'url': `https://m.jingxi.com/dreamfactory/tuan/QueryAllTuan?activeId=${escape(tuanActiveId)}&pageNo=1&pageSize=10&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Host": "m.jingxi.com", + "Referer": "https://st.jingxi.com/pingou/dream_factory/divide.html", + "User-Agent": "jdpingou;iPhone;3.15.2;13.5.1;90bab9217f465a83a99c0b554a946b0b0d5c2f7a;network/wifi;model/iPhone12,1;appBuild/100365;ADID/696F8BD2-0820-405C-AFC0-3C6D028040E5;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/1;hasOCPay/0;supportBestPay/0;session/14;pap/JA2015_311210;brand/apple;supportJDSHWK/1;" + } + } + $.get(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`); + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + const { tuanInfo } = data; + for (let item of tuanInfo) { + if (item.tuanNum === item.realTuanNum) { + // console.log(`参加团主【${item.tuanLeader}】已成功`) + const { userInfo } = item; + for (let item2 of userInfo) { + if (item2.encryptPin === $.encryptPin) { + if (item2.receiveElectric && item2.receiveElectric > 0) { + console.log(`${new Date(item2.joinTime * 1000).toLocaleString()}参加团主【${item2.nickName}】的奖励已经领取成功`) + } else { + console.log(`开始领取${new Date(item2.joinTime * 1000).toLocaleString()}参加团主【${item2.nickName}】的奖励`) + await tuanAward(item.tuanActiveId, item.tuanId, item.tuanLeader === $.encryptPin);//isTuanLeader + } + } + } + } else { + console.log(`${new Date(item.beginTime * 1000).toLocaleString()}参加团主【${item.tuanLeader}】失败`) + } + } + } else { + console.log(`QueryAllTuan异常:${JSON.stringify(data)}`); + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} +//开团人的领取奖励API +function tuanAward(activeId, tuanId, isTuanLeader = true) { return new Promise((resolve) => { const options = { 'url': `https://m.jingxi.com/dreamfactory/tuan/Award?activeId=${escape(activeId)}&tuanId=${escape(tuanId)}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1`, @@ -930,12 +1012,20 @@ function tuanAward(activeId, tuanId) { if (safeGet(data)) { data = JSON.parse(data); if (data['ret'] === 0) { - console.log(`开团奖励${data.data['electric']}领取成功`); - message += `【开团奖励】${data.data['electric']}领取成功\n`; + if (isTuanLeader) { + console.log(`开团奖励(团长)${data.data['electric']}领取成功`); + message += `【开团(团长)奖励】${data.data['electric']}领取成功\n`; + } else { + console.log(`参团奖励${data.data['electric']}领取成功`); + message += `【参团奖励】${data.data['electric']}领取成功\n`; + } } else if (data['ret'] === 10212) { console.log(`${JSON.stringify(data)}`); - $.log(`准备开团`) - await CreateTuan(); + + if (isTuanLeader && $.surplusOpenTuanNum > 0) { + $.log(`团奖励已领取,准备开团`); + await CreateTuan(); + } } else { console.log(`异常:${JSON.stringify(data)}`); } @@ -993,8 +1083,8 @@ function readShareCode() { resolve(data); } }) - // await $.wait(2000); - // resolve() + await $.wait(5000); + resolve() }) } //格式化助力码 From 8b6484c2d9ab53a298756b01aa03c308af65ff08 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 4 Dec 2020 15:31:55 +0800 Subject: [PATCH 246/290] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index b528e22..6dee0bd 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -33,9 +33,9 @@ let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭 const randomCount = $.isNode() ? 20 : 5; const tuanActiveId = `jfkcidGQavswLOBcAWljrw==`; const tuanIDs = [ - 'VOcrtYB9nzwxcRGHZAIirA==', - 'A-CujUJn3N3XDU4y7Yusvg==', - '22uTFAf6W--EBN0Z64tXZg==', + "XgKt9JBOEZEqFpTk1gw79g==", + 'lvArkUAPQtXfjt9O7PGh9A==', + 'Edcyq9n8AFJH16varH0-bw==' ] let cookiesArr = [], cookie = '', message = ''; const inviteCodes = ['V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=', 'PDPM257r_KuQhil2Y7koNw==', "gB99tYLjvPcEFloDgamoBw=="]; @@ -752,6 +752,7 @@ async function tuanActivity() { if (user.encryptPin === $.encryptPin) { if (user.receiveElectric && user.receiveElectric > 0) { console.log(`您在${new Date(user.joinTime * 1000).toLocaleString()}开团奖励已经领取成功\n`) + if ($.surplusOpenTuanNum > 0) await CreateTuan(); } else { $.log(`开始领取开团奖励`); await tuanAward(item.tuanActiveId, item.tuanId);//isTuanLeader @@ -1015,6 +1016,10 @@ function tuanAward(activeId, tuanId, isTuanLeader = true) { if (isTuanLeader) { console.log(`开团奖励(团长)${data.data['electric']}领取成功`); message += `【开团(团长)奖励】${data.data['electric']}领取成功\n`; + if ($.surplusOpenTuanNum > 0) { + $.log(`开团奖励(团长)已领取,准备开团`); + await CreateTuan(); + } } else { console.log(`参团奖励${data.data['electric']}领取成功`); message += `【参团奖励】${data.data['electric']}领取成功\n`; From 43053fe790a0098e2b62b3bfd741fd801f3fc840 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 4 Dec 2020 18:55:31 +0800 Subject: [PATCH 247/290] update --- jd_dreamFactory.js | 47 ++++++++++++++++++++++++++++++++++++++++------ jd_small_home.js | 2 +- 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 6dee0bd..cf247cc 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -1,6 +1,6 @@ /* 京东京喜工厂 -更新时间:2020-12-03 +更新时间:2020-12-04 活动入口 :京东APP->游戏与互动->查看更多->京喜工厂 或者: 京东APP首页搜索 "玩一玩" ,造物工厂即可 @@ -887,11 +887,12 @@ function CreateTuan() { }) } async function joinLeaderTuan() { - for (let tuanId of tuanIDs) { - if (tuanId) { - await JoinTuan(tuanId); - } - } + await updateTuanIds(); + if (!$.tuanIdS) await updateTuanIdsCDN(); + for (let tuanId of $.tuanIdS.tuanIds) { + if (!tuanId) continue + await JoinTuan(tuanId); + } } function JoinTuan(tuanId) { return new Promise((resolve) => { @@ -1044,6 +1045,40 @@ function tuanAward(activeId, tuanId, isTuanLeader = true) { }) }) } +function updateTuanIds(url = 'https://raw.githubusercontent.com/lxk0301/updateTeam/master/jd_updateFactoryTuanId.json') { + return new Promise(resolve => { + $.get({url}, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + } else { + $.tuanIdS = JSON.parse(data); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function updateTuanIdsCDN(url = 'https://cdn.jsdelivr.net/gh/lxk0301/updateTeam@master/jd_updateFactoryTuanId.json') { + return new Promise(resolve => { + $.get({url}, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + } else { + $.tuanIdS = JSON.parse(data); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} async function showMsg() { return new Promise(async resolve => { let ctrTemp; diff --git a/jd_small_home.js b/jd_small_home.js index e991d08..eb8c098 100644 --- a/jd_small_home.js +++ b/jd_small_home.js @@ -157,7 +157,7 @@ async function doChannelsListTask(taskId, taskType) { } async function helpFriends() { await updateInviteCode(); - if (!$.updatePkActivityIdRes) await updateInviteCodeCDN(); + if (!$.inviteCodes) await updateInviteCodeCDN(); for (let item of $.inviteCodes.inviteCode) { if (!item) continue await createAssistUser(item, $.createAssistUserID || "1318106976846299138"); From c915c26cd80cb8aafed51d930952c24ea0738acb Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Fri, 4 Dec 2020 19:02:45 +0800 Subject: [PATCH 248/290] update --- jd_dreamFactory.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index cf247cc..6aed2ae 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -32,11 +32,7 @@ const notify = $.isNode() ? require('./sendNotify') : ''; let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 const randomCount = $.isNode() ? 20 : 5; const tuanActiveId = `jfkcidGQavswLOBcAWljrw==`; -const tuanIDs = [ - "XgKt9JBOEZEqFpTk1gw79g==", - 'lvArkUAPQtXfjt9O7PGh9A==', - 'Edcyq9n8AFJH16varH0-bw==' -] + let cookiesArr = [], cookie = '', message = ''; const inviteCodes = ['V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=', 'PDPM257r_KuQhil2Y7koNw==', "gB99tYLjvPcEFloDgamoBw=="]; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; @@ -1123,7 +1119,7 @@ function readShareCode() { resolve(data); } }) - await $.wait(5000); + await $.wait(10000); resolve() }) } From e9451ffba8db150782f5d4fa163b9377721f454d Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 5 Dec 2020 13:54:20 +0800 Subject: [PATCH 249/290] update --- jd_818.js | 2 +- jd_dreamFactory.js | 2 +- jd_small_home.js | 2 +- jd_superMarket.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/jd_818.js b/jd_818.js index ae635a2..5212741 100644 --- a/jd_818.js +++ b/jd_818.js @@ -847,7 +847,7 @@ function updateShareCodes(url = 'https://raw.githubusercontent.com/lxk0301/updat }) }) } -function updateShareCodesCDN(url = 'https://cdn.jsdelivr.net/gh/lxk0301/updateTeam@master/jd_shareCodes.json') { +function updateShareCodesCDN(url = 'https://raw.fastgit.org/lxk0301/updateTeam/master/jd_shareCodes.json') { return new Promise(resolve => { //https://cdn.jsdelivr.net/gh/lxk0301/updateTeam@master/jd_shareCodes.json //https://raw.githubusercontent.com/lxk0301/updateTeam/master/jd_shareCodes.json diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 6aed2ae..77011e8 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -1058,7 +1058,7 @@ function updateTuanIds(url = 'https://raw.githubusercontent.com/lxk0301/updateTe }) }) } -function updateTuanIdsCDN(url = 'https://cdn.jsdelivr.net/gh/lxk0301/updateTeam@master/jd_updateFactoryTuanId.json') { +function updateTuanIdsCDN(url = 'https://raw.fastgit.org/lxk0301/updateTeam/master/jd_updateFactoryTuanId.json') { return new Promise(resolve => { $.get({url}, (err, resp, data) => { try { diff --git a/jd_small_home.js b/jd_small_home.js index eb8c098..1484fb8 100644 --- a/jd_small_home.js +++ b/jd_small_home.js @@ -710,7 +710,7 @@ function updateInviteCode(url = 'https://raw.githubusercontent.com/lxk0301/updat }) }) } -function updateInviteCodeCDN(url = 'https://cdn.jsdelivr.net/gh/lxk0301/updateTeam@master/jd_updateSmallHomeInviteCode.json') { +function updateInviteCodeCDN(url = 'https://raw.fastgit.org/lxk0301/updateTeam/master/jd_updateSmallHomeInviteCode.json') { return new Promise(resolve => { $.get({url}, async (err, resp, data) => { try { diff --git a/jd_superMarket.js b/jd_superMarket.js index 7bd28a0..d72916e 100644 --- a/jd_superMarket.js +++ b/jd_superMarket.js @@ -724,7 +724,7 @@ function updatePkActivityId(url = 'https://raw.githubusercontent.com/lxk0301/upd }) }) } -function updatePkActivityIdCDN(url = 'https://cdn.jsdelivr.net/gh/lxk0301/updateTeam@master/jd_updateTeam.json') { +function updatePkActivityIdCDN(url = 'https://raw.fastgit.org/lxk0301/updateTeam/master/jd_updateTeam.json') { return new Promise(resolve => { //https://cdn.jsdelivr.net/gh/lxk0301/updateTeam@master/jd_updateTeam.json //https://raw.githubusercontent.com/lxk0301/updateTeam/master/jd_updateTeam.json From 417985c2bb20c8962bf0ebaa258171d90f9c7904 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 5 Dec 2020 14:16:18 +0800 Subject: [PATCH 250/290] =?UTF-8?q?=E4=BA=AC=E5=96=9C=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=E5=8E=BB=E6=8E=89=E6=9C=AA=E5=BC=80=E9=80=9A=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E5=92=8C=E6=9C=AA=E9=80=89=E8=B4=AD=E5=95=86=E5=93=81=E6=97=B6?= =?UTF-8?q?=E7=9A=84=E5=BC=B9=E7=AA=97=E9=80=9A=E7=9F=A5=EF=BC=8C=E5=8F=AA?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E6=89=93=E5=8D=B0=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 77011e8..e44f89c 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -533,17 +533,17 @@ function userInfo() { message += `【当前等级】${data.user.userIdentity} ${data.user.currentLevel}\n`; message += `【生产进度】${((production.investedElectric / production.needElectric) * 100).toFixed(2)}%\n`; if (production.investedElectric >= production.needElectric) { - $.msg($.name, ``, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,请速去兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://wqsd.jd.com/pingou/dream_factory/index.html%22%20%7D'}) - await notify.sendNotify(`${$.name} - 京东账号${$.index} - ${$.nickName}`, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,请速去兑换`) + $.msg($.name, ``, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,请速去京喜APP->首页->好物0元造进行兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://wqsd.jd.com/pingou/dream_factory/index.html%22%20%7D'}) + await notify.sendNotify(`${$.name} - 京东账号${$.index} - ${$.nickName}`, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,请速去京喜APP->首页->好物0元造进行兑换`) } } else { $.unActive = false;//标记是否开启了京喜活动或者选购了商品进行生产 if (!data.factoryList) { - console.log('【提示】此账号京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动\n'); - $.msg($.name, '【提示】', `京东账号${$.index}[${$.nickName}]京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动`); + console.log('【提示】京东账号${$.index}[${$.nickName}]京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动\n'); + // $.msg($.name, '【提示】', `京东账号${$.index}[${$.nickName}]京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动`); } else if (data.factoryList && !data.productionList) { - console.log(`【提示】此账号京喜工厂未选购商品\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 选购\n`) - $.msg($.name, '【提示】', `京东账号${$.index}[${$.nickName}]京喜工厂未选择商品\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 选择商品`); + console.log(`【提示】京东账号${$.index}[${$.nickName}]京喜工厂未选购商品\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 选购\n`) + // $.msg($.name, '【提示】', `京东账号${$.index}[${$.nickName}]京喜工厂未选择商品\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 选择商品`); } } } else { From 9ff7052bb40ed561c6b267d46cc6d757675857ef Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 5 Dec 2020 14:46:18 +0800 Subject: [PATCH 251/290] =?UTF-8?q?=E5=AE=A0=E6=B1=AA=E6=B1=AA=E8=B5=9B?= =?UTF-8?q?=E8=B7=91=E5=A2=9E=E5=8A=A0=E6=8E=A7=E5=88=B6=E5=8F=82=E5=8A=A0?= =?UTF-8?q?=E5=A4=9A=E5=B0=91=E4=BA=BA=E7=9A=84=E8=B5=9B=E8=B7=91=E6=AF=94?= =?UTF-8?q?=E8=B5=9B=EF=BC=8C=E9=BB=98=E8=AE=A4=E8=BF=98=E6=98=AF2?= =?UTF-8?q?=E4=BA=BA=EF=BC=8C=E5=8F=AF=E9=80=9A=E8=BF=87BoxJs=E6=88=96?= =?UTF-8?q?=E8=80=85=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F/secret=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E6=8E=A7=E5=88=B6=E3=80=82=E7=8E=AF=E5=A2=83=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E5=90=8D=E7=A7=B0JOY=5FTEAM=5FLEVEL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- githubAction.md | 3 ++- jd_joy.js | 15 +++++++++------ jd_joy_run.js | 8 ++++---- lxk0301.boxjs.json | 25 +++++++++++++++++++++++-- 4 files changed, 38 insertions(+), 13 deletions(-) diff --git a/githubAction.md b/githubAction.md index 1d00731..acc3bd2 100644 --- a/githubAction.md +++ b/githubAction.md @@ -96,7 +96,8 @@ | `JD_818_SHAREID_NOTIFY` | 京东818互助码通知开关 | 非必须 | 控制jd_818.js脚本是否在获取互助码后通知,`true`为是(发送推送通知消息),`false`为否(即:不发送推送通知消息) | | `JOY_FEED_COUNT` | 宠汪汪喂食数量 | 非必须 | 控制jd_joy_feedPets.js脚本喂食数量 ,可以填的数字10,20,40,80 , 其他数字不可. | | `JOY_HELP_FEED` | 宠汪汪帮好友喂食 | 非必须 | 控制jd_joy_steal.js脚本是否给好友喂食,`false`为否,`true`为是(给好友喂食) | -| `JOY_RUN_FLAG` | 宠汪汪参加双人赛跑 | 非必须 | 控制jd_joy.js脚本是否参加双人赛跑,`false`为否,`true`为是,脚本默认是`true` | +| `JOY_RUN_FLAG` | 宠汪汪是否赛跑 | 非必须 | 控制jd_joy.js脚本是否参加赛跑(默认参加双人赛跑),`false`为否,`true`为是,脚本默认是`true` | +| `JOY_TEAM_LEVEL` | 宠汪汪参加什么级别的赛跑 | 非必须 | 控制jd_joy.js脚本参加几人的赛跑,可选数字为`2`,`10`,`50`,其中2代表参加双人PK赛,10代表参加10人突围赛,50代表参加50人挑战赛(注:此项功能在`JOY_RUN_FLAG`为true的时候才生效) | | `JD_JOY_REWARD_NAME` | 宠汪汪积分兑换多少京豆 | 非必须 | 目前可填值为`20`或者`500`,脚本默认`20`,`0`表示不兑换京豆 | | `MARKET_COIN_TO_BEANS` | 京小超兑换京豆数量 | 非必须 | 控制jd_blueCoin.js兑换京豆数量,可输入值为`20`或者`1000`的数字或者其他商品的名称,例如`碧浪洗衣凝珠` | | `MARKET_REWARD_NOTIFY` | 京小超兑换奖品推送开关 | 非必须 | 控制jd_blueCoin.js兑换奖品成功后是否静默运行, `false`为否(发送推送通知消息),`true`为是(即:不发送推送通知消息) | diff --git a/jd_joy.js b/jd_joy.js index 7df3fff..d52d288 100644 --- a/jd_joy.js +++ b/jd_joy.js @@ -2,7 +2,7 @@ jd宠汪汪 搬的https://github.com/uniqueque/QuantumultX/blob/4c1572d93d4d4f883f483f907120a75d925a693e/Script/jd_joy.js 脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js IOS用户支持京东双账号,NodeJs用户支持N个京东账号 -更新时间:2020-11-03 +更新时间:2020-12-05 建议先凌晨0点运行jd_joy.js脚本获取狗粮后,再运行此脚本(jd_joy_steal.js)可偷好友积分,6点运行可偷好友狗粮 feedCount:自定义 每次喂养数量; 等级只和喂养次数有关,与数量无关 推荐每次投喂10个,积累狗粮,然后去聚宝盆赌每小时的幸运奖,据观察,投入3000-6000中奖概率大,超过7000基本上注定亏本,即使是第一名 @@ -37,6 +37,7 @@ if ($.isNode()) { } let message = '', subTitle = ''; let FEED_NUM = ($.getdata('joyFeedCount') * 1) || 10; //每次喂养数量 [10,20,40,80] +let teamLevel = 2;//参加多少人的赛跑比赛,默认是双人赛跑,可选2,10,50。其他不可选,其中2代表参加双人PK赛,10代表参加10人突围赛,50代表参加50人挑战赛 //是否参加宠汪汪双人赛跑(据目前观察,参加双人赛跑不消耗狗粮,如需参加其他多人赛跑,请关闭) // 默认 'true' 参加双人赛跑,如需关闭 ,请改成 'false'; let joyRunFlag = true; @@ -137,11 +138,12 @@ async function joinTwoPeopleRun() { let raceUsers = $.petRaceResult.data.raceUsers; console.log(`赛跑状态:${petRaceResult}\n`); if (petRaceResult === 'not_participate') { - console.log('暂未参赛,现在为您参加双人赛跑'); - await runMatch(2); + teamLevel = $.isNode() ? (process.env.JOY_TEAM_LEVEL ? process.env.JOY_TEAM_LEVEL : teamLevel) : ($.getdata('JOY_TEAM_LEVEL') ? $.getdata('JOY_TEAM_LEVEL') : teamLevel); + console.log(`暂未参赛,现在为您参加${teamLevel}人赛跑`); + await runMatch(teamLevel * 1); if ($.runMatchResult.success) { - console.log(`双人赛跑参加成功\n`); - message += `双人赛跑:成功参加\n`; + console.log(`${teamLevel}人赛跑参加成功\n`); + message += `${teamLevel}人赛跑:成功参加\n`; await getPetRace(); petRaceResult = $.petRaceResult.data.petRaceResult; raceUsers = $.petRaceResult.data.raceUsers; @@ -160,7 +162,8 @@ async function joinTwoPeopleRun() { await receiveJoyRunAward(); console.log(`领取赛跑奖励结果:${JSON.stringify($.receiveJoyRunAwardRes)}`) if ($.receiveJoyRunAwardRes.success) { - $.msg($.name, '双人赛跑取得获胜', `【京东账号${$.index}】${$.nickName}\n太棒了,恭喜您获得300积分奖励`) + $.msg($.name, '', `【京东账号${$.index}】${$.nickName}\n太棒了,${teamLevel}人赛跑取得获胜\n恭喜您已获得相应的积分奖励`); + await notify.sendNotify(`${$.name} - 京东账号${$.index} - ${$.nickName}`, `${teamLevel}人赛跑取得获胜\n恭喜您已获得相应的积分奖励`) } } if (petRaceResult === 'participate') { diff --git a/jd_joy_run.js b/jd_joy_run.js index c0fafe9..534ade1 100644 --- a/jd_joy_run.js +++ b/jd_joy_run.js @@ -38,10 +38,10 @@ const isRequest = typeof $request != "undefined" const $ = new Env('宠汪汪赛跑'); const JD_BASE_API = `https://draw.jdfcloud.com//pet`; //此处填入你需要助力好友的京东用户名 -//给下面好友邀请助力的 -let invite_pins = ["jd_6cd93e613b0e5,被折叠的记忆33,jd_704a2e5e28a66,jd_45a6b5953b15b,zooooo58"]; -//给下面好友赛跑助力 -let run_pins = ["jd_6cd93e613b0e5,被折叠的记忆33,jd_704a2e5e28a66,jd_45a6b5953b15b,zooooo58"]; +//下面给出好友邀请助力的示例填写规则 +let invite_pins = ["jd_6cd93e613b0e5,被折叠的记忆33,jd_704a2e5e28a66,jd_45a6b5953b15b,zooooo58,jd_66f5cecc1efcd"]; +//下面给出好友赛跑助力的示例填写规则 +let run_pins = ["jd_6cd93e613b0e5,被折叠的记忆33,jd_704a2e5e28a66,jd_45a6b5953b15b,zooooo58,jd_66f5cecc1efcd"]; // $.LKYLToken = '76fe7794c475c18711e3b47185f114b5' || $.getdata('jdJoyRunToken'); // $.LKYLToken = $.getdata('jdJoyRunToken'); //Node.js用户请在jdCookie.js处填写京东ck; diff --git a/lxk0301.boxjs.json b/lxk0301.boxjs.json index 81aa844..eb3edd6 100644 --- a/lxk0301.boxjs.json +++ b/lxk0301.boxjs.json @@ -406,10 +406,31 @@ }, { "id": "joyRunFlag", - "name": "是否参加双人赛跑(默认参加)", + "name": "是否参加赛跑(默认参加)", "val": true, "type": "boolean", - "desc": "开启脚本将会为您自动参加双人赛跑" + "desc": "开启脚本将会为您自动参加赛跑(默认参加双人赛跑)" + }, + { + "id": "JOY_TEAM_LEVEL", + "name": "宠汪汪赛跑级别选择", + "val": "2", + "type": "radios", + "desc": "参加多少人的赛跑比赛,其中2代表参加双人PK赛,10代表参加10人突围赛,50代表参加50人挑战赛", + "items": [ + { + "key": "2", + "label": "双人PK赛" + }, + { + "key": "10", + "label": "10人突围赛" + }, + { + "key": "50", + "label": "50人挑战赛" + } + ] }, { "id": "joyFeedCount", From 0b7289ac47737517474dacf95a8a891b2b9a6d1e Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 5 Dec 2020 19:58:01 +0800 Subject: [PATCH 252/290] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=AC=E5=96=9C?= =?UTF-8?q?=E5=B7=A5=E5=8E=82=E6=8B=BE=E5=8F=96=E5=9C=B0=E4=B8=8B=E9=9B=B6?= =?UTF-8?q?=E4=BB=B6=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=87=8F=E5=B0=91=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E8=BF=90=E8=A1=8C=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 181 +++++++++++++++++++++++++++------------------ 1 file changed, 110 insertions(+), 71 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index e44f89c..ad456c5 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -61,7 +61,8 @@ if ($.isNode()) { message = ''; $.ele = 0; $.pickEle = 0; - $.pickFriendEle = 0 + $.pickFriendEle = 0; + $.friendList = []; await TotalBean(); console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`); if (!$.isLogin) { @@ -95,7 +96,7 @@ async function jdDreamFactory() { await taskList(); await investElectric(); await QueryHireReward();//收取招工电力 - await PickUp(); + await PickUp();//收取自家的地下零件 await stealFriend(); await tuanActivity(); await QueryAllTuan(); @@ -277,38 +278,7 @@ function getUserElectricity() { }) }) } -//满电力的时候分享,电力翻倍 -function shareReport() { - return new Promise(async resolve => { - const options = { - 'url': `https://wq.jd.com/activetmp/helpdraw/sharereport?call=reportshare&active=dreamfactory_platform_test&hj=app&sharetype=2&idctime=${Date.now()}&reportrefer=http%3A%2F%2Fwq.jd.com%2Fcube%2Ffront%2FactivePublish%2Fdream_factory_report%2F380556.html&_=${Date.now()}&sceneval=2&g_login_type=1`, - 'headers': { - "Accept": "*/*", - "Accept-Encoding": "gzip, deflate, br", - "Accept-Language": "zh-cn", - "Connection": "keep-alive", - "Cookie": cookie, - "Host": "wq.jd.com", - "Referer": "https://wqsd.jd.com/pingou/dream_factory/index.html", - "User-Agent": "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0", - } - } - $.get(options, (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - console.log(`\n分享获取翻倍电力功能(测试中):${data}\n`); - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(); - } - }) - }) -} + //查询有多少的招工电力可收取 function QueryHireReward() { return new Promise(async resolve => { @@ -616,14 +586,69 @@ function DrawProductionStagePrize() { }) } async function PickUp(encryptPin = $.encryptPin, help = false) { - for (let i = 0; i < new Array(5).fill('').length; i++) { - await $.wait(1000); - await PickUpComponent(i + 1, encryptPin, help); + const GetUserComponentRes = await GetUserComponent(encryptPin); + if (GetUserComponentRes && GetUserComponentRes['ret'] === 0) { + const { componentList } = GetUserComponentRes['data']; + if (componentList && componentList.length <= 0) { + if (help) { + $.log(`好友【${encryptPin}】地下暂无零件可收`) + } else { + $.log(`自家地下暂无零件可收`) + } + } + for (let item of componentList) { + await $.wait(1000); + const PickUpComponentRes = await PickUpComponent(item['placeId'], encryptPin); + if (PickUpComponentRes) { + if (PickUpComponentRes['ret'] === 0) { + const data = PickUpComponentRes['data']; + if (help) { + console.log(`收取好友[${encryptPin}]零件成功:获得${data['increaseElectric']}电力\n`); + $.pickFriendEle += data['increaseElectric']; + } else { + console.log(`收取自家零件成功:获得${data['increaseElectric']}电力\n`); + $.pickEle += data['increaseElectric']; + } + } else { + if (help) { + console.log(`收好友[${encryptPin}]零件失败:${PickUpComponentRes.msg},直接跳出`) + } else { + console.log(`收自己地下零件失败:${PickUpComponentRes.msg},直接跳出`) + } + break + } + } + } } } +function GetUserComponent(pin = $.encryptPin) { + return new Promise(resolve => { + $.get(taskurl('usermaterial/GetUserComponent', `pin=${pin}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + + } else { + console.log(`GetUserComponent失败:${JSON.stringify(data)}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} //收取地下随机零件电力API -//usermaterial/GetUserComponent -function PickUpComponent(index, encryptPin, help) { + +function PickUpComponent(index, encryptPin) { return new Promise(resolve => { $.get(taskurl('usermaterial/PickUpComponent', `placeId=${index}&pin=${encryptPin}`), (err, resp, data) => { try { @@ -633,36 +658,49 @@ function PickUpComponent(index, encryptPin, help) { } else { if (safeGet(data)) { data = JSON.parse(data); - if (data['ret'] === 0) { - data = data['data']; - if (help) { - console.log(`收取好友[${encryptPin}]零件成功:获得${data['increaseElectric']}电力\n`); - $.pickFriendEle += data['increaseElectric']; - } else { - console.log(`收取自家零件成功:获得${data['increaseElectric']}电力\n`); - $.pickEle += data['increaseElectric']; - } - } else { - if (help) { - console.log(`收好友[${encryptPin}]零件失败:${JSON.stringify(data)}`) - } else { - console.log(`收零件失败:${JSON.stringify(data)}`) - } - } + // if (data['ret'] === 0) { + // data = data['data']; + // if (help) { + // console.log(`收取好友[${encryptPin}]零件成功:获得${data['increaseElectric']}电力\n`); + // $.pickFriendEle += data['increaseElectric']; + // } else { + // console.log(`收取自家零件成功:获得${data['increaseElectric']}电力\n`); + // $.pickEle += data['increaseElectric']; + // } + // } else { + // if (help) { + // console.log(`收好友[${encryptPin}]零件失败:${JSON.stringify(data)}`) + // } else { + // console.log(`收零件失败:${JSON.stringify(data)}`) + // } + // } } } } catch (e) { $.logErr(e, resp) } finally { - resolve(); + resolve(data); } }) }) } //偷好友的电力 -function stealFriend() { +async function stealFriend() { + await getFriendList(); + $.friendList = [...new Set($.friendList)]; + for (let i = 0; i < $.friendList.length; i++) { + let pin = $.friendList[i];//好友的encryptPin + if (pin === 'V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=' || pin === 'Bo-jnVs_m9uBvbRzraXcSA==') { + continue + } + await PickUp(pin, true); + // await getFactoryIdByPin(pin);//获取好友工厂ID + // if ($.stealFactoryId) await collectElectricity($.stealFactoryId,true, pin); + } +} +function getFriendList(sort = 0) { return new Promise(async resolve => { - $.get(taskurl('friend/QueryFactoryManagerList', 'sort=0'), async (err, resp, data) => { + $.get(taskurl('friend/QueryFactoryManagerList', `sort=${sort}`), async (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) @@ -672,17 +710,19 @@ function stealFriend() { data = JSON.parse(data); if (data['ret'] === 0) { data = data['data']; - for (let i = 0; i < data.list.length; i++) { - let pin = data.list[i]['encryptPin'];//好友的encryptPin - if (pin === 'V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=' || pin === 'Bo-jnVs_m9uBvbRzraXcSA==') { - continue - } - await PickUp(pin, true); - // await getFactoryIdByPin(pin);//获取好友工厂ID - // if ($.stealFactoryId) await collectElectricity($.stealFactoryId,true, pin); + if (data.list && data.list.length <= 0) { + console.log(`查询好友列表完成,共${$.friendList.length}好友,下面开始拾取好友地下的零件\n`); + return } + let friendsEncryptPins = []; + for (let item of data.list) { + friendsEncryptPins.push(item.encryptPin); + } + $.friendList = [...$.friendList, ...friendsEncryptPins]; + if (!$.isNode()) return + await getFriendList(data.sort); } else { - console.log(`异常:${JSON.stringify(data)}`) + console.log(`QueryFactoryManagerList异常:${JSON.stringify(data)}`) } } } @@ -694,7 +734,6 @@ function stealFriend() { }) }) } - function getFactoryIdByPin(pin) { return new Promise((resolve, reject) => { // const url = `/dreamfactory/userinfo/GetUserInfoByPin?zone=dream_factory&pin=${pin}&sceneval=2`; @@ -1091,10 +1130,10 @@ async function showMsg() { await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `${message}\n【收取零件】获得${$.pickEle}电力`); } } else if (new Date().getHours() === 22) { - $.msg($.name, '', `${message}【收取自己零件】获得${$.pickEle}电力\n【收取好友零件】获得${$.pickFriendEle}电力`) - $.log(`\n${message}【收取自己零件】获得${$.pickEle}电力\n【收取好友零件】获得${$.pickFriendEle}电力`); + $.msg($.name, '', `${message}【收取自己零件】获得${$.pickEle}电力\n【收取${$.friendList.length}好友零件】获得${$.pickFriendEle}电力`) + $.log(`\n${message}【收取自己零件】获得${$.pickEle}电力\n【收取${$.friendList.length}好友零件】获得${$.pickFriendEle}电力`); } else { - $.log(`\n${message}【收取自己零件】获得${$.pickEle}电力\n【收取好友零件】获得${$.pickFriendEle}电力`); + $.log(`\n${message}【收取自己零件】获得${$.pickEle}电力\n【收取${$.friendList.length}好友零件】获得${$.pickFriendEle}电力`); } resolve() }) From ed40bf6a16fb160e14b414d8d1554d557f2707f1 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 5 Dec 2020 20:20:27 +0800 Subject: [PATCH 253/290] =?UTF-8?q?=E4=BA=AC=E5=96=9C=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=8A=A9=E5=8A=9B=E5=A5=BD=E5=8F=8B=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E8=8A=82=E7=9C=81=E8=84=9A=E6=9C=AC=E8=BF=90?= =?UTF-8?q?=E8=A1=8C=E6=97=B6=E9=97=B4=EF=BC=8C=E6=96=B0=E5=A2=9E=E6=8B=9B?= =?UTF-8?q?=E5=B7=A5=E8=BF=9B=E5=BA=A6=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 71 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 54 insertions(+), 17 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index ad456c5..46d2e19 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -63,6 +63,7 @@ if ($.isNode()) { $.pickEle = 0; $.pickFriendEle = 0; $.friendList = []; + $.canHelpFlag = true;//能否助力朋友 await TotalBean(); console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`); if (!$.isLogin) { @@ -75,7 +76,6 @@ if ($.isNode()) { } continue } - await shareCodesFormat(); await jdDreamFactory() } } @@ -89,6 +89,7 @@ if ($.isNode()) { async function jdDreamFactory() { await userInfo(); + await QueryFriendList();//查询今日招工情况以及剩余助力次数 await joinLeaderTuan();//参团 await helpFriends(); if (!$.unActive) return @@ -340,23 +341,28 @@ function hireAward(date) { }) } async function helpFriends() { - for (let code of $.newShareCodes) { - if (code) { - if ($.encryptPin === code) { - console.log(`不能为自己助力,跳过`); - continue; - } - const assistFriendRes = await assistFriend(code); - if (assistFriendRes && assistFriendRes['ret'] === 0) { - console.log(`助力朋友:${code}成功,因一次只能助力一个,故跳出助力`) - break - } else if (assistFriendRes && assistFriendRes['ret'] === 11009) { - console.log(`助力朋友[${code}]失败:${assistFriendRes.msg},跳出助力`); - break - } else { - console.log(`助力朋友[${code}]失败:${assistFriendRes.msg}`) + if ($.canHelpFlag) { + await shareCodesFormat(); + for (let code of $.newShareCodes) { + if (code) { + if ($.encryptPin === code) { + console.log(`不能为自己助力,跳过`); + continue; + } + const assistFriendRes = await assistFriend(code); + if (assistFriendRes && assistFriendRes['ret'] === 0) { + console.log(`助力朋友:${code}成功,因一次只能助力一个,故跳出助力`) + break + } else if (assistFriendRes && assistFriendRes['ret'] === 11009) { + console.log(`助力朋友[${code}]失败:${assistFriendRes.msg},跳出助力`); + break + } else { + console.log(`助力朋友[${code}]失败:${assistFriendRes.msg}`) + } } } + } else { + $.log(`今日助力好友机会已耗尽\n`); } } // 帮助用户 @@ -399,7 +405,38 @@ function assistFriend(sharepin) { }) }) } - +//查询助力招工情况 +function QueryFriendList() { + return new Promise(async resolve => { + $.get(taskurl('friend/QueryFriendList'), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + data = data['data']; + const { assistListToday = [], assistNumMax, hireListToday = [], hireNumMax } = data; + if (assistListToday.length === assistNumMax) { + $.canHelpFlag = false; + } + $.log(`【今日招工进度】${hireListToday.length}/${hireNumMax}`); + message += `【招工进度】${hireListToday.length}/${hireNumMax}\n`; + } else { + console.log(`异常:${JSON.stringify(data)}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} // 任务领奖 function completeTask(taskId, taskName) { return new Promise(async resolve => { From c5fdbe1c708032052f5bc99bbdc53d59664245a9 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 5 Dec 2020 20:55:24 +0800 Subject: [PATCH 254/290] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=BC=80=E7=BA=A2?= =?UTF-8?q?=E5=8C=85=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 46d2e19..ba46627 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -1,6 +1,6 @@ /* 京东京喜工厂 -更新时间:2020-12-04 +更新时间:2020-12-05 活动入口 :京东APP->游戏与互动->查看更多->京喜工厂 或者: 京东APP首页搜索 "玩一玩" ,造物工厂即可 @@ -524,13 +524,19 @@ function userInfo() { if (data.factoryList && data.productionList) { const production = data.productionList[0]; const factory = data.factoryList[0]; + const productionStage = data.productionStage; $.factoryId = factory.factoryId;//工厂ID $.productionId = production.productionId;//商品ID $.commodityDimId = production.commodityDimId; $.encryptPin = data.user.encryptPin; // subTitle = data.user.pin; await GetCommodityDetails();//获取已选购的商品信息 - await DrawProductionStagePrize();//领取红包 + if (productionStage['productionStageAwardStatus'] === 1) { + $.log(`可以开红包了\n`); + await DrawProductionStagePrize();//领取红包 + } else { + $.log(`再加${productionStage['productionStageProgress']}电力可开红包\n`) + } console.log(`当前电力:${data.user.electric}`) console.log(`当前等级:${data.user.currentLevel}`) console.log(`分享码: ${data.user.encryptPin}`); From ddf6628806660e3ff4e940e203fb9ca4b709f6c1 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sat, 5 Dec 2020 21:21:54 +0800 Subject: [PATCH 255/290] update --- jd_dreamFactory.js | 2 +- jd_joy.js | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index ba46627..8047f6b 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -552,7 +552,7 @@ function userInfo() { } else { $.unActive = false;//标记是否开启了京喜活动或者选购了商品进行生产 if (!data.factoryList) { - console.log('【提示】京东账号${$.index}[${$.nickName}]京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动\n'); + console.log(`【提示】京东账号${$.index}[${$.nickName}]京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动\n`); // $.msg($.name, '【提示】', `京东账号${$.index}[${$.nickName}]京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动`); } else if (data.factoryList && !data.productionList) { console.log(`【提示】京东账号${$.index}[${$.nickName}]京喜工厂未选购商品\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 选购\n`) diff --git a/jd_joy.js b/jd_joy.js index d52d288..e834b74 100644 --- a/jd_joy.js +++ b/jd_joy.js @@ -159,11 +159,16 @@ async function joinTwoPeopleRun() { } if (petRaceResult === 'unreceive') { console.log('今日参赛的比赛已经结束,现在领取奖励'); + await getWinCoin(); + let winCoin = 0; + if ($.getWinCoinRes && $.getWinCoinRes.success) { + winCoin = $.getWinCoinRes.data.winCoin; + } await receiveJoyRunAward(); console.log(`领取赛跑奖励结果:${JSON.stringify($.receiveJoyRunAwardRes)}`) if ($.receiveJoyRunAwardRes.success) { - $.msg($.name, '', `【京东账号${$.index}】${$.nickName}\n太棒了,${teamLevel}人赛跑取得获胜\n恭喜您已获得相应的积分奖励`); - await notify.sendNotify(`${$.name} - 京东账号${$.index} - ${$.nickName}`, `${teamLevel}人赛跑取得获胜\n恭喜您已获得相应的积分奖励`) + $.msg($.name, '', `【京东账号${$.index}】${$.nickName}\n太棒了,${teamLevel}人赛跑取得获胜\n恭喜您已获得${winCoin}积分奖励`); + await notify.sendNotify(`${$.name} - 京东账号${$.index} - ${$.nickName}`, `京东账号${$.index}${$.nickName}\n${teamLevel}人赛跑取得获胜\n恭喜您已获得${winCoin}积分奖励`) } } if (petRaceResult === 'participate') { @@ -653,6 +658,29 @@ function getBackupInfo() { }) }) } +//查询赛跑获得多少积分 +function getWinCoin() { + return new Promise(resolve => { + const url = `${weAppUrl}/combat/detail/v2?help=false&reqSource=weapp`; + $.get(taskUrl(url, 'draw.jdfcloud.com', `weapp`), (err, resp, data) => { + try { + if (err) { + console.log('\n京东宠汪汪: API查询请求失败 ‼️‼️') + } else { + // console.log('查询应援团信息API',(data)) + // $.appGetPetTaskConfigRes = JSON.parse(data); + if (data) { + $.getWinCoinRes = JSON.parse(data); + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(); + } + }) + }) +} //领取赛跑奖励API function receiveJoyRunAward() { return new Promise(resolve => { From 4b4c1480e9cd27557af4913f1595d466f61874df Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Sat, 5 Dec 2020 22:38:35 +0800 Subject: [PATCH 256/290] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E4=BA=91=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E5=AE=A0=E6=B1=AA=E6=B1=AA=E6=8E=A7=E5=88=B6=E5=8F=82?= =?UTF-8?q?=E5=8A=A0=E5=A4=9A=E5=B0=91=E4=BA=BA=E6=AF=94=E8=B5=9B=E7=9A=84?= =?UTF-8?q?secret?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 同步云函数宠汪汪控制参加多少人比赛的secret --- .github/workflows/deploy_tencent_scf.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml index 18b7973..245675f 100644 --- a/.github/workflows/deploy_tencent_scf.yml +++ b/.github/workflows/deploy_tencent_scf.yml @@ -45,6 +45,7 @@ jobs: if [ $JOY_FEED_COUNT ]; then sed -i "/variables/a\ JOY_FEED_COUNT: $JOY_FEED_COUNT" serverless.yml; fi; if [ $JOY_HELP_FEED ]; then sed -i "/variables/a\ JOY_HELP_FEED: $JOY_HELP_FEED" serverless.yml; fi; if [ $JOY_RUN_FLAG ]; then sed -i "/variables/a\ JOY_RUN_FLAG: $JOY_RUN_FLAG" serverless.yml; fi; + if [ $JOY_TEAM_LEVEL ]; then sed -i "/variables/a\ JOY_TEAM_LEVEL: $JOY_TEAM_LEVEL" serverless.yml; fi; if [ $JD_JOY_REWARD_NAME ]; then sed -i "/variables/a\ JD_JOY_REWARD_NAME: $JD_JOY_REWARD_NAME" serverless.yml; fi; if [ $MARKET_COIN_TO_BEANS ]; then sed -i "/variables/a\ MARKET_COIN_TO_BEANS: $MARKET_COIN_TO_BEANS" serverless.yml; fi; if [ $MARKET_REWARD_NOTIFY ]; then sed -i "/variables/a\ MARKET_REWARD_NOTIFY: $MARKET_REWARD_NOTIFY" serverless.yml; fi; @@ -86,6 +87,7 @@ jobs: JOY_FEED_COUNT: ${{ secrets.JOY_FEED_COUNT}} JOY_HELP_FEED: ${{ secrets.JOY_HELP_FEED}} JOY_RUN_FLAG: ${{ secrets.JOY_RUN_FLAG}} + JOY_TEAM_LEVEL: ${{ secrets.JOY_TEAM_LEVEL}} JD_JOY_REWARD_NAME: ${{ secrets.JD_JOY_REWARD_NAME}} MARKET_COIN_TO_BEANS: ${{ secrets.MARKET_COIN_TO_BEANS}} MARKET_REWARD_NOTIFY: ${{ secrets.MARKET_REWARD_NOTIFY}} From bfee426f6c5c303ea7a8bd7cd972c376974b8077 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sun, 6 Dec 2020 14:03:31 +0800 Subject: [PATCH 257/290] =?UTF-8?q?=E4=BA=AC=E5=96=9C=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8B=BE=E5=8F=96=E5=9C=B0=E4=B8=8B=E9=9B=B6?= =?UTF-8?q?=E4=BB=B6=E5=8A=9F=E8=83=BD=EF=BC=8C=E8=BE=BE=E5=88=B0=E4=B8=8A?= =?UTF-8?q?=E9=99=90=E5=90=8E=E4=B8=8D=E5=86=8D=E7=BB=A7=E7=BB=AD=EF=BC=8C?= =?UTF-8?q?=E8=8A=82=E7=9C=81=E8=84=9A=E6=9C=AC=E8=BF=90=E8=A1=8C=E6=97=B6?= =?UTF-8?q?=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 19 ++++++++++++++----- jd_lotteryMachine.js | 2 +- jd_rankingList.js | 2 +- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 8047f6b..e2e1eb5 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -629,6 +629,7 @@ function DrawProductionStagePrize() { }) } async function PickUp(encryptPin = $.encryptPin, help = false) { + $.pickUpMyselfComponent = true; const GetUserComponentRes = await GetUserComponent(encryptPin); if (GetUserComponentRes && GetUserComponentRes['ret'] === 0) { const { componentList } = GetUserComponentRes['data']; @@ -638,6 +639,7 @@ async function PickUp(encryptPin = $.encryptPin, help = false) { } else { $.log(`自家地下暂无零件可收`) } + $.pickUpMyselfComponent = false; } for (let item of componentList) { await $.wait(1000); @@ -656,7 +658,8 @@ async function PickUp(encryptPin = $.encryptPin, help = false) { if (help) { console.log(`收好友[${encryptPin}]零件失败:${PickUpComponentRes.msg},直接跳出`) } else { - console.log(`收自己地下零件失败:${PickUpComponentRes.msg},直接跳出`) + console.log(`收自己地下零件失败:${PickUpComponentRes.msg},直接跳出`); + $.pickUpMyselfComponent = false; } break } @@ -729,6 +732,10 @@ function PickUpComponent(index, encryptPin) { } //偷好友的电力 async function stealFriend() { + if (!$.pickUpMyselfComponent) { + $.log(`今日收取零件已达上限,偷好友零件也达到上限,故跳出`) + return + } await getFriendList(); $.friendList = [...new Set($.friendList)]; for (let i = 0; i < $.friendList.length; i++) { @@ -1159,6 +1166,8 @@ function updateTuanIdsCDN(url = 'https://raw.fastgit.org/lxk0301/updateTeam/mast } async function showMsg() { return new Promise(async resolve => { + message += `【收取自己零件】${$.pickUpMyselfComponent ? `获得${$.pickEle}电力` : `今日已达上限`}\n`; + message += `【收取好友零件】${$.pickUpMyselfComponent ? `获得${$.pickFriendEle}电力` : `今日已达上限`}\n`; let ctrTemp; if ($.isNode() && process.env.DREAMFACTORY_NOTIFY_CONTROL) { ctrTemp = `${process.env.DREAMFACTORY_NOTIFY_CONTROL}` === 'false'; @@ -1170,13 +1179,13 @@ async function showMsg() { if (ctrTemp) { $.msg($.name, '', message); if ($.isNode()) { - await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `${message}\n【收取零件】获得${$.pickEle}电力`); + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `${message}`); } } else if (new Date().getHours() === 22) { - $.msg($.name, '', `${message}【收取自己零件】获得${$.pickEle}电力\n【收取${$.friendList.length}好友零件】获得${$.pickFriendEle}电力`) - $.log(`\n${message}【收取自己零件】获得${$.pickEle}电力\n【收取${$.friendList.length}好友零件】获得${$.pickFriendEle}电力`); + $.msg($.name, '', `${message}`) + $.log(`\n${message}`); } else { - $.log(`\n${message}【收取自己零件】获得${$.pickEle}电力\n【收取${$.friendList.length}好友零件】获得${$.pickFriendEle}电力`); + $.log(`\n${message}`); } resolve() }) diff --git a/jd_lotteryMachine.js b/jd_lotteryMachine.js index 452a1d6..3b15d13 100644 --- a/jd_lotteryMachine.js +++ b/jd_lotteryMachine.js @@ -47,7 +47,7 @@ function updateShareCodes(url = 'https://raw.githubusercontent.com/yangtingxiao/ }) }) } -function updateShareCodesCDN(url = 'https://cdn.jsdelivr.net/gh/yangtingxiao/QuantumultX@master/scripts/jd/jd_lotteryMachine.js') { +function updateShareCodesCDN(url = 'https://raw.fastgit.org/yangtingxiao/QuantumultX/master/scripts/jd/jd_lotteryMachine.js') { return new Promise(resolve => { $.get({url}, async (err, resp, data) => { try { diff --git a/jd_rankingList.js b/jd_rankingList.js index 71bf00c..24f2ce8 100644 --- a/jd_rankingList.js +++ b/jd_rankingList.js @@ -48,7 +48,7 @@ function updateShareCodes(url = 'https://raw.githubusercontent.com/yangtingxiao/ }) }) } -function scriptsCDN(url = 'https://cdn.jsdelivr.net/gh/yangtingxiao/QuantumultX@master/scripts/jd/jd_rankingList.js') { +function scriptsCDN(url = 'https://raw.fastgit.org/yangtingxiao/QuantumultX/master/scripts/jd/jd_rankingList.js') { return new Promise(resolve => { $.get({url}, async (err, resp, data) => { try { From dac66151442644b08e02100c6bdcfec10497c3fc Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sun, 6 Dec 2020 16:05:17 +0800 Subject: [PATCH 258/290] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=AC=E5=96=9C?= =?UTF-8?q?=E5=B7=A5=E5=8E=82=E8=84=9A=E6=9C=AC=E5=95=86=E5=93=81=E5=8F=AF?= =?UTF-8?q?=E5=85=91=E6=8D=A2=E6=97=B6=E7=9A=84=E9=80=9A=E7=9F=A5=E9=A2=91?= =?UTF-8?q?=E7=8E=87=20=E6=AF=94=E5=A6=82=E5=85=91=E6=8D=A2(=E8=B6=85?= =?UTF-8?q?=E6=97=B6)=E6=88=AA=E6=AD=A2=E6=97=B6=E9=97=B4=E6=98=AF2020/12/?= =?UTF-8?q?8=2009:20:04,=E7=8E=B0=E5=9C=A8=E6=97=B6=E9=97=B4=E6=98=AF2020/?= =?UTF-8?q?12/6=20=E4=B8=80:=E5=9C=A8=E5=85=91=E6=8D=A2=E8=B6=85=E6=97=B6?= =?UTF-8?q?=E8=BF=99=E4=B8=80=E5=A4=A9(2020/12/8=2009:20:04)=E7=9A=84?= =?UTF-8?q?=E5=89=8D2=E5=B0=8F=E6=97=B6=E5=86=85=E9=80=9A=E7=9F=A5=20?= =?UTF-8?q?=E4=BA=8C:=E5=9C=A8=E5=85=91=E6=8D=A2=E8=B6=85=E6=97=B6?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E5=89=8D=E7=9A=84=E6=97=B6=E9=97=B4=E6=AF=8F?= =?UTF-8?q?=E5=A4=A9=E4=BB=85=E4=BB=85=E9=80=9A=E7=9F=A5=E4=B8=89=E6=AC=A1?= =?UTF-8?q?(2020/12/6=209,10,11=E7=82=B9,=E4=BB=A5=E5=8F=8A=E5=9C=A82020/1?= =?UTF-8?q?2/7=209,10,11=E7=82=B9=E5=90=84=E9=80=9A=E7=9F=A5=E4=B8=80?= =?UTF-8?q?=E6=AC=A1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 92 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 85 insertions(+), 7 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index e2e1eb5..1b13aa9 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -32,7 +32,7 @@ const notify = $.isNode() ? require('./sendNotify') : ''; let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 const randomCount = $.isNode() ? 20 : 5; const tuanActiveId = `jfkcidGQavswLOBcAWljrw==`; - +const jxOpenUrl = `openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://wqsd.jd.com/pingou/dream_factory/index.html%22%20%7D`; let cookiesArr = [], cookie = '', message = ''; const inviteCodes = ['V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=', 'PDPM257r_KuQhil2Y7koNw==', "gB99tYLjvPcEFloDgamoBw=="]; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; @@ -101,6 +101,7 @@ async function jdDreamFactory() { await stealFriend(); await tuanActivity(); await QueryAllTuan(); + await exchangeProNotify(); await showMsg(); } @@ -425,7 +426,7 @@ function QueryFriendList() { $.log(`【今日招工进度】${hireListToday.length}/${hireNumMax}`); message += `【招工进度】${hireListToday.length}/${hireNumMax}\n`; } else { - console.log(`异常:${JSON.stringify(data)}`) + console.log(`QueryFriendList异常:${JSON.stringify(data)}`) } } } @@ -493,7 +494,7 @@ function doTask(taskId) { if (data['ret'] === 0) { console.log("做任务完成!") } else { - console.log(`异常:${JSON.stringify(data)}`) + console.log(`DoTask异常:${JSON.stringify(data)}`) } } } @@ -521,6 +522,7 @@ function userInfo() { data = data['data']; $.unActive = true;//标记是否开启了京喜活动或者选购了商品进行生产 $.encryptPin = ''; + $.shelvesList = []; if (data.factoryList && data.productionList) { const production = data.productionList[0]; const factory = data.factoryList[0]; @@ -546,8 +548,8 @@ function userInfo() { message += `【当前等级】${data.user.userIdentity} ${data.user.currentLevel}\n`; message += `【生产进度】${((production.investedElectric / production.needElectric) * 100).toFixed(2)}%\n`; if (production.investedElectric >= production.needElectric) { - $.msg($.name, ``, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,请速去京喜APP->首页->好物0元造进行兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://wqsd.jd.com/pingou/dream_factory/index.html%22%20%7D'}) - await notify.sendNotify(`${$.name} - 京东账号${$.index} - ${$.nickName}`, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}\n已生产完,请速去京喜APP->首页->好物0元造进行兑换`) + $.log(`可以对方商品了`) + // await exchangeProNotify() } } else { $.unActive = false;//标记是否开启了京喜活动或者选购了商品进行生产 @@ -560,7 +562,7 @@ function userInfo() { } } } else { - console.log(`异常:${JSON.stringify(data)}`) + console.log(`GetUserInfo异常:${JSON.stringify(data)}`) } } } @@ -588,7 +590,39 @@ function GetCommodityDetails() { data = data['data']; $.productName = data['commodityList'][0].name; } else { - console.log(`异常:${JSON.stringify(data)}`) + console.log(`GetCommodityDetails异常:${JSON.stringify(data)}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +// 查询已完成商品 +function GetShelvesList(pageNo = 1) { + return new Promise(async resolve => { + $.get(taskurl('userinfo/GetShelvesList', `pageNo=${pageNo}&pageSize=12`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data['ret'] === 0) { + data = data['data']; + const { shelvesList } = data; + if (shelvesList) { + $.shelvesList = [...$.shelvesList, ...shelvesList]; + pageNo ++ + GetShelvesList(pageNo); + } + } else { + console.log(`GetShelvesList异常:${JSON.stringify(data)}`) } } } @@ -1164,6 +1198,50 @@ function updateTuanIdsCDN(url = 'https://raw.fastgit.org/lxk0301/updateTeam/mast }) }) } +function checkExchange() { + +} +//商品可兑换时的通知 +async function exchangeProNotify() { + await GetShelvesList(); + let exchangeEndTime, exchangeEndHours, nowHours; + //脚本运行的UTC+8时区的时间戳 + let nowTimes = new Date(new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000); + if ($.shelvesList && $.shelvesList.length > 0) console.log(`\n 商品名 兑换状态`) + for (let shel of $.shelvesList) { + console.log(`${shel['name']} ${shel['exchangeStatus'] === 1 ? '未兑换' : shel['exchangeStatus'] === 2 ? '已兑换' : '兑换超时'}`) + if (shel['exchangeStatus'] === 1) { + exchangeEndTime = shel['exchangeEndTime'] * 1000; + $.picture = shel['picture']; + // 兑换截止时间点 + exchangeEndHours = new Date(exchangeEndTime + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000).getHours(); + //兑换截止时间(年月日 时分秒) + $.exchangeEndTime = new Date(exchangeEndTime + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000).toLocaleString('zh', {hour12: false}); + //脚本运行此时的时间点 + nowHours = nowTimes.getHours(); + } + } + if (exchangeEndTime) { + //比如兑换(超时)截止时间是2020/12/8 09:20:04,现在时间是2020/12/6 + if (nowTimes < exchangeEndTime) { + //还可以兑换 + // 一:在兑换超时这一天(2020/12/8 09:20:04)的前2小时内通知 + if ((exchangeEndTime - nowTimes) <= 3600000 * 2) { + $.msg($.name, ``, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}${(exchangeEndTime - nowTimes) / 60*60*1000}分钟后兑换超时\n【兑换截止时间】${$.exchangeEndTime}\n请速去京喜APP->首页->好物0元造进行兑换`, {'open-url': jxOpenUrl, 'media-url': $.picture}) + await notify.sendNotify(`${$.name} - 京东账号${$.index} - ${$.nickName}`, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}${(exchangeEndTime - nowTimes) / 60*60*1000}分钟后兑换超时\n【兑换截止时间】${$.exchangeEndTime}\n请速去京喜APP->首页->好物0元造进行兑换`, { url: jxOpenUrl }) + } + //二:在兑换超时日期前的时间一天通知三次(2020/12/6 9,10,11点,以及在2020/12/7 9,10,11点各通知一次) + if (nowHours === exchangeEndHours || nowHours === (exchangeEndHours + 1) || nowHours === (exchangeEndHours + 2)) { + $.msg($.name, ``, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}已可兑换\n【兑换截止时间】${$.exchangeEndTime}\n请速去京喜APP->首页->好物0元造进行兑换`, {'open-url': jxOpenUrl, 'media-url': $.picture}) + await notify.sendNotify(`${$.name} - 京东账号${$.index} - ${$.nickName}`, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}已可兑换\n【兑换截止时间】${$.exchangeEndTime}\n请速去京喜APP->首页->好物0元造进行兑换`, { url: jxOpenUrl }) + } + } else { + //兑换已超时 + $.msg($.name, ``, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}兑换已超时,请重新选择商品生产\n【兑换截止时间】${$.exchangeEndTime}`, {'open-url': jxOpenUrl}) + await notify.sendNotify(`${$.name} - 京东账号${$.index} - ${$.nickName}`, `【京东账号${$.index}】${$.nickName}\n【生产商品】${$.productName}兑换已超时,请重新选择商品生产\n【兑换截止时间】${$.exchangeEndTime}`, { url: jxOpenUrl }) + } + } +} async function showMsg() { return new Promise(async resolve => { message += `【收取自己零件】${$.pickUpMyselfComponent ? `获得${$.pickEle}电力` : `今日已达上限`}\n`; From 0395b983fe47df4b75ee841eacaabac98fc5c831 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sun, 6 Dec 2020 22:34:12 +0800 Subject: [PATCH 259/290] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_jdfactory.js | 27 ++++++++++++++++----------- jd_joy.js | 7 ++++--- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/jd_jdfactory.js b/jd_jdfactory.js index b6ee71f..a0198b7 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -2,7 +2,7 @@ * @Author: lxk0301 https://github.com/lxk0301 * @Date: 2020-11-25 18:19:21 * @Last Modified by: lxk0301 - * @Last Modified time: 2020-11-28 09:58:02 + * @Last Modified time: 2020-12-06 22:58:02 */ /* 东东工厂,不是京喜工厂 @@ -45,7 +45,7 @@ if ($.isNode()) { } else { cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); } -let wantProduct = ``;//心仪商品名称 +let wantProduct = `移动电源`;//心仪商品名称 const JD_API_HOST = 'https://api.m.jd.com/client.action'; const inviteCodes = [`P04z54XCjVWnYaS5u2ak7ZCdan1Bdd2GGiWvC6_uERj`, 'P04z54XCjVWnYaS5m9cZ2ariXVJwHf0bgkG7Uo']; !(async () => { @@ -193,16 +193,21 @@ async function algorithm() { wantProductSkuId = item.skuId; } } - message += `心仪商品数量:${couponCount}\n`; - message += `心仪商品所需电量:${totalScore}\n`; - message += `您当前总电量:${$.batteryValue * 1}\n`; - if (wantProductSkuId && (($.batteryValue * 1) >= (totalScore))) { - console.log(`\n提供的心仪商品${name}目前数量:${couponCount},且当前总电量为:${$.batteryValue * 1},【满足】兑换此商品所需总电量:${totalScore}`); - console.log(`请去活动页面选择心仪商品并手动投入电量兑换\n`); - $.msg($.name, '', `京东账号${$.index}${$.nickName}\n您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${$.batteryValue * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请点击弹窗直达活动页面\n选择此心仪商品并手动投入电量兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); - await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `【京东账号${$.index}】${$.nickName}\n您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${$.batteryValue * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请去活动页面选择此心仪商品并手动投入电量兑换`); + if (totalScore) { + // 库存存在您设置的心仪商品 + message += `心仪商品数量:${couponCount}\n`; + message += `心仪商品所需电量:${totalScore}\n`; + message += `您当前总电量:${$.batteryValue * 1}\n`; + if (wantProductSkuId && (($.batteryValue * 1) >= (totalScore))) { + console.log(`\n提供的心仪商品${name}目前数量:${couponCount},且当前总电量为:${$.batteryValue * 1},【满足】兑换此商品所需总电量:${totalScore}`); + console.log(`请去活动页面选择心仪商品并手动投入电量兑换\n`); + $.msg($.name, '', `京东账号${$.index}${$.nickName}\n您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${$.batteryValue * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请点击弹窗直达活动页面\n选择此心仪商品并手动投入电量兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'}); + await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `【京东账号${$.index}】${$.nickName}\n您提供的心仪商品${name}目前数量:${couponCount}\n当前总电量为:${$.batteryValue * 1}\n【满足】兑换此商品所需总电量:${totalScore}\n请去活动页面选择此心仪商品并手动投入电量兑换`); + } else { + console.log(`您心仪商品${name}\n当前数量为:${couponCount}\n兑换所需电量为:${totalScore}\n您当前总电量为:${$.batteryValue * 1}\n不满足兑换心仪商品的条件\n`) + } } else { - console.log(`您心仪商品${name}\n当前数量为:${couponCount}\n兑换所需电量为:${totalScore}\n您当前总电量为:${$.batteryValue * 1}\n不满足兑换心仪商品的条件\n`) + message += `目前库存:暂无您设置的心仪商品\n`; } } else { console.log(`BoxJs或环境变量暂未提供心仪商品\n如需兑换心仪商品,请提供心仪商品名称\n`); diff --git a/jd_joy.js b/jd_joy.js index e834b74..ec392ea 100644 --- a/jd_joy.js +++ b/jd_joy.js @@ -2,7 +2,7 @@ jd宠汪汪 搬的https://github.com/uniqueque/QuantumultX/blob/4c1572d93d4d4f883f483f907120a75d925a693e/Script/jd_joy.js 脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js IOS用户支持京东双账号,NodeJs用户支持N个京东账号 -更新时间:2020-12-05 +更新时间:2020-12-06 建议先凌晨0点运行jd_joy.js脚本获取狗粮后,再运行此脚本(jd_joy_steal.js)可偷好友积分,6点运行可偷好友狗粮 feedCount:自定义 每次喂养数量; 等级只和喂养次数有关,与数量无关 推荐每次投喂10个,积累狗粮,然后去聚宝盆赌每小时的幸运奖,据观察,投入3000-6000中奖概率大,超过7000基本上注定亏本,即使是第一名 @@ -134,11 +134,11 @@ async function joinTwoPeopleRun() { console.log(`\n===========以下是双人赛跑信息========\n`) await getPetRace(); if ($.petRaceResult) { + teamLevel = $.isNode() ? (process.env.JOY_TEAM_LEVEL ? process.env.JOY_TEAM_LEVEL : teamLevel) : ($.getdata('JOY_TEAM_LEVEL') ? $.getdata('JOY_TEAM_LEVEL') : teamLevel); let petRaceResult = $.petRaceResult.data.petRaceResult; let raceUsers = $.petRaceResult.data.raceUsers; console.log(`赛跑状态:${petRaceResult}\n`); if (petRaceResult === 'not_participate') { - teamLevel = $.isNode() ? (process.env.JOY_TEAM_LEVEL ? process.env.JOY_TEAM_LEVEL : teamLevel) : ($.getdata('JOY_TEAM_LEVEL') ? $.getdata('JOY_TEAM_LEVEL') : teamLevel); console.log(`暂未参赛,现在为您参加${teamLevel}人赛跑`); await runMatch(teamLevel * 1); if ($.runMatchResult.success) { @@ -168,7 +168,7 @@ async function joinTwoPeopleRun() { console.log(`领取赛跑奖励结果:${JSON.stringify($.receiveJoyRunAwardRes)}`) if ($.receiveJoyRunAwardRes.success) { $.msg($.name, '', `【京东账号${$.index}】${$.nickName}\n太棒了,${teamLevel}人赛跑取得获胜\n恭喜您已获得${winCoin}积分奖励`); - await notify.sendNotify(`${$.name} - 京东账号${$.index} - ${$.nickName}`, `京东账号${$.index}${$.nickName}\n${teamLevel}人赛跑取得获胜\n恭喜您已获得${winCoin}积分奖励`) + if ($.isNode()) await notify.sendNotify(`${$.name} - 京东账号${$.index} - ${$.nickName}`, `京东账号${$.index}${$.nickName}\n${teamLevel}人赛跑取得获胜\n恭喜您已获得${winCoin}积分奖励`) } } if (petRaceResult === 'participate') { @@ -612,6 +612,7 @@ function getPetRace() { } //参加赛跑API function runMatch(teamLevel, timeout = 5000) { + if (teamLevel === 10 || teamLevel === 50) timeout = 60000; console.log(`正在参赛中,请稍等${timeout / 1000}秒,以防多个账号匹配到统一赛场\n`) return new Promise(async resolve => { await $.wait(timeout); From be4a0c28c489f22c1fc90002749222843856d960 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Sun, 6 Dec 2020 22:57:09 +0800 Subject: [PATCH 260/290] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E4=B8=9C=E4=B8=9C?= =?UTF-8?q?=E5=B7=A5=E5=8E=82=E8=84=9A=E6=9C=AC=20=E6=AF=8F=E6=97=A510-13?= =?UTF-8?q?=E7=82=B9=E5=B7=A1=E5=8E=82=E4=BB=BB=E5=8A=A1=E6=9C=AA=E5=81=9A?= =?UTF-8?q?=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_jdfactory.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/jd_jdfactory.js b/jd_jdfactory.js index a0198b7..7f48bca 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -1,6 +1,6 @@ /* * @Author: lxk0301 https://github.com/lxk0301 - * @Date: 2020-11-25 18:19:21 + * @Date: 2020-12-06 18:19:21 * @Last Modified by: lxk0301 * @Last Modified time: 2020-12-06 22:58:02 */ @@ -45,7 +45,7 @@ if ($.isNode()) { } else { cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); } -let wantProduct = `移动电源`;//心仪商品名称 +let wantProduct = ``;//心仪商品名称 const JD_API_HOST = 'https://api.m.jd.com/client.action'; const inviteCodes = [`P04z54XCjVWnYaS5u2ak7ZCdan1Bdd2GGiWvC6_uERj`, 'P04z54XCjVWnYaS5m9cZ2ariXVJwHf0bgkG7Uo']; !(async () => { @@ -289,11 +289,11 @@ async function doTask() { } if (item.taskType === 10) { if (item.status === 1) { - if (item.threeMealInfoVos.status === 1) { + if (item.threeMealInfoVos[0].status === 1) { //可以做此任务 console.log(`准备做此任务:${item.taskName}`); - await jdfactory_collectScore(item.threeMealInfoVos.taskToken); - } else if (item.threeMealInfoVos.status === 0) { + await jdfactory_collectScore(item.threeMealInfoVos[0].taskToken); + } else if (item.threeMealInfoVos[0].status === 0) { console.log(`${item.taskName} 任务已错过时间`) } } else if (item.status === 2){ From c916d869e5098b802d4c554a777022ca83df18db Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 7 Dec 2020 09:27:24 +0800 Subject: [PATCH 261/290] =?UTF-8?q?=E4=BA=AC=E5=96=9C=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E8=87=AA=E5=8A=A8=E9=A2=86=E5=8F=96?= =?UTF-8?q?=E5=8A=B3=E6=A8=A1=E7=94=B5=E5=8A=9B=E5=A5=96=E5=8A=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_dreamFactory.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js index 1b13aa9..ccb4640 100644 --- a/jd_dreamFactory.js +++ b/jd_dreamFactory.js @@ -1,6 +1,6 @@ /* 京东京喜工厂 -更新时间:2020-12-05 +更新时间:2020-12-07 活动入口 :京东APP->游戏与互动->查看更多->京喜工厂 或者: 京东APP首页搜索 "玩一玩" ,造物工厂即可 @@ -296,7 +296,7 @@ function QueryHireReward() { if (data['ret'] === 0) { for (let item of data['data']['hireReward']) { if (item.date !== new Date(new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000).Format("yyyyMMdd")) { - await hireAward(item.date); + await hireAward(item.date, item.type); } } } else { @@ -313,10 +313,10 @@ function QueryHireReward() { }) } // 收取招工电力 -function hireAward(date) { +function hireAward(date, type = 0) { return new Promise(async resolve => { // const url = `/dreamfactory/friend/HireAward?zone=dream_factory&date=${new Date().Format("yyyyMMdd")}&type=0&sceneval=2&g_login_type=1` - $.get(taskurl('friend/HireAward', `date=${date}&type=0`), async (err, resp, data) => { + $.get(taskurl('friend/HireAward', `date=${date}&type=${type}`), async (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) From a81132848902ad5db814af1e74b6f7d5be90b249 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 7 Dec 2020 09:46:35 +0800 Subject: [PATCH 262/290] =?UTF-8?q?=E6=B7=BB=E5=8A=A0timeout=E8=B6=85?= =?UTF-8?q?=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_fruit.js | 4 +++- jd_jdfactory.js | 4 ++-- jd_pet.js | 4 +++- jd_plantBean.js | 4 +++- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/jd_fruit.js b/jd_fruit.js index 114c1e2..b0f4eee 100644 --- a/jd_fruit.js +++ b/jd_fruit.js @@ -1222,7 +1222,7 @@ function timeFormat(time) { return date.getFullYear() + '-' + ((date.getMonth() + 1) >= 10 ? (date.getMonth() + 1) : '0' + (date.getMonth() + 1)) + '-' + (date.getDate() >= 10 ? date.getDate() : '0' + date.getDate()); } function readShareCode() { - return new Promise(resolve => { + return new Promise(async resolve => { $.get({url: `http://api.turinglabs.net/api/v1/jd/farm/read/${randomCount}/`}, (err, resp, data) => { try { if (err) { @@ -1240,6 +1240,8 @@ function readShareCode() { resolve(data); } }) + await $.wait(10000); + resolve() }) } function shareCodesFormat() { diff --git a/jd_jdfactory.js b/jd_jdfactory.js index 7f48bca..ba9d5c3 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -624,8 +624,8 @@ function readShareCode() { resolve(data); } }) - // await $.wait(2000); - // resolve() + await $.wait(10000); + resolve() }) } //格式化助力码 diff --git a/jd_pet.js b/jd_pet.js index 9c1542f..7e71281 100644 --- a/jd_pet.js +++ b/jd_pet.js @@ -436,7 +436,7 @@ async function showMsg() { } } function readShareCode() { - return new Promise(resolve => { + return new Promise(async resolve => { $.get({url: `http://api.turinglabs.net/api/v1/jd/pet/read/${randomCount}/`}, (err, resp, data) => { try { if (err) { @@ -454,6 +454,8 @@ function readShareCode() { resolve(data); } }) + await $.wait(10000); + resolve() }) } function shareCodesFormat() { diff --git a/jd_plantBean.js b/jd_plantBean.js index 5a14323..00760e2 100644 --- a/jd_plantBean.js +++ b/jd_plantBean.js @@ -501,7 +501,7 @@ async function plantBeanIndex() { $.plantBeanIndexResult = await request('plantBeanIndex');//plantBeanIndexBody } function readShareCode() { - return new Promise(resolve => { + return new Promise(async resolve => { $.get({url: `http://api.turinglabs.net/api/v1/jd/bean/read/${randomCount}/`}, (err, resp, data) => { try { if (err) { @@ -519,6 +519,8 @@ function readShareCode() { resolve(data); } }) + await $.wait(15000); + resolve() }) } //格式化助力码 From f5d0eeae8d5bbb87ebeeb2c7f1167ecd1fba7141 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 7 Dec 2020 09:52:45 +0800 Subject: [PATCH 263/290] update --- jd_plantBean.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jd_plantBean.js b/jd_plantBean.js index 00760e2..1640b5f 100644 --- a/jd_plantBean.js +++ b/jd_plantBean.js @@ -96,7 +96,7 @@ async function jdPlantBean() { awardState = roundList[0].awardState; $.taskList = $.plantBeanIndexResult.data.taskList; subTitle = `【京东昵称】${$.plantBeanIndexResult.data.plantUserInfo.plantNickName}`; - message += `【上期时间】${roundList[0].dateDesc}\n`; + message += `【上期时间】${roundList[0].dateDesc.replace('上期 ', '')}\n`; message += `【上期成长值】${roundList[0].growth}\n`; await receiveNutrients();//定时领取营养液 await doHelp();//助力 From 80a58fc80ce4a053823be47dc1730cf174324a29 Mon Sep 17 00:00:00 2001 From: shylocks Date: Mon, 7 Dec 2020 10:31:37 +0800 Subject: [PATCH 264/290] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=E9=87=91?= =?UTF-8?q?=E6=A6=9C=E5=B9=B4=E7=BB=88=E5=A5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jdSplitShareCodes.js | 31 ++++ jd_split.js | 367 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 398 insertions(+) create mode 100644 jdSplitShareCodes.js create mode 100644 jd_split.js diff --git a/jdSplitShareCodes.js b/jdSplitShareCodes.js new file mode 100644 index 0000000..08ba75d --- /dev/null +++ b/jdSplitShareCodes.js @@ -0,0 +1,31 @@ +/* +金榜年终奖互助码 +此文件为Node.js专用。其他用户请忽略 +支持京东N个账号 + */ +//云服务器腾讯云函数等NOde.js用户在此处填写东东萌宠的好友码。 +// github action用户的好友互助码填写到Action->Settings->Secrets->new Secret里面(Name填写 PLANT_BEAN_SHARECODES(此处的Name必须按此来写,不能随意更改),内容处填写互助码,填写规则如下) +// 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例 +// 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2 +let shareCodes = [ + '',//账号一的好友shareCode,不同好友中间用@符号隔开 + '',//账号二的好友shareCode,不同好友中间用@符号隔开 +] +// 判断github action里面是否有东东工厂互助码 +if (process.env.JDSPLIT_SHARECODES) { + if (process.env.JDSPLIT_SHARECODES.indexOf('&') > -1) { + console.log(`您的互助码选择的是用&隔开\n`) + shareCodes = process.env.JDSPLIT_SHARECODES.split('&'); + } else if (process.env.JDSPLIT_SHARECODES.indexOf('\n') > -1) { + console.log(`您的互助码选择的是用换行隔开\n`) + shareCodes = process.env.JDSPLIT_SHARECODES.split('\n'); + } else { + shareCodes = process.env.JDSPLIT_SHARECODES.split(); + } +} else if (process.env.JDSPLIT_SHARECODES) { + console.log(`由于您secret里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`) +} +for (let i = 0; i < shareCodes.length; i++) { + const index = (i + 1 === 1) ? '' : (i + 1); + exports['shareCodes' + index] = shareCodes[i]; +} diff --git a/jd_split.js b/jd_split.js new file mode 100644 index 0000000..26ac452 --- /dev/null +++ b/jd_split.js @@ -0,0 +1,367 @@ +/* +金榜年终奖 +已支持IOS双京东账号,Node.js支持N个京东账号 +脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js +============Quantumultx=============== +[task_local] +#金榜年终奖 +10 * * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jdfactory.js, tag=年终奖, enabled=true + +================Loon============== +[Script] +cron "10 0 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jdfactory.js,tag=年终奖 + +===============Surge================= +金榜年终奖 = type=cron,cronexp="10 0 * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jdfactory.js + +============小火箭========= +金榜年终奖 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jdfactory.js, cronexpr="10 0 * * *", timeout=200, enable=true + */ +const $ = new Env('金榜年终奖'); + +const notify = $.isNode() ? require('./sendNotify') : ''; +//Node.js用户请在jdCookie.js处填写京东ck; +const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; +let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 +const randomCount = $.isNode() ? 20 : 5; +//IOS等用户直接用NobyDa的jd cookie +let cookiesArr = [], cookie = '', message; +if ($.isNode()) { + Object.keys(jdCookieNode).forEach((item) => { + cookiesArr.push(jdCookieNode[item]) + }) + if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {}; +} else { + cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); +} +const JD_API_HOST = 'https://api.m.jd.com/client.action'; +const inviteCodes = [`P04z54XCjVUnIaW5nJcXCCyoR8C6p8txXBH`, 'P04z54XCjVUnIaW5nJcXCCyoR8C6p8txXBH']; +!(async () => { + await requireConfig(); + if (!cookiesArr[0]) { + $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); + return; + } + for (let i = 0; i < cookiesArr.length; i++) { + if (cookiesArr[i]) { + cookie = cookiesArr[i]; + $.UserName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]) + $.index = i + 1; + $.isLogin = true; + $.nickName = ''; + message = ''; + await TotalBean(); + console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`); + if (!$.isLogin) { + $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"}); + + if ($.isNode()) { + await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); + } else { + $.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 + } + continue + } + await shareCodesFormat(); + await jdSplit() + } + } +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) +async function jdSplit() { + await helpFriends(); + await jdsplit_getTaskDetail(); + await doTask(); + await showMsg(); +} +function showMsg() { + return new Promise(resolve => { + if (!jdNotify) { + $.msg($.name, '', `${message}`); + } else { + $.log(`京东账号${$.index}${$.nickName}\n${message}`); + } + if (new Date().getHours() === 23) { + $.msg($.name, '', `京东账号${$.index}${$.nickName}\n${message}`); + } + resolve() + }) +} +async function helpFriends() { + for (let code of $.newShareCodes) { + if (!code) continue + const helpRes = await jdsplit_collectScore(code,6,null); + if (helpRes.code === 0 && helpRes.data.bizCode === -7) { + console.log(`助力机会已耗尽,跳出`); + break + } + } +} +async function doTask() { + for (let item of $.taskVos) { + if (item.taskType === 8) { + //看看商品任务 + if (item.status === 1) { + console.log(`准备做此任务:${item.taskName}`); + for (let task of item.productInfoVos) { + if (task.status === 1) { + await jdsplit_collectScore(task.taskToken,item.taskId,task.itemId,1); + await $.wait(4000) + await jdsplit_collectScore(task.taskToken,item.taskId,task.itemId,0); + } + } + await jdsplit_getLottery(item.taskId) + } else if(item.status!==4){ + await jdsplit_getLottery(item.taskId) + console.log(`${item.taskName}已做完`) + } + } + if (item.taskType === 9) { + //逛会场任务 + if (item.status === 1) { + console.log(`准备做此任务:${item.taskName}`); + for (let task of item.shoppingActivityVos) { + if (task.status === 1) { + await jdsplit_collectScore(task.taskToken,item.taskId,task.itemId,1); + await $.wait(4000) + await jdsplit_collectScore(task.taskToken,item.taskId,task.itemId,0); + } + } + await jdsplit_getLottery(item.taskId) + } else if(item.status!==4){ + await jdsplit_getLottery(item.taskId) + console.log(`${item.taskName}已做完`) + } + } + } +} + +//领取做完任务的奖励 +function jdsplit_collectScore(taskToken, taskId, itemId, actionType=0) { + return new Promise(resolve => { + let body = { "appId":"1EFRTwA","taskToken":taskToken,"taskId":taskId,"itemId":itemId,"actionType":actionType } + $.post(taskPostUrl("harmony_collectScore", body), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if(data.data.bizCode === 1){ + console.log(`任务领取成功`); + } + else if (data.data.bizCode === 0) { + if(data.data.result.taskType===6){ + console.log(`助力好友:${data.data.result.itemId}成功!`) + }else + console.log(`任务完成成功`); + } else { + console.log(`${data.data.bizMsg}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} + +// 抽奖 +function jdsplit_getLottery(taskId) { + return new Promise(resolve => { + let body = { "appId":"1EFRTwA","taskId":taskId} + $.post(taskPostUrl("splitHongbao_getLotteryResult", body), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.data.bizCode === 0) { + console.log(`红包领取结果:${data.data.result.userAwardsCacheDto.redPacketVO.name}`); + } else { + console.log(JSON.stringify(data)) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} + +function jdsplit_getTaskDetail() { + return new Promise(resolve => { + $.post(taskPostUrl("splitHongbao_getHomeData", {"appId":"1EFRTwA","taskToken":""}, ), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.data.bizCode === 0) { + $.taskVos = data.data.result.taskVos;//任务列表 + $.taskVos.map(item => { + if (item.taskType === 6) { + console.log(`\n您的${$.name}好友助力邀请码:${item.assistTaskDetailVo.taskToken}\n`) + } + }) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +function readShareCode() { + console.log(`开始`) + return new Promise(async resolve => { + $.get({url: `http://api.turinglabs.net/api/v1/jd/jdsplit/read/${randomCount}/`}, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + console.log(`随机取${randomCount}个码放到您固定的互助码后面`) + data = JSON.parse(data); + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + // await $.wait(2000); + // resolve() + }) +} +//格式化助力码 +function shareCodesFormat() { + return new Promise(async resolve => { + // console.log(`第${$.index}个京东账号的助力码:::${$.shareCodesArr[$.index - 1]}`) + $.newShareCodes = []; + if ($.shareCodesArr[$.index - 1]) { + $.newShareCodes = $.shareCodesArr[$.index - 1].split('@'); + } else { + console.log(`由于您第${$.index}个京东账号未提供shareCode,将采纳本脚本自带的助力码\n`) + const tempIndex = $.index > inviteCodes.length ? (inviteCodes.length - 1) : ($.index - 1); + $.newShareCodes = inviteCodes[tempIndex].split('@'); + } + const readShareCodeRes = null //await readShareCode(); + if (readShareCodeRes && readShareCodeRes.code === 200) { + $.newShareCodes = [...new Set([...$.newShareCodes, ...(readShareCodeRes.data || [])])]; + } + console.log(`第${$.index}个京东账号将要助力的好友${JSON.stringify($.newShareCodes)}`) + resolve(); + }) +} +function requireConfig() { + return new Promise(resolve => { + console.log(`开始获取${$.name}配置文件\n`); + //Node.js用户请在jdCookie.js处填写京东ck; + const shareCodes = $.isNode() ? require('./jdSplitShareCodes.js') : ''; + console.log(`共${cookiesArr.length}个京东账号\n`); + $.shareCodesArr = []; + if ($.isNode()) { + Object.keys(shareCodes).forEach((item) => { + if (shareCodes[item]) { + $.shareCodesArr.push(shareCodes[item]) + } + }) + } + // console.log(`\n种豆得豆助力码::${JSON.stringify($.shareCodesArr)}`); + console.log(`您提供了${$.shareCodesArr.length}个账号的${$.name}助力码\n`); + resolve() + }) +} +function taskPostUrl(function_id, body = {}, function_id2) { + let url = `${JD_API_HOST}`; + if (function_id2) { + url += `?functionId=${function_id2}`; + } + return { + url, + body: `functionId=${function_id}&body=${escape(JSON.stringify(body))}&client=wh5&clientVersion=9.1.0`, + headers: { + "Cookie": cookie, + "origin": "https://h5.m.jd.com", + "referer": "https://h5.m.jd.com/", + 'Content-Type': 'application/x-www-form-urlencoded', + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), + } + } +} +function TotalBean() { + return new Promise(async resolve => { + const options = { + "url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`, + "headers": { + "Accept": "application/json,text/plain, */*", + "Content-Type": "application/x-www-form-urlencoded", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + data = JSON.parse(data); + if (data['retcode'] === 13) { + $.isLogin = false; //cookie过期 + return + } + $.nickName = data['base'].nickname; + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function safeGet(data) { + try { + if (typeof JSON.parse(data) == "object") { + return true; + } + } catch (e) { + console.log(e); + console.log(`京东服务器访问数据为空,请检查自身设备网络情况`); + return false; + } +} +// 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 d24a734d9987e08b650c201f4d5d6cd34c04feaf Mon Sep 17 00:00:00 2001 From: shylocks Date: Mon, 7 Dec 2020 10:38:21 +0800 Subject: [PATCH 265/290] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=90=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_split.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/jd_split.js b/jd_split.js index 26ac452..7f1716d 100644 --- a/jd_split.js +++ b/jd_split.js @@ -5,17 +5,17 @@ ============Quantumultx=============== [task_local] #金榜年终奖 -10 * * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jdfactory.js, tag=年终奖, enabled=true +10 0 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_split.js, tag=年终奖, enabled=true ================Loon============== [Script] -cron "10 0 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jdfactory.js,tag=年终奖 +cron "10 0 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_split.js,tag=年终奖 ===============Surge================= -金榜年终奖 = type=cron,cronexp="10 0 * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jdfactory.js +金榜年终奖 = type=cron,cronexp="10 0 * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_split.js ============小火箭========= -金榜年终奖 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_jdfactory.js, cronexpr="10 0 * * *", timeout=200, enable=true +金榜年终奖 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_split.js, cronexpr="10 0 * * *", timeout=200, enable=true */ const $ = new Env('金榜年终奖'); From 147b37237805241b535abfaa7e86b9612c3274b9 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 7 Dec 2020 11:11:01 +0800 Subject: [PATCH 266/290] =?UTF-8?q?=E7=9F=AD=E6=9C=9F=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=EF=BC=8C=E5=8E=BB=E6=8E=89=E7=9B=B8=E5=85=B3=E5=8A=A9=E5=8A=9B?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jdSplitShareCodes.js | 31 -------------------- jd_split.js | 67 +------------------------------------------- 2 files changed, 1 insertion(+), 97 deletions(-) delete mode 100644 jdSplitShareCodes.js diff --git a/jdSplitShareCodes.js b/jdSplitShareCodes.js deleted file mode 100644 index 08ba75d..0000000 --- a/jdSplitShareCodes.js +++ /dev/null @@ -1,31 +0,0 @@ -/* -金榜年终奖互助码 -此文件为Node.js专用。其他用户请忽略 -支持京东N个账号 - */ -//云服务器腾讯云函数等NOde.js用户在此处填写东东萌宠的好友码。 -// github action用户的好友互助码填写到Action->Settings->Secrets->new Secret里面(Name填写 PLANT_BEAN_SHARECODES(此处的Name必须按此来写,不能随意更改),内容处填写互助码,填写规则如下) -// 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例 -// 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2 -let shareCodes = [ - '',//账号一的好友shareCode,不同好友中间用@符号隔开 - '',//账号二的好友shareCode,不同好友中间用@符号隔开 -] -// 判断github action里面是否有东东工厂互助码 -if (process.env.JDSPLIT_SHARECODES) { - if (process.env.JDSPLIT_SHARECODES.indexOf('&') > -1) { - console.log(`您的互助码选择的是用&隔开\n`) - shareCodes = process.env.JDSPLIT_SHARECODES.split('&'); - } else if (process.env.JDSPLIT_SHARECODES.indexOf('\n') > -1) { - console.log(`您的互助码选择的是用换行隔开\n`) - shareCodes = process.env.JDSPLIT_SHARECODES.split('\n'); - } else { - shareCodes = process.env.JDSPLIT_SHARECODES.split(); - } -} else if (process.env.JDSPLIT_SHARECODES) { - console.log(`由于您secret里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`) -} -for (let i = 0; i < shareCodes.length; i++) { - const index = (i + 1 === 1) ? '' : (i + 1); - exports['shareCodes' + index] = shareCodes[i]; -} diff --git a/jd_split.js b/jd_split.js index 7f1716d..651f830 100644 --- a/jd_split.js +++ b/jd_split.js @@ -35,9 +35,8 @@ if ($.isNode()) { cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); } const JD_API_HOST = 'https://api.m.jd.com/client.action'; -const inviteCodes = [`P04z54XCjVUnIaW5nJcXCCyoR8C6p8txXBH`, 'P04z54XCjVUnIaW5nJcXCCyoR8C6p8txXBH']; +$.newShareCodes = [`P04z54XCjVUnIaW5nJcXCCyoR8C6p8txXBH`, 'P04z54XCjVUnIaW5nJcXCCyoR8C6p8txXBH']; !(async () => { - await requireConfig(); if (!cookiesArr[0]) { $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); return; @@ -62,7 +61,6 @@ const inviteCodes = [`P04z54XCjVUnIaW5nJcXCCyoR8C6p8txXBH`, 'P04z54XCjVUnIaW5nJc } continue } - await shareCodesFormat(); await jdSplit() } } @@ -232,69 +230,6 @@ function jdsplit_getTaskDetail() { }) } -function readShareCode() { - console.log(`开始`) - return new Promise(async resolve => { - $.get({url: `http://api.turinglabs.net/api/v1/jd/jdsplit/read/${randomCount}/`}, (err, resp, data) => { - try { - if (err) { - console.log(`${JSON.stringify(err)}`) - console.log(`${$.name} API请求失败,请检查网路重试`) - } else { - if (data) { - console.log(`随机取${randomCount}个码放到您固定的互助码后面`) - data = JSON.parse(data); - } - } - } catch (e) { - $.logErr(e, resp) - } finally { - resolve(data); - } - }) - // await $.wait(2000); - // resolve() - }) -} -//格式化助力码 -function shareCodesFormat() { - return new Promise(async resolve => { - // console.log(`第${$.index}个京东账号的助力码:::${$.shareCodesArr[$.index - 1]}`) - $.newShareCodes = []; - if ($.shareCodesArr[$.index - 1]) { - $.newShareCodes = $.shareCodesArr[$.index - 1].split('@'); - } else { - console.log(`由于您第${$.index}个京东账号未提供shareCode,将采纳本脚本自带的助力码\n`) - const tempIndex = $.index > inviteCodes.length ? (inviteCodes.length - 1) : ($.index - 1); - $.newShareCodes = inviteCodes[tempIndex].split('@'); - } - const readShareCodeRes = null //await readShareCode(); - if (readShareCodeRes && readShareCodeRes.code === 200) { - $.newShareCodes = [...new Set([...$.newShareCodes, ...(readShareCodeRes.data || [])])]; - } - console.log(`第${$.index}个京东账号将要助力的好友${JSON.stringify($.newShareCodes)}`) - resolve(); - }) -} -function requireConfig() { - return new Promise(resolve => { - console.log(`开始获取${$.name}配置文件\n`); - //Node.js用户请在jdCookie.js处填写京东ck; - const shareCodes = $.isNode() ? require('./jdSplitShareCodes.js') : ''; - console.log(`共${cookiesArr.length}个京东账号\n`); - $.shareCodesArr = []; - if ($.isNode()) { - Object.keys(shareCodes).forEach((item) => { - if (shareCodes[item]) { - $.shareCodesArr.push(shareCodes[item]) - } - }) - } - // console.log(`\n种豆得豆助力码::${JSON.stringify($.shareCodesArr)}`); - console.log(`您提供了${$.shareCodesArr.length}个账号的${$.name}助力码\n`); - resolve() - }) -} function taskPostUrl(function_id, body = {}, function_id2) { let url = `${JD_API_HOST}`; if (function_id2) { From 83a803475005fe78ec2dd595ba9dfec2c1bcef7b Mon Sep 17 00:00:00 2001 From: shylocks Date: Mon, 7 Dec 2020 11:11:14 +0800 Subject: [PATCH 267/290] =?UTF-8?q?=E7=A7=92=E6=9D=80=E7=BA=A2=E5=8C=85?= =?UTF-8?q?=E9=9B=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_ms_redrain.js | 184 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 jd_ms_redrain.js diff --git a/jd_ms_redrain.js b/jd_ms_redrain.js new file mode 100644 index 0000000..7b3bdf9 --- /dev/null +++ b/jd_ms_redrain.js @@ -0,0 +1,184 @@ +/* +秒杀红包雨,可以获取3次,一天运行一次即可 +更新地址:https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_ms_redrain.js +已支持IOS双京东账号, Node.js支持N个京东账号 +脚本兼容: QuantumultX, Surge, Loon, 小火箭,JSBox, Node.js +============Quantumultx=============== +[task_local] +#秒杀红包雨 +10 7 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_ms_redrain.js, tag=秒杀红包雨, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jd_ms_redrain.png, enabled=true + +================Loon============== +[Script] +cron "10 7 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_ms_redrain.js, tag=秒杀红包雨 + +===============Surge================= +秒杀红包雨 = type=cron,cronexp="10 7 * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_ms_redrain.js + +============小火箭========= +秒杀红包雨 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_ms_redrain.js, cronexpr="10 7 * * *", timeout=200, enable=true + */ +const $ = new Env('秒杀红包雨'); + +const notify = $.isNode() ? require('./sendNotify') : ''; +//Node.js用户请在jdCookie.js处填写京东ck; +const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; +let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 +const randomCount = $.isNode() ? 20 : 5; +//IOS等用户直接用NobyDa的jd cookie +let cookiesArr = [], cookie = '', message; +if ($.isNode()) { + Object.keys(jdCookieNode).forEach((item) => { + cookiesArr.push(jdCookieNode[item]) + }) + if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {}; +} else { + cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); +} +const JD_API_HOST = 'https://api.m.jd.com/api'; +!(async () => { + if (!cookiesArr[0]) { + $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); + return; + } + for (let i = 0; i < cookiesArr.length; i++) { + if (cookiesArr[i]) { + cookie = cookiesArr[i]; + $.UserName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]) + $.index = i + 1; + $.isLogin = true; + $.nickName = ''; + message = ''; + await TotalBean(); + console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`); + if (!$.isLogin) { + $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"}); + + if ($.isNode()) { + await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); + } else { + $.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 + } + continue + } + for(let i=0;i<3;++i){ + await getRedRain(); + await $.wait(5000); //防止黑号 + } + await showMsg(); + } + } +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) + +function showMsg() { + return new Promise(resolve => { + $.msg($.name, '', `【京东账号${$.index}】${$.nickName}\n${message}`); + resolve() + }) +} +function getRedRain() { + return new Promise(resolve => { + const body = {"actId":"RRA318jCtaXhZJgiLryM1iydEhc7Jna"}; + $.get(taskUrl('noahRedRainLottery', body), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.subCode === '0') { + console.log(`领取成功,获得${JSON.stringify(data.lotteryResult)}`) + message+= `领取成功,获得${JSON.stringify(data.lotteryResult)}\n` + + } else if (data.subCode === '8') { + console.log(`今日次数已满`) + message += `领取失败,今日已签到`; + } else { + console.log(`异常:${JSON.stringify(data)}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function taskUrl(function_id, body = {}) { + return { + url: `${JD_API_HOST}?functionId=${function_id}&body=${escape(JSON.stringify(body))}&client=wh5&clientVersion=1.0.0&_=${new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000}`, + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Content-Type": "application/x-www-form-urlencoded", + "Host": "api.m.jd.com", + "Referer": "https://h5.m.jd.com/active/redrain/index.html", + "Cookie": cookie, + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), + } + } +} +function TotalBean() { + return new Promise(async resolve => { + const options = { + "url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`, + "headers": { + "Accept": "application/json,text/plain, */*", + "Content-Type": "application/x-www-form-urlencoded", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + data = JSON.parse(data); + if (data['retcode'] === 13) { + $.isLogin = false; //cookie过期 + return + } + $.nickName = data['base'].nickname; + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function safeGet(data) { + try { + if (typeof JSON.parse(data) == "object") { + return true; + } + } catch (e) { + console.log(e); + console.log(`京东服务器访问数据为空,请检查自身设备网络情况`); + return false; + } +} +// 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 43b6efc37025f4e3755e92697956b5edc747250b Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 7 Dec 2020 11:22:22 +0800 Subject: [PATCH 268/290] =?UTF-8?q?=E7=A7=92=E6=9D=80=E7=BA=A2=E5=8C=85?= =?UTF-8?q?=E9=9B=A8=E8=84=9A=E6=9C=AC=EF=BC=8C=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=B8=80=E4=B8=8BiOS=E4=BB=A3=E7=90=86=E8=BD=AF=E4=BB=B6?= =?UTF-8?q?=E7=9A=84=E5=BC=B9=E7=AA=97=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_ms_redrain.js | 5 +++-- jd_split.js | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/jd_ms_redrain.js b/jd_ms_redrain.js index 7b3bdf9..4ba9d49 100644 --- a/jd_ms_redrain.js +++ b/jd_ms_redrain.js @@ -95,11 +95,12 @@ function getRedRain() { data = JSON.parse(data); if (data.subCode === '0') { console.log(`领取成功,获得${JSON.stringify(data.lotteryResult)}`) - message+= `领取成功,获得${JSON.stringify(data.lotteryResult)}\n` + // message+= `领取成功,获得${JSON.stringify(data.lotteryResult)}\n` + message+= `${data.lotteryResult.jPeasList[0].ext}:${(data.lotteryResult.jPeasList[0].quantity)}京豆\n` } else if (data.subCode === '8') { console.log(`今日次数已满`) - message += `领取失败,今日已签到`; + message += `领取失败,今日已签到\n`; } else { console.log(`异常:${JSON.stringify(data)}`) } diff --git a/jd_split.js b/jd_split.js index 651f830..4ae1007 100644 --- a/jd_split.js +++ b/jd_split.js @@ -1,5 +1,5 @@ /* -金榜年终奖 +金榜年终奖 ,活动2020-12-12日结束 已支持IOS双京东账号,Node.js支持N个京东账号 脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js ============Quantumultx=============== @@ -35,7 +35,7 @@ if ($.isNode()) { cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); } const JD_API_HOST = 'https://api.m.jd.com/client.action'; -$.newShareCodes = [`P04z54XCjVUnIaW5nJcXCCyoR8C6p8txXBH`, 'P04z54XCjVUnIaW5nJcXCCyoR8C6p8txXBH']; +$.newShareCodes = [`P04z54XCjVUnIaW5nJcXCCyoR8C6p8txXBH`, 'P04z54XCjVUnIaW5nJcXCCyoR8C6p8txXBH', 'P04z54XCjVUnIaW5u2ak7ZCdan1BT0NlbBGZ1-rnMYj']; !(async () => { if (!cookiesArr[0]) { $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); From 6719bcb6720dfc552c7fea6b896fff21d956e592 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 7 Dec 2020 11:30:05 +0800 Subject: [PATCH 269/290] =?UTF-8?q?docker=E6=96=B0=E5=A2=9E=E6=96=B0?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E7=9A=84=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/crontab_list.sh | 5 ++++- docker/crontab_list_ts.sh | 6 ++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index a6bb4ba..951f131 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -8,7 +8,8 @@ ##############短期活动############## # 京喜故事(2020.12.12活动过期) 10 * * * * node /scripts/jd_jxstory.js >> /scripts/logs/jd_jxstory.log 2>&1 - +# 金榜年终奖(2020.12.12活动过期) +10 7 * * * node /scripts/jd_split.js >> /scripts/logs/jd_split.log 2>&1 ##############长期活动############## # 签到 @@ -63,3 +64,5 @@ 36 * * * * node /scripts/jd_jdfactory.js >> /scripts/logs/jd_jdfactory.log 2>&1 #十元街 36 8 * * * node /scripts/jd_syj.js >> /scripts/logs/jd_syj.log 2>&1 +#秒杀红包雨 +40 8 * * * node /scripts/jd_ms_redrain.js >> /scripts/logs/jd_ms_redrain.log 2>&1 diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index 0b13ca1..b41b19c 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -8,8 +8,8 @@ ##############短期活动############## # 京喜故事(2020.12.12活动过期) 10 * * * * node /scripts/jd_jxstory.js |ts >> /scripts/logs/jd_jxstory.log 2>&1 - - +# 金榜年终奖(2020.12.12活动过期) +10 7 * * * node /scripts/jd_split.js |ts >> /scripts/logs/jd_split.log 2>&1 ##############长期活动############## # 签到 @@ -64,3 +64,5 @@ 36 * * * * node /scripts/jd_jdfactory.js |ts >> /scripts/logs/jd_jdfactory.log 2>&1 #十元街 36 8 * * * node /scripts/jd_syj.js |ts >> /scripts/logs/jd_syj.log 2>&1 +#秒杀红包雨 +40 8 * * * node /scripts/jd_ms_redrain.js |ts >> /scripts/logs/jd_ms_redrain.log 2>&1 From dea22daabd6fd4b441b2e9df3450d3ff88e8ea3c Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 7 Dec 2020 11:49:03 +0800 Subject: [PATCH 270/290] =?UTF-8?q?=E7=BA=A2=E5=8C=85=E9=9B=A8=E4=BF=AE?= =?UTF-8?q?=E6=94=B9task=E5=9B=BE=E6=A0=87=EF=BC=8C=E6=B3=A8=E9=87=8A?= =?UTF-8?q?=E5=86=99=E6=98=8E=E6=B4=BB=E5=8A=A8=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_ms_redrain.js | 4 +++- jd_split.js | 14 +++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/jd_ms_redrain.js b/jd_ms_redrain.js index 4ba9d49..446e24c 100644 --- a/jd_ms_redrain.js +++ b/jd_ms_redrain.js @@ -1,12 +1,14 @@ /* 秒杀红包雨,可以获取3次,一天运行一次即可 +活动时间:2020-12-1 到 2020-12-31 +活动入口:首页👉秒杀👉往下拉(手指向上滑动)👉可以看到狂撒2亿京东 更新地址:https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_ms_redrain.js 已支持IOS双京东账号, Node.js支持N个京东账号 脚本兼容: QuantumultX, Surge, Loon, 小火箭,JSBox, Node.js ============Quantumultx=============== [task_local] #秒杀红包雨 -10 7 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_ms_redrain.js, tag=秒杀红包雨, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jd_ms_redrain.png, enabled=true +10 7 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_ms_redrain.js, tag=秒杀红包雨, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jd_redPacket.png, enabled=true ================Loon============== [Script] diff --git a/jd_split.js b/jd_split.js index 4ae1007..a225c3c 100644 --- a/jd_split.js +++ b/jd_split.js @@ -1,5 +1,7 @@ /* -金榜年终奖 ,活动2020-12-12日结束 +金榜年终奖 +活动时间:2020-12-12日结束 +活动入口:京东APP首页右边浮动飘窗 已支持IOS双京东账号,Node.js支持N个京东账号 脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js ============Quantumultx=============== @@ -79,14 +81,8 @@ async function jdSplit() { } function showMsg() { return new Promise(resolve => { - if (!jdNotify) { - $.msg($.name, '', `${message}`); - } else { - $.log(`京东账号${$.index}${$.nickName}\n${message}`); - } - if (new Date().getHours() === 23) { - $.msg($.name, '', `京东账号${$.index}${$.nickName}\n${message}`); - } + message += `任务已做完:具体奖品去发活动页面查看\n活动入口:京东APP首页右边浮动飘窗`; + $.msg($.name, '', `京东账号${$.index}${$.nickName}\n${message}`); resolve() }) } From 5998978b4bf8dc223c527597a428111dcc10ef3d Mon Sep 17 00:00:00 2001 From: shylocks Date: Mon, 7 Dec 2020 13:40:37 +0800 Subject: [PATCH 271/290] =?UTF-8?q?=E9=A6=96=E9=A1=B5-=E9=A2=86=E4=BA=AC?= =?UTF-8?q?=E8=B1=86-=E5=AE=8C=E6=88=905=E4=B8=AA=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_bean_home.js | 257 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 257 insertions(+) create mode 100644 jd_bean_home.js diff --git a/jd_bean_home.js b/jd_bean_home.js new file mode 100644 index 0000000..84312da --- /dev/null +++ b/jd_bean_home.js @@ -0,0 +1,257 @@ +/* +领京豆额外奖励 +入口:首页-领京豆 +更新地址:https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_bean_home.js +已支持IOS双京东账号, Node.js支持N个京东账号 +脚本兼容: QuantumultX, Surge, Loon, 小火箭,JSBox, Node.js +============Quantumultx=============== +[task_local] +#领京豆额外奖励 +10 7 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_bean_home.js, tag=领京豆额外奖励, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jd_bean_home.png, enabled=true + +================Loon============== +[Script] +cron "10 7 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_bean_home.js, tag=领京豆额外奖励 + +===============Surge================= +领京豆额外奖励 = type=cron,cronexp="10 7 * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_bean_home.js + +============小火箭========= +领京豆额外奖励 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_bean_home.js, cronexpr="10 7 * * *", timeout=200, enable=true + */ +const $ = new Env('领京豆额外奖励'); + +const notify = $.isNode() ? require('./sendNotify') : ''; +//Node.js用户请在jdCookie.js处填写京东ck; +const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; +let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 +const randomCount = $.isNode() ? 20 : 5; +//IOS等用户直接用NobyDa的jd cookie +let cookiesArr = [], cookie = '', message; +if ($.isNode()) { + Object.keys(jdCookieNode).forEach((item) => { + cookiesArr.push(jdCookieNode[item]) + }) + if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => { + }; +} else { + cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); +} +const JD_API_HOST = 'https://api.m.jd.com/'; +!(async () => { + if (!cookiesArr[0]) { + $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); + return; + } + for (let i = 0; i < cookiesArr.length; i++) { + if (cookiesArr[i]) { + cookie = cookiesArr[i]; + $.UserName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]) + $.index = i + 1; + $.isLogin = true; + $.nickName = ''; + message = ''; + await TotalBean(); + console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`); + if (!$.isLogin) { + $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"}); + + if ($.isNode()) { + await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); + } else { + $.setdata('', `CookieJD${i ? i + 1 : ""}`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 + } + continue + } + await jdBeanHome(); + } + } +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) + +async function jdBeanHome() { + await getTaskList() + await showMsg(); +} + +function showMsg() { + return new Promise(resolve => { + $.msg($.name, '', `【京东账号${$.index}】${$.nickName}\n${message}`); + resolve() + }) +} + +function getTaskList() { + return new Promise(resolve => { + const body = {"rnVersion": "4.7", "rnClient": "2", "source": "AppHome"}; + $.post(taskUrl('findBeanHome', body), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + let beanTask = data.data.floorList.filter(vo => vo.floorName === "种豆得豆定制化场景")[0] + if (!beanTask.viewed) { + await receiveTask() + await $.wait(3000) + } + + let tasks = data.data.floorList.filter(vo => vo.floorName === "赚京豆")[0]['stageList'] + for (let i = 0; i < tasks.length; ++i) { + const vo = tasks[i] + if (vo.viewed) continue + await receiveTask(vo.stageId, `4_${vo.stageId}`) + await $.wait(3000) + } + await award() + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +function receiveTask(itemId = "zddd", type = "3") { + return new Promise(resolve => { + const body = {"awardFlag": false, "itemId": itemId, "source": "home", "type": type}; + $.post(taskUrl('beanHomeTask', body), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.data) { + console.log(`完成任务成功,进度${data.data.taskProgress}/${data.data.taskThreshold}`) + } + else{ + console.log(`完成任务失败,${data.errorMessage}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + + +function award() { + return new Promise(resolve => { + const body = {"awardFlag": true, "source": "home"}; + $.post(taskUrl('beanHomeTask', body), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.data) { + console.log(`领奖成功,获得 ${data.data.beanNum} 个京豆`) + message += `领奖成功,获得 ${data.data.beanNum} 个京豆\n` + } else { + console.log(`领奖失败,${data.errorMessage}`) + message += `领奖失败,${data.errorMessage}\n` + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +function taskUrl(function_id, body) { + body["version"] = "9.0.0.1"; + body["monitor_source"] = "plant_app_plant_index"; + body["monitor_refer"] = ""; + return { + url: JD_API_HOST, + body: `functionId=${function_id}&body=${escape(JSON.stringify(body))}&appid=ld&client=apple&area=5_274_49707_49973&build=167283&clientVersion=9.1.0`, + headers: { + 'Cookie': cookie, + 'Host': 'api.m.jd.com', + 'Accept': '*/*', + 'Connection': 'keep-alive', + 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), + 'Accept-Language': 'zh-Hans-CN;q=1,en-CN;q=0.9', + 'Accept-Encoding': 'gzip, deflate, br', + 'Content-Type': "application/x-www-form-urlencoded" + } + } +} + +function TotalBean() { + return new Promise(async resolve => { + const options = { + "url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`, + "headers": { + "Accept": "application/json,text/plain, */*", + "Content-Type": "application/x-www-form-urlencoded", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + data = JSON.parse(data); + if (data['retcode'] === 13) { + $.isLogin = false; //cookie过期 + return + } + $.nickName = data['base'].nickname; + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +function safeGet(data) { + try { + if (typeof JSON.parse(data) == "object") { + return true; + } + } catch (e) { + console.log(e); + console.log(`京东服务器访问数据为空,请检查自身设备网络情况`); + return false; + } +} + +// 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,o)=>{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.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 o=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");o=o?1*o:20,o=e&&e.timeout?e.timeout:o;const[r,h]=i.split("@"),a={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:o},headers:{"X-Key":r,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),o=JSON.stringify(this.data);s?this.fs.writeFileSync(t,o):i?this.fs.writeFileSync(e,o):this.fs.writeFileSync(t,o)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let o=t;for(const t of i)if(o=Object(o)[t],void 0===o)return s;return o}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),o=s?this.getval(s):"";if(o)try{const t=JSON.parse(o);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,o]=/^@(.*?)\.(.*?)$/.exec(e),r=this.getval(i),h=i?"null"===r?null:r||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,o,t),s=this.setval(JSON.stringify(e),i)}catch(e){const r={};this.lodash_set(r,o,t),s=this.setval(JSON.stringify(r),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()?$httpClient.get(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)}):this.isQuanX()?$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:o,body:r}=t;e(null,{status:s,statusCode:i,headers:o,body:r},r)},t=>e(t)):this.isNode()&&(this.initGotEnv(t),this.got(t).on("redirect",(t,e)=>{try{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:o,body:r}=t;e(null,{status:s,statusCode:i,headers:o,body:r},r)},t=>e(t)))}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())$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",$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:o,body:r}=t;e(null,{status:s,statusCode:i,headers:o,body:r},r)},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:o,body:r}=t;e(null,{status:s,statusCode:i,headers:o,body:r},r)},t=>e(t))}}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="",o){const r=t=>{if(!t||!this.isLoon()&&this.isSurge())return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}}};this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,r(o)):this.isQuanX()&&$notify(e,s,i,r(o)));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 319428cb5e67e42d5a2343f81b0db1bff32a9a3b Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Mon, 7 Dec 2020 14:02:01 +0800 Subject: [PATCH 272/290] =?UTF-8?q?=E4=BA=91=E5=87=BD=E6=95=B0=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E9=A2=86=E4=BA=AC=E8=B1=86=E9=A2=9D=E5=A4=96=E5=A5=96?= =?UTF-8?q?=E5=8A=B1Cron?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 云函数新增领京豆额外奖励Cron --- serverless.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/serverless.yml b/serverless.yml index 64e177e..a4d14fd 100644 --- a/serverless.yml +++ b/serverless.yml @@ -64,12 +64,12 @@ inputs: cronExpression: "0 15 * * * * *" enable: true argument: jd_superMarket - - timer: # 京豆变动通知 # 京东排行榜 + - timer: # 京豆变动通知 # 京东排行榜 # 领京豆额外奖励 parameters: - name: jd_bean_change_jd_rankingList + name: jd_bean_change_jd_rankingList_jd_bean_home cronExpression: "0 0 10 * * * *" enable: true - argument: jd_bean_change&jd_rankingList + argument: jd_bean_change&jd_rankingList&jd_bean_home - timer: # 金融养猪#十元街 parameters: name: jd_pigPet_jd_syj From 01e561ef4d16b990dd58598da0f3c0a7db94e989 Mon Sep 17 00:00:00 2001 From: shylocks Date: Mon, 7 Dec 2020 14:31:53 +0800 Subject: [PATCH 273/290] =?UTF-8?q?=E5=81=A5=E5=BA=B7=E6=8A=BD=E5=A5=96?= =?UTF-8?q?=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_health.js | 385 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 385 insertions(+) create mode 100644 jd_health.js diff --git a/jd_health.js b/jd_health.js new file mode 100644 index 0000000..978a6f6 --- /dev/null +++ b/jd_health.js @@ -0,0 +1,385 @@ +/* +健康抽奖机 +活动地址:https://h5.m.jd.com/babelDiy/Zeus/3HBUP66Gnx92mRt2bXbT9VamYWSx/index.html +已支持IOS双京东账号,Node.js支持N个京东账号 +脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js +============Quantumultx=============== +[task_local] +#健康抽奖机 +10 0 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_health.js, tag=健康抽奖机, enabled=true + +================Loon============== +[Script] +cron "10 0 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_health.js,tag=健康抽奖机 + +===============Surge================= +健康抽奖机 = type=cron,cronexp="10 0 * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_health.js + +============小火箭========= +健康抽奖机 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_health.js, cronexpr="10 0 * * *", timeout=200, enable=true + */ +const $ = new Env('健康抽奖机'); + +const notify = $.isNode() ? require('./sendNotify') : ''; +//Node.js用户请在jdCookie.js处填写京东ck; +const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; +let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 +const randomCount = $.isNode() ? 20 : 5; +//IOS等用户直接用NobyDa的jd cookie +let cookiesArr = [], cookie = '', message; +if ($.isNode()) { + Object.keys(jdCookieNode).forEach((item) => { + cookiesArr.push(jdCookieNode[item]) + }) + if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {}; +} else { + cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); +} +const JD_API_HOST = 'https://api.m.jd.com/client.action'; +const inviteCodes = [`P04z54XCjVUnoaW5nJcXCCyoR8C6i9QR16e`, 'P04z54XCjVUnoaW5nJcXCCyoR8C6i9QR16e']; +!(async () => { + await requireConfig(); + if (!cookiesArr[0]) { + $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); + return; + } + for (let i = 0; i < cookiesArr.length; i++) { + if (cookiesArr[i]) { + cookie = cookiesArr[i]; + $.UserName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]) + $.index = i + 1; + $.isLogin = true; + $.nickName = ''; + message = ''; + await TotalBean(); + console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`); + if (!$.isLogin) { + $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"}); + + if ($.isNode()) { + await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); + } else { + $.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 + } + continue + } + await shareCodesFormat(); + await jdHealth() + } + } +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) +async function jdHealth() { + await helpFriends(); + await jdhealth_getTaskDetail(); + await doTask(); + await jdhealth_getTaskDetail(0); + if($.userInfo.scorePerLottery<=$.userInfo.userScore){ + console.log(`当前用户金币: ${$.userInfo.userScore},抽奖需要${$.userInfo.scorePerLottery},开始抽奖`) + message += `当前用户金币: ${$.userInfo.userScore},抽奖需要${$.userInfo.scorePerLottery},开始抽奖\n` + for(let i=0;i { + if (!jdNotify) { + $.msg($.name, '', `${message}`); + } else { + $.log(`京东账号${$.index}${$.nickName}\n${message}`); + } + if (new Date().getHours() === 23) { + $.msg($.name, '', `京东账号${$.index}${$.nickName}\n${message}`); + } + resolve() + }) +} +async function helpFriends() { + for (let code of $.newShareCodes) { + if (!code) continue + const helpRes = await jdhealth_collectScore(code,6,null); + if (helpRes.code === 0 && helpRes.data.bizCode === -7) { + console.log(`助力机会已耗尽,跳出`); + break + } + } +} +async function doTask() { + for (let item of $.taskVos) { + if (item.taskType === 9||item.taskType === 26) { + //逛会场任务 + if (item.status === 1) { + console.log(`准备做此任务:${item.taskName}`) + for (let task of item.shoppingActivityVos) { + if (task.status === 1) { + await jdhealth_collectScore(task.taskToken,item.taskId,task.itemId,1); + await $.wait(15000) + await jdhealth_collectScore(task.taskToken,item.taskId,task.itemId,0); + } + } + } else if(item.status!==4){ + console.log(`${item.taskName}已做完`) + } + } + + if (item.taskType === 21) { + // 会员任务 + if (item.status === 1) { + console.log(`准备做此任务:${item.taskName}`); + for (let task of item.brandMemberVos) { + if (task.status === 1) { + await jdhealth_collectScore(task.taskToken,item.taskId,task.itemId,1); + await jdhealth_collectScore(task.taskToken,item.taskId,task.itemId,0); + } + } + } else if(item.status!==4){ + console.log(`${item.taskName}已做完`) + } + } + } +} + +//领取做完任务的奖励 +function jdhealth_collectScore(taskToken, taskId, itemId, actionType=0) { + return new Promise(resolve => { + let body = { "appId":"1EFRTwg","taskToken":taskToken,"taskId":taskId,"itemId":itemId,"actionType":actionType } + $.post(taskPostUrl("harmony_collectScore", body), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if(data.data.bizCode === 1){ + console.log(`任务领取成功`); + message += `任务领取成功\n` + } + else if (data.data.bizCode === 0) { + if(data.data.result.taskType===6){ + console.log(`助力好友:${data.data.result.itemId}成功!`) + message += `助力好友:${data.data.result.itemId}成功!\n` + }else { + console.log(`任务完成成功`); + message += `任务完成成功!\n` + } + + } else { + console.log(`${data.data.bizMsg}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} + +// 抽奖 +function jdhealth_getLottery() { + return new Promise(resolve => { + let body = { "appId":"1EFRTwg"} + $.post(taskPostUrl("interact_template_getLotteryResult", body), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.data.bizCode === 0) { + console.log(`抽奖成功,获得:${JSON.stringify(data.data.result.userAwardsCacheDto)}`); + message+= `抽奖成功,获得:${JSON.stringify(data.data.result.userAwardsCacheDto)}\n` + } else { + console.log(JSON.stringify(data)) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + }) +} + +function jdhealth_getTaskDetail(get=1) { + return new Promise(resolve => { + $.post(taskPostUrl("healthyDay_getHomeData", {"appId":"1EFRTwg","taskToken":""}, ), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.data.bizCode === 0) { + $.taskVos = data.data.result.taskVos;//任务列表 + $.userInfo = data.data.result.userInfo; + if(get) + $.taskVos.map(item => { + if (item.taskType === 14) { + console.log(`\n您的${$.name}好友助力邀请码:${item.assistTaskDetailVo.taskToken}\n`) + message += `\n您的${$.name}好友助力邀请码:${item.assistTaskDetailVo.taskToken}\n` + } + }) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +function readShareCode() { + console.log(`开始`) + return new Promise(async resolve => { + $.get({url: `http://api.turinglabs.net/api/v1/jd/jdhealth/read/${randomCount}/`}, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + console.log(`随机取${randomCount}个码放到您固定的互助码后面`) + data = JSON.parse(data); + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + // await $.wait(2000); + // resolve() + }) +} +//格式化助力码 +function shareCodesFormat() { + return new Promise(async resolve => { + // console.log(`第${$.index}个京东账号的助力码:::${$.shareCodesArr[$.index - 1]}`) + $.newShareCodes = []; + if ($.shareCodesArr[$.index - 1]) { + $.newShareCodes = $.shareCodesArr[$.index - 1].split('@'); + } else { + console.log(`由于您第${$.index}个京东账号未提供shareCode,将采纳本脚本自带的助力码\n`) + const tempIndex = $.index > inviteCodes.length ? (inviteCodes.length - 1) : ($.index - 1); + $.newShareCodes = inviteCodes[tempIndex].split('@'); + } + const readShareCodeRes = null //await readShareCode(); + if (readShareCodeRes && readShareCodeRes.code === 200) { + $.newShareCodes = [...new Set([...$.newShareCodes, ...(readShareCodeRes.data || [])])]; + } + console.log(`第${$.index}个京东账号将要助力的好友${JSON.stringify($.newShareCodes)}`) + resolve(); + }) +} +function requireConfig() { + return new Promise(resolve => { + console.log(`开始获取${$.name}配置文件\n`); + //Node.js用户请在jdCookie.js处填写京东ck; + const shareCodes = [] //$.isNode() ? require('./jdSplitShareCodes.js') : ''; + console.log(`共${cookiesArr.length}个京东账号\n`); + $.shareCodesArr = []; + if ($.isNode()) { + Object.keys(shareCodes).forEach((item) => { + if (shareCodes[item]) { + $.shareCodesArr.push(shareCodes[item]) + } + }) + } + console.log(`您提供了${$.shareCodesArr.length}个账号的${$.name}助力码\n`); + resolve() + }) +} + +function taskPostUrl(function_id, body = {}, function_id2) { + let url = `${JD_API_HOST}`; + if (function_id2) { + url += `?functionId=${function_id2}`; + } + return { + url, + body: `functionId=${function_id}&body=${escape(JSON.stringify(body))}&client=wh5&clientVersion=9.1.0`, + headers: { + "Cookie": cookie, + "origin": "https://h5.m.jd.com", + "referer": "https://h5.m.jd.com/", + 'Content-Type': 'application/x-www-form-urlencoded', + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), + } + } +} +function TotalBean() { + return new Promise(async resolve => { + const options = { + "url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`, + "headers": { + "Accept": "application/json,text/plain, */*", + "Content-Type": "application/x-www-form-urlencoded", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + data = JSON.parse(data); + if (data['retcode'] === 13) { + $.isLogin = false; //cookie过期 + return + } + $.nickName = data['base'].nickname; + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function safeGet(data) { + try { + if (typeof JSON.parse(data) == "object") { + return true; + } + } catch (e) { + console.log(e); + console.log(`京东服务器访问数据为空,请检查自身设备网络情况`); + return false; + } +} +// 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 78d8fe3ef7f6386fe9bf75d32ff8df4f93cf10a1 Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Mon, 7 Dec 2020 15:38:03 +0800 Subject: [PATCH 274/290] =?UTF-8?q?=E4=BA=91=E5=87=BD=E6=95=B0=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E6=96=B0=E5=A2=9E=E7=A7=92=E6=9D=80=E7=BA=A2=E5=8C=85?= =?UTF-8?q?=E9=9B=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 云函数同步新增秒杀红包雨 --- serverless.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/serverless.yml b/serverless.yml index a4d14fd..85c7f75 100644 --- a/serverless.yml +++ b/serverless.yml @@ -46,12 +46,12 @@ inputs: cronExpression: "0 0 0-16/8 * * * *" enable: true argument: jd_joy_reward&jd_joy_steal&jd_necklace - - timer: # 京东全民开红包 # 进店领豆 # 取关京东店铺商品# 京东抽奖机# 东东小窝 + - timer: # 京东全民开红包 # 进店领豆 # 取关京东店铺商品# 京东抽奖机# 东东小窝# 秒杀红包雨 parameters: - name: redPacket_shop_unsubscribe_lotteryMachine_small_home + name: redPacket_shop_unsubscribe_lotteryMachine_small_home_ms_redrain cronExpression: "0 10 0 * * * *" enable: true - argument: jd_redPacket&jd_shop&jd_unsubscribe&jd_lotteryMachine&jd_small_home + argument: jd_redPacket&jd_shop&jd_unsubscribe&jd_lotteryMachine&jd_small_home&jd_ms_redrain - timer: # 京东天天加速# 天天提鹅 parameters: name: jd_speed_jd_daily_egg From d9b159e5ad50d080baa83d04e0b1c3c86a1da947 Mon Sep 17 00:00:00 2001 From: shylocks Date: Mon, 7 Dec 2020 15:48:56 +0800 Subject: [PATCH 275/290] =?UTF-8?q?=E4=BA=AC=E4=B8=9C=E6=B1=BD=E8=BD=A6?= =?UTF-8?q?=EF=BC=8C=E7=AD=BE=E5=88=B0=E6=BB=A1500=E8=B5=9B=E7=82=B9?= =?UTF-8?q?=E5=8F=AF=E5=85=91=E6=8D=A2500=E4=BA=AC=E8=B1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_car.js | 601 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 601 insertions(+) create mode 100644 jd_car.js diff --git a/jd_car.js b/jd_car.js new file mode 100644 index 0000000..bc79236 --- /dev/null +++ b/jd_car.js @@ -0,0 +1,601 @@ +/* +京东汽车,签到满500赛点可兑换500京豆 +长期活动 +活动入口:首页👉京东汽车👉屏幕右中部,车主福利 +更新地址:https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_car.js +已支持IOS双京东账号, Node.js支持N个京东账号 +脚本兼容: QuantumultX, Surge, Loon, 小火箭,JSBox, Node.js +============Quantumultx=============== +[task_local] +#京东汽车 +10 7 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_car.js, tag=京东汽车, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jd_redPacket.png, enabled=true + +================Loon============== +[Script] +cron "10 7 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_car.js, tag=京东汽车 + +===============Surge================= +京东汽车 = type=cron,cronexp="10 7 * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_car.js + +============小火箭========= +京东汽车 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_car.js, cronexpr="10 7 * * *", timeout=200, enable=true + */ +const $ = new Env('京东汽车'); + +const notify = $.isNode() ? require('./sendNotify') : ''; +//Node.js用户请在jdCookie.js处填写京东ck; +const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; +let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 +const randomCount = $.isNode() ? 20 : 5; +//IOS等用户直接用NobyDa的jd cookie +let cookiesArr = [], cookie = '', message; +if ($.isNode()) { + Object.keys(jdCookieNode).forEach((item) => { + cookiesArr.push(jdCookieNode[item]) + }) + if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => { + }; +} else { + cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); +} +const JD_API_HOST = 'https://car-member.jd.com/api/'; +!(async () => { + if (!cookiesArr[0]) { + $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); + return; + } + for (let i = 0; i < cookiesArr.length; i++) { + if (cookiesArr[i]) { + cookie = cookiesArr[i]; + $.UserName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]) + $.index = i + 1; + $.isLogin = true; + $.nickName = ''; + message = ''; + await TotalBean(); + console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`); + if (!$.isLogin) { + $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"}); + + if ($.isNode()) { + await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); + } else { + $.setdata('', `CookieJD${i ? i + 1 : ""}`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 + } + continue + } + await jdCar(); + await showMsg(); + } + } +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) + +async function jdCar() { + await sign() + await $.wait(1000) + await mission() + await $.wait(1000) + await getPoint() +} + +function showMsg() { + return new Promise(resolve => { + $.msg($.name, '', `【京东账号${$.index}】${$.nickName}\n${message}`); + resolve() + }) +} + +function sign() { + return new Promise(resolve => { + $.post(taskUrl('v1/user/sign'), (err, resp, data) => { + try { + if (err) { + data = JSON.parse(resp.body) + console.log(`${data.error.msg}`) + message += `签到失败,${data.error.msg}\n` + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.status) { + console.log(`签到成功,获得${data.data.point},已签到${data.data.signDays}天`) + message += `签到成功,获得${data.data.point},已签到${data.data.signDays}天\n` + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +function mission() { + return new Promise(resolve => { + $.get(taskUrl('v1/user/mission'), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + let missions = data.data.missionList + for (let i = 0; i < missions.length; ++i) { + const mission = missions[i] + if (mission['missionStatus'] === 0 && (mission['missionType'] === 1 || mission['missionType'] === 5)) { + console.log(`去做任务:${mission['missionName']}`) + await doMission(mission['missionId']) + await $.wait(1000) // 等待防黑 + } + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +function doMission(missionId) { + return new Promise(resolve => { + $.post(taskPostUrl('v1/game/mission', {"missionId": missionId}), async (err, resp, data) => { + try { + if (err) { + data = JSON.parse(resp.body) + console.log(`${data.error.msg}`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.status) { + console.log("任务领取成功") + await receiveMission(missionId) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +function receiveMission(missionId) { + return new Promise(resolve => { + $.post(taskPostUrl('v1/user/mission/receive', {"missionId": missionId}), async (err, resp, data) => { + try { + if (err) { + data = JSON.parse(resp.body) + console.log(`${data.error.msg}`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.status) { + console.log("任务完成成功") + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +function getPoint() { + return new Promise(resolve => { + $.get(taskUrl('v1/user/point'), async (err, resp, data) => { + try { + if (err) { + data = JSON.parse(resp.body) + console.log(`${data.error.msg}`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.status) { + if (data.data.remainPoint >= data.data.oncePoint) { + console.log(`当前赛点:${data.data.remainPoint}/${data.data.oncePoint},可以兑换京豆,请打开APP兑换`) + message += `当前赛点:${data.data.remainPoint}/${data.data.oncePoint},可以兑换京豆,请打开APP兑换\n` + }else{ + console.log(`当前赛点:${data.data.remainPoint}/${data.data.oncePoint}无法兑换京豆`) + message += `当前赛点:${data.data.remainPoint}/${data.data.oncePoint},无法兑换京豆\n` + } + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +function taskUrl(function_id, body = {}) { + return { + url: `${JD_API_HOST}${function_id}?timestamp=${new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 + 8 * 60 * 60 * 1000}`, + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Content-Type": "application/x-www-form-urlencoded", + "Host": "car-member.jd.com", + "Referer": "https://h5.m.jd.com/babelDiy/Zeus/44bjzCpzH9GpspWeBzYSqBA7jEtP/index.html", + "Cookie": cookie, + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), + } + } +} + +function taskPostUrl(function_id, body = {}) { + return { + url: `${JD_API_HOST}${function_id}?timestamp=${new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 + 8 * 60 * 60 * 1000}`, + body: JSON.stringify(body), + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Content-Type": "application/json;charset=UTF-8", + "Host": "car-member.jd.com", + "activityid": "39443aee3ff74fcb806a6f755240d127", + "Referer": "https://h5.m.jd.com/babelDiy/Zeus/44bjzCpzH9GpspWeBzYSqBA7jEtP/index.html", + "Cookie": cookie, + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), + } + } +} + +function TotalBean() { + return new Promise(async resolve => { + const options = { + "url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`, + "headers": { + "Accept": "application/json,text/plain, */*", + "Content-Type": "application/x-www-form-urlencoded", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + data = JSON.parse(data); + if (data['retcode'] === 13) { + $.isLogin = false; //cookie过期 + return + } + $.nickName = data['base'].nickname; + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +function safeGet(data) { + try { + if (typeof JSON.parse(data) == "object") { + return true; + } + } catch (e) { + console.log(e); + console.log(`京东服务器访问数据为空,请检查自身设备网络情况`); + return false; + } +} + +// 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 4b8ad8a94e679f7a6fa7c8bb4f43cb47318c2a15 Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Mon, 7 Dec 2020 16:32:21 +0800 Subject: [PATCH 276/290] =?UTF-8?q?=E4=BA=91=E5=87=BD=E6=95=B0=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E6=96=B0=E5=A2=9E=E5=81=A5=E5=BA=B7=E6=8A=BD=E5=A5=96?= =?UTF-8?q?=E6=9C=BA&=E4=BA=AC=E4=B8=9C=E6=B1=BD=E8=BD=A6Cron?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 云函数同步新增健康抽奖机&京东汽车Cron --- serverless.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/serverless.yml b/serverless.yml index 85c7f75..40a6cbc 100644 --- a/serverless.yml +++ b/serverless.yml @@ -46,12 +46,12 @@ inputs: cronExpression: "0 0 0-16/8 * * * *" enable: true argument: jd_joy_reward&jd_joy_steal&jd_necklace - - timer: # 京东全民开红包 # 进店领豆 # 取关京东店铺商品# 京东抽奖机# 东东小窝# 秒杀红包雨 + - timer: # 京东全民开红包 # 进店领豆 # 取关京东店铺商品# 京东抽奖机# 东东小窝# 秒杀红包雨# 健康抽奖机 parameters: - name: redPacket_shop_unsubscribe_lotteryMachine_small_home_ms_redrain + name: redPacket_shop_unsubscribe_lotteryMachine_small_home_ms_redrain_health cronExpression: "0 10 0 * * * *" enable: true - argument: jd_redPacket&jd_shop&jd_unsubscribe&jd_lotteryMachine&jd_small_home&jd_ms_redrain + argument: jd_redPacket&jd_shop&jd_unsubscribe&jd_lotteryMachine&jd_small_home&jd_ms_redrain&jd_health - timer: # 京东天天加速# 天天提鹅 parameters: name: jd_speed_jd_daily_egg @@ -64,12 +64,12 @@ inputs: cronExpression: "0 15 * * * * *" enable: true argument: jd_superMarket - - timer: # 京豆变动通知 # 京东排行榜 # 领京豆额外奖励 + - timer: # 京豆变动通知 # 京东排行榜 # 领京豆额外奖励 # 京东汽车 parameters: - name: jd_bean_change_jd_rankingList_jd_bean_home + name: bean_change_rankingList_bean_home_car cronExpression: "0 0 10 * * * *" enable: true - argument: jd_bean_change&jd_rankingList&jd_bean_home + argument: jd_bean_change&jd_rankingList&jd_bean_home&jd_car - timer: # 金融养猪#十元街 parameters: name: jd_pigPet_jd_syj From abccc8384c23fdb3c15089deb6bbd1a07af1d7b0 Mon Sep 17 00:00:00 2001 From: shylocks Date: Mon, 7 Dec 2020 16:49:41 +0800 Subject: [PATCH 277/290] =?UTF-8?q?=E4=BA=AC=E4=B8=9C=E5=BF=AB=E9=80=92?= =?UTF-8?q?=E7=AD=BE=E5=88=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 签到领豆,14天内满4次和7次享额外奖励,每天运行一次即可 --- jd_kd.js | 197 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 jd_kd.js diff --git a/jd_kd.js b/jd_kd.js new file mode 100644 index 0000000..50c410a --- /dev/null +++ b/jd_kd.js @@ -0,0 +1,197 @@ +/* +京东快递签到 +活动地址:https://jingcai-h5.jd.com/#/ +签到领豆,14天内满4次和7次享额外奖励,每天运行一次即可 +更新地址:https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_kd.js + +已支持IOS双京东账号, Node.js支持N个京东账号 +脚本兼容: QuantumultX, Surge, Loon, 小火箭,JSBox, Node.js +============Quantumultx=============== +[task_local] +#京东快递签到 +10 0 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_kd.js, tag=京东快递签到, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jd_kd.png, enabled=true + +================Loon============== +[Script] +cron "10 0 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_kd.js, tag=京东快递签到 + +===============Surge================= +京东快递签到 = type=cron,cronexp="10 0 * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_kd.js + +============小火箭========= +京东快递签到 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_kd.js, cronexpr="10 0 * * *", timeout=200, enable=true + */ +const $ = new Env('京东快递签到'); + +const notify = $.isNode() ? require('./sendNotify') : ''; +//Node.js用户请在jdCookie.js处填写京东ck; +const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; +let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 +const randomCount = $.isNode() ? 20 : 5; +//IOS等用户直接用NobyDa的jd cookie +let cookiesArr = [], cookie = '', message; +if ($.isNode()) { + Object.keys(jdCookieNode).forEach((item) => { + cookiesArr.push(jdCookieNode[item]) + }) + if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {}; +} else { + cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); +} +const JD_API_HOST = 'https://api.m.jd.com/api'; +!(async () => { + if (!cookiesArr[0]) { + $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); + return; + } + for (let i = 0; i < cookiesArr.length; i++) { + if (cookiesArr[i]) { + cookie = cookiesArr[i]; + $.UserName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]) + $.index = i + 1; + $.isLogin = true; + $.nickName = ''; + message = ''; + await TotalBean(); + console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`); + if (!$.isLogin) { + $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"}); + + if ($.isNode()) { + await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); + } else { + $.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 + } + continue + } + await userSignIn(); + await showMsg(); + } + } +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) + +function showMsg() { + return new Promise(resolve => { + $.msg($.name, '', `【京东账号${$.index}】${$.nickName}\n${message}`); + resolve() + }) +} +function userSignIn() { + return new Promise(resolve => { + $.post(taskUrl(), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(resp) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.code === 1) { + console.log(`今日签到成功,获得${data.content[0].title}`) + message += `今日签到成功,获得${data.content[0].title} 🐶\n`; + + } else if (data.code === -1) { + console.log(`今日已签到`) + message += `【签到】失败,今日已签到`; + } else { + console.log(`异常:${JSON.stringify(data)}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function taskUrl() { + return { + url: `https://lop-proxy.jd.com/jiFenApi/signInAndGetReward`, + body: '[{"userNo":"$cooMrdGatewayUid$"}]', + headers: { + 'Host': 'lop-proxy.jd.com', + 'lop-dn': 'jingcai.jd.com', + 'biz-type': 'service-monitor', + 'app-key': 'jexpress', + 'access': 'H5', + 'content-type': 'application/json;charset=utf-8', + 'clientinfo': '{"appName":"jingcai","client":"m"}', + 'accept': 'application/json, text/plain, */*', + 'jexpress-report-time': '1607330170578', + 'x-requested-with': 'XMLHttpRequest', + 'source-client': '2', + 'appparams': '{"appid":158,"ticket_type":"m"}', + 'version': '1.0.0', + 'origin': 'https://jingcai-h5.jd.com', + 'sec-fetch-site': 'same-site', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'referer': 'https://jingcai-h5.jd.com/', + 'accept-language': 'zh-CN,zh;q=0.9', + "Cookie": cookie, + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), + } + } +} +function TotalBean() { + return new Promise(async resolve => { + const options = { + "url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`, + "headers": { + "Accept": "application/json,text/plain, */*", + "Content-Type": "application/x-www-form-urlencoded", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + data = JSON.parse(data); + if (data['retcode'] === 13) { + $.isLogin = false; //cookie过期 + return + } + $.nickName = data['base'].nickname; + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function safeGet(data) { + try { + if (typeof JSON.parse(data) == "object") { + return true; + } + } catch (e) { + console.log(e); + console.log(`京东服务器访问数据为空,请检查自身设备网络情况`); + return false; + } +} +// 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 30d82c312594bd151009629bb00783863b3c9854 Mon Sep 17 00:00:00 2001 From: shylocks Date: Mon, 7 Dec 2020 17:40:39 +0800 Subject: [PATCH 278/290] =?UTF-8?q?=E4=BA=AC=E4=B8=9C=E4=BB=A3=E5=B1=9E?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=20=E7=B1=BB=E4=BC=BC=E5=8D=81=E5=85=83?= =?UTF-8?q?=E8=A1=97=EF=BC=8C=E9=99=90=E6=A0=A1=E5=9B=AD=E7=94=A8=E6=88=B7?= =?UTF-8?q?=20=E4=B8=80=E5=91=A8=E7=AD=BE=E5=88=B0=E4=B8=8B=E6=9D=A5?= =?UTF-8?q?=E5=8F=AF=E8=8E=B7=E5=BE=9730=E4=BA=AC=E8=B1=86=EF=BC=8C?= =?UTF-8?q?=E4=B8=80=E5=A4=A9=E4=BB=BB=E6=84=8F=E6=97=B6=E5=88=BB=E8=BF=90?= =?UTF-8?q?=E8=A1=8C=E4=B8=80=E6=AC=A1=E5=8D=B3=E5=8F=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_ds.js | 198 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 jd_ds.js diff --git a/jd_ds.js b/jd_ds.js new file mode 100644 index 0000000..40e6bed --- /dev/null +++ b/jd_ds.js @@ -0,0 +1,198 @@ +/* + * @Author: lxk0301 https://github.com/lxk0301 + * @Date: 2020-11-27 09:19:21 + * @Last Modified by: shylocks https://github.com/shylocks + * @Last Modified time: 2020-12-7 17:39:02 + */ +/* +京东代属脚本,类似十元街,限校园用户 +一周签到下来可获得30京豆,一天任意时刻运行一次即可 + +更新地址:https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_ds.js +参考github@jidesheng6修改而来 +已支持IOS双京东账号, Node.js支持N个京东账号 +脚本兼容: QuantumultX, Surge, Loon, 小火箭,JSBox, Node.js +============Quantumultx=============== +[task_local] +#京东代属 +10 7 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_ds.js, tag=京东代属, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jd_ds.png, enabled=true + +================Loon============== +[Script] +cron "10 7 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_ds.js, tag=京东代属 + +===============Surge================= +京东代属 = type=cron,cronexp="10 7 * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_ds.js + +============小火箭========= +京东代属 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_ds.js, cronexpr="10 7 * * *", timeout=200, enable=true + */ +const $ = new Env('京东代属'); + +const notify = $.isNode() ? require('./sendNotify') : ''; +//Node.js用户请在jdCookie.js处填写京东ck; +const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; +let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 +const randomCount = $.isNode() ? 20 : 5; +//IOS等用户直接用NobyDa的jd cookie +let cookiesArr = [], cookie = '', message; +if ($.isNode()) { + Object.keys(jdCookieNode).forEach((item) => { + cookiesArr.push(jdCookieNode[item]) + }) + if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {}; +} else { + cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); +} +const JD_API_HOST = 'https://api.m.jd.com/'; +!(async () => { + if (!cookiesArr[0]) { + $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); + return; + } + for (let i = 0; i < cookiesArr.length; i++) { + if (cookiesArr[i]) { + cookie = cookiesArr[i]; + $.UserName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]) + $.index = i + 1; + $.isLogin = true; + $.nickName = ''; + message = ''; + await TotalBean(); + console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`); + if (!$.isLogin) { + $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"}); + + if ($.isNode()) { + await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); + } else { + $.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 + } + continue + } + await userSignIn(); + await showMsg(); + } + } +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) + +function showMsg() { + return new Promise(resolve => { + $.msg($.name, '', `【京东账号${$.index}】${$.nickName}\n${message}`); + resolve() + }) +} +function userSignIn() { + return new Promise(resolve => { + const body = {"activityId":"28acd0b5255d4aed866c60508ebf10f8","inviterId":"gCBrvPfINCZc+dotfvHPlA==","channel":"MiniProgram"}; + $.get(taskUrl('userSignIn', body), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.code === 0) { + console.log(`今日签到成功`) + if (data.data) { + let { alreadySignDays, beanTotalNum, todayPrize, eachDayPrize } = data.data; + message += `【第${alreadySignDays}日签到】成功,获得${todayPrize.beanAmount}京豆 🐶\n`; + if (alreadySignDays === 7) alreadySignDays = 0; + message += `【明日签到】可获得${eachDayPrize[alreadySignDays].beanAmount}京豆 🐶\n`; + message += `【累计获得】${beanTotalNum}京豆 🐶\n`; + } + } else if (data.code === 81) { + console.log(`今日已签到`) + message += `【签到】失败,今日已签到`; + } else if (data.code === 82) { + console.log(`非校园用户无法签到`) + message += `【签到】失败,非校园用户无法签到`; + } else { + console.log(`异常:${JSON.stringify(data)}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function taskUrl(function_id, body = {}) { + return { + url: `${JD_API_HOST}?functionId=${function_id}&body=${escape(JSON.stringify(body))}&appid=campus-mall&client=ds_m&fromType=wxapp×tamp=${new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000}`, + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Content-Type": "application/x-www-form-urlencoded", + "Host": "api.m.jd.com", + "Referer": "https://servicewechat.com/wxcb6c7f7be08467e3/104/page-frame.html", + "Cookie": cookie, + "User-Agent": 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.18(0x17001231) NetType/WIFI Language/zh_CN'//$.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), + } + } +} +function TotalBean() { + return new Promise(async resolve => { + const options = { + "url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`, + "headers": { + "Accept": "application/json,text/plain, */*", + "Content-Type": "application/x-www-form-urlencoded", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + data = JSON.parse(data); + if (data['retcode'] === 13) { + $.isLogin = false; //cookie过期 + return + } + $.nickName = data['base'].nickname; + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function safeGet(data) { + try { + if (typeof JSON.parse(data) == "object") { + return true; + } + } catch (e) { + console.log(e); + console.log(`京东服务器访问数据为空,请检查自身设备网络情况`); + return false; + } +} +// 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 bec9e6cd34d96be5b2b730f2d9fbd4883549c537 Mon Sep 17 00:00:00 2001 From: layne Date: Mon, 7 Dec 2020 17:43:46 +0800 Subject: [PATCH 279/290] jd_car code compress --- jd_car.js | 284 +----------------------------------------------------- 1 file changed, 1 insertion(+), 283 deletions(-) diff --git a/jd_car.js b/jd_car.js index bc79236..1131270 100644 --- a/jd_car.js +++ b/jd_car.js @@ -316,286 +316,4 @@ function safeGet(data) { } // 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) -} +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 d109af044020d00676d4642acffd84481fd011fd Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Mon, 7 Dec 2020 17:53:35 +0800 Subject: [PATCH 280/290] update --- jd_car.js | 18 ++++++++++-------- jd_ds.js | 2 +- jd_health.js | 4 ++-- jd_split.js | 2 +- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/jd_car.js b/jd_car.js index bc79236..d4ca966 100644 --- a/jd_car.js +++ b/jd_car.js @@ -1,5 +1,5 @@ /* -京东汽车,签到满500赛点可兑换500京豆 +京东汽车,签到满500赛点可兑换500京豆,一天运行一次即可 长期活动 活动入口:首页👉京东汽车👉屏幕右中部,车主福利 更新地址:https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_car.js @@ -127,13 +127,15 @@ function mission() { } else { if (safeGet(data)) { data = JSON.parse(data); - let missions = data.data.missionList - for (let i = 0; i < missions.length; ++i) { - const mission = missions[i] - if (mission['missionStatus'] === 0 && (mission['missionType'] === 1 || mission['missionType'] === 5)) { - console.log(`去做任务:${mission['missionName']}`) - await doMission(mission['missionId']) - await $.wait(1000) // 等待防黑 + if (data.status) { + let missions = data.data.missionList + for (let i = 0; i < missions.length; ++i) { + const mission = missions[i] + if (mission['missionStatus'] === 0 && (mission['missionType'] === 1 || mission['missionType'] === 5)) { + console.log(`去做任务:${mission['missionName']}`) + await doMission(mission['missionId']) + await $.wait(1000) // 等待防黑 + } } } } diff --git a/jd_ds.js b/jd_ds.js index 40e6bed..abcdbd6 100644 --- a/jd_ds.js +++ b/jd_ds.js @@ -5,7 +5,7 @@ * @Last Modified time: 2020-12-7 17:39:02 */ /* -京东代属脚本,类似十元街,限校园用户 +京东代属脚本,类似十元街,⚠️⚠️⚠️⚠️限校园用户可使用,其他用户签到失败无京豆 一周签到下来可获得30京豆,一天任意时刻运行一次即可 更新地址:https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_ds.js diff --git a/jd_health.js b/jd_health.js index 978a6f6..bcfc2a2 100644 --- a/jd_health.js +++ b/jd_health.js @@ -1,5 +1,5 @@ /* -健康抽奖机 +健康抽奖机 ,活动于2020-12-31日结束 活动地址:https://h5.m.jd.com/babelDiy/Zeus/3HBUP66Gnx92mRt2bXbT9VamYWSx/index.html 已支持IOS双京东账号,Node.js支持N个京东账号 脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js @@ -36,7 +36,7 @@ if ($.isNode()) { cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); } const JD_API_HOST = 'https://api.m.jd.com/client.action'; -const inviteCodes = [`P04z54XCjVUnoaW5nJcXCCyoR8C6i9QR16e`, 'P04z54XCjVUnoaW5nJcXCCyoR8C6i9QR16e']; +const inviteCodes = [`P04z54XCjVUnoaW5nJcXCCyoR8C6i9QR16e`, 'P04z54XCjVUnoaW5m9cZ2T6jChKkh8FWbFAplQ', `P04z54XCjVUnoaW5u2ak7ZCdan1Bdbpik_F9ud7lznm`, `P04z54XCjVUnoaW5m9cZ2ariXVJwFN5uKHNqnc`]; !(async () => { await requireConfig(); if (!cookiesArr[0]) { diff --git a/jd_split.js b/jd_split.js index a225c3c..9ff7f6b 100644 --- a/jd_split.js +++ b/jd_split.js @@ -37,7 +37,7 @@ if ($.isNode()) { cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); } const JD_API_HOST = 'https://api.m.jd.com/client.action'; -$.newShareCodes = [`P04z54XCjVUnIaW5nJcXCCyoR8C6p8txXBH`, 'P04z54XCjVUnIaW5nJcXCCyoR8C6p8txXBH', 'P04z54XCjVUnIaW5u2ak7ZCdan1BT0NlbBGZ1-rnMYj']; +$.newShareCodes = [`P04z54XCjVUnIaW5nJcXCCyoR8C6p8txXBH`, 'P04z54XCjVUnIaW5m9cZ2T6jChKki0Hfndla5k', 'P04z54XCjVUnIaW5u2ak7ZCdan1BT0NlbBGZ1-rnMYj', 'P04z54XCjVUnIaW5m9cZ2ariXVJwI64DaVTNXQ']; !(async () => { if (!cookiesArr[0]) { $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); From 7a5a81734d02ef01ce25d19cffe3d71ef17fd8cf Mon Sep 17 00:00:00 2001 From: DoveBoy <393366046@qq.com> Date: Mon, 7 Dec 2020 18:11:19 +0800 Subject: [PATCH 281/290] =?UTF-8?q?=E4=BA=91=E5=87=BD=E6=95=B0=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E6=96=B0=E5=A2=9E=E4=BA=AC=E4=B8=9C=E5=BF=AB=E9=80=92?= =?UTF-8?q?=E3=80=81=E4=BC=98=E5=8C=96jd=5Fbean=5Fsign=E7=9A=84Cron?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 云函数同步新增京东快递、优化jd_bean_sign的Cron --- serverless.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/serverless.yml b/serverless.yml index 40a6cbc..8c4e03b 100644 --- a/serverless.yml +++ b/serverless.yml @@ -19,7 +19,7 @@ inputs: - timer: # 签到 parameters: name: jd_bean_sign - cronExpression: "0 0 0,3 * * * *" + cronExpression: "0 0 0,7 * * * *" enable: true argument: jd_bean_sign - timer: # 京小超兑换奖品# 摇京豆 @@ -70,12 +70,12 @@ inputs: cronExpression: "0 0 10 * * * *" enable: true argument: jd_bean_change&jd_rankingList&jd_bean_home&jd_car - - timer: # 金融养猪#十元街 + - timer: # 金融养猪#十元街# 京东快递 parameters: - name: jd_pigPet_jd_syj - cronExpression: "0 12 13 * * * *" + name: pigPet_syj_kd + cronExpression: "0 3 2 * * * *" enable: true - argument: jd_pigPet&jd_syj + argument: jd_pigPet&jd_syj&jd_kd environment: # 环境变量 variables: # 环境变量对象 AAA: BBB # 不要删除,用来格式化对齐追加的变量的 From b3df0a9d4a525e741f559ae14629fdfb9eddd110 Mon Sep 17 00:00:00 2001 From: shylocks Date: Mon, 7 Dec 2020 22:37:38 +0800 Subject: [PATCH 282/290] =?UTF-8?q?=E6=95=B0=E7=A0=81=E5=8A=A0=E8=B4=AD?= =?UTF-8?q?=E4=BA=AC=E8=B1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_digital_floor.js | 393 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 393 insertions(+) create mode 100644 jd_digital_floor.js diff --git a/jd_digital_floor.js b/jd_digital_floor.js new file mode 100644 index 0000000..13bcd81 --- /dev/null +++ b/jd_digital_floor.js @@ -0,0 +1,393 @@ +/* +数码加购京豆 +共计25京豆,一天运行一次即可 +活动时间:2020-12-4 到 2020-12-11 +活动入口:https://prodev.m.jd.com/mall/active/nKxVyPnuLwAsQSTfidZ9z4RKVZy/index.html#/ +更新地址:https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_digital_floor.js +已支持IOS双京东账号, Node.js支持N个京东账号 +脚本兼容: QuantumultX, Surge, Loon, 小火箭,JSBox, Node.js +============Quantumultx=============== +[task_local] +#数码加购京豆 +10 7 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_digital_floor.js, tag=数码加购京豆, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jd_redPacket.png, enabled=true + +================Loon============== +[Script] +cron "10 7 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_digital_floor.js, tag=数码加购京豆 + +===============Surge================= +数码加购京豆 = type=cron,cronexp="10 7 * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_digital_floor.js + +============小火箭========= +数码加购京豆 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_digital_floor.js, cronexpr="10 7 * * *", timeout=200, enable=true + */ +const $ = new Env('数码加购京豆'); + +const notify = $.isNode() ? require('./sendNotify') : ''; +//Node.js用户请在jdCookie.js处填写京东ck; +const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; +let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 +const randomCount = $.isNode() ? 20 : 5; +const inviteCodes = [`40cd108f-9eed-4897-b795-45a5b221cd6b`,'9d4262a5-1a02-4ae7-8a86-8d070d531464']; +//IOS等用户直接用NobyDa的jd cookie +let cookiesArr = [], cookie = '', message; +if ($.isNode()) { + Object.keys(jdCookieNode).forEach((item) => { + cookiesArr.push(jdCookieNode[item]) + }) + if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {}; +} else { + cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); +} +const JD_API_HOST = 'https://digital-floor.m.jd.com/adf/index/'; +!(async () => { + await requireConfig() + if (!cookiesArr[0]) { + $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); + return; + } + for (let i = 0; i < cookiesArr.length; i++) { + if (cookiesArr[i]) { + cookie = cookiesArr[i]; + $.UserName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]) + $.index = i + 1; + $.isLogin = true; + $.nickName = ''; + message = ''; + await TotalBean(); + console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`); + if (!$.isLogin) { + $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"}); + + if ($.isNode()) { + await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); + } else { + $.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 + } + continue + } + await shareCodesFormat() + await jdDigitalFloor() + } + } +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) +async function jdDigitalFloor() { + $.bean = 0 + await helpFriends() + await getUserInfo() + await getTaskList() + await showMsg() +} +async function helpFriends() { + for (let code of $.newShareCodes) { + if (!code) continue + let res = await doSupport(code); + await $.wait(500) + if (res===5) { + // 助力次数已用完 + break + } + } +} +function doSupport(shareId) { + return new Promise(resolve => { + $.post(taskPostUrl('doSupport',`shareId=${shareId}`), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.code === 200) { + console.log(`助力好友${shareId}成功`) + await supportCheck(shareId) + }else{ + console.log(`助力好友失败,${data.msg}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data.data); + } + }) + }) +} +function supportCheck(shareId) { + return new Promise(resolve => { + $.post(taskPostUrl('supportCheck',`shareId=${shareId}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.code === 200) { + console.log(`检查助力,助力好友${shareId}成功`) + }else{ + console.log(`检查助力失败,${data.msg}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function showMsg() { + return new Promise(resolve => { + $.msg($.name, '', `【京东账号${$.index}】${$.nickName}\n${message}`); + resolve() + }) +} +function getUserInfo() { + return new Promise(resolve => { + $.get(taskUrl('shareInfo'), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.code === 200) { + $.shareId = data.data.shareId + console.log(`\n您的${$.name}好友助力邀请码:${data.data.shareId}\n`) + message += `\n您的${$.name}好友助力邀请码:${data.data.shareId}\n` + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function getTaskList() { + return new Promise(resolve => { + $.get(taskUrl('indexInfo'), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.code === 200) { + const tasks = data.data + for(let i = 0; i < tasks.length; ++i){ + const task = tasks[i] + console.log(`去加购物车:${task['skuName']}`) + await browseSku(task['skuId']) + } + message += `共获得${$.bean}个京豆\n` + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function getPrize(skuId) { + return new Promise(resolve => { + $.post(taskPostUrl('getPrize',`skuId=${skuId}`), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.code === 200) { + $.bean += data.data + console.log(`任务领奖成功,获得${data.data}个京豆`) + }else{ + console.log(`任务领奖失败,${data.msg}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function browseSku(skuId) { + return new Promise(resolve => { + $.post(taskPostUrl('browseSku',`skuId=${skuId}`), async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.code === 200) { + console.log(`任务领取成功`) + await $.wait(5000) + await getPrize(skuId) + } else{ + console.log(data) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +//格式化助力码 +function shareCodesFormat() { + return new Promise(async resolve => { + // console.log(`第${$.index}个京东账号的助力码:::${$.shareCodesArr[$.index - 1]}`) + $.newShareCodes = []; + if ($.shareCodesArr[$.index - 1]) { + $.newShareCodes = $.shareCodesArr[$.index - 1].split('@'); + } else { + console.log(`由于您第${$.index}个京东账号未提供shareCode,将采纳本脚本自带的助力码\n`) + const tempIndex = $.index > inviteCodes.length ? (inviteCodes.length - 1) : ($.index - 1); + $.newShareCodes = inviteCodes[tempIndex].split('@'); + } + const readShareCodeRes = null //await readShareCode(); + if (readShareCodeRes && readShareCodeRes.code === 200) { + $.newShareCodes = [...new Set([...$.newShareCodes, ...(readShareCodeRes.data || [])])]; + } + console.log(`第${$.index}个京东账号将要助力的好友${JSON.stringify($.newShareCodes)}`) + resolve(); + }) +} +function requireConfig() { + return new Promise(resolve => { + console.log(`开始获取${$.name}配置文件\n`); + //Node.js用户请在jdCookie.js处填写京东ck; + const shareCodes = [] //$.isNode() ? require('./jdSplitShareCodes.js') : ''; + console.log(`共${cookiesArr.length}个京东账号\n`); + $.shareCodesArr = []; + if ($.isNode()) { + Object.keys(shareCodes).forEach((item) => { + if (shareCodes[item]) { + $.shareCodesArr.push(shareCodes[item]) + } + }) + } + console.log(`您提供了${$.shareCodesArr.length}个账号的${$.name}助力码\n`); + resolve() + }) +} +function taskPostUrl(function_id, body) { + return { + url: `${JD_API_HOST}${function_id}?t=${new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000}`, + body: body, + headers: { + 'Host': 'digital-floor.m.jd.com', + 'pragma': 'no-cache', + 'cache-control': 'no-cache', + 'accept': 'application/json, text/plain, */*', + 'dnt': '1', + 'content-type': 'application/x-www-form-urlencoded', + 'origin': 'https://pro.m.jd.com', + 'sec-fetch-site': 'same-site', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'referer': 'https://pro.m.jd.com/', + 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6', + 'Cookie': cookie, + 'user-agent': 'jdapp;iPhone;9.2.0;14.0;53f4d9c70c1c81f1c8769d2fe2fef0190a3f60d2;network/wifi;supportApplePay/3;hasUPPay/1;pushNoticeIsOpen/0;model/iPhone10,2;addressid/138413818;hasOCPay/0;appBuild/167408;supportBestPay/1;jdSupportDarkMode/0;pv/1710.16;apprpd/WorthBuy_List;ref/JDWebViewController;psq/2;ads/;psn/53f4d9c70c1c81f1c8769d2fe2fef0190a3f60d2|5870;jdv/0|kong|t_1000089893_|tuiguang|9a75f97593f344eb9c46b99e196608d2|1605846323;adk/;app_device/IOS;pap/JA2015_311210|9.2.0|IOS 14.0;Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',} + } +} +function taskUrl(function_id) { + return { + url: `${JD_API_HOST}${function_id}?t=${new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000}`, + headers: { + 'Host': 'digital-floor.m.jd.com', + 'pragma': 'no-cache', + 'cache-control': 'no-cache', + 'accept': 'application/json, text/plain, */*', + 'dnt': '1', + 'content-type': 'application/x-www-form-urlencoded', + 'origin': 'https://pro.m.jd.com', + 'sec-fetch-site': 'same-site', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'referer': 'https://pro.m.jd.com/', + 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6', + 'Cookie': cookie, + 'user-agent': 'jdapp;iPhone;9.2.0;14.0;53f4d9c70c1c81f1c8769d2fe2fef0190a3f60d2;network/wifi;supportApplePay/3;hasUPPay/1;pushNoticeIsOpen/0;model/iPhone10,2;addressid/138413818;hasOCPay/0;appBuild/167408;supportBestPay/1;jdSupportDarkMode/0;pv/1710.16;apprpd/WorthBuy_List;ref/JDWebViewController;psq/2;ads/;psn/53f4d9c70c1c81f1c8769d2fe2fef0190a3f60d2|5870;jdv/0|kong|t_1000089893_|tuiguang|9a75f97593f344eb9c46b99e196608d2|1605846323;adk/;app_device/IOS;pap/JA2015_311210|9.2.0|IOS 14.0;Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',} + } +} +function TotalBean() { + return new Promise(async resolve => { + const options = { + "url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`, + "headers": { + "Accept": "application/json,text/plain, */*", + "Content-Type": "application/x-www-form-urlencoded", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + data = JSON.parse(data); + if (data['retcode'] === 13) { + $.isLogin = false; //cookie过期 + return + } + $.nickName = data['base'].nickname; + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function safeGet(data) { + try { + if (typeof JSON.parse(data) == "object") { + return true; + } + } catch (e) { + console.log(e); + console.log(`京东服务器访问数据为空,请检查自身设备网络情况`); + return false; + } +} +// 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 acab9c06613c64f4c081e53a2ca196b87f252771 Mon Sep 17 00:00:00 2001 From: shylocks Date: Mon, 7 Dec 2020 23:20:27 +0800 Subject: [PATCH 283/290] =?UTF-8?q?=E7=9B=B4=E6=92=AD=E7=BA=A2=E5=8C=85?= =?UTF-8?q?=E9=9B=A8=20=E6=AF=8F=E5=A4=A90,9,11,13,15,17,19,20,21,23?= =?UTF-8?q?=E5=8F=AF=E9=A2=86=EF=BC=8C=E6=AF=8F=E6=97=A5=E4=B8=8A=E9=99=90?= =?UTF-8?q?=E6=9C=AA=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_live_redrain.js | 184 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 jd_live_redrain.js diff --git a/jd_live_redrain.js b/jd_live_redrain.js new file mode 100644 index 0000000..86fd5a5 --- /dev/null +++ b/jd_live_redrain.js @@ -0,0 +1,184 @@ +/* +直播红包雨 +每天0,9,11,13,15,17,19,20,21,23可领,每日上限未知 +活动时间:2020-12-7 到 2020-12-12 +更新地址:https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_live_redrain.js +已支持IOS双京东账号, Node.js支持N个京东账号 +脚本兼容: QuantumultX, Surge, Loon, 小火箭,JSBox, Node.js +============Quantumultx=============== +[task_local] +#直播红包雨 +0 0,9,11,13,15,17,19,20,21,23 * * * https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_live_redrain.js, tag=直播红包雨, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jd_redPacket.png, enabled=true + +================Loon============== +[Script] +cron "0 0,9,11,13,15,17,19,20,21,23 * * *" script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_live_redrain.js, tag=直播红包雨 + +===============Surge================= +直播红包雨 = type=cron,cronexp="0 0,9,11,13,15,17,19,20,21,23 * * *",wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_live_redrain.js + +============小火箭========= +直播红包雨 = type=cron,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_live_redrain.js, cronexpr="0 0,9,11,13,15,17,19,20,21,23 * * *", timeout=200, enable=true + */ +const $ = new Env('直播红包雨'); + +const notify = $.isNode() ? require('./sendNotify') : ''; +//Node.js用户请在jdCookie.js处填写京东ck; +const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; +let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 +const randomCount = $.isNode() ? 20 : 5; +//IOS等用户直接用NobyDa的jd cookie +let cookiesArr = [], cookie = '', message; +if ($.isNode()) { + Object.keys(jdCookieNode).forEach((item) => { + cookiesArr.push(jdCookieNode[item]) + }) + if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {}; +} else { + cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); +} +const JD_API_HOST = 'https://api.m.jd.com/api'; +!(async () => { + if (!cookiesArr[0]) { + $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); + return; + } + for (let i = 0; i < cookiesArr.length; i++) { + if (cookiesArr[i]) { + cookie = cookiesArr[i]; + $.UserName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]) + $.index = i + 1; + $.isLogin = true; + $.nickName = ''; + message = ''; + await TotalBean(); + console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`); + if (!$.isLogin) { + $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"}); + + if ($.isNode()) { + await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); + } else { + $.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 + } + continue + } + await getRedRain(); + await showMsg(); + } + } +})() + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) + +function showMsg() { + return new Promise(resolve => { + $.msg($.name, '', `【京东账号${$.index}】${$.nickName}\n${message}`); + resolve() + }) +} +function getRedRain() { + return new Promise(resolve => { + const body = {"actId":"RRA3dFHoZXGThSnctvtAf69dmVyEDfm"}; + $.get(taskUrl('noahRedRainLottery', body), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + if (data.subCode === '0') { + console.log(`领取成功,获得${JSON.stringify(data.lotteryResult)}`) + // message+= `领取成功,获得${JSON.stringify(data.lotteryResult)}\n` + message+= `${data.lotteryResult.jPeasList[0].ext}:${(data.lotteryResult.jPeasList[0].quantity)}京豆\n` + + } else if (data.subCode === '8') { + console.log(`今日次数已满`) + message += `领取失败,今日已签到\n`; + } else { + console.log(`异常:${JSON.stringify(data)}`) + } + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function taskUrl(function_id, body = {}) { + return { + url: `${JD_API_HOST}?functionId=${function_id}&body=${escape(JSON.stringify(body))}&client=wh5&clientVersion=1.0.0&_=${new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000}`, + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Content-Type": "application/x-www-form-urlencoded", + "Host": "api.m.jd.com", + "Referer": "https://h5.m.jd.com/active/redrain/index.html", + "Cookie": cookie, + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0"), + } + } +} +function TotalBean() { + return new Promise(async resolve => { + const options = { + "url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`, + "headers": { + "Accept": "application/json,text/plain, */*", + "Content-Type": "application/x-www-form-urlencoded", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-cn", + "Connection": "keep-alive", + "Cookie": cookie, + "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2", + "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.2.2;14.2;%E4%BA%AC%E4%B8%9C/9.2.2 CFNetwork/1206 Darwin/20.1.0") + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + data = JSON.parse(data); + if (data['retcode'] === 13) { + $.isLogin = false; //cookie过期 + return + } + $.nickName = data['base'].nickname; + } else { + console.log(`京东服务器返回空数据`) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} +function safeGet(data) { + try { + if (typeof JSON.parse(data) == "object") { + return true; + } + } catch (e) { + console.log(e); + console.log(`京东服务器访问数据为空,请检查自身设备网络情况`); + return false; + } +} +// 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 6aedc072d534f0eb2393c7a3ccf7673e52f90018 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Tue, 8 Dec 2020 09:21:50 +0800 Subject: [PATCH 284/290] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=8D=81=E5=85=83?= =?UTF-8?q?=E8=A1=97=E7=AD=BE=E5=88=B0=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_syj.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/jd_syj.js b/jd_syj.js index b23140a..06720e0 100644 --- a/jd_syj.js +++ b/jd_syj.js @@ -86,10 +86,11 @@ function showMsg() { resolve() }) } +let signFlag = 0; function userSignIn() { return new Promise(resolve => { const body = {"activityId":"8d6845fe2e77425c82d5078d314d33c5","inviterId":"VMIQlLQqjQyjZokQmv5bIDgq011L0Ov8","channel":"MiniProgram"}; - $.get(taskUrl('userSignIn', body), (err, resp, data) => { + $.get(taskUrl('userSignIn', body), async (err, resp, data) => { try { if (err) { console.log(`${JSON.stringify(err)}`) @@ -98,7 +99,8 @@ function userSignIn() { if (safeGet(data)) { data = JSON.parse(data); if (data.code === 0) { - console.log(`今日签到成功`) + signFlag = 0; + console.log(`${$.name}今日签到成功`); if (data.data) { let { alreadySignDays, beanTotalNum, todayPrize, eachDayPrize } = data.data; message += `【第${alreadySignDays}日签到】成功,获得${todayPrize.beanAmount}京豆 🐶\n`; @@ -109,6 +111,13 @@ function userSignIn() { } else if (data.code === 81) { console.log(`今日已签到`) message += `【签到】失败,今日已签到`; + } else if (data.code === 6) { + //此处有时会遇到 服务器繁忙 导致签到失败,故重复三次签到 + $.log(`${$.name}签到失败${signFlag}:${data.msg}`); + if (signFlag < 3) { + signFlag ++; + await userSignIn(); + } } else { console.log(`异常:${JSON.stringify(data)}`) } From 4b65ad5a8371f01602461f3b3d72d01c1983c03a Mon Sep 17 00:00:00 2001 From: shylocks Date: Tue, 8 Dec 2020 09:23:10 +0800 Subject: [PATCH 285/290] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BA=A2=E5=8C=85?= =?UTF-8?q?=E9=9B=A8activityID=E5=8F=98=E5=8A=A8=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_live_redrain.js | 69 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 57 insertions(+), 12 deletions(-) diff --git a/jd_live_redrain.js b/jd_live_redrain.js index 86fd5a5..85f7a87 100644 --- a/jd_live_redrain.js +++ b/jd_live_redrain.js @@ -33,7 +33,8 @@ if ($.isNode()) { Object.keys(jdCookieNode).forEach((item) => { cookiesArr.push(jdCookieNode[item]) }) - if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {}; + if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => { + }; } else { cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]); } @@ -43,6 +44,7 @@ const JD_API_HOST = 'https://api.m.jd.com/api'; $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); return; } + await getRedRain(); for (let i = 0; i < cookiesArr.length; i++) { if (cookiesArr[i]) { cookie = cookiesArr[i]; @@ -59,21 +61,21 @@ const JD_API_HOST = 'https://api.m.jd.com/api'; if ($.isNode()) { await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); } else { - $.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 + $.setdata('', `CookieJD${i ? i + 1 : ""}`);//cookie失效,故清空cookie。$.setdata('', `CookieJD${i ? i + 1 : "" }`);//cookie失效,故清空cookie。 } continue } - await getRedRain(); + await receiveRedRain(); await showMsg(); } } })() - .catch((e) => { - $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') - }) - .finally(() => { - $.done(); - }) + .catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') + }) + .finally(() => { + $.done(); + }) function showMsg() { return new Promise(resolve => { @@ -81,9 +83,33 @@ function showMsg() { resolve() }) } + function getRedRain() { return new Promise(resolve => { - const body = {"actId":"RRA3dFHoZXGThSnctvtAf69dmVyEDfm"}; + $.post(taskPostUrl('liveActivityV842'), (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (safeGet(data)) { + data = JSON.parse(data); + let url = data.data.iconArea[0].data.activityUrl + $.activityId = url.substr(url.indexOf("id=") + 3) + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +function receiveRedRain() { + return new Promise(resolve => { + const body = {"actId": $.activityId}; $.get(taskUrl('noahRedRainLottery', body), (err, resp, data) => { try { if (err) { @@ -95,7 +121,7 @@ function getRedRain() { if (data.subCode === '0') { console.log(`领取成功,获得${JSON.stringify(data.lotteryResult)}`) // message+= `领取成功,获得${JSON.stringify(data.lotteryResult)}\n` - message+= `${data.lotteryResult.jPeasList[0].ext}:${(data.lotteryResult.jPeasList[0].quantity)}京豆\n` + message += `${data.lotteryResult.jPeasList[0].ext}:${(data.lotteryResult.jPeasList[0].quantity)}京豆\n` } else if (data.subCode === '8') { console.log(`今日次数已满`) @@ -113,9 +139,25 @@ function getRedRain() { }) }) } + +function taskPostUrl(function_id, body = {}) { + return { + url: `https://api.m.jd.com/client.action?functionId=${function_id}`, + body: 'body=%7B%22liveId%22%3A%222940585%22%7D&build=167408&client=apple&clientVersion=9.2.0&d_brand=apple&d_model=iPhone10%2C2&eid=eidIF3CF0112RTIyQTVGQTEtRDVCQy00Qg%3D%3D6HAJa9%2B/4Vedgo62xKQRoAb47%2Bpyu1EQs/6971aUvk0BQAsZLyQAYeid%2BPgbJ9BQoY1RFtkLCLP5OMqU&isBackground=Y&joycious=193&openudid=53f4d9c70c1c81f1c8769d2fe2fef0190a3f60d2&scope=01&sign=7e971605d8af9b6e40feb41e62893a63&st=1607389929151&sv=111&uts=0f31TVRjBSsxtiCuhT3/0Snw3oVtxkoVjP%2BnIIqtRBVZ6VIHub43H/trIkV5b%2BgqoCQ7mbttSEPca%2BOXsRcbxYda9CyPEW6BOlaC6KrfHnFbOmKyzcBSs1CpUf7QbFhQreXDZZjo44tCH2GKLlG5xh9SbE/Hggt//Go27hw79QdJ92%2BRFXGOEwN13aZu%2BrjHy50cnmfHmG8oU05aJ6vcjA%3D%3D', + headers: { + 'Host': 'api.m.jd.com', + 'content-type': 'application/x-www-form-urlencoded', + 'accept': '*/*', + 'user-agent': 'JD4iPhone/167408 (iPhone; iOS 14.2; Scale/3.00)', + 'accept-language': 'zh-Hans-JP;q=1, en-JP;q=0.9, zh-Hant-TW;q=0.8, ja-JP;q=0.7, en-US;q=0.6', + //"Cookie": cookie, + } + } +} + function taskUrl(function_id, body = {}) { return { - url: `${JD_API_HOST}?functionId=${function_id}&body=${escape(JSON.stringify(body))}&client=wh5&clientVersion=1.0.0&_=${new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000}`, + url: `${JD_API_HOST}?functionId=${function_id}&body=${escape(JSON.stringify(body))}&client=wh5&clientVersion=1.0.0&_=${new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 + 8 * 60 * 60 * 1000}`, headers: { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", @@ -129,6 +171,7 @@ function taskUrl(function_id, body = {}) { } } } + function TotalBean() { return new Promise(async resolve => { const options = { @@ -169,6 +212,7 @@ function TotalBean() { }) }) } + function safeGet(data) { try { if (typeof JSON.parse(data) == "object") { @@ -180,5 +224,6 @@ function safeGet(data) { return false; } } + // 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 a6d804265e92adb493af9cf1015dc8f9cb99d9a5 Mon Sep 17 00:00:00 2001 From: shylocks Date: Tue, 8 Dec 2020 09:32:58 +0800 Subject: [PATCH 286/290] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jd_live_redrain.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/jd_live_redrain.js b/jd_live_redrain.js index 85f7a87..f63e36c 100644 --- a/jd_live_redrain.js +++ b/jd_live_redrain.js @@ -45,6 +45,7 @@ const JD_API_HOST = 'https://api.m.jd.com/api'; return; } await getRedRain(); + if(!$.activityId) return for (let i = 0; i < cookiesArr.length; i++) { if (cookiesArr[i]) { cookie = cookiesArr[i]; @@ -65,7 +66,14 @@ const JD_API_HOST = 'https://api.m.jd.com/api'; } continue } - await receiveRedRain(); + let nowTs = new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 + 8 * 60 * 60 * 1000 + // console.log(nowTs, $.startTime, $.endTime) + if ($.startTime <= nowTs && nowTs < $.endTime) { + await receiveRedRain(); + } else { + console.log(`不在红包雨时间之内`) + message += `不在红包雨时间之内` + } await showMsg(); } } @@ -94,8 +102,13 @@ function getRedRain() { } else { if (safeGet(data)) { data = JSON.parse(data); + let act = data.data.iconArea[0] let url = data.data.iconArea[0].data.activityUrl $.activityId = url.substr(url.indexOf("id=") + 3) + $.startTime = act.startTime + $.endTime = act.endTime + console.log(`下一场红包雨开始时间:${new Date(act.startTime)}`) + console.log(`下一场红包雨结束时间:${new Date(act.endTime)}`) } } } catch (e) { From 00ec2b8cc87db768b0066a46fbd95de0e2b5bb7d Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Tue, 8 Dec 2020 09:38:19 +0800 Subject: [PATCH 287/290] =?UTF-8?q?docker=E6=96=B9=E6=B3=95=E4=B8=80?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B0=E5=A2=9E=E7=9A=84=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/crontab_list.sh | 18 ++++++++++++++++-- docker/crontab_list_ts.sh | 22 ++++++++++++++++++---- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index 951f131..85c6801 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -10,6 +10,14 @@ 10 * * * * node /scripts/jd_jxstory.js >> /scripts/logs/jd_jxstory.log 2>&1 # 金榜年终奖(2020.12.12活动过期) 10 7 * * * node /scripts/jd_split.js >> /scripts/logs/jd_split.log 2>&1 +# 秒杀红包雨(2020.12.31活动过期) +40 8 * * * node /scripts/jd_ms_redrain.js >> /scripts/logs/jd_ms_redrain.log 2>&1 +# 健康抽奖机(2020.12.31活动过期) +10 0 * * * node /scripts/jd_health.js >> /scripts/logs/jd_health.log 2>&1 +# 直播红包雨(2020.12.12活动过期) +0 0,9,11,13,15,17,19,20,21,23 * * * node /scripts/jd_live_redrain.js >> /scripts/logs/jd_live_redrain.log 2>&1 +# 数码加购京豆(会加3-4个商品到购物车🛒,介意者勿用 , 2020.12.11活动过期) +# 8 0 * * * node /scripts/jd_digital_floor.js >> /scripts/logs/jd_digital_floor.log 2>&1 ##############长期活动############## # 签到 @@ -64,5 +72,11 @@ 36 * * * * node /scripts/jd_jdfactory.js >> /scripts/logs/jd_jdfactory.log 2>&1 #十元街 36 8 * * * node /scripts/jd_syj.js >> /scripts/logs/jd_syj.log 2>&1 -#秒杀红包雨 -40 8 * * * node /scripts/jd_ms_redrain.js >> /scripts/logs/jd_ms_redrain.log 2>&1 +# 京东代属(注:限校园用户可使用) +36 9 * * * node /scripts/jd_ds.js >> /scripts/logs/jd_ds.log 2>&1 +# 京东快递签到 +23 1 * * * node /scripts/jd_kd.js >> /scripts/logs/jd_kd.log 2>&1 +# 京东汽车(签到满500赛点可兑换500京豆) +33 2 * * * node /scripts/jd_car.js >> /scripts/logs/jd_car.log 2>&1 +# 领京豆额外奖励(每日可获得3京豆) +33 4 * * * node /scripts/jd_baen_home.js >> /scripts/logs/jd_baen_home.log 2>&1 diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index b41b19c..777595c 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -10,6 +10,14 @@ 10 * * * * node /scripts/jd_jxstory.js |ts >> /scripts/logs/jd_jxstory.log 2>&1 # 金榜年终奖(2020.12.12活动过期) 10 7 * * * node /scripts/jd_split.js |ts >> /scripts/logs/jd_split.log 2>&1 +# 秒杀红包雨(2020.12.31活动过期) +40 8 * * * node /scripts/jd_ms_redrain.js |ts >> /scripts/logs/jd_ms_redrain.log 2>&1 +# 健康抽奖机(2020.12.31活动过期) +10 0 * * * node /scripts/jd_health.js |ts >> /scripts/logs/jd_health.log 2>&1 +# 直播红包雨(2020.12.12活动过期) +0 0,9,11,13,15,17,19,20,21,23 * * * node /scripts/jd_live_redrain.js |ts >> /scripts/logs/jd_live_redrain.log 2>&1 +# 数码加购京豆(会加3-4个商品到购物车🛒,介意者勿用 , 2020.12.11活动过期) +# 8 0 * * * node /scripts/jd_digital_floor.js |ts >> /scripts/logs/jd_digital_floor.log 2>&1 ##############长期活动############## # 签到 @@ -62,7 +70,13 @@ 16 6 * * * node /scripts/jd_small_home.js |ts >> /scripts/logs/jd_small_home.log 2>&1 # 东东工厂 36 * * * * node /scripts/jd_jdfactory.js |ts >> /scripts/logs/jd_jdfactory.log 2>&1 -#十元街 -36 8 * * * node /scripts/jd_syj.js |ts >> /scripts/logs/jd_syj.log 2>&1 -#秒杀红包雨 -40 8 * * * node /scripts/jd_ms_redrain.js |ts >> /scripts/logs/jd_ms_redrain.log 2>&1 +# 十元街 +36 8,18 * * * node /scripts/jd_syj.js |ts >> /scripts/logs/jd_syj.log 2>&1 +# 京东代属(注:限校园用户可使用) +36 9 * * * node /scripts/jd_ds.js |ts >> /scripts/logs/jd_ds.log 2>&1 +# 京东快递签到 +23 1 * * * node /scripts/jd_kd.js |ts >> /scripts/logs/jd_kd.log 2>&1 +# 京东汽车(签到满500赛点可兑换500京豆) +33 2 * * * node /scripts/jd_car.js |ts >> /scripts/logs/jd_car.log 2>&1 +# 领京豆额外奖励(每日可获得3京豆) +33 4 * * * node /scripts/jd_baen_home.js |ts >> /scripts/logs/jd_baen_home.log 2>&1 \ No newline at end of file From 06952d13361e52b0e0f2d03aa62dfab466b5dd04 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Tue, 8 Dec 2020 10:17:06 +0800 Subject: [PATCH 288/290] =?UTF-8?q?=E8=A7=A3=E5=BC=80docker=E9=87=8C?= =?UTF-8?q?=E9=9D=A2=E5=8A=A0=E8=B4=AD=E5=BE=97=E4=BA=AC=E8=B1=86=E7=9A=84?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/crontab_list.sh | 4 ++-- docker/crontab_list_ts.sh | 4 ++-- jd_digital_floor.js | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index 85c6801..a6ef419 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -16,8 +16,8 @@ 10 0 * * * node /scripts/jd_health.js >> /scripts/logs/jd_health.log 2>&1 # 直播红包雨(2020.12.12活动过期) 0 0,9,11,13,15,17,19,20,21,23 * * * node /scripts/jd_live_redrain.js >> /scripts/logs/jd_live_redrain.log 2>&1 -# 数码加购京豆(会加3-4个商品到购物车🛒,介意者勿用 , 2020.12.11活动过期) -# 8 0 * * * node /scripts/jd_digital_floor.js >> /scripts/logs/jd_digital_floor.log 2>&1 +# 数码加购京豆(2020.12.11活动过期) + 8 0 * * * node /scripts/jd_digital_floor.js >> /scripts/logs/jd_digital_floor.log 2>&1 ##############长期活动############## # 签到 diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index 777595c..e39bed5 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -16,8 +16,8 @@ 10 0 * * * node /scripts/jd_health.js |ts >> /scripts/logs/jd_health.log 2>&1 # 直播红包雨(2020.12.12活动过期) 0 0,9,11,13,15,17,19,20,21,23 * * * node /scripts/jd_live_redrain.js |ts >> /scripts/logs/jd_live_redrain.log 2>&1 -# 数码加购京豆(会加3-4个商品到购物车🛒,介意者勿用 , 2020.12.11活动过期) -# 8 0 * * * node /scripts/jd_digital_floor.js |ts >> /scripts/logs/jd_digital_floor.log 2>&1 +# 数码加购京豆(2020.12.11活动过期) + 8 0 * * * node /scripts/jd_digital_floor.js |ts >> /scripts/logs/jd_digital_floor.log 2>&1 ##############长期活动############## # 签到 diff --git a/jd_digital_floor.js b/jd_digital_floor.js index 13bcd81..8763900 100644 --- a/jd_digital_floor.js +++ b/jd_digital_floor.js @@ -28,7 +28,7 @@ const notify = $.isNode() ? require('./sendNotify') : ''; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 const randomCount = $.isNode() ? 20 : 5; -const inviteCodes = [`40cd108f-9eed-4897-b795-45a5b221cd6b`,'9d4262a5-1a02-4ae7-8a86-8d070d531464']; +const inviteCodes = [`40cd108f-9eed-4897-b795-45a5b221cd6b@49efb480-d6d7-456b-a4e0-14b170b161e0@`,'9d4262a5-1a02-4ae7-8a86-8d070d531464@687b14e0-ce0a-45eb-bf46-71aa0da05f18']; //IOS等用户直接用NobyDa的jd cookie let cookiesArr = [], cookie = '', message; if ($.isNode()) { From c83cd752173aabdd987198a6f4237597dd3596b3 Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Tue, 8 Dec 2020 11:16:24 +0800 Subject: [PATCH 289/290] fix --- docker/crontab_list.sh | 2 +- docker/crontab_list_ts.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index a6ef419..4c656d9 100644 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -79,4 +79,4 @@ # 京东汽车(签到满500赛点可兑换500京豆) 33 2 * * * node /scripts/jd_car.js >> /scripts/logs/jd_car.log 2>&1 # 领京豆额外奖励(每日可获得3京豆) -33 4 * * * node /scripts/jd_baen_home.js >> /scripts/logs/jd_baen_home.log 2>&1 +33 4 * * * node /scripts/jd_bean_home.js >> /scripts/logs/jd_bean_home.log 2>&1 diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index e39bed5..be1452d 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -79,4 +79,4 @@ # 京东汽车(签到满500赛点可兑换500京豆) 33 2 * * * node /scripts/jd_car.js |ts >> /scripts/logs/jd_car.log 2>&1 # 领京豆额外奖励(每日可获得3京豆) -33 4 * * * node /scripts/jd_baen_home.js |ts >> /scripts/logs/jd_baen_home.log 2>&1 \ No newline at end of file +33 4 * * * node /scripts/jd_bean_home.js |ts >> /scripts/logs/jd_bean_home.log 2>&1 \ No newline at end of file From 064ad6b79f95526e0aca5fd2f2df2ec694c7e92f Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Tue, 8 Dec 2020 11:31:57 +0800 Subject: [PATCH 290/290] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/crontab_list_ts.sh | 2 +- jd_live_redrain.js | 18 +++++++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh index be1452d..b1dd621 100644 --- a/docker/crontab_list_ts.sh +++ b/docker/crontab_list_ts.sh @@ -17,7 +17,7 @@ # 直播红包雨(2020.12.12活动过期) 0 0,9,11,13,15,17,19,20,21,23 * * * node /scripts/jd_live_redrain.js |ts >> /scripts/logs/jd_live_redrain.log 2>&1 # 数码加购京豆(2020.12.11活动过期) - 8 0 * * * node /scripts/jd_digital_floor.js |ts >> /scripts/logs/jd_digital_floor.log 2>&1 +8 0 * * * node /scripts/jd_digital_floor.js |ts >> /scripts/logs/jd_digital_floor.log 2>&1 ##############长期活动############## # 签到 diff --git a/jd_live_redrain.js b/jd_live_redrain.js index f63e36c..66dca29 100644 --- a/jd_live_redrain.js +++ b/jd_live_redrain.js @@ -102,13 +102,17 @@ function getRedRain() { } else { if (safeGet(data)) { data = JSON.parse(data); - let act = data.data.iconArea[0] - let url = data.data.iconArea[0].data.activityUrl - $.activityId = url.substr(url.indexOf("id=") + 3) - $.startTime = act.startTime - $.endTime = act.endTime - console.log(`下一场红包雨开始时间:${new Date(act.startTime)}`) - console.log(`下一场红包雨结束时间:${new Date(act.endTime)}`) + if (data.data.iconArea) { + let act = data.data.iconArea[0] + let url = data.data.iconArea[0].data.activityUrl + $.activityId = url.substr(url.indexOf("id=") + 3) + $.startTime = act.startTime + $.endTime = act.endTime + console.log(`下一场红包雨开始时间:${new Date(act.startTime)}`) + console.log(`下一场红包雨结束时间:${new Date(act.endTime)}`) + } else { + console.log(`暂无红包雨`) + } } } } catch (e) {