├── .gitattributes
├── desktop.ini
├── icon
├── bark.jpg
├── fork.png
├── git1.jpg
├── git2.jpg
├── git3.jpg
├── git4.jpg
├── git5.jpg
├── git6.jpg
├── git7.png
├── git8.jpg
├── git9.jpg
├── jd1.jpg
├── jd2.jpg
├── jd3.jpg
├── jd4.jpg
├── jd5.png
├── jd6.png
├── jd7.png
├── jd8.png
├── qh1.png
├── qh2.png
├── qh3.png
├── txy.png
├── DD_bot.png
├── git10.jpg
├── git11.jpg
├── git12.jpg
├── git13.jpg
├── git14.jpg
├── jd_pet.png
├── TG_PUSH1.png
├── TG_PUSH2.png
├── TG_PUSH3.png
├── action1.png
├── action2.png
├── action3.png
├── iCloud1.png
├── iCloud2.png
├── iCloud3.png
├── iCloud4.png
├── iCloud5.png
├── iCloud6.png
├── iCloud7.png
├── iCloud8.png
├── disable-action.jpg
├── jd_moneyTree.png
├── bean_sign_simple.jpg
└── Snipaste_2020-08-28_09-31-42.png
├── function
├── config.js
├── jdcookie.js
├── eval.js
├── ql.js
├── jxAlgo.js
└── common.js
├── docker
├── bot
│ ├── jd.png
│ ├── requirements.txt
│ └── setup.py
├── notify_docker_user.js
├── proc_file.sh
├── docker_entrypoint.sh
├── example
│ ├── jd_scripts.custom-append.syno.json
│ ├── default.yml
│ ├── jd_scripts.custom-overwrite.syno.json
│ ├── custom-append.yml
│ ├── custom-overwrite.yml
│ ├── multi.yml
│ ├── jd_scripts.syno.json
│ └── docker多账户使用独立容器使用说明.md
├── Dockerfile
├── auto_help.sh
├── crontab_list.sh
└── default_task.sh
├── shareCodes
└── joypark.json
├── .gitignore
├── backUp
├── TG_PUSH.md
├── GetJdCookie.md
├── GetJdCookie2.md
├── gitSync.md
├── tencentscf.md
├── AlipayManor.js
├── iCloud.md
└── webhook.js
├── package.json
├── QuantumultX
└── lxk0301_cookies.conf
├── README.md
├── jdPetShareCodes.js
├── jdFruitShareCodes.js
├── jdDreamFactoryShareCodes.js
├── jdFactoryShareCodes.js
├── jdPlantBeanShareCodes.js
├── jdJxncShareCodes.js
├── index.js
├── activity
├── jd_ftzy_help.js
├── jd_jxhlk.py
├── jd_fanli.py
└── jd_jx_cfd_pearl_exchange.js
├── jd_sign.js
├── utils
├── jdShareCodes.js
├── share_code.js
└── MoveMentFaker.js
├── jd_jx_cashback.js
├── jd_jx_factory.js
├── jdCookie.js
├── ql.js
├── jd_disable.py
├── jd_price.js
├── jd_zqfl.py
├── JD_extra_cookie.js
└── Loon
└── lxk0301_LoonTask.conf
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text eol=lf
2 | *.png -text
3 | *.jpg -text
--------------------------------------------------------------------------------
/desktop.ini:
--------------------------------------------------------------------------------
1 | [LocalizedFileNames]
2 | jd_mohe.js=@jd_mohe.js,0
3 |
--------------------------------------------------------------------------------
/icon/bark.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/bark.jpg
--------------------------------------------------------------------------------
/icon/fork.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/fork.png
--------------------------------------------------------------------------------
/icon/git1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/git1.jpg
--------------------------------------------------------------------------------
/icon/git2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/git2.jpg
--------------------------------------------------------------------------------
/icon/git3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/git3.jpg
--------------------------------------------------------------------------------
/icon/git4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/git4.jpg
--------------------------------------------------------------------------------
/icon/git5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/git5.jpg
--------------------------------------------------------------------------------
/icon/git6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/git6.jpg
--------------------------------------------------------------------------------
/icon/git7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/git7.png
--------------------------------------------------------------------------------
/icon/git8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/git8.jpg
--------------------------------------------------------------------------------
/icon/git9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/git9.jpg
--------------------------------------------------------------------------------
/icon/jd1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/jd1.jpg
--------------------------------------------------------------------------------
/icon/jd2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/jd2.jpg
--------------------------------------------------------------------------------
/icon/jd3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/jd3.jpg
--------------------------------------------------------------------------------
/icon/jd4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/jd4.jpg
--------------------------------------------------------------------------------
/icon/jd5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/jd5.png
--------------------------------------------------------------------------------
/icon/jd6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/jd6.png
--------------------------------------------------------------------------------
/icon/jd7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/jd7.png
--------------------------------------------------------------------------------
/icon/jd8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/jd8.png
--------------------------------------------------------------------------------
/icon/qh1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/qh1.png
--------------------------------------------------------------------------------
/icon/qh2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/qh2.png
--------------------------------------------------------------------------------
/icon/qh3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/qh3.png
--------------------------------------------------------------------------------
/icon/txy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/txy.png
--------------------------------------------------------------------------------
/function/config.js:
--------------------------------------------------------------------------------
1 | module.exports = {"ThreadJs":[],"invokeKey":"RtKLB8euDo7KwsO0"}
--------------------------------------------------------------------------------
/icon/DD_bot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/DD_bot.png
--------------------------------------------------------------------------------
/icon/git10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/git10.jpg
--------------------------------------------------------------------------------
/icon/git11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/git11.jpg
--------------------------------------------------------------------------------
/icon/git12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/git12.jpg
--------------------------------------------------------------------------------
/icon/git13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/git13.jpg
--------------------------------------------------------------------------------
/icon/git14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/git14.jpg
--------------------------------------------------------------------------------
/icon/jd_pet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/jd_pet.png
--------------------------------------------------------------------------------
/docker/bot/jd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/docker/bot/jd.png
--------------------------------------------------------------------------------
/icon/TG_PUSH1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/TG_PUSH1.png
--------------------------------------------------------------------------------
/icon/TG_PUSH2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/TG_PUSH2.png
--------------------------------------------------------------------------------
/icon/TG_PUSH3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/TG_PUSH3.png
--------------------------------------------------------------------------------
/icon/action1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/action1.png
--------------------------------------------------------------------------------
/icon/action2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/action2.png
--------------------------------------------------------------------------------
/icon/action3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/action3.png
--------------------------------------------------------------------------------
/icon/iCloud1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/iCloud1.png
--------------------------------------------------------------------------------
/icon/iCloud2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/iCloud2.png
--------------------------------------------------------------------------------
/icon/iCloud3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/iCloud3.png
--------------------------------------------------------------------------------
/icon/iCloud4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/iCloud4.png
--------------------------------------------------------------------------------
/icon/iCloud5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/iCloud5.png
--------------------------------------------------------------------------------
/icon/iCloud6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/iCloud6.png
--------------------------------------------------------------------------------
/icon/iCloud7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/iCloud7.png
--------------------------------------------------------------------------------
/icon/iCloud8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/iCloud8.png
--------------------------------------------------------------------------------
/icon/disable-action.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/disable-action.jpg
--------------------------------------------------------------------------------
/icon/jd_moneyTree.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/jd_moneyTree.png
--------------------------------------------------------------------------------
/shareCodes/joypark.json:
--------------------------------------------------------------------------------
1 | ["VxQJC6Sr0QZkcOHwxoTjrw","oRY9YryofcNg71MZeKSZseKD6P6BJzKv2NBGxfiuJ20"]
--------------------------------------------------------------------------------
/icon/bean_sign_simple.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/bean_sign_simple.jpg
--------------------------------------------------------------------------------
/function/jdcookie.js:
--------------------------------------------------------------------------------
1 | // 本地测试在这边填写cookie
2 | let cookie = [
3 | ];
4 | module.exports = {
5 | cookie
6 | }
7 |
--------------------------------------------------------------------------------
/icon/Snipaste_2020-08-28_09-31-42.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crazyuyun/JDJB-1/HEAD/icon/Snipaste_2020-08-28_09-31-42.png
--------------------------------------------------------------------------------
/docker/bot/requirements.txt:
--------------------------------------------------------------------------------
1 | python_telegram_bot==13.0
2 | requests==2.23.0
3 | MyQR==2.3.1
4 | telegram==0.0.1
5 | tzlocal<3.0
6 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules/
2 | /yarn.lock
3 | /.idea
4 | /.history
5 | /box.dat
6 | /CookieSet.json
7 | /jdCookie.js
8 | /logs
9 | # /JD_DailyBonus.js
10 | /result.txt
--------------------------------------------------------------------------------
/docker/bot/setup.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # @Author : iouAkira(lof)
3 | # @mail : e.akimoto.akira@gmail.com
4 | # @CreateTime: 2020-11-02
5 | # @UpdateTime: 2021-03-21
6 |
7 | from setuptools import setup
8 |
9 | setup(
10 | name='jd-scripts-bot',
11 | version='0.2',
12 | scripts=['jd_bot', ],
13 | )
14 |
--------------------------------------------------------------------------------
/backUp/TG_PUSH.md:
--------------------------------------------------------------------------------
1 | **TG_PUSH教程**
2 |
3 | 利用Telegram机器人推送通知,需要在环境变量填入正确的```TG_BOT_TOKEN```以及```TG_USER_ID```,以下教程简明阐述如何获取token以及UserID
4 |
5 | Ⅰ.首先在Telegram上搜索[BotFather](https://t.me/BotFather)机器人
6 |
7 | 
8 |
9 | Ⅱ.利用[BotFather](https://t.me/BotFather)创建一个属于自己的通知机器人,按照下图中的1、2、3步骤拿到token,格式形如```10xxx4:AAFcqxxxxgER5uw```。填入```TG_BOT_TOKEN```
10 |
11 | 
12 |
13 | **新创建的机器人需要跟它发一条消息来开启对话,否则可能会遇到secret填对了但是收不到消息的情况**
14 |
15 | Ⅲ.再次在Telegram上搜索[getuserIDbot](https://t.me/getuserIDbot)机器人,获取UserID。填入```TG_USER_ID```
16 |
17 | 
18 |
19 | 至此,获取**TG_BOT_TOKEN**以及**TG_USER_ID**的教程结束
20 |
--------------------------------------------------------------------------------
/docker/notify_docker_user.js:
--------------------------------------------------------------------------------
1 | const notify = require('../sendNotify');
2 | const fs = require('fs');
3 | const notifyPath = '/scripts/logs/notify.txt';
4 | async function image_update_notify() {
5 | if (fs.existsSync(notifyPath)) {
6 | const content = await fs.readFileSync(`${notifyPath}`, 'utf8');//读取notify.txt内容
7 | if (process.env.NOTIFY_CONTENT && !content.includes(process.env.NOTIFY_CONTENT)) {
8 | await notify.sendNotify("⚠️Docker镜像版本更新通知⚠️", process.env.NOTIFY_CONTENT);
9 | await fs.writeFileSync(`${notifyPath}`, process.env.NOTIFY_CONTENT);
10 | }
11 | } else {
12 | if (process.env.NOTIFY_CONTENT) {
13 | notify.sendNotify("⚠️Docker镜像版本更新通知⚠️", process.env.NOTIFY_CONTENT)
14 | await fs.writeFileSync(`${notifyPath}`, process.env.NOTIFY_CONTENT);
15 | }
16 | }
17 | }
18 | !(async() => {
19 | await image_update_notify();
20 | })().catch((e) => console.log(e))
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "LXK9301",
3 | "version": "1.0.0",
4 | "description": "{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}",
5 | "main": "AlipayManor.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "https://github.com/LXK9301/jd_scripts.git"
12 | },
13 | "keywords": [
14 | "京东薅羊毛工具, 京东水果、宠物、种豆等等"
15 | ],
16 | "author": "LXK9301",
17 | "license": "ISC",
18 | "dependencies": {
19 | "crypto-js": "^4.0.0",
20 | "download": "^6.2.5",
21 | "got": "^11.5.1",
22 | "http-server": "^0.12.3",
23 | "qrcode-terminal": "^0.12.0",
24 | "request": "^2.88.2",
25 | "tough-cookie": "^4.0.0",
26 | "tunnel": "0.0.6",
27 | "ws": "^7.4.3",
28 | "png-js": "^1.0.0",
29 | "jsdom": "^17.0.0"
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/backUp/GetJdCookie.md:
--------------------------------------------------------------------------------
1 | ## 浏览器获取京东cookie教程
2 |
3 | **以下浏览器都行**
4 |
5 | - Chrome浏览器
6 | - 新版Edge浏览器
7 | - 国产360,QQ浏览器切换到极速模式
8 |
9 | ### 操作步骤
10 |
11 | 1. 电脑浏览器打开京东网址 [https://m.jd.com/](https://m.jd.com/)
12 | 2. 按键盘F12键打开开发者工具,然后点下图中的图标
13 | 
14 | 3. 此时是未登录状态(使用手机短信验证码登录),如已登录请忽略此步骤
15 | - 使用手机短信验证码登录(此方式cookie有效时长大概31天,其他登录方式比较短)
16 | 4. 登录后,选择Network,有很多链接的话点箭头这里清空下
17 | 
18 | 5. 然后再点我的,链接就变少了
19 | 
20 | 6. 点第一个链接(log.gif)进去,找到cookie,复制出来,新建一个TXT文本临时保存一下,下面需要用到
21 | 
22 | 7. 第六步复制出来的cookie比较长,我们只需要`pt_pin=xxxx;`和 `pt_key=xxxx;`部分的内容即可(注:英文引号`;`是必要的)。可以用下面的脚本,在Chrome浏览器按F12,console里面输入下面脚本按enter回车键
23 | ```
24 | var CV = '单引号里面放第六步拿到的cookie';
25 | var CookieValue = CV.match(/pt_pin=.+?;/) + CV.match(/pt_key=.+?;/);
26 | copy(CookieValue);
27 | ```
28 | 8. 这样子整理出关键的的cookie已经在你的剪贴板上, 可直接粘贴
29 |
30 | 9. 如果需获取第二个京东账号的cookie,不要在刚才的浏览器上面退出登录账号一(否则刚才获取的cookie会失效),需另外换一个浏览器(Chrome浏览器 `ctr+shift+n` 打开无痕模式也行),然后继续按上面步骤操作即可
31 |
32 |
33 |
--------------------------------------------------------------------------------
/docker/proc_file.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | if [[ -f /usr/bin/jd_bot && -z "$DISABLE_SPNODE" ]]; then
4 | CMD="spnode"
5 | else
6 | CMD="node"
7 | fi
8 |
9 | echo "处理jd_crazy_joy_coin任务。。。"
10 | if [ ! $CRZAY_JOY_COIN_ENABLE ]; then
11 | echo "默认启用jd_crazy_joy_coin杀掉jd_crazy_joy_coin任务,并重启"
12 | eval $(ps -ef | grep "jd_crazy_joy_coin" | grep -v "grep" | awk '{print "kill "$1}')
13 | echo '' >/scripts/logs/jd_crazy_joy_coin.log
14 | $CMD /scripts/jd_crazy_joy_coin.js | ts >>/scripts/logs/jd_crazy_joy_coin.log 2>&1 &
15 | echo "默认jd_crazy_joy_coin重启完成"
16 | else
17 | if [ $CRZAY_JOY_COIN_ENABLE = "Y" ]; then
18 | echo "配置启用jd_crazy_joy_coin,杀掉jd_crazy_joy_coin任务,并重启"
19 | eval $(ps -ef | grep "jd_crazy_joy_coin" | grep -v "grep" | awk '{print "kill "$1}')
20 | echo '' >/scripts/logs/jd_crazy_joy_coin.log
21 | $CMD /scripts/jd_crazy_joy_coin.js | ts >>/scripts/logs/jd_crazy_joy_coin.log 2>&1 &
22 | echo "配置jd_crazy_joy_coin重启完成"
23 | else
24 | eval $(ps -ef | grep "jd_crazy_joy_coin" | grep -v "grep" | awk '{print "kill "$1}')
25 | echo "已配置不启用jd_crazy_joy_coin任务,仅杀掉"
26 | fi
27 | fi
28 |
--------------------------------------------------------------------------------
/QuantumultX/lxk0301_cookies.conf:
--------------------------------------------------------------------------------
1 | hostname = draw.jdfcloud.com, jdjoy.jd.com, account.huami.com, me-api.jd.com
2 |
3 | # 获取多账号京东Cookie
4 | https:\/\/me-api\.jd\.com\/user_new\/info\/GetJDUserInfoUnion url script-request-header https://gitee.com/lxk0301/jd_scripts/raw/master/JD_extra_cookie.js
5 |
6 | # 宠汪汪强制为别人助力
7 | ^https:\/\/draw\.jdfcloud\.com\/\/common\/pet\/enterRoom\/h5\?invitePin=.*(&inviteSource=task_invite&shareSource=\w+&inviteTimeStamp=\d+&openId=\w+)?&reqSource=weapp|^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/pet\/helpFriend\?friendPin url script-request-header https://gitee.com/lxk0301/jd_scripts/raw/master/jd_joy_help.js
8 |
9 | # 宠汪汪赛跑
10 | ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/addUser\?code= url script-response-body https://gitee.com/lxk0301/jd_scripts/raw/master/jd_joy_run.js
11 |
12 | # 宠汪汪赛跑
13 | ^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/user\/detail\?openId= url script-request-header https://gitee.com/lxk0301/jd_scripts/raw/master/jd_joy_run.js
14 |
15 | # 小米运动
16 | ^https:\/\/account\.huami\.com\/v2\/client\/login url script-response-body https://gitee.com/lxk0301/jd_scripts/raw/master/backUp/xmSports.js
17 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # JDJB
2 | 个人自用最全主库,集合可用脚本,适用于青龙面板。
3 |
4 | 频道:https://t.me/KingRan521
5 |
6 | 拉库命令:
7 |
8 | 国内鸡:
9 |
10 | ql repo https://ghproxy.com/github.com/KingRan/JDJB.git "jd_|jx_|jdCookie" "activity|backUp" "^jd[^_]|USER|utils|function|sign|sendNotify|ql|JDJR"
11 |
12 | 国外鸡:
13 |
14 | ql repo https://github.com/KingRan/JDJB.git "jd_|jx_|jdCookie" "activity|backUp" "^jd[^_]|USER|utils|function|sign|sendNotify|ql|JDJR"
15 |
16 |
17 | 1、搬运整理,感谢所有原作者。
18 |
19 | 2、个人学习目的,请下载后24小时内删除下载的代码。
20 |
21 |
22 | 1.出现这种错误:
23 |
24 | Cannot find module 'xxxx'
25 |
26 | 依赖不完整,解决方法:
27 |
28 | docker exec -it qinglong(容器名称) bash
29 |
30 | cd /ql/scripts/
31 |
32 | pnpm install 'xxxx'
33 |
34 | npm install 'xxxx'
35 |
36 | 这两个安装命令都可以用
37 |
38 | 2.出现这种错误:
39 |
40 | Cannot find module './xxxx'
41 |
42 | 那就很有是拉库命令不完整,请检查或复制完整的拉库命令。
43 |
44 | 部分需要的依赖:自行安装
45 |
46 | "npm install -g npm"
47 |
48 | "pip3 install requests"
49 |
50 | "pip3 install pytz"
51 |
52 | "npm install -g download"
53 |
54 | "pnpm install jsdom"
55 |
56 | "apk add --no-cache build-base g++ cairo-dev pango-dev giflib-dev && cd scripts && npm install canvas png-js md5 date-fns axios crypto-js tslib ts-md5 @types/node --build-from-source"
57 |
58 |
--------------------------------------------------------------------------------
/jdPetShareCodes.js:
--------------------------------------------------------------------------------
1 | /*
2 | 东东萌宠互助码
3 | 此文件为Node.js专用。其他用户请忽略
4 | 支持京东N个账号
5 | */
6 | //云服务器腾讯云函数等NOde.js用户在此处填写东东萌宠的好友码。
7 | // 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例
8 | // 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2
9 | let PetShareCodes = [
10 | '']
11 |
12 | // 从日志获取互助码
13 | // const logShareCodes = require('./utils/jdShareCodes');
14 | // if (logShareCodes.PETSHARECODES.length > 0 && !process.env.PETSHARECODES) {
15 | // process.env.PETSHARECODES = logShareCodes.PETSHARECODES.join('&');
16 | // }
17 |
18 | // 判断github action里面是否有东东萌宠互助码
19 | if (process.env.PETSHARECODES) {
20 | if (process.env.PETSHARECODES.indexOf('&') > -1) {
21 | console.log(`您的东东萌宠互助码选择的是用&隔开\n`)
22 | PetShareCodes = process.env.PETSHARECODES.split('&');
23 | } else if (process.env.PETSHARECODES.indexOf('\n') > -1) {
24 | console.log(`您的东东萌宠互助码选择的是用换行隔开\n`)
25 | PetShareCodes = process.env.PETSHARECODES.split('\n');
26 | } else {
27 | PetShareCodes = process.env.PETSHARECODES.split();
28 | }
29 | } else {
30 | console.log(`由于您环境变量(PETSHARECODES)里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`)
31 | }
32 | for (let i = 0; i < PetShareCodes.length; i++) {
33 | const index = (i + 1 === 1) ? '' : (i + 1);
34 | exports['PetShareCode' + index] = PetShareCodes[i];
35 | }
--------------------------------------------------------------------------------
/jdFruitShareCodes.js:
--------------------------------------------------------------------------------
1 | /*
2 | 东东农场互助码
3 | 此文件为Node.js专用。其他用户请忽略
4 | 支持京东N个账号
5 | */
6 | //云服务器腾讯云函数等NOde.js用户在此处填写京东东农场的好友码。
7 | // 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例
8 | // 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2
9 | let FruitShareCodes = [
10 | '']
11 |
12 | // 从日志获取互助码
13 | // const logShareCodes = require('./utils/jdShareCodes');
14 | // if (logShareCodes.FRUITSHARECODES.length > 0 && !process.env.FRUITSHARECODES) {
15 | // process.env.FRUITSHARECODES = logShareCodes.FRUITSHARECODES.join('&');
16 | // }
17 |
18 | // 判断github action里面是否有东东农场互助码
19 | if (process.env.FRUITSHARECODES) {
20 | if (process.env.FRUITSHARECODES.indexOf('&') > -1) {
21 | console.log(`您的东东农场互助码选择的是用&隔开\n`)
22 | FruitShareCodes = process.env.FRUITSHARECODES.split('&');
23 | } else if (process.env.FRUITSHARECODES.indexOf('\n') > -1) {
24 | console.log(`您的东东农场互助码选择的是用换行隔开\n`)
25 | FruitShareCodes = process.env.FRUITSHARECODES.split('\n');
26 | } else {
27 | FruitShareCodes = process.env.FRUITSHARECODES.split();
28 | }
29 | } else {
30 | console.log(`由于您环境变量(FRUITSHARECODES)里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`)
31 | }
32 | for (let i = 0; i < FruitShareCodes.length; i++) {
33 | const index = (i + 1 === 1) ? '' : (i + 1);
34 | exports['FruitShareCode' + index] = FruitShareCodes[i];
35 | }
36 |
--------------------------------------------------------------------------------
/jdDreamFactoryShareCodes.js:
--------------------------------------------------------------------------------
1 | /*
2 | 京喜工厂互助码
3 | 此文件为Node.js专用。其他用户请忽略
4 | 支持京东N个账号
5 | */
6 | //云服务器腾讯云函数等NOde.js用户在此处填写东东萌宠的好友码。
7 | // 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例
8 | // 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2
9 | let shareCodes = [
10 | '']
11 |
12 | // 从日志获取互助码
13 | // const logShareCodes = require('./utils/jdShareCodes');
14 | // if (logShareCodes.DREAM_FACTORY_SHARE_CODES.length > 0 && !process.env.DREAM_FACTORY_SHARE_CODES) {
15 | // process.env.DREAM_FACTORY_SHARE_CODES = logShareCodes.DREAM_FACTORY_SHARE_CODES.join('&');
16 | // }
17 |
18 | // 判断环境变量里面是否有京喜工厂互助码
19 | if (process.env.DREAM_FACTORY_SHARE_CODES) {
20 | if (process.env.DREAM_FACTORY_SHARE_CODES.indexOf('&') > -1) {
21 | console.log(`您的互助码选择的是用&隔开\n`)
22 | shareCodes = process.env.DREAM_FACTORY_SHARE_CODES.split('&');
23 | } else if (process.env.DREAM_FACTORY_SHARE_CODES.indexOf('\n') > -1) {
24 | console.log(`您的互助码选择的是用换行隔开\n`)
25 | shareCodes = process.env.DREAM_FACTORY_SHARE_CODES.split('\n');
26 | } else {
27 | shareCodes = process.env.DREAM_FACTORY_SHARE_CODES.split();
28 | }
29 | } else {
30 | console.log(`由于您环境变量(DREAM_FACTORY_SHARE_CODES)里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`)
31 | }
32 | for (let i = 0; i < shareCodes.length; i++) {
33 | const index = (i + 1 === 1) ? '' : (i + 1);
34 | exports['shareCodes' + index] = shareCodes[i];
35 | }
36 |
--------------------------------------------------------------------------------
/jdFactoryShareCodes.js:
--------------------------------------------------------------------------------
1 | /*
2 | 东东工厂互助码
3 | 此文件为Node.js专用。其他用户请忽略
4 | 支持京东N个账号
5 | */
6 | //云服务器腾讯云函数等NOde.js用户在此处填写东东萌宠的好友码。
7 | // 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例
8 | // 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2
9 | let shareCodes = [
10 | '',//账号一的好友shareCode,不同好友中间用@符号隔开
11 | '',//账号二的好友shareCode,不同好友中间用@符号隔开
12 | ]
13 |
14 | // 从日志获取互助码
15 | // const logShareCodes = require('./utils/jdShareCodes');
16 | // if (logShareCodes.DDFACTORY_SHARECODES.length > 0 && !process.env.DDFACTORY_SHARECODES) {
17 | // process.env.DDFACTORY_SHARECODES = logShareCodes.DDFACTORY_SHARECODES.join('&');
18 | // }
19 |
20 | // 判断环境变量里面是否有东东工厂互助码
21 | if (process.env.DDFACTORY_SHARECODES) {
22 | if (process.env.DDFACTORY_SHARECODES.indexOf('&') > -1) {
23 | console.log(`您的互助码选择的是用&隔开\n`)
24 | shareCodes = process.env.DDFACTORY_SHARECODES.split('&');
25 | } else if (process.env.DDFACTORY_SHARECODES.indexOf('\n') > -1) {
26 | console.log(`您的互助码选择的是用换行隔开\n`)
27 | shareCodes = process.env.DDFACTORY_SHARECODES.split('\n');
28 | } else {
29 | shareCodes = process.env.DDFACTORY_SHARECODES.split();
30 | }
31 | } else {
32 | console.log(`由于您环境变量(DDFACTORY_SHARECODES)里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`)
33 | }
34 | for (let i = 0; i < shareCodes.length; i++) {
35 | const index = (i + 1 === 1) ? '' : (i + 1);
36 | exports['shareCodes' + index] = shareCodes[i];
37 | }
--------------------------------------------------------------------------------
/backUp/GetJdCookie2.md:
--------------------------------------------------------------------------------
1 | ## 浏览器插件获取京东cookie教程
2 | > 此教程内容由tg用户@wukongdada提供,特此感谢
3 |
4 | **以下浏览器都行**
5 |
6 | - Chrome浏览器
7 | - 新版Edge浏览器(chrome内核)
8 |
9 | ### 操作步骤
10 |
11 | 1. 电脑浏览器打开京东网址 [https://m.jd.com/](https://m.jd.com/)
12 | 2. Chrome类浏览器安装EditThisCookie插件
13 | - Chrome插件商店搜EditThisCookie, 或者[打开此网站](https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg?utm_source=chrome-ntp-icon) 进行安装
14 | - 仅使用百分浏览器,谷歌浏览器测试过,其他谷歌类浏览器请自行测试。
15 | - 无法登录Chrome插件商店或者打不开网址建议使用edge chrome版。
16 | 3. edge chrome浏览器安装Cookie Editor插件
17 | - [edge插件商店](edge://extensions/)搜Cookie Editor,或[打开以下网址](https://microsoftedge.microsoft.com/addons/detail/cookie-editor/ajfboaconbpkglpfanbmlfgojgndmhmc?hl=zh-CN) 完成插件安装
18 | 4. 以下是chrome和edge的相关设置截图,输入的网址是 ``jd.com``
19 |
20 | 
21 |
22 | 
23 |
24 | 5. 现在点击回到京东触屏版,再点击EditThisCookie/Cookie Editor,再点击搜索,输入key或pin,如下图所示的pt_key,复制pt_key的value值。此插件可以看到cookie的有效期。
25 |
26 | 
27 |
28 | 6. 按照以下格式形成自己的jd_cookie
29 | - `pt_key=复制插件搜索出来的key值;pt_pin=复制插件搜索出来的pin值;` ,后面的英文引号`;`是必须要的
30 | - 给一个京东cookie具体示例 `pt_key=jdDC2F833333EFDGTCE5BD4AD1A952D4F4DF84A46052;pt_pin=jd_123456;`
31 |
32 | 7. 如果需获取第二个京东账号的cookie,不要在刚才的浏览器上面退出登录账号一(否则刚才获取的cookie会失效),需另外换一个浏览器(Chrome浏览器 `ctr+shift+n` 打开无痕模式也行),然后继续按上面步骤操作即可
33 |
34 |
35 |
--------------------------------------------------------------------------------
/jdPlantBeanShareCodes.js:
--------------------------------------------------------------------------------
1 | /*
2 | 京东种豆得豆互助码
3 | 此文件为Node.js专用。其他用户请忽略
4 | 支持京东N个账号
5 | */
6 | //云服务器腾讯云函数等NOde.js用户在此处填写东东萌宠的好友码。
7 | // 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例
8 | // 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2
9 | let PlantBeanShareCodes = [
10 | '']
11 |
12 | // 从日志获取互助码
13 | // const logShareCodes = require('./utils/jdShareCodes');
14 | // if (logShareCodes.PLANT_BEAN_SHARECODES.length > 0 && !process.env.PLANT_BEAN_SHARECODES) {
15 | // process.env.PLANT_BEAN_SHARECODES = logShareCodes.PLANT_BEAN_SHARECODES.join('&');
16 | // }
17 |
18 | // 判断github action里面是否有种豆得豆互助码
19 | if (process.env.PLANT_BEAN_SHARECODES) {
20 | if (process.env.PLANT_BEAN_SHARECODES.indexOf('&') > -1) {
21 | console.log(`您的种豆互助码选择的是用&隔开\n`)
22 | PlantBeanShareCodes = process.env.PLANT_BEAN_SHARECODES.split('&');
23 | } else if (process.env.PLANT_BEAN_SHARECODES.indexOf('\n') > -1) {
24 | console.log(`您的种豆互助码选择的是用换行隔开\n`)
25 | PlantBeanShareCodes = process.env.PLANT_BEAN_SHARECODES.split('\n');
26 | } else {
27 | PlantBeanShareCodes = process.env.PLANT_BEAN_SHARECODES.split();
28 | }
29 | } else {
30 | console.log(`由于您环境变量(PLANT_BEAN_SHARECODES)里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`)
31 | }
32 | for (let i = 0; i < PlantBeanShareCodes.length; i++) {
33 | const index = (i + 1 === 1) ? '' : (i + 1);
34 | exports['PlantBeanShareCodes' + index] = PlantBeanShareCodes[i];
35 | }
36 |
--------------------------------------------------------------------------------
/jdJxncShareCodes.js:
--------------------------------------------------------------------------------
1 | /*
2 | 京喜农场助力码
3 | 此助力码要求种子 active 相同才能助力,多个账号的话可以种植同样的种子,如果种子不同的话,会自动跳过使用云端助力
4 | 此文件为Node.js专用。其他用户请忽略
5 | 支持京东N个账号
6 | */
7 | //云服务器腾讯云函数等NOde.js用户在此处填写京京喜农场的好友码。
8 | // 同一个京东账号的好友助力码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例
9 | // 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2
10 | // 注意:京喜农场 种植种子发生变化的时候,互助码也会变!!
11 | // 注意:京喜农场 种植种子发生变化的时候,互助码也会变!!
12 | // 注意:京喜农场 种植种子发生变化的时候,互助码也会变!!
13 | // 每个账号 shareCdoe 是一个 json,示例如下
14 | // {"smp":"22bdadsfaadsfadse8a","active":"jdnc_1_btorange210113_2","joinnum":"1"}
15 | let JxncShareCodes = [
16 | '',//账号一的好友shareCode,不同好友中间用@符号隔开
17 | '',//账号二的好友shareCode,不同好友中间用@符号隔开
18 | ]
19 | // 判断github action里面是否有京喜农场助力码
20 | if (process.env.JXNC_SHARECODES) {
21 | if (process.env.JXNC_SHARECODES.indexOf('&') > -1) {
22 | console.log(`您的京喜农场助力码选择的是用&隔开\n`)
23 | JxncShareCodes = process.env.JXNC_SHARECODES.split('&');
24 | } else if (process.env.JXNC_SHARECODES.indexOf('\n') > -1) {
25 | console.log(`您的京喜农场助力码选择的是用换行隔开\n`)
26 | JxncShareCodes = process.env.JXNC_SHARECODES.split('\n');
27 | } else {
28 | JxncShareCodes = process.env.JXNC_SHARECODES.split();
29 | }
30 | } else {
31 | console.log(`由于您环境变量里面(JXNC_SHARECODES)未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`)
32 | }
33 | JxncShareCodes = JxncShareCodes.filter(item => !!item);
34 | for (let i = 0; i < JxncShareCodes.length; i++) {
35 | const index = (i + 1 === 1) ? '' : (i + 1);
36 | exports['JxncShareCode' + index] = JxncShareCodes[i];
37 | }
38 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | //'use strict';
2 | exports.main_handler = async (event, context, callback) => {
3 | try {
4 | const { TENCENTSCF_SOURCE_TYPE, TENCENTSCF_SOURCE_URL } = process.env
5 | //如果想在一个定时触发器里面执行多个js文件需要在定时触发器的【附加信息】里面填写对应的名称,用 & 链接
6 | //例如我想一个定时触发器里执行jd_speed.js和jd_bean_change.js,在定时触发器的【附加信息】里面就填写 jd_speed&jd_bean_change
7 | for (const v of event["Message"].split("&")) {
8 | console.log(v);
9 | var request = require('request');
10 | switch (TENCENTSCF_SOURCE_TYPE) {
11 | case 'local':
12 | //1.执行自己上传的js文件
13 | delete require.cache[require.resolve('./'+v+'.js')];
14 | require('./'+v+'.js')
15 | break;
16 | case 'git':
17 | //2.执行github远端的js文件(因github的raw类型的文件被墙,此方法云函数不推荐)
18 | request(`https://raw.githubusercontent.com/xxx/jd_scripts/master/${v}.js`, function (error, response, body) {
19 | eval(response.body)
20 | })
21 | break;
22 | case 'custom':
23 | //3.执行自定义远端js文件网址
24 | if (!TENCENTSCF_SOURCE_URL) return console.log('自定义模式需要设置TENCENTSCF_SOURCE_URL变量')
25 | request(`${TENCENTSCF_SOURCE_URL}${v}.js`, function (error, response, body) {
26 | eval(response.body)
27 | })
28 | break;
29 | default:
30 | //4.执行国内gitee远端的js文件(如果部署在国内节点,选择1或3。默认使用gitee的方式)
31 | request(`${v}.js`, function (error, response, body) {
32 | eval(response.body)
33 | })
34 | break;
35 | }
36 | }
37 | } catch (e) {
38 | console.error(e)
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/docker/docker_entrypoint.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 |
4 | #获取配置的自定义参数
5 | if [ -n "$1" ]; then
6 | run_cmd=$1
7 | fi
8 |
9 | (
10 | if [ -f "/scripts/logs/pull.lock" ]; then
11 | echo "存在更新锁定文件,跳过git pull操作..."
12 | else
13 | echo "设定远程仓库地址..."
14 | cd /scripts
15 | git remote set-url origin "$REPO_URL"
16 | git reset --hard
17 | echo "git pull拉取最新代码..."
18 | git -C /scripts pull --rebase
19 | echo "npm install 安装最新依赖"
20 | npm install --prefix /scripts
21 | fi
22 | ) || exit 0
23 |
24 | # 默认启动telegram交互机器人的条件
25 | # 确认容器启动时调用的docker_entrypoint.sh
26 | # 必须配置TG_BOT_TOKEN、TG_USER_ID,
27 | # 且未配置DISABLE_BOT_COMMAND禁用交互,
28 | # 且未配置自定义TG_API_HOST,因为配置了该变量,说明该容器环境可能并能科学的连到telegram服务器
29 | if [[ -n "$run_cmd" && -n "$TG_BOT_TOKEN" && -n "$TG_USER_ID" && -z "$DISABLE_BOT_COMMAND" && -z "$TG_API_HOST" ]]; then
30 | ENABLE_BOT_COMMAND=True
31 | else
32 | ENABLE_BOT_COMMAND=False
33 | fi
34 |
35 | echo "------------------------------------------------执行定时任务任务shell脚本------------------------------------------------"
36 | #测试
37 | # sh /jd_docker/docker/default_task.sh "$ENABLE_BOT_COMMAND" "$run_cmd"
38 | #合并
39 | sh /scripts/docker/default_task.sh "$ENABLE_BOT_COMMAND" "$run_cmd"
40 | echo "--------------------------------------------------默认定时任务执行完成---------------------------------------------------"
41 |
42 | if [ -n "$run_cmd" ]; then
43 | # 增加一层jd_bot指令已经正确安装成功校验
44 | # 以上条件都满足后会启动jd_bot交互,否还是按照以前的模式启动,最大程度避免现有用户改动调整
45 | if [[ "$ENABLE_BOT_COMMAND" == "True" && -f /usr/bin/jd_bot ]]; then
46 | echo "启动crontab定时任务主进程..."
47 | crond
48 | echo "启动telegram bot指令交主进程..."
49 | jd_bot
50 | else
51 | echo "启动crontab定时任务主进程..."
52 | crond -f
53 | fi
54 |
55 | else
56 | echo "默认定时任务执行结束。"
57 | fi
58 |
--------------------------------------------------------------------------------
/docker/example/jd_scripts.custom-append.syno.json:
--------------------------------------------------------------------------------
1 | {
2 | "cap_add" : [],
3 | "cap_drop" : [],
4 | "cmd" : "",
5 | "cpu_priority" : 50,
6 | "devices" : null,
7 | "enable_publish_all_ports" : false,
8 | "enable_restart_policy" : true,
9 | "enabled" : true,
10 | "env_variables" : [
11 | {
12 | "key" : "PATH",
13 | "value" : "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
14 | },
15 | {
16 | "key" : "CDN_JD_DAILYBONUS",
17 | "value" : "true"
18 | },
19 | {
20 | "key" : "JD_COOKIE",
21 | "value" : "pt_key=xxx;pt_pin=xxx;"
22 | },
23 | {
24 | "key" : "PUSH_KEY",
25 | "value" : ""
26 | },
27 | {
28 | "key" : "CUSTOM_LIST_FILE",
29 | "value" : "my_crontab_list.sh"
30 | }
31 | ],
32 | "exporting" : false,
33 | "id" : "3a2f6f27c23f93bc104585c22569c760cc9ce82df09cdb41d53b491fe1d0341c",
34 | "image" : "lxk0301/jd_scripts",
35 | "is_ddsm" : false,
36 | "is_package" : false,
37 | "links" : [],
38 | "memory_limit" : 0,
39 | "name" : "jd_scripts",
40 | "network" : [
41 | {
42 | "driver" : "bridge",
43 | "name" : "bridge"
44 | }
45 | ],
46 | "network_mode" : "default",
47 | "port_bindings" : [],
48 | "privileged" : false,
49 | "shortcut" : {
50 | "enable_shortcut" : false
51 | },
52 | "use_host_network" : false,
53 | "volume_bindings" : [
54 | {
55 | "host_volume_file" : "/docker/jd_scripts/my_crontab_list.sh",
56 | "mount_point" : "/scripts/docker/my_crontab_list.sh",
57 | "type" : "rw"
58 | },
59 | {
60 | "host_volume_file" : "/docker/jd_scripts/logs",
61 | "mount_point" : "/scripts/logs",
62 | "type" : "rw"
63 | }
64 | ]
65 | }
66 |
--------------------------------------------------------------------------------
/docker/example/default.yml:
--------------------------------------------------------------------------------
1 | jd_scripts:
2 | image: lxk0301/jd_scripts
3 | # 配置服务器资源约束。此例子中服务被限制为使用内存不超过200M以及cpu不超过0.2(单核的20%)
4 | # 经过实际测试,建议不低于200M
5 | # deploy:
6 | # resources:
7 | # limits:
8 | # cpus: '0.2'
9 | # memory: 200M
10 | container_name: jd_scripts
11 | restart: always
12 | volumes:
13 | - ./logs:/scripts/logs
14 | tty: true
15 | # 因为更换仓库地址可能git pull的dns解析不到,可以在配置追加hosts
16 | extra_hosts:
17 | - "gitee.com:180.97.125.228"
18 | - "github.com:13.229.188.59"
19 | - "raw.githubusercontent.com:151.101.228.133"
20 | environment:
21 | #脚本更新仓库地址,配置了会切换到对应的地址
22 | - REPO_URL=git@gitee.com:lxk0301/jd_scripts.git
23 | # 注意环境变量填写值的时候一律不需要引号(""或者'')下面这些只是示例,根据自己的需求增加删除
24 | #jd cookies
25 | # 例: JD_COOKIE=pt_key=XXX;pt_pin=XXX;
26 | # 例(多账号): JD_COOKIE=pt_key=XXX;pt_pin=XXX;&pt_key=XXX;pt_pin=XXX;&pt_key=XXX;pt_pin=XXX;
27 | - JD_COOKIE=
28 | #微信server酱通知
29 | - PUSH_KEY=
30 | #Bark App通知
31 | - BARK_PUSH=
32 | #telegram机器人通知
33 | - TG_BOT_TOKEN=
34 | - TG_USER_ID=
35 | #钉钉机器人通知
36 | - DD_BOT_TOKEN=
37 | - DD_BOT_SECRET=
38 | #企业微信机器人通知
39 | - QYWX_KEY=
40 | #京东种豆得豆
41 | - PLANT_BEAN_SHARECODES=
42 | #京东农场
43 | # 例: FRUITSHARECODES=京东农场的互助码
44 | - FRUITSHARECODES=
45 | #京东萌宠
46 | # 例: PETSHARECODES=东东萌宠的互助码
47 | - PETSHARECODES=
48 | # 宠汪汪的喂食数量
49 | - JOY_FEED_COUNT=
50 | #东东超市
51 | # - SUPERMARKET_SHARECODES=
52 | #兑换多少数量的京豆(20,或者1000京豆,或者其他奖品的文字)
53 | # 例: MARKET_COIN_TO_BEANS=1000
54 | - MARKET_COIN_TO_BEANS=
55 |
56 | #如果设置了 RANDOM_DELAY_MAX ,则会启用随机延迟功能,延迟随机 0 到 RANDOM_DELAY_MAX-1 秒。如果不设置此项,则不使用延迟。
57 | #并不是所有的脚本都会被启用延迟,因为有一些脚本需要整点触发。延迟的目的有两个,1是降低抢占cpu资源几率,2是降低检查风险(主要是1)
58 | #填写数字,单位为秒,比如写为 RANDOM_DELAY_MAX=30 就是随机产生0到29之间的一个秒数,执行延迟的意思。
59 | - RANDOM_DELAY_MAX=120
60 |
--------------------------------------------------------------------------------
/activity/jd_ftzy_help.js:
--------------------------------------------------------------------------------
1 | let common = require("./function/common");
2 | let $ = new common.env('京东沸腾之夜助力');
3 | let min = 3,
4 | help = $.config[$.filename(__filename)] || Math.min(min, $.config.JdMain) || min
5 | $.setOptions({
6 | headers: {
7 | 'content-type': 'application/json',
8 | 'user-agent': 'jdapp;iPhone;9.4.6;14.2;965af808880443e4c1306a54afdd5d5ae771de46;network/wifi;supportApplePay/0;hasUPPay/0;hasOCPay/0;model/iPhone8,4;addressid/;supportBestPay/0;appBuild/167618;jdSupportDarkMode/0;Mozilla/5.0 (iPhone; CPU iPhone OS 14_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
9 | 'referer': 'https://happy.m.jd.com/babelDiy/Zeus/3ugedFa7yA6NhxLN5gw2L3PF9sQC/index.html',
10 | }
11 | });
12 | $.readme = `
13 | 0 0 * * * task ${$.runfile}
14 | exprot ${$.runfile}=2 # 如需修改被助力账号个数,请自行修改环境变量
15 | `
16 | eval(common.eval.mainEval($));
17 | async function prepare() {
18 | for (let i of cookies['help']) {
19 | let s = await $.curl({
20 | 'url': `https://api.m.jd.com/client.action?advId=party1031_init`,
21 | 'form': `functionId=party1031_init&body={}&client=wh5&clientVersion=1.0.0&appid=o2_act&uuid=cf7d66dca8a794007c133227f504a8e2aff131e7`,
22 | cookie: i
23 | },'s')
24 | try {
25 | $.sharecode.push($.compact($.s.data.result, ['inviteCode']))
26 | } catch (e) {}
27 | }
28 | }
29 | async function main(p) {
30 | let cookie = p.cookie
31 | await $.curl({
32 | 'url': `https://api.m.jd.com/client.action?advId=party1031_assist`,
33 | 'form': `functionId=party1031_assist&client=wh5&clientVersion=1.0.0&appid=o2_act&_stk=appid,body,client,clientVersion,functionId&_ste=1&h5st=&body={"inviteCode":"${p.inviteCode}"}&uuid=cf7d66dca8a794007c133227f504a8e2aff131e7`,
34 | cookie
35 | },'s')
36 | console.log($.s.data);
37 | }
38 |
--------------------------------------------------------------------------------
/docker/example/jd_scripts.custom-overwrite.syno.json:
--------------------------------------------------------------------------------
1 | {
2 | "cap_add" : [],
3 | "cap_drop" : [],
4 | "cmd" : "",
5 | "cpu_priority" : 50,
6 | "devices" : null,
7 | "enable_publish_all_ports" : false,
8 | "enable_restart_policy" : true,
9 | "enabled" : true,
10 | "env_variables" : [
11 | {
12 | "key" : "PATH",
13 | "value" : "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
14 | },
15 | {
16 | "key" : "CDN_JD_DAILYBONUS",
17 | "value" : "true"
18 | },
19 | {
20 | "key" : "JD_COOKIE",
21 | "value" : "pt_key=xxx;pt_pin=xxx;"
22 | },
23 | {
24 | "key" : "PUSH_KEY",
25 | "value" : ""
26 | },
27 | {
28 | "key" : "CUSTOM_LIST_FILE",
29 | "value" : "my_crontab_list.sh"
30 | },
31 | {
32 | "key" : "CUSTOM_LIST_MERGE_TYPE",
33 | "value" : "overwrite"
34 | }
35 | ],
36 | "exporting" : false,
37 | "id" : "3a2f6f27c23f93bc104585c22569c760cc9ce82df09cdb41d53b491fe1d0341c",
38 | "image" : "lxk0301/jd_scripts",
39 | "is_ddsm" : false,
40 | "is_package" : false,
41 | "links" : [],
42 | "memory_limit" : 0,
43 | "name" : "jd_scripts",
44 | "network" : [
45 | {
46 | "driver" : "bridge",
47 | "name" : "bridge"
48 | }
49 | ],
50 | "network_mode" : "default",
51 | "port_bindings" : [],
52 | "privileged" : false,
53 | "shortcut" : {
54 | "enable_shortcut" : false
55 | },
56 | "use_host_network" : false,
57 | "volume_bindings" : [
58 | {
59 | "host_volume_file" : "/docker/jd_scripts/my_crontab_list.sh",
60 | "mount_point" : "/scripts/docker/my_crontab_list.sh",
61 | "type" : "rw"
62 | },
63 | {
64 | "host_volume_file" : "/docker/jd_scripts/logs",
65 | "mount_point" : "/scripts/logs",
66 | "type" : "rw"
67 | }
68 | ]
69 | }
70 |
--------------------------------------------------------------------------------
/docker/example/custom-append.yml:
--------------------------------------------------------------------------------
1 | jd_scripts:
2 | image: lxk0301/jd_scripts
3 | # 配置服务器资源约束。此例子中服务被限制为使用内存不超过200M以及cpu不超过0.2(单核的20%)
4 | # 经过实际测试,建议不低于200M
5 | # deploy:
6 | # resources:
7 | # limits:
8 | # cpus: '0.2'
9 | # memory: 200M
10 | container_name: jd_scripts
11 | restart: always
12 | volumes:
13 | - ./my_crontab_list.sh:/scripts/docker/my_crontab_list.sh
14 | - ./logs:/scripts/logs
15 | tty: true
16 | # 因为更换仓库地址可能git pull的dns解析不到,可以在配置追加hosts
17 | extra_hosts:
18 | - "gitee.com:180.97.125.228"
19 | - "github.com:13.229.188.59"
20 | - "raw.githubusercontent.com:151.101.228.133"
21 | environment:
22 | #脚本更新仓库地址,配置了会切换到对应的地址
23 | - REPO_URL=git@gitee.com:lxk0301/jd_scripts.git
24 | # 注意环境变量填写值的时候一律不需要引号(""或者'')下面这些只是示例,根据自己的需求增加删除
25 | #jd cookies
26 | # 例: JD_COOKIE=pt_key=XXX;pt_pin=XXX;
27 | # 例(多账号): JD_COOKIE=pt_key=XXX;pt_pin=XXX;&pt_key=XXX;pt_pin=XXX;&pt_key=XXX;pt_pin=XXX;
28 | - JD_COOKIE=
29 | #微信server酱通知
30 | - PUSH_KEY=
31 | #Bark App通知
32 | - BARK_PUSH=
33 | #telegram机器人通知
34 | - TG_BOT_TOKEN=
35 | - TG_USER_ID=
36 | #钉钉机器人通知
37 | - DD_BOT_TOKEN=
38 | - DD_BOT_SECRET=
39 | #企业微信机器人通知
40 | - QYWX_KEY=
41 | #京东种豆得豆
42 | - PLANT_BEAN_SHARECODES=
43 | #京东农场
44 | # 例: FRUITSHARECODES=京东农场的互助码
45 | - FRUITSHARECODES=
46 | #京东萌宠
47 | # 例: PETSHARECODES=东东萌宠的互助码
48 | - PETSHARECODES=
49 | # 宠汪汪的喂食数量
50 | - JOY_FEED_COUNT=
51 | #东东超市
52 | # - SUPERMARKET_SHARECODES=
53 | #兑换多少数量的京豆(20,或者1000京豆,或者其他奖品的文字)
54 | # 例: MARKET_COIN_TO_BEANS=1000
55 | - MARKET_COIN_TO_BEANS=
56 | #如果设置了 RANDOM_DELAY_MAX ,则会启用随机延迟功能,延迟随机 0 到 RANDOM_DELAY_MAX-1 秒。如果不设置此项,则不使用延迟。
57 | #并不是所有的脚本都会被启用延迟,因为有一些脚本需要整点触发。延迟的目的有两个,1是降低抢占cpu资源几率,2是降低检查风险(主要是1)
58 | #填写数字,单位为秒,比如写为 RANDOM_DELAY_MAX=30 就是随机产生0到29之间的一个秒数,执行延迟的意思。
59 | - RANDOM_DELAY_MAX=120
60 | #使用自定义定任务追加默认任务之后,上面volumes挂载之后这里配置对应的文件名
61 | - CUSTOM_LIST_FILE=my_crontab_list.sh
62 |
63 |
--------------------------------------------------------------------------------
/docker/example/custom-overwrite.yml:
--------------------------------------------------------------------------------
1 | jd_scripts:
2 | image: lxk0301/jd_scripts
3 | # 配置服务器资源约束。此例子中服务被限制为使用内存不超过200M以及cpu不超过0.2(单核的20%)
4 | # 经过实际测试,建议不低于200M
5 | # deploy:
6 | # resources:
7 | # limits:
8 | # cpus: '0.2'
9 | # memory: 200M
10 | container_name: jd_scripts
11 | restart: always
12 | volumes:
13 | - ./my_crontab_list.sh:/scripts/docker/my_crontab_list.sh
14 | - ./logs:/scripts/logs
15 | tty: true
16 | # 因为更换仓库地址可能git pull的dns解析不到,可以在配置追加hosts
17 | extra_hosts:
18 | - "gitee.com:180.97.125.228"
19 | - "github.com:13.229.188.59"
20 | - "raw.githubusercontent.com:151.101.228.133"
21 | environment:
22 | #脚本更新仓库地址,配置了会切换到对应的地址
23 | - REPO_URL=git@gitee.com:lxk0301/jd_scripts.git
24 | # 注意环境变量填写值的时候一律不需要引号(""或者'')下面这些只是示例,根据自己的需求增加删除
25 | #jd cookies
26 | # 例: JD_COOKIE=pt_key=XXX;pt_pin=XXX;
27 | #例(多账号): JD_COOKIE=pt_key=XXX;pt_pin=XXX;&pt_key=XXX;pt_pin=XXX;&pt_key=XXX;pt_pin=XXX;
28 | - JD_COOKIE=
29 | #微信server酱通知
30 | - PUSH_KEY=
31 | #Bark App通知
32 | - BARK_PUSH=
33 | #telegram机器人通知
34 | - TG_BOT_TOKEN=
35 | - TG_USER_ID=
36 | #钉钉机器人通知
37 | - DD_BOT_TOKEN=
38 | - DD_BOT_SECRET=
39 | #企业微信机器人通知
40 | - QYWX_KEY=
41 | #京东种豆得豆
42 | - PLANT_BEAN_SHARECODES=
43 | #京东农场
44 | # 例: FRUITSHARECODES=京东农场的互助码
45 | - FRUITSHARECODES=
46 | #京东萌宠
47 | # 例: PETSHARECODES=东东萌宠的互助码
48 | - PETSHARECODES=
49 | # 宠汪汪的喂食数量
50 | - JOY_FEED_COUNT=
51 | #东东超市
52 | # - SUPERMARKET_SHARECODES=
53 | #兑换多少数量的京豆(20,或者1000京豆,或者其他奖品的文字)
54 | # 例: MARKET_COIN_TO_BEANS=1000
55 | - MARKET_COIN_TO_BEANS=
56 | #如果设置了 RANDOM_DELAY_MAX ,则会启用随机延迟功能,延迟随机 0 到 RANDOM_DELAY_MAX-1 秒。如果不设置此项,则不使用延迟。
57 | #并不是所有的脚本都会被启用延迟,因为有一些脚本需要整点触发。延迟的目的有两个,1是降低抢占cpu资源几率,2是降低检查风险(主要是1)
58 | #填写数字,单位为秒,比如写为 RANDOM_DELAY_MAX=30 就是随机产生0到29之间的一个秒数,执行延迟的意思。
59 | - RANDOM_DELAY_MAX=120
60 | #使用自定义定任务覆盖默认任务,上面volumes挂载之后这里配置对应的文件名,和自定义文件使用方式为overwrite
61 | - CUSTOM_LIST_FILE=my_crontab_list.sh
62 | - CUSTOM_LIST_MERGE_TYPE=overwrite
63 |
--------------------------------------------------------------------------------
/jd_sign.js:
--------------------------------------------------------------------------------
1 | //48 9,22 * * * jd_sign.js
2 | /*
3 | [task_local]
4 | 京东签到
5 | 48 9,22 * * * jd_sign.js, tag=京东签到, enabled=true
6 | ================Loon==============
7 | [Script]
8 | cron "48 9,22 * * *" script-path=jd_sign.js,tag=京东签到
9 | */
10 | const {Env} = require('./utils/magic');
11 | const $ = new Env('M京东签到')
12 | $.logic = async function () {
13 | await signBeanIndex()
14 | await $.wait(3000, 5000)
15 | await cgame();
16 | }
17 | $.run({filename: __filename, wait: [1000, 2000], random: true})
18 | .catch(reason => console.log(reason))
19 |
20 | async function signBeanIndex() {
21 | let url = `https://api.m.jd.com/client.action`
22 | let headers = {
23 | "Content-Type": "application/x-www-form-urlencoded",
24 | 'Host': `api.m.jd.com`,
25 | 'Origin': 'https://api.m.jd.com',
26 | 'Referer': `https://api.m.jd.com`,
27 | 'Cookie': $.cookie
28 | }
29 | let body = "functionId=signBeanIndex&appid=ld"
30 | let data = await $.post(url, body, headers)
31 | let title = data.data?.dailyAward?.title
32 | || data.data?.continuityAward?.title;
33 | let bean = data.data?.dailyAward?.beanAward?.beanCount
34 | || data.data?.continuityAward?.beanAward?.beanCount;
35 | if (bean) {
36 | $.log(`${title} 获得${bean}京豆`)
37 | }
38 | }
39 |
40 | async function cgame() {
41 | let url = `https://cgame-stadium.jd.com/api/v1/sign`
42 | let headers = {
43 | 'Connection': 'keep-alive',
44 | 'Accept-Encoding': 'gzip, deflate, br',
45 | 'Content-Type': 'application/json',
46 | 'Origin': 'https://pro.m.jd.com',
47 | 'ActivityId': 'a54e9a0a1b6044189753e7eba51aab19',
48 | 'Host': 'cgame-stadium.jd.com',
49 | 'Referer': 'https://pro.m.jd.com/mall/active/dj6us2JJRLMMBb4iDaSK4wxvBMt/index.html',
50 | 'Accept-Language': 'zh-cn',
51 | 'Accept': 'application/json',
52 | 'Cookie': $.cookie
53 | }
54 | let data = await $.post(url, {}, headers)
55 | let bean = data?.data?.beanNum || 0;
56 | if (bean > 0) {
57 | $.log(`汽车签到 获得${bean}京豆`)
58 | }
59 | }
60 |
61 |
--------------------------------------------------------------------------------
/docker/example/multi.yml:
--------------------------------------------------------------------------------
1 | version: "3"
2 | services:
3 | jd_scripts1: #默认
4 | image: lxk0301/jd_scripts
5 | # 配置服务器资源约束。此例子中服务被限制为使用内存不超过200M以及cpu不超过 0.2(单核的20%)
6 | # 经过实际测试,建议不低于200M
7 | # deploy:
8 | # resources:
9 | # limits:
10 | # cpus: '0.2'
11 | # memory: 200M
12 | restart: always
13 | container_name: jd_scripts1
14 | tty: true
15 | volumes:
16 | - ./logs1:/scripts/logs
17 | environment:
18 | - JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
19 | - TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
20 | - TG_USER_ID=12xxxx206
21 | # 互助助码等参数可自行增加,如下。
22 | # 京东种豆得豆
23 | # - PLANT_BEAN_SHARECODES=
24 |
25 | jd_scripts2: #默认
26 | image: lxk0301/jd_scripts
27 | restart: always
28 | container_name: jd_scripts2
29 | tty: true
30 | volumes:
31 | - ./logs2:/scripts/logs
32 | environment:
33 | - JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
34 | - TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
35 | - TG_USER_ID=12xxxx206
36 | jd_scripts4: #自定义追加默认之后
37 | image: lxk0301/jd_scripts
38 | restart: always
39 | container_name: jd_scripts4
40 | tty: true
41 | volumes:
42 | - ./logs4:/scripts/logs
43 | - ./my_crontab_list4.sh:/scripts/docker/my_crontab_list.sh
44 | environment:
45 | - JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
46 | - TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
47 | - TG_USER_ID=12xxxx206
48 | - CUSTOM_LIST_FILE=my_crontab_list.sh
49 | jd_scripts5: #自定义覆盖默认
50 | image: lxk0301/jd_scripts
51 | restart: always
52 | container_name: jd_scripts5
53 | tty: true
54 | volumes:
55 | - ./logs5:/scripts/logs
56 | - ./my_crontab_list5.sh:/scripts/docker/my_crontab_list.sh
57 | environment:
58 | - JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
59 | - TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
60 | - TG_USER_ID=12xxxx206
61 | - CUSTOM_LIST_FILE=my_crontab_list.sh
62 | - CUSTOM_LIST_MERGE_TYPE=overwrite
63 |
--------------------------------------------------------------------------------
/docker/example/jd_scripts.syno.json:
--------------------------------------------------------------------------------
1 | {
2 | "cap_add" : null,
3 | "cap_drop" : null,
4 | "cmd" : "",
5 | "cpu_priority" : 0,
6 | "devices" : null,
7 | "enable_publish_all_ports" : false,
8 | "enable_restart_policy" : true,
9 | "enabled" : false,
10 | "env_variables" : [
11 | {
12 | "key" : "PATH",
13 | "value" : "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
14 | },
15 | {
16 | "key" : "CDN_JD_DAILYBONUS",
17 | "value" : "true"
18 | },
19 | {
20 | "key" : "JD_COOKIE",
21 | "value" : "pt_key=AAJfjaNrADASxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxx5;"
22 | },
23 | {
24 | "key" : "TG_BOT_TOKEN",
25 | "value" : "13xxxxxx80:AAEkNxxxxxxzNf91WQ"
26 | },
27 | {
28 | "key" : "TG_USER_ID",
29 | "value" : "12xxxx206"
30 | },
31 | {
32 | "key" : "PLANT_BEAN_SHARECODES",
33 | "value" : ""
34 | },
35 | {
36 | "key" : "FRUITSHARECODES",
37 | "value" : ""
38 | },
39 | {
40 | "key" : "PETSHARECODES",
41 | "value" : ""
42 | },
43 | {
44 | "key" : "SUPERMARKET_SHARECODES",
45 | "value" : ""
46 | },
47 | {
48 | "key" : "CRONTAB_LIST_FILE",
49 | "value" : "crontab_list.sh"
50 | }
51 | ],
52 | "exporting" : false,
53 | "id" : "18af38bc0ac37a40e4b9608a86fef56c464577cc160bbdddec90155284fcf4e5",
54 | "image" : "lxk0301/jd_scripts",
55 | "is_ddsm" : false,
56 | "is_package" : false,
57 | "links" : [],
58 | "memory_limit" : 0,
59 | "name" : "jd_scripts",
60 | "network" : [
61 | {
62 | "driver" : "bridge",
63 | "name" : "bridge"
64 | }
65 | ],
66 | "network_mode" : "default",
67 | "port_bindings" : [],
68 | "privileged" : false,
69 | "shortcut" : {
70 | "enable_shortcut" : false,
71 | "enable_status_page" : false,
72 | "enable_web_page" : false,
73 | "web_page_url" : ""
74 | },
75 | "use_host_network" : false,
76 | "volume_bindings" : [
77 | {
78 | "host_volume_file" : "/docker/jd_scripts/logs",
79 | "mount_point" : "/scripts/logs",
80 | "type" : "rw"
81 | }
82 | ]
83 | }
84 |
--------------------------------------------------------------------------------
/utils/jdShareCodes.js:
--------------------------------------------------------------------------------
1 | // 从日志中获取互助码
2 |
3 | // process.env.SHARE_CODE_FILE = "/scripts/logs/sharecode.log";
4 | // process.env.JD_COOKIE = "cookie1&cookie2";
5 |
6 | exports.JDZZ_SHARECODES = [];
7 | exports.DDFACTORY_SHARECODES = [];
8 | exports.DREAM_FACTORY_SHARE_CODES = [];
9 | exports.PLANT_BEAN_SHARECODES = [];
10 | exports.FRUITSHARECODES = [];
11 | exports.PETSHARECODES = [];
12 | exports.JDJOY_SHARECODES = [];
13 |
14 | let fileContent = '';
15 | if (process.env.SHARE_CODE_FILE) {
16 | try {
17 | const fs = require('fs');
18 | if (fs.existsSync(process.env.SHARE_CODE_FILE)) fileContent = fs.readFileSync(process.env.SHARE_CODE_FILE, 'utf8');
19 | } catch (err) {
20 | console.error(err)
21 | }
22 | }
23 | let lines = fileContent.split('\n');
24 |
25 | let shareCodesMap = {
26 | "JDZZ_SHARECODES": [],
27 | "DDFACTORY_SHARECODES": [],
28 | "DREAM_FACTORY_SHARE_CODES": [],
29 | "PLANT_BEAN_SHARECODES": [],
30 | "FRUITSHARECODES": [],
31 | "PETSHARECODES": [],
32 | "JDJOY_SHARECODES": [],
33 | };
34 | for (let i = 0; i < lines.length; i++) {
35 | if (lines[i].includes('京东赚赚')) {
36 | shareCodesMap.JDZZ_SHARECODES.push(lines[i].split('】')[1].trim());
37 | } else if (lines[i].includes('东东工厂')) {
38 | shareCodesMap.DDFACTORY_SHARECODES.push(lines[i].split('】')[1].trim());
39 | } else if (lines[i].includes('京喜工厂')) {
40 | shareCodesMap.DREAM_FACTORY_SHARE_CODES.push(lines[i].split('】')[1].trim());
41 | } else if (lines[i].includes('京东种豆得豆')) {
42 | shareCodesMap.PLANT_BEAN_SHARECODES.push(lines[i].split('】')[1].trim());
43 | } else if (lines[i].includes('东东农场')) {
44 | shareCodesMap.FRUITSHARECODES.push(lines[i].split('】')[1].trim());
45 | } else if (lines[i].includes('东东萌宠')) {
46 | shareCodesMap.PETSHARECODES.push(lines[i].split('】')[1].trim());
47 | } else if (lines[i].includes('crazyJoy')) {
48 | shareCodesMap.JDJOY_SHARECODES.push(lines[i].split('】')[1].trim());
49 | }
50 | }
51 | for (let key in shareCodesMap) {
52 | shareCodesMap[key] = shareCodesMap[key].reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []); // 去重
53 | }
54 | let cookieCount = 0;
55 | if (process.env.JD_COOKIE) {
56 | if (process.env.JD_COOKIE.indexOf('&') > -1) {
57 | cookieCount = process.env.JD_COOKIE.split('&').length;
58 | } else {
59 | cookieCount = process.env.JD_COOKIE.split('\n').length;
60 | }
61 | }
62 |
63 | for (let key in shareCodesMap) {
64 | exports[key] = [];
65 | if (shareCodesMap[key].length === 0) {
66 | continue;
67 | }
68 | for (let i = 0; i < cookieCount; i++) {
69 | exports[key][i] = shareCodesMap[key].sort(() => Math.random() - 0.5).join('@');
70 | }
71 | }
72 |
73 |
--------------------------------------------------------------------------------
/utils/share_code.js:
--------------------------------------------------------------------------------
1 | var allShareCodes = [];
2 | var removedShareCodes = [];
3 | var chetou_number = process.env.CHETOU_NUMBER ? process.env.CHETOU_NUMBER : 0
4 | var fair_mode = process.env.FAIR_MODE ? true : false
5 | var precode_mode = process.env.PRECODE_MODE ? false : true
6 |
7 | exports.ModCK = function(cks) {
8 | console.log(`您${fair_mode ? "有" : "没有"}设置雨露均沾模式。`)
9 | console.log(`您设置了${chetou_number}个车头。`)
10 | if (cks.length <= chetou_number || !fair_mode) {
11 | return cks
12 | }
13 | var sck = []
14 | var eck = []
15 | for (var i = 0; i < cks.length; i++) {
16 | if (i <= chetou_number - 1) {
17 | sck.push(cks[i])
18 | } else {
19 | eck.push(cks[i])
20 | }
21 | }
22 | eck.sort(function() {
23 | return Math.random() - 0.5;
24 | })
25 | console.log(`已对${eck.length}个ck做了随机处理。`)
26 | for (var i = 0; i < eck.length; i++) {
27 | sck.push(eck[i])
28 | }
29 | if (!precode_mode) {
30 | if (sck.length >= 2) {
31 | sck.push(sck[0])
32 | }
33 | if (sck.length >= 3) {
34 | sck.push(sck[1])
35 | }
36 | if (sck.length >= 4) {
37 | sck.push(sck[2])
38 | }
39 | if (sck.length >= 5) {
40 | sck.push(sck[3])
41 | }
42 | if (sck.length >= 6) {
43 | sck.push(sck[4])
44 | }
45 | }
46 | return sck
47 | }
48 |
49 |
50 |
51 |
52 | exports.setDefaultShareCodes = function(str) {
53 | if (!str) {
54 | return
55 | }
56 | var shareCodes = str.split("@")
57 | console.log(`您提供了${shareCodes.length}个账号的助力码\n`);
58 | if (shareCodes && shareCodes.length) {
59 | for (var shareCode of shareCodes) {
60 | if (shareCode && shareCode != "undefined" && allShareCodes.indexOf(shareCode) == -1) {
61 | allShareCodes.push(shareCode)
62 | }
63 | }
64 | }
65 | }
66 |
67 | exports.addShareCode = function(shareCode) {
68 | if (shareCode && allShareCodes.indexOf(shareCode) == -1) {
69 | allShareCodes.push(shareCode)
70 | }
71 | }
72 |
73 | exports.removeShareCode = function(shareCode) {
74 | removedShareCodes.push(shareCode)
75 | }
76 |
77 | exports.forEachShareCode = function(func) {
78 | for (var shareCode of allShareCodes) {
79 | if (removedShareCodes.indexOf(shareCode) == -1) {
80 | if (func(shareCode)) {
81 | break
82 | }
83 | }
84 | }
85 | }
86 |
87 | exports.getShareCodes = function() {
88 | var shareCodes = []
89 | for (var shareCode of allShareCodes) {
90 | if (removedShareCodes.indexOf(shareCode) == -1) {
91 | shareCodes.push(shareCode)
92 | }
93 | }
94 | return shareCodes
95 | }
96 |
97 | exports.getAllShareCodes = function() {
98 | return allShareCodes
99 | }
--------------------------------------------------------------------------------
/jd_jx_cashback.js:
--------------------------------------------------------------------------------
1 | /*
2 | 京京喜购物返红包助力
3 | 更新时间:2021-9-10
4 | 备注:京喜购物返红包助力,多个请看下方变量填写
5 |
6 | ## exprot jd_jx_cashback=10 #如需增加被助力账号,在这边修改人数
7 | 44 0-23/6 * * * jd_jx_cashback.js, tag=京喜购物返红包助力, enabled=true
8 | */
9 | let common = require("./function/common");
10 | let $ = new common.env('京喜购物返红包助力');
11 | let min = 5,
12 | help = $.config[$.filename(__filename)] || Math.min(min, $.config.JdMain) || min;
13 | $.setOptions({
14 | headers: {
15 | 'content-type': 'application/json',
16 | 'user-agent': 'jdapp;iPhone;9.4.6;14.2;965af808880443e4c1306a54afdd5d5ae771de46;network/wifi;supportApplePay/0;hasUPPay/0;hasOCPay/0;model/iPhone8,4;addressid/;supportBestPay/0;appBuild/167618;jdSupportDarkMode/0;Mozilla/5.0 (iPhone; CPU iPhone OS 14_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
17 | 'referer': 'https://happy.m.jd.com/babelDiy/Zeus/3ugedFa7yA6NhxLN5gw2L3PF9sQC/index.html?asid=287215626&un_area=12_904_905_57901&lng=117.612969135975&lat=23.94014745198865',
18 | }
19 | });
20 | $.readme = `
21 | 在京喜下单,如订单有购物返现,脚本会自动查询返现groupid并予以助力,目前每个账号每天能助力3次
22 | 44 */6 * * * task ${$.runfile}
23 | exprot ${$.runfile}=10 #如需增加被助力账号,在这边修改人数
24 | `
25 | eval(common.eval.mainEval($));
26 | async function prepare() {
27 | let url = `https://wq.jd.com/bases/orderlist/list?order_type=3&start_page=1&last_page=0&page_size=10&callersource=newbiz&t=${$.timestamp}&traceid=&g_ty=ls&g_tk=606717070`
28 | for (let j of cookies['help']) {
29 | $.setCookie(j);
30 | await $.curl(url)
31 | try {
32 | for (let k of $.source.orderList) {
33 | try {
34 | let orderid = k.parentId != '0' ? k.parentId : k.orderId
35 | let url = `https://wq.jd.com/fanxianzl/zhuli/QueryGroupDetail?isquerydraw=1&orderid=${orderid}&groupid=&sceneval=2&g_login_type=1&g_ty=ls`
36 | let dec = await jxAlgo.dec(url)
37 | await $.curl(dec.url)
38 | let now = parseInt(new Date() / 1000)
39 | let end = $.source.data.groupinfo.end_time
40 | if (end > now && $.source.data.groupinfo.openhongbaosum != $.source.data.groupinfo.totalhongbaosum) {
41 | let groupid = $.source.data.groupinfo.groupid;
42 | $.sharecode.push({
43 | 'groupid': groupid
44 | })
45 | }
46 | } catch (e) {}
47 | }
48 | } catch (e) {}
49 | }
50 | }
51 | async function main(id) {
52 | common.assert(id.groupid, '没有可助力ID')
53 | let url = `http://wq.jd.com/fanxianzl/zhuli/Help?groupid=${id.groupid}&_stk=groupid&_ste=2&g_ty=ls&g_tk=1710198667&sceneval=2&g_login_type=1`
54 | let dec = await jxAlgo.dec(url)
55 | await $.curl(dec.url)
56 | console.log($.source.data.prize.discount)
57 | }
58 |
--------------------------------------------------------------------------------
/docker/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:lts-alpine3.12
2 |
3 | LABEL AUTHOR="none" \
4 | VERSION=0.1.4
5 |
6 | ARG KEY="-----BEGIN OPENSSH PRIVATE KEY-----\nb3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn\nNhAAAAAwEAAQAAAQEAvRQk2oQqLB01iVnJKrnI3tTfJyEHzc2ULVor4vBrKKWOum4dbTeT\ndNWL5aS+CJso7scJT3BRq5fYVZcz5ra0MLMdQyFL1DdwurmzkhPYbwcNrJrB8abEPJ8ltS\nMoa0X9ecmSepaQFedZOZ2YeT/6AAXY+cc6xcwyuRVQ2ZJ3YIMBrRuVkF6nYwLyBLFegzhu\nJJeU5o53kfpbTCirwK0h9ZsYwbNbXYbWuJHmtl5tEBf2Hz+5eCkigXRq8EhRZlSnXfhPr2\n32VCb1A/gav2/YEaMPSibuBCzqVMVruP5D625XkxMdBdLqLBGWt7bCas7/zH2bf+q3zac4\nLcIFhkC6XwAAA9BjE3IGYxNyBgAAAAdzc2gtcnNhAAABAQC9FCTahCosHTWJWckqucje1N\n8nIQfNzZQtWivi8GsopY66bh1tN5N01YvlpL4ImyjuxwlPcFGrl9hVlzPmtrQwsx1DIUvU\nN3C6ubOSE9hvBw2smsHxpsQ8nyW1IyhrRf15yZJ6lpAV51k5nZh5P/oABdj5xzrFzDK5FV\nDZkndggwGtG5WQXqdjAvIEsV6DOG4kl5TmjneR+ltMKKvArSH1mxjBs1tdhta4kea2Xm0Q\nF/YfP7l4KSKBdGrwSFFmVKdd+E+vbfZUJvUD+Bq/b9gRow9KJu4ELOpUxWu4/kPrbleTEx\n0F0uosEZa3tsJqzv/MfZt/6rfNpzgtwgWGQLpfAAAAAwEAAQAAAQEAnMKZt22CBWcGHuUI\nytqTNmPoy2kwLim2I0+yOQm43k88oUZwMT+1ilUOEoveXgY+DpGIH4twusI+wt+EUVDC3e\nlyZlixpLV+SeFyhrbbZ1nCtYrtJutroRMVUTNf7GhvucwsHGS9+tr+96y4YDZxkBlJBfVu\nvdUJbLfGe0xamvE114QaZdbmKmtkHaMQJOUC6EFJI4JmSNLJTxNAXKIi3TUrS7HnsO3Xfv\nhDHElzSEewIC1smwLahS6zi2uwP1ih4fGpJJbU6FF/jMvHf/yByHDtdcuacuTcU798qT0q\nAaYlgMd9zrLC1OHMgSDcoz9/NQTi2AXGAdo4N+mnxPTHcQAAAIB5XCz1vYVwJ8bKqBelf1\nw7OlN0QDM4AUdHdzTB/mVrpMmAnCKV20fyA441NzQZe/52fMASUgNT1dQbIWCtDU2v1cP6\ncG8uyhJOK+AaFeDJ6NIk//d7o73HNxR+gCCGacleuZSEU6075Or2HVGHWweRYF9hbmDzZb\nCLw6NsYaP2uAAAAIEA3t1BpGHHek4rXNjl6d2pI9Pyp/PCYM43344J+f6Ndg3kX+y03Mgu\n06o33etzyNuDTslyZzcYUQqPMBuycsEb+o5CZPtNh+1klAVE3aDeHZE5N5HrJW3fkD4EZw\nmOUWnRj1RT2TsLwixB21EHVm7fh8Kys1d2ULw54LVmtv4+O3cAAACBANkw7XZaZ/xObHC9\n1PlT6vyWg9qHAmnjixDhqmXnS5Iu8TaKXhbXZFg8gvLgduGxH/sGwSEB5D6sImyY+DW/OF\nbmIVC4hwDUbCsTMsmTTTgyESwmuQ++JCh6f2Ams1vDKbi+nOVyqRvCrAHtlpaqSfv8hkjK\npBBqa/rO5yyYmeJZAAAAFHJvb3RAbmFzLmV2aW5lLnByZXNzAQIDBAUG\n-----END OPENSSH PRIVATE KEY-----"
7 |
8 | ENV DEFAULT_LIST_FILE=crontab_list.sh \
9 | CUSTOM_LIST_MERGE_TYPE=append \
10 | COOKIES_LIST=/scripts/logs/cookies.list \
11 | REPO_URL=git@gitee.com:lxk0301/jd_scripts.git \
12 | REPO_BRANCH=master
13 |
14 | RUN set -ex \
15 | && apk update \
16 | && apk upgrade \
17 | && apk add --no-cache bash tzdata git moreutils curl jq openssh-client \
18 | && rm -rf /var/cache/apk/* \
19 | && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
20 | && echo "Asia/Shanghai" > /etc/timezone \
21 | && mkdir -p /root/.ssh \
22 | && echo -e $KEY > /root/.ssh/id_rsa \
23 | && chmod 600 /root/.ssh/id_rsa \
24 | && ssh-keyscan gitee.com > /root/.ssh/known_hosts \
25 | && git clone -b $REPO_BRANCH $REPO_URL /scripts \
26 | && cd /scripts \
27 | && mkdir logs \
28 | && npm config set registry https://registry.npm.taobao.org \
29 | && npm install \
30 | && cp /scripts/docker/docker_entrypoint.sh /usr/local/bin \
31 | && chmod +x /usr/local/bin/docker_entrypoint.sh
32 |
33 | WORKDIR /scripts
34 |
35 | ENTRYPOINT ["docker_entrypoint.sh"]
36 |
37 | CMD [ "crond" ]
--------------------------------------------------------------------------------
/function/eval.js:
--------------------------------------------------------------------------------
1 | function mainEval($) {
2 | return `
3 | !(async () => {
4 | jdcookie = process.env.JD_COOKIE ? process.env.JD_COOKIE.split("&") : require("./function/jdcookie").cookie;
5 | cookies={
6 | 'all':jdcookie,
7 | 'help': typeof(help) != 'undefined' ? [...jdcookie].splice(0,parseInt(help)):[]
8 | }
9 | $.sleep=cookies['all'].length * 500
10 | taskCookie=cookies['all']
11 | jxAlgo = new common.jxAlgo();
12 | if ($.readme) {
13 | console.log(\`使用说明:\\n\${$.readme}\\n以上内容仅供参考,有需求自行添加\\n\`,)
14 | }
15 | console.log(\`======================本次任务共\${taskCookie.length}个京东账户Cookie======================\\n\`)
16 | try{
17 | await prepare();
18 |
19 | if ($.sharecode.length > 0) {
20 | $.sharecode = $.sharecode.filter(d=>d && JSON.stringify(d)!='{}')
21 | console.log('助力码', $.sharecode )
22 | }
23 | }catch(e1){console.log("初始函数不存在,将继续执行主函数Main\\n")}
24 | if (typeof(main) != 'undefined') {
25 | try{
26 | for (let i = 0; i < taskCookie.filter(d => d).length; i++) {
27 | $.cookie = taskCookie[i];
28 | $.user = decodeURIComponent($.cookie.match(/pt_pin=([^;]+)/)[1])
29 | $.index = parseInt(i) + 1;
30 | let info = {
31 | 'index': $.index,
32 | 'user': $.user,
33 | 'cookie': $.cookie
34 | }
35 | if (!$.thread) {
36 | console.log(\`\n******开始【京东账号\${$.index}】\${$.user} 任务*********\n\`);
37 | }
38 | if ($.config[\`\${$.runfile}_except\`] && $.config[\`\${$.runfile}_except\`].includes(\$.user)) {
39 | console.log(\`全局变量\${$.runfile}_except中配置了该账号pt_pin,跳过此次任务\`)
40 | }else{
41 | $.setCookie($.cookie)
42 | try{
43 | if ($.sharecode.length > 0) {
44 | for (let smp of $.sharecode) {
45 | smp = Object.assign({ ...info}, smp);
46 | $.thread ? main(smp) : await main(smp);
47 | }
48 | }else{
49 | $.thread ? main(info) : await main(info);
50 | }
51 | }
52 | catch(em){
53 | console.log(em.message)
54 | }
55 | }
56 |
57 |
58 | }
59 | }catch(em){console.log(em.message)}
60 | if ($.thread) {
61 | await $.wait($.sleep)
62 | }
63 | }
64 | if (typeof(extra) != 'undefined') {
65 | console.log(\`============================开始运行额外任务============================\`)
66 | try{
67 | await extra();
68 | }catch(e4){console.log(e4.message)}
69 | }
70 | })().catch((e) => {
71 | console.log(e.message)
72 | }).finally(() => {
73 | if ($.message.length > 0) {
74 | $.notify($.message)
75 | }
76 | $.done();
77 | });
78 |
79 | `
80 | }
81 | module.exports = {
82 | mainEval
83 | }
84 |
--------------------------------------------------------------------------------
/backUp/gitSync.md:
--------------------------------------------------------------------------------
1 | ## 保持自己github的forks自动和上游仓库同步的教程
2 | - 信息来源于 [https://github.com/wei/pull](https://github.com/wei/pull)
3 | - 以下教程仅是出于个人爱好,不保证本教程的完全正确性,最终请以作者 [https://github.com/wei/pull](https://github.com/wei/pull) 的描述为准。
4 | - 注:此教程由telegram用户@wukongdada提供
5 | ### 1、只同步默认分支的教程
6 |
7 | > 当上游的仓库仅有一个默认分支。或者上游仓库有两个分支,我们仅需要同步他的默认分支,其他分支对内容对我们来说无关紧要。
8 |
9 |
10 |
11 | 
12 |
13 |
14 |
15 | a) 登录自己的github账号,另开网页打开 [https://github.com/wei/pull](https://github.com/wei/pull)
16 |
17 |
18 |
19 | b) 点击Pull app进行安装。
20 |
21 | 
22 |
23 |
24 |
25 | c) 安装过程中会让你选择要选择那一种方式,All repositories(就是同步已经frok的仓库以及未来fork的仓库),Only select repositories(仅选择要自己需要同步的仓库,其他fork的仓库不会被同步),根据自己需求选择,实在不知道怎么选择,就选All repositories;点击install,完成安装。
26 |
27 | 
28 |
29 |
30 |
31 | d) 后续,如果要调整1.c中的选项,打开 [https://github.com/apps/pull](https://github.com/apps/pull) ,点击Configure,输入github密码进入pull的相关设置。
32 |
33 | 
34 |
35 |
36 |
37 | e) 进入后,找到Repository access,根据自己的需求,重新选择:All repositories(就是同步已经frok的仓库以及未来fork的仓库),Only select repositories(仅选择要自己需要同步的仓库,其他fork的仓库不会被同步),Save后保存生效。
38 |
39 | 
40 |
41 |
42 |
43 | f) Pull app作者虽然在项目中写道keeps your forks up-to-date with upstream via automated pull requests,但当上游仓库有更改时,自己的仓库会在3个小时内完成与上游的同步,3个小时是Pull app作者说的最长时间。当然也可以通过手动触发同步上游仓库,手动触发方式:`https://pull.git.ci/process/你的GitHub名字/你的仓库名字` (例如:`https://pull.git.ci/process/xxxxx/test` ),手动触发可能会进行人机验证,验证通过后会显示Success。
44 |
45 | 
46 |
47 | 
48 |
49 | ### 2、同步其他分支的教程
50 |
51 | 
52 |
53 |
54 |
55 | a) 假设你fork了上游仓库后,你fork后的地址为 `https://github.com/你的仓库名字/test` ,首先设置完成第1部分内容,注意在1.c步骤没有设置全部同步的,要回到1.e步,确认是否设置同步了 `你的仓库名字/test`,如果没有,请添加上。
56 |
57 | 
58 |
59 |
60 |
61 | b) 在默认分支下添加一个文件。
62 |
63 | 
64 |
65 |
66 |
67 | c) 复制 ``.github/pull.yml`` 粘贴后看到以下页面,注意github前面的那个.别漏掉了。
68 |
69 | 
70 |
71 |
72 |
73 | d) 请在https://github.com/wei/pull\#advanced-setup-with-config 页复制代码,
74 |
75 | 注意:upstream处要修改为上游仓库作者名字。
76 |
77 | 
78 |
79 | 
80 |
81 |
82 |
83 | e) 最终的示例如下,假设上游作者是zhangsan,所有的注意点都用红线圈出来了,保存后生效。
84 |
85 | 
86 |
87 |
88 |
89 | f) Pull app作者虽然在项目中写道keeps your forks up-to-date with upstream via automated pull requests,但当上游仓库有更改时,自己的仓库会在3个小时内完成与上游的同步,3个小时是Pull app作者说的最长时间。当然也可以通过手动触发同步上游仓库,手动触发方式:`https://pull.git.ci/process/你的GitHub名字/你的仓库名字` (例如:`https://pull.git.ci/process/xxxxx/test`),手动触发可能会进行人机验证,验证通过后会显示Success。具体见1.f提供的图片。
90 |
91 |
92 |
93 | g) 本人仅测试过forks一个仓库只有2个分支的项目,如果有多个分支,不能保证是否可行,请自行测试,或者是使用本教程第3部分高级玩法。
94 |
95 | ### 高级玩法
96 |
97 | >当然,作者还有其他更好的项目用于同步所有分支,例如使用 GitHub actions 进行同步。请参考原作者的项目
98 |
99 | - [https://github.com/wei/git-sync](https://github.com/wei/git-sync)
100 | - [https://github.com/repo-sync/github-sync](https://github.com/repo-sync/github-sync)
101 |
--------------------------------------------------------------------------------
/docker/example/docker多账户使用独立容器使用说明.md:
--------------------------------------------------------------------------------
1 | ### 使用此方式,请先理解学会使用[docker办法一](https://github.com/LXK9301/jd_scripts/tree/master/docker#%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%9B%AE%E5%BD%95jd_scripts%E7%94%A8%E4%BA%8E%E5%AD%98%E6%94%BE%E5%A4%87%E4%BB%BD%E9%85%8D%E7%BD%AE%E7%AD%89%E6%95%B0%E6%8D%AE%E8%BF%81%E7%A7%BB%E9%87%8D%E8%A3%85%E7%9A%84%E6%97%B6%E5%80%99%E5%8F%AA%E9%9C%80%E8%A6%81%E5%A4%87%E4%BB%BD%E6%95%B4%E4%B8%AAjd_scripts%E7%9B%AE%E5%BD%95%E5%8D%B3%E5%8F%AF)的使用方式
2 | > 发现有人好像希望不同账户任务并发执行,不想一个账户执行完了才能再执行另一个,这里写一个`docker办法一`的基础上实现方式,其实就是不同账户创建不同的容器,他们互不干扰单独定时执行自己的任务。
3 | 配置使用起来还是比较简单的,具体往下看
4 | ### 文件夹目录参考
5 | 
6 | ### 具体使用说明直接在图片标注了,文件参考[图片下方](https://github.com/LXK9301/jd_scripts/new/master/docker#docker-composeyml%E6%96%87%E4%BB%B6%E5%8F%82%E8%80%83),配置完成后的[执行命令]()
7 | 
8 | #### `docker-compose.yml`文件参考
9 | ```yaml
10 | version: "3"
11 | services:
12 | jd_scripts1: #默认
13 | image: lxk0301/jd_scripts
14 | # 配置服务器资源约束。此例子中服务被限制为使用内存不超过200M以及cpu不超过 0.2(单核的20%)
15 | # 经过实际测试,建议不低于200M
16 | # deploy:
17 | # resources:
18 | # limits:
19 | # cpus: '0.2'
20 | # memory: 200M
21 | restart: always
22 | container_name: jd_scripts1
23 | tty: true
24 | volumes:
25 | - ./logs1:/scripts/logs
26 | environment:
27 | - JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
28 | - TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
29 | - TG_USER_ID=12xxxx206
30 | # 互助助码等参数可自行增加,如下。
31 | # 京东种豆得豆
32 | # - PLANT_BEAN_SHARECODES=
33 |
34 | jd_scripts2: #默认
35 | image: lxk0301/jd_scripts
36 | restart: always
37 | container_name: jd_scripts2
38 | tty: true
39 | volumes:
40 | - ./logs2:/scripts/logs
41 | environment:
42 | - JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
43 | - TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
44 | - TG_USER_ID=12xxxx206
45 | jd_scripts4: #自定义追加默认之后
46 | image: lxk0301/jd_scripts
47 | restart: always
48 | container_name: jd_scripts4
49 | tty: true
50 | volumes:
51 | - ./logs4:/scripts/logs
52 | - ./my_crontab_list4.sh:/scripts/docker/my_crontab_list.sh
53 | environment:
54 | - JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
55 | - TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
56 | - TG_USER_ID=12xxxx206
57 | - CUSTOM_LIST_FILE=my_crontab_list.sh
58 | jd_scripts5: #自定义覆盖默认
59 | image: lxk0301/jd_scripts
60 | restart: always
61 | container_name: jd_scripts5
62 | tty: true
63 | volumes:
64 | - ./logs5:/scripts/logs
65 | - ./my_crontab_list5.sh:/scripts/docker/my_crontab_list.sh
66 | environment:
67 | - JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
68 | - TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
69 | - TG_USER_ID=12xxxx206
70 | - CUSTOM_LIST_FILE=my_crontab_list.sh
71 | - CUSTOM_LIST_MERGE_TYPE=overwrite
72 |
73 | ```
74 | #### 目录文件配置好之后在 `jd_scripts_multi`目录执行
75 | `docker-compose up -d` 启动;
76 | `docker-compose logs` 打印日志;
77 | `docker-compose pull` 更新镜像;
78 | `docker-compose stop` 停止容器;
79 | `docker-compose restart` 重启容器;
80 | `docker-compose down` 停止并删除容器;
81 | 
82 |
83 |
84 |
--------------------------------------------------------------------------------
/activity/jd_jxhlk.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf8 -*-
2 | """
3 | cron: 55 1 * * *
4 | new Env('京喜欢乐砍');
5 | 活动入口:https://st.jingxi.com/sns/202103/20/jxhlk/list.html
6 | """
7 | import requests,os,json
8 | def env(key):
9 | return os.environ.get(key)
10 |
11 | # Cookie
12 | cookies = []
13 | if env("JD_COOKIE"):
14 | cookies.extend(env("JD_COOKIE").split('&'))
15 |
16 | # launchid=os.environ['launchid']
17 | # print ("环境变量:export launchi=\"\"")
18 |
19 | print ("活动入口:https://st.jingxi.com/sns/202103/20/jxhlk/list.html")
20 | print ("进入活动页面后选择需要砍价的商品,然后运行脚本即可")
21 | print ("脚本会自动查找CK1下面的砍价商品进行砍价,如有剩余助力次数则会助力作者")
22 | print ("可以设置为禁用,需要的时候运行即可")
23 |
24 | headers={
25 | "Host":"m.jingxi.com",
26 | "Connection":"keep-alive",
27 | "Sec-Fetch-Mode":"no-cors",
28 | "User-Agent":"jdpingou;android;5.8.0;11;58f90d6af88fe89f;network/wifi;model/Mi 10;appBuild/19037;partner/xiaomi;;session/199;aid/58f90d6653589f;oaid/60446b553564e;pap/JA2019_3111789;brand/;eu/53836346635;35636fv/6563656853666;Mozilla/5.0 (Linux; Android 11; Mi 10 Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/94.0.4606.85 Mobile Safari/537.36",
29 | "Accept":"*/*",
30 | "X-Requested-With":"com.jd.pingou",
31 | "Sec-Fetch-Site":"same-site",
32 | "Referer":"https://st.jingxi.com/sns/202103/20/jxhlk/record.html?newwebview=1",
33 | "Accept-Encoding":"gzip, deflate, br",
34 | "Accept-Language":"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
35 | "Cookie":cookies[0]
36 | }
37 |
38 | res=requests.get("https://m.jingxi.com/kjactive/jxhlk/jxhlk_myonline?t=1634969716452&_=1634969716452&sceneval=2&g_login_type=1&callback=jsonpCBKA&g_ty=ls",headers=headers).text
39 | x = slice(10, -1)
40 | data=json.loads(res[x])
41 | if data["data"]["onling"] != []:
42 | launchid=data["data"]["onling"][0]["launchid"]
43 | print("你当前商品邀请码:"+launchid)
44 | else:
45 | print("账号1未选择商品!")
46 |
47 | for i in cookies:
48 | headers={
49 | "Host":"m.jingxi.com",
50 | "Connection":"keep-alive",
51 | "Sec-Fetch-Mode":"no-cors",
52 | "User-Agent":"jdpingou;android;5.8.0;11;58f90d6af88fe89f;network/wifi;model/Mi 10;appBuild/19037;partner/xiaomi;;session/186;aid/58f90d6af88fe14f;oaid/60446b582895464e;pap/JA2019_3111789;brand/;eu/5383669303466316;fv/6683836656839366;Mozilla/5.0 (Linux; Android 11; Mi 10 Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/94.0.4606.85 Mobile Safari/537.36",
53 | "Accept":"*/*",
54 | "X-Requested-With":"com.jd.pingou",
55 | "Sec-Fetch-Site":"same-site",
56 | "Referer":"https://st.jingxi.com/sns/202103/20/jxhlk/list.html?launchid="+launchid+"=139022.1.2&srv=jx_cxyw_https%3A%2F%2Fwq.jd.com%2Fcube%2Ffront%2FactivePublish%2Fjxhlkv2%2F486449.html_jing",
57 | "Accept-Encoding":"gzip, deflate, br",
58 | "Accept-Language":"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
59 | "Cookie":i
60 | }
61 | try:
62 | res=requests.get("https://m.jingxi.com/kjactive/jxhlk/jxhlk_queryhelp?launchid="+launchid+"&clicktype=0&nomoving=1&_stk=clicktype%2Claunchid%2Cnomoving&_ste=1&h5st=20211022212829803%3B0265027467319163%3B10029%3Btk01wc6341d3830nxrLb%2FUIVQp4wf3n7VRx5NUooArjZTUCs3pdnDbigVtSczYSc%2B3fu2%2BtrlWLO9CuLwzUOU6zStqPq%3Bfb2561fe9086095abb45032f148c54fbaa3cc308307e6f52716969b32bab452c&t=1634909309853&_=1634909309853&sceneval=2&g_login_type=1&callback=jsonpCBKC&g_ty=ls",headers=headers).text
63 | x = slice(10, -1)
64 | data=json.loads(res[x])
65 | msg=data["data"]["guestinfo"]["contenttips"]
66 | print(msg)
67 | if "我已经拿走了" in msg:
68 | launchid=requests.get("https://gitee.com/KingRan521/JD-Scripts/raw/master/shareCodes/jxhlk.json").text
69 | except:
70 | print("错误")
--------------------------------------------------------------------------------
/jd_jx_factory.js:
--------------------------------------------------------------------------------
1 | /*
2 | 京喜工厂开团助力
3 | 更新时间:2021-9-10
4 | 备注:京喜工厂开团助力,多个请看下方变量填写
5 |
6 | ## exprot jd_jx_factory=10 #如需增加被助力账号,在这边修改人数
7 | 18 1 * * * jd_jx_factory.js, tag=京喜工厂开团助力, enabled=true
8 | */
9 | let common = require("./function/common");
10 | let $ = new common.env('京喜工厂开团助力');
11 | let min = 3,
12 | help = $.config[$.filename(__filename)] || Math.min(min, $.config.JdMain) || min;
13 | $.setOptions({
14 | headers: {
15 | 'content-type': 'application/json',
16 | 'user-agent': 'jdpingou;iPhone;4.8.2;13.7;a3b4e844090b28d5c38e7529af8115172079be4d;network/wifi;model/iPhone8,1;appBuild/100546;ADID/00000000-0000-0000-0000-000000000000;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/0;hasOCPay/0;supportBestPay/0;session/374;pap/JA2019_3111789;brand/apple;supportJDSHWK/1;Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148',
17 | 'referer': 'https://st.jingxi.com/pingou/dream_factory/divide.html?activeId=laD7IwPwDF1-Te-MvbW9Iw==&_close=1&jxsid=16232028831911667857',
18 | }
19 | });
20 | $.readme = `
21 | 44 */6 * * * task ${$.runfile}
22 | exprot ${$.runfile}=4 #如需增加被助力账号,在这边修改人数
23 | `
24 | eval(common.eval.mainEval($));
25 | async function prepare() {
26 | let deramUrl = 'https://st.jingxi.com/pingou/dream_factory/index.html?ptag=7155.9.46'
27 | let html = await $.curl(deramUrl)
28 | try {
29 | ary = $.matchall(/activeId=([^\&\,]+)","bgImg".+?"start":"([^\"]+)"/g, html)
30 | dicts = {}
31 | for (let i of ary) {
32 | dicts[new Date(i[1]).getTime()] = i[0]
33 | }
34 | max = Math.max(...Object.keys(dicts).filter(d => parseInt(d) < $.timestamp))
35 | $.activeId = dicts[max]
36 | } catch (e) {
37 | $.activeId = 'MaiSqG4Q1P3lVFK0Hud3NA=='
38 | }
39 | console.log("开团ID:", $.activeId)
40 | let url = `https://m.jingxi.com/dreamfactory/tuan/QueryActiveConfig?activeId=${$.activeId}&tuanId=&_time=1623214804148&_stk=_time%2CactiveId%2CtuanId&_ste=1&sceneval=2&g_login_type=1&callback=jsonpCBKA&g_ty=ls`
41 | let dec = await jxAlgo.dec(url)
42 | for (let j of cookies['help']) {
43 | $.setCookie(j);
44 | await $.curl(dec.url)
45 | try {
46 | if ($.source.data.userTuanInfo.tuanId) {
47 | $.sharecode.push($.compact($.source.data.userTuanInfo, ['activeId', 'tuanId']))
48 | } else {}
49 | } catch (e) {}
50 | }
51 | }
52 | async function main(id) {
53 | common.assert(id.activeId, '没有开团ID')
54 | let url = `https://m.jingxi.com/dreamfactory/tuan/JoinTuan?activeId=${id.activeId}&tuanId=${id.tuanId}&_time=1623214617107&_stk=_time%2CactiveId%2CtuanId&_ste=1&sceneval=2&g_login_type=1&g_ty=ls`
55 | let dec = await jxAlgo.dec(url)
56 | let params = {
57 | 'url': dec.url,
58 | 'cookie': id.cookie
59 | }
60 | await $.curl(params)
61 | console.log($.source)
62 | }
63 | async function extra() {
64 | for (let j of cookies['help']) {
65 | $.setCookie(j);
66 | let url = `https://m.jingxi.com/dreamfactory/tuan/QueryActiveConfig?activeId=${$.activeId}&tuanId=&_time=1623214804148&_stk=_time%2CactiveId%2CtuanId&_ste=1&sceneval=2&g_login_type=1&callback=jsonpCBKA&g_ty=ls`
67 | let dec = await jxAlgo.dec(url)
68 | await $.curl(dec.url)
69 | url = `https://m.jingxi.com/dreamfactory/tuan/Award?activeId=${$.source.data.userTuanInfo.activeId}&tuanId=${$.source.data.userTuanInfo.tuanId}&_time=1623518911051&_stk=_time%2CactiveId%2CtuanId&_ste=1&_=1623518911082&sceneval=2&g_login_type=1&callback=jsonpCBKF&g_ty=ls`
70 | dec = await jxAlgo.dec(url)
71 | await $.curl(dec.url)
72 | console.log($.source)
73 | if ($.source.msg != '您还没有成团') {
74 | url = `https://m.jingxi.com/dreamfactory/tuan/CreateTuan?activeId=${$.activeId}&isOpenApp=1&_time=1624120758151&_stk=_time%2CactiveId%2CisOpenApp&_ste=1`
75 | dec = await jxAlgo.dec(url)
76 | await $.curl(dec.url)
77 | console.log($.source)
78 | }
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/jdCookie.js:
--------------------------------------------------------------------------------
1 | /*
2 | ================================================================================
3 | 魔改自 https://github.com/shufflewzc/faker2/blob/main/jdCookie.js
4 | 修改内容:与task_before.sh配合,由task_before.sh设置要设置要做互助的活动的 ShareCodeConfigName 和 ShareCodeEnvName 环境变量,
5 | 然后在这里实际解析/ql/log/.ShareCode中该活动对应的配置信息(由code.sh生成和维护),注入到nodejs的环境变量中
6 | 修改原因:原先的task_before.sh直接将互助信息注入到shell的env中,在ck超过45以上时,互助码环境变量过大会导致调用一些系统命令
7 | (如date/cat)时报 Argument list too long,而在node中修改环境变量不会受这个限制,也不会影响外部shell环境,确保脚本可以正常运行
8 | 魔改作者:风之凌殇
9 | ================================================================================
10 |
11 | 此文件为Node.js专用。其他用户请忽略
12 | */
13 | //此处填写京东账号cookie。
14 | let CookieJDs = [
15 | ]
16 | // 判断环境变量里面是否有京东ck
17 | if (process.env.JD_COOKIE) {
18 | if (process.env.JD_COOKIE.indexOf('&') > -1) {
19 | CookieJDs = process.env.JD_COOKIE.split('&');
20 | } else if (process.env.JD_COOKIE.indexOf('\n') > -1) {
21 | CookieJDs = process.env.JD_COOKIE.split('\n');
22 | } else {
23 | CookieJDs = [process.env.JD_COOKIE];
24 | }
25 | }
26 | if (JSON.stringify(process.env).indexOf('GITHUB')>-1) {
27 | console.log(`请勿使用github action运行此脚本,无论你是从你自己的私库还是其他哪里拉取的源代码,都会导致我被封号\n`);
28 | !(async () => {
29 | await require('./sendNotify').sendNotify('提醒', `请勿使用github action、滥用github资源会封我仓库以及账号`)
30 | await process.exit(0);
31 | })()
32 | }
33 | CookieJDs = [...new Set(CookieJDs.filter(item => !!item))]
34 | console.log(`\n====================共${CookieJDs.length}个京东账号Cookie=========\n`);
35 | console.log(`==================脚本执行- 北京时间(UTC+8):${new Date(new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000).toLocaleString('zh', {hour12: false}).replace(' 24:',' 00:')}=====================\n`)
36 | if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {};
37 | for (let i = 0; i < CookieJDs.length; i++) {
38 | if (!CookieJDs[i].match(/pt_pin=(.+?);/) || !CookieJDs[i].match(/pt_key=(.+?);/)) console.log(`\n提示:京东cookie 【${CookieJDs[i]}】填写不规范,可能会影响部分脚本正常使用。正确格式为: pt_key=xxx;pt_pin=xxx;(分号;不可少)\n`);
39 | const index = (i + 1 === 1) ? '' : (i + 1);
40 | exports['CookieJD' + index] = CookieJDs[i].trim();
41 | }
42 |
43 | // 以下为注入互助码环境变量(仅nodejs内起效)的代码
44 | function SetShareCodesEnv(nameChinese = "", nameConfig = "", envName = "") {
45 | let rawCodeConfig = {}
46 |
47 | // 读取互助码
48 | shareCodeLogPath = `${process.env.QL_DIR}/log/.ShareCode/${nameConfig}.log`
49 | let fs = require('fs')
50 | if (fs.existsSync(shareCodeLogPath)) {
51 | // 因为faker2目前没有自带ini,改用已有的dotenv来解析
52 | // // 利用ini模块读取原始互助码和互助组信息
53 | // let ini = require('ini')
54 | // rawCodeConfig = ini.parse(fs.readFileSync(shareCodeLogPath, 'utf-8'))
55 |
56 | // 使用env模块
57 | require('dotenv').config({path: shareCodeLogPath})
58 | rawCodeConfig = process.env
59 | }
60 |
61 | // 解析每个用户的互助码
62 | codes = {}
63 | Object.keys(rawCodeConfig).forEach(function (key) {
64 | if (key.startsWith(`My${nameConfig}`)) {
65 | codes[key] = rawCodeConfig[key]
66 | }
67 | });
68 |
69 | // 解析每个用户要帮助的互助码组,将用户实际的互助码填充进去
70 | let helpOtherCodes = {}
71 | Object.keys(rawCodeConfig).forEach(function (key) {
72 | if (key.startsWith(`ForOther${nameConfig}`)) {
73 | helpCode = rawCodeConfig[key]
74 | for (const [codeEnv, codeVal] of Object.entries(codes)) {
75 | helpCode = helpCode.replace("${" + codeEnv + "}", codeVal)
76 | }
77 |
78 | helpOtherCodes[key] = helpCode
79 | }
80 | });
81 |
82 | // 按顺序用&拼凑到一起,并放入环境变量,供目标脚本使用
83 | let shareCodes = []
84 | let totalCodeCount = Object.keys(helpOtherCodes).length
85 | for (let idx = 1; idx <= totalCodeCount; idx++) {
86 | shareCodes.push(helpOtherCodes[`ForOther${nameConfig}${idx}`])
87 | }
88 | let shareCodesStr = shareCodes.join('&')
89 | process.env[envName] = shareCodesStr
90 |
91 | console.info(`${nameChinese} 的 互助码环境变量 ${envName},共计 ${totalCodeCount} 组互助码,总大小为 ${shareCodesStr.length} 字节`)
92 | }
93 |
94 | // 若在task_before.sh 中设置了要设置互助码环境变量的活动名称和环境变量名称信息,则在nodejs中处理,供活动使用
95 | let nameChinese = process.env.ShareCodeConfigChineseName
96 | let nameConfig = process.env.ShareCodeConfigName
97 | let envName = process.env.ShareCodeEnvName
98 | if (nameChinese && nameConfig && envName) {
99 | SetShareCodesEnv(nameChinese, nameConfig, envName)
100 | }
101 |
--------------------------------------------------------------------------------
/ql.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const got = require('got');
4 | require('dotenv').config();
5 | const { readFile } = require('fs/promises');
6 | const path = require('path');
7 |
8 | const qlDir = '/ql';
9 | const authFile = path.join(qlDir, 'config/auth.json');
10 |
11 | const api = got.extend({
12 | prefixUrl: 'http://127.0.0.1:5600',
13 | retry: { limit: 0 },
14 | });
15 |
16 | async function getToken() {
17 | const authConfig = JSON.parse(await readFile(authFile));
18 | return authConfig.token;
19 | }
20 |
21 | module.exports.getEnvs = async () => {
22 | const token = await getToken();
23 | const body = await api({
24 | url: 'api/envs',
25 | searchParams: {
26 | searchValue: 'JD_COOKIE',
27 | t: Date.now(),
28 | },
29 | headers: {
30 | Accept: 'application/json',
31 | authorization: `Bearer ${token}`,
32 | },
33 | }).json();
34 | return body.data;
35 | };
36 |
37 | module.exports.getEnvsCount = async () => {
38 | const data = await this.getEnvs();
39 | return data.length;
40 | };
41 |
42 | module.exports.addEnv = async (cookie, remarks) => {
43 | const token = await getToken();
44 | const body = await api({
45 | method: 'post',
46 | url: 'api/envs',
47 | params: { t: Date.now() },
48 | json: [{
49 | name: 'JD_COOKIE',
50 | value: cookie,
51 | remarks,
52 | }],
53 | headers: {
54 | Accept: 'application/json',
55 | authorization: `Bearer ${token}`,
56 | 'Content-Type': 'application/json;charset=UTF-8',
57 | },
58 | }).json();
59 | return body;
60 | };
61 |
62 | module.exports.updateEnv = async (cookie, eid, remarks) => {
63 | const token = await getToken();
64 | const body = await api({
65 | method: 'put',
66 | url: 'api/envs',
67 | params: { t: Date.now() },
68 | json: {
69 | name: 'JD_COOKIE',
70 | value: cookie,
71 | _id: eid,
72 | remarks,
73 | },
74 | headers: {
75 | Accept: 'application/json',
76 | authorization: `Bearer ${token}`,
77 | 'Content-Type': 'application/json;charset=UTF-8',
78 | },
79 | }).json();
80 | return body;
81 | };
82 |
83 | module.exports.DisableCk = async (eid) => {
84 | const token = await getToken();
85 | const body = await api({
86 | method: 'put',
87 | url: 'api/envs/disable',
88 | params: { t: Date.now() },
89 | body: JSON.stringify([eid]),
90 | headers: {
91 | Accept: 'application/json',
92 | authorization: `Bearer ${token}`,
93 | 'Content-Type': 'application/json;charset=UTF-8',
94 | },
95 | }).json();
96 | return body;
97 | };
98 |
99 | module.exports.EnableCk = async (eid) => {
100 | const token = await getToken();
101 | const body = await api({
102 | method: 'put',
103 | url: 'api/envs/enable',
104 | params: { t: Date.now() },
105 | body: JSON.stringify([eid]),
106 | headers: {
107 | Accept: 'application/json',
108 | authorization: `Bearer ${token}`,
109 | 'Content-Type': 'application/json;charset=UTF-8',
110 | },
111 | }).json();
112 | return body;
113 | };
114 |
115 | module.exports.getstatus = async (eid) => {
116 | const envs = await this.getEnvs();
117 | for (let i = 0; i < envs.length; i++) {
118 | if(envs[i]._id==eid){
119 | return envs[i].status;
120 | }
121 | }
122 | return 99;
123 | };
124 |
125 | module.exports.getEnvById = async (eid) => {
126 | const envs = await this.getEnvs();
127 | for (let i = 0; i < envs.length; i++) {
128 | if(envs[i]._id==eid){
129 | return envs[i].value;
130 | }
131 | }
132 | return "";
133 | };
134 |
135 | module.exports.getEnvByPtPin = async (Ptpin) => {
136 | const envs = await this.getEnvs();
137 | for (let i = 0; i < envs.length; i++) {
138 | var tempptpin = decodeURIComponent(envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/) && envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/)[1]);
139 | if(tempptpin==Ptpin){
140 | return envs[i];
141 | }
142 | }
143 | return "";
144 | };
145 |
146 | module.exports.delEnv = async (eid) => {
147 | const token = await getToken();
148 | const body = await api({
149 | method: 'delete',
150 | url: 'api/envs',
151 | params: { t: Date.now() },
152 | body: JSON.stringify([eid]),
153 | headers: {
154 | Accept: 'application/json',
155 | authorization: `Bearer ${token}`,
156 | 'Content-Type': 'application/json;charset=UTF-8',
157 | },
158 | }).json();
159 | return body;
160 | };
161 |
--------------------------------------------------------------------------------
/function/ql.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const got = require('got');
4 | require('dotenv').config();
5 | const { readFile } = require('fs/promises');
6 | const path = require('path');
7 |
8 | const qlDir = '/ql';
9 | const authFile = path.join(qlDir, 'config/auth.json');
10 |
11 | const api = got.extend({
12 | prefixUrl: 'http://127.0.0.1:5600',
13 | retry: { limit: 0 },
14 | });
15 |
16 | async function getToken() {
17 | const authConfig = JSON.parse(await readFile(authFile));
18 | return authConfig.token;
19 | }
20 |
21 | module.exports.getEnvs = async () => {
22 | const token = await getToken();
23 | const body = await api({
24 | url: 'api/envs',
25 | searchParams: {
26 | searchValue: 'JD_COOKIE',
27 | t: Date.now(),
28 | },
29 | headers: {
30 | Accept: 'application/json',
31 | authorization: `Bearer ${token}`,
32 | },
33 | }).json();
34 | return body.data;
35 | };
36 |
37 | module.exports.getEnvsCount = async () => {
38 | const data = await this.getEnvs();
39 | return data.length;
40 | };
41 |
42 | module.exports.addEnv = async (cookie, remarks) => {
43 | const token = await getToken();
44 | const body = await api({
45 | method: 'post',
46 | url: 'api/envs',
47 | params: { t: Date.now() },
48 | json: [{
49 | name: 'JD_COOKIE',
50 | value: cookie,
51 | remarks,
52 | }],
53 | headers: {
54 | Accept: 'application/json',
55 | authorization: `Bearer ${token}`,
56 | 'Content-Type': 'application/json;charset=UTF-8',
57 | },
58 | }).json();
59 | return body;
60 | };
61 |
62 | module.exports.updateEnv = async (cookie, eid, remarks) => {
63 | const token = await getToken();
64 | const body = await api({
65 | method: 'put',
66 | url: 'api/envs',
67 | params: { t: Date.now() },
68 | json: {
69 | name: 'JD_COOKIE',
70 | value: cookie,
71 | _id: eid,
72 | remarks,
73 | },
74 | headers: {
75 | Accept: 'application/json',
76 | authorization: `Bearer ${token}`,
77 | 'Content-Type': 'application/json;charset=UTF-8',
78 | },
79 | }).json();
80 | return body;
81 | };
82 |
83 | module.exports.DisableCk = async (eid) => {
84 | const token = await getToken();
85 | const body = await api({
86 | method: 'put',
87 | url: 'api/envs/disable',
88 | params: { t: Date.now() },
89 | body: JSON.stringify([eid]),
90 | headers: {
91 | Accept: 'application/json',
92 | authorization: `Bearer ${token}`,
93 | 'Content-Type': 'application/json;charset=UTF-8',
94 | },
95 | }).json();
96 | return body;
97 | };
98 |
99 | module.exports.EnableCk = async (eid) => {
100 | const token = await getToken();
101 | const body = await api({
102 | method: 'put',
103 | url: 'api/envs/enable',
104 | params: { t: Date.now() },
105 | body: JSON.stringify([eid]),
106 | headers: {
107 | Accept: 'application/json',
108 | authorization: `Bearer ${token}`,
109 | 'Content-Type': 'application/json;charset=UTF-8',
110 | },
111 | }).json();
112 | return body;
113 | };
114 |
115 | module.exports.getstatus = async (eid) => {
116 | const envs = await this.getEnvs();
117 | for (let i = 0; i < envs.length; i++) {
118 | if(envs[i]._id==eid){
119 | return envs[i].status;
120 | }
121 | }
122 | return 99;
123 | };
124 |
125 | module.exports.getEnvById = async (eid) => {
126 | const envs = await this.getEnvs();
127 | for (let i = 0; i < envs.length; i++) {
128 | if(envs[i]._id==eid){
129 | return envs[i].value;
130 | }
131 | }
132 | return "";
133 | };
134 |
135 | module.exports.getEnvByPtPin = async (Ptpin) => {
136 | const envs = await this.getEnvs();
137 | for (let i = 0; i < envs.length; i++) {
138 | var tempptpin = decodeURIComponent(envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/) && envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/)[1]);
139 | if(tempptpin==Ptpin){
140 | return envs[i];
141 | }
142 | }
143 | return "";
144 | };
145 |
146 | module.exports.delEnv = async (eid) => {
147 | const token = await getToken();
148 | const body = await api({
149 | method: 'delete',
150 | url: 'api/envs',
151 | params: { t: Date.now() },
152 | body: JSON.stringify([eid]),
153 | headers: {
154 | Accept: 'application/json',
155 | authorization: `Bearer ${token}`,
156 | 'Content-Type': 'application/json;charset=UTF-8',
157 | },
158 | }).json();
159 | return body;
160 | };
161 |
--------------------------------------------------------------------------------
/utils/MoveMentFaker.js:
--------------------------------------------------------------------------------
1 | const https = require('https');
2 | const fs = require('fs/promises');
3 | const { R_OK } = require('fs').constants;
4 | const vm = require('vm');
5 | const UA = require('../USER_AGENTS.js').USER_AGENT;
6 |
7 | const URL = 'https://wbbny.m.jd.com/babelDiy/Zeus/2rtpffK8wqNyPBH6wyUDuBKoAbCt/index.html';
8 | // const REG_MODULE = /(\d+)\:function\(.*(?=smashUtils\.get_risk_result)/gm;
9 | const SYNTAX_MODULE = '!function(n){var r={};function o(e){if(r[e])';
10 | const REG_SCRIPT = /