Merge pull request #8 from lxk0301/master

Master
This commit is contained in:
shylocks
2020-12-11 20:13:58 +08:00
committed by GitHub
56 changed files with 664 additions and 126 deletions

View File

@@ -8,7 +8,9 @@
Ⅱ.利用[BotFather](https://t.me/BotFather)创建一个属于自己的通知机器人按照下图中的1、2、3步骤拿到token格式形如```10xxx4:AAFcqxxxxgER5uw```。填入```TG_BOT_TOKEN```<br>
![TG_PUSH2](../icon/TG_PUSH2.png)
![TG_PUSH2](../icon/TG_PUSH2.png)<br>
**新创建的机器人需要跟它发一条消息来开启对话否则可能会遇到secret填对了但是收不到消息的情况**<br>
Ⅲ.再次在Telegram上搜索[getuserIDbot](https://t.me/getuserIDbot)机器人获取UserID。填入```TG_USER_ID```<br>

View File

@@ -1,23 +1,32 @@
FROM alpine
MAINTAINER Akira <e.akimoto.akira@gmail.com>
LABEL AUTHOR="Akira <e.akimoto.akira@gmail.com>" \
VERSION=0.1.2 \
UPDATE_CONTENT="更新内容较多,重新阅读仓库[Readme](https://github.com/lxk0301/jd_scripts/tree/master/docker),更新镜像并更新配置后使用。"
RUN set -ex \
&& apk update && apk upgrade\
&& apk add --no-cache tzdata moreutils git nodejs npm\
&& apk add --no-cache tzdata moreutils git nodejs npm curl jq\
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone
RUN git clone https://github.com/lxk0301/jd_scripts /scripts \
&& cd /scripts \
&& git checkout master \
&& mkdir logs \
&& npm install \
&& cd /tmp \
&& npm install request
ENV CRONTAB_LIST_FILE crontab_list_ts.sh
ENV BUILD_VERSION=0.1.2 \
DEFAULT_LIST_FILE=crontab_list.sh \
CUSTOM_LIST_MERGE_TYPE=append
RUN crontab /scripts/docker/crontab_list_ts.sh
# github action 构建
COPY ./docker/docker_entrypoint.sh /usr/local/bin
# 本地构建
# COPY ./docker_entrypoint.sh /usr/local/bin
RUN chmod +x /usr/local/bin/docker_entrypoint.sh
WORKDIR /scripts
CMD ["node"]
ENTRYPOINT ["docker_entrypoint.sh"]

View File

@@ -6,7 +6,14 @@
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
```
### 如果需要使用 docker 多个账户独立并发执行定时任务,[参考这里](https://github.com/iouAkira/scripts/blob/patch-1/docker/docker%E5%A4%9A%E8%B4%A6%E6%88%B7%E4%BD%BF%E7%94%A8%E7%8B%AC%E7%AB%8B%E5%AE%B9%E5%99%A8%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E.md#%E4%BD%BF%E7%94%A8%E6%AD%A4%E6%96%B9%E5%BC%8F%E8%AF%B7%E5%85%88%E7%90%86%E8%A7%A3%E5%AD%A6%E4%BC%9A%E4%BD%BF%E7%94%A8docker%E5%8A%9E%E6%B3%95%E4%B8%80%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F)
### 如果需要使用 docker 多个账户独立并发执行定时任务,[参考这里](https://github.com/iouAkira/scripts/blob/patch-1/docker/docker%E5%A4%9A%E8%B4%A6%E6%88%B7%E4%BD%BF%E7%94%A8%E7%8B%AC%E7%AB%8B%E5%AE%B9%E5%99%A8%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E.md#%E4%BD%BF%E7%94%A8%E6%AD%A4%E6%96%B9%E5%BC%8F%E8%AF%B7%E5%85%88%E7%90%86%E8%A7%A3%E5%AD%A6%E4%BC%9A%E4%BD%BF%E7%94%A8docker%E5%8A%9E%E6%B3%95%E4%B8%80%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F)
2020-12-11更新镜像启动方式虽然兼容旧版的运行启动方式但是强烈建议更新镜像和配置后使用
- 更新后`commad:`指令配置不再需要
- 更新后可以使用自定义任务文件追加在默任务文件之后,比以前的完全覆盖多一个选择
- - 新的自定两个环境变量为 `CUSTOM_LIST_MERGE_TYPE`:自定文件的生效方式可选值为`append``overwrite`默认为`append` ; `CUSTOM_LIST_FILE`: 自定义文件的名字
- 更新镜像增减镜像更新通知,以后镜像如果更新之后,会通知用户更新
> 注⚠️:前提先理解学会使用这下面的教程
### 创建一个目录`jd_scripts`用于存放备份配置等数据迁移重装的时候只需要备份整个jd_scripts目录即可
需要新建的目录文件结构参考如下:
@@ -19,63 +26,18 @@ jd_scripts
└── docker-compose.yml
```
- `jd_scripts/logs`建一个空文件夹就行
- `jd_scripts/docker-compose.yml` 参考内容如下:
- `jd_scripts/docker-compose.yml` 参考内容如下(自己动手能力不行搞不定请使用默认配置)
- - [使用默认配置用这个](./example/default.yml)
- - [使用自定义任务追加到默认任务之后用这个](./example/custom-append.yml)
- - [使用自定义任务覆盖默认任务用这个](./example/custom-overwrite.yml)
- - [使用TG机器人交互的用这个](./example/use-tg-bot.yml)
- - [一次启动多容器并发用这个](./example/multi.yml)
- - [使用群晖默认配置用这个](./example/jd_scripts.syno.json)
- - [使用群晖自定义任务追加到默认任务之后用这个](./example/jd_scripts.custom-append.syno.json)
- - [使用群晖自定义任务覆盖默认任务用这个](./example/jd_scripts.custom-overwrite.syno.json)
- `jd_scripts/docker-compose.yml`里面的环境变量(`environment:`)配置[参考这里](https://github.com/lxk0301/jd_scripts/blob/master/githubAction.md#%E4%B8%8B%E6%96%B9%E6%8F%90%E4%BE%9B%E4%BD%BF%E7%94%A8%E5%88%B0%E7%9A%84-secrets%E5%85%A8%E9%9B%86%E5%90%88)
```yaml
jd_scripts:
jd_scripts:
image: akyakya/jd_scripts
container_name: jd_scripts
restart: always
#如果需要自定定义定时任务的需要自己写好`my_crontab_list.sh`文件 ,取消下面的挂载注释 ,通过 `volumes`挂载进去。
volumes:
# - ./my_crontab_list.sh:/scripts/docker/my_crontab_list.sh
- ./logs:/scripts/logs
tty: true
environment:
# 注意环境变量填写值的时候一律不需要引号(""或者'')下面这些只是事例,根据自己的需求增加删除
#jd cookies
# 例: JD_COOKIE=pt_key=XXX;pt_pin=XXX
- JD_COOKIE=
#微信server酱通
- PUSH_KEY=
#Bark App通知
- BARK_PUSH=
#telegram机器人通知
- TG_BOT_TOKEN=
- TG_USER_ID=
#钉钉机器人通知
- DD_BOT_TOKEN=
- DD_BOT_SECRET=
#京东种豆得豆
- PLANT_BEAN_SHARECODES=
#京东农场
# 例: FRUITSHARECODES=京东农场的互助码
- FRUITSHARECODES=
#京东萌宠
# 例: PETSHARECODES=东东萌宠的互助码
- PETSHARECODES=
# 宠汪汪的喂食数量
- JOY_FEED_COUNT=
#京小超
# - SUPERMARKET_SHARECODES=
#兑换多少数量的京豆20或者1000京豆,或者其他奖品的文字)
# 例: MARKET_COIN_TO_BEANS=1000
- MARKET_COIN_TO_BEANS=
#是否开启debug模式打印日志
# 例: JD_DEBUG=false
- JD_DEBUG=
#如果使用自定义定时任务,取消下面一行的注释
#- CRONTAB_LIST_FILE=my_crontab_list.sh
command:
- /bin/sh
- -c
- |
#crontab /scripts/docker/my_crontab_list.sh #如果挂载了自定义任务文件,取消此条注释即可
crond
git -C /scripts/ pull
node
```
- `jd_scripts/my_crontab_list.sh` 参考内容如下,自己根据需要调整增加删除,不熟悉用户推荐使用默认配置:
```shell

View File

@@ -1,6 +1,5 @@
50 */1 * * * git -C /scripts/ pull >> /scripts/logs/pull.log 2>&1
52 */1 * * * crontab /scripts/docker/${CRONTAB_LIST_FILE}
53 */1 * * * npm install --prefix /scripts >> /scripts/logs/npm_install.log 2>&1
#必须要的默认定时任务请勿删除
52 */1 * * * sh /scripts/docker/default_task.sh >> /scripts/logs/default_task.log 2>&1
# 每3天的23:50分清理一次日志
50 23 */3 * * rm -rf /scripts/logs/*.log
@@ -85,4 +84,4 @@
# 领京豆额外奖励(每日可获得3京豆)
33 4 * * * node /scripts/jd_bean_home.js >> /scripts/logs/jd_bean_home.log 2>&1
# 京东直播(每日18豆)
10-20/5 11 * * * node /scripts/jd_live.js >> /scripts/logs/jd_live.log 2>&1
10-20/5 11 * * * node /scripts/jd_live.js >> /scripts/logs/jd_live.log 2>&1

View File

@@ -1,6 +1,5 @@
50 */1 * * * git -C /scripts/ pull |ts >> /scripts/logs/pull.log 2>&1
52 */1 * * * crontab /scripts/docker/${CRONTAB_LIST_FILE}
53 */1 * * * npm install --prefix /scripts |ts >> /scripts/logs/npm_install.log 2>&1
#必须要的默认定时任务请勿删除
52 */1 * * * sh /scripts/docker/default_task.sh |ts >> /scripts/logs/default_task.log 2>&1
# 每3天的23:50分清理一次日志
50 23 */3 * * rm -rf /scripts/logs/*.log

111
docker/default_task.sh Normal file
View File

@@ -0,0 +1,111 @@
#!/bin/sh
set -e
echo "定时任务更新代码git 拉取最新代码,并安装更新依赖..."
git -C /scripts pull
npm install --prefix /scripts
######################################获取docker构建文件里面的自定义信息方法-start#####################################################
function getDockerImageLabel() {
repo=akyakya/jd_scripts
imageTag=latest
token=$(curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:${repo}:pull" | jq -r '.token')
digest=$(curl -s -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -H "Authorization: Bearer $token" "https://registry-1.docker.io/v2/${repo}/manifests/${imageTag}" | jq .config.digest -r)
labels=$(curl -s -L -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -H "Authorization: Bearer $token" "https://registry-1.docker.io/v2/${repo}/blobs/$digest" | jq .config.Labels)
echo $labels
}
######################################获取docker构建文件里面的自定义信息方法-end#####################################################
######################################对比版本版本号大小方法-start###################################################################
function version_gt() {
test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"
}
######################################对比版本版本号大小方法-end###################################################################
#######################################通知用户更新镜像-start#####################################################################
echo "检查docker镜像更新更新..."
if type jq >/dev/null 2>&1; then
echo "获取dockerhub仓库镜像labels信息..."
labels=$(getDockerImageLabel)
export NOTIFY_CONTENT=$(echo $labels | jq -r .UPDATE_CONTENT)
version=$(echo $labels | jq -r .VERSION)
else
# 第一版通知逻辑无法包含在上面判断里面,镜像构建好直接开启通知
echo "当前容版版本过旧,发送镜像更新通知"
export NOTIFY_CONTENT="更新内容较多重新阅读仓库Readme(https://github.com/lxk0301/jd_scripts/tree/master/docker),更新镜像并更新配置后使用。"
cd /scripts/docker
node notify_docker_user.js
fi
#通知通知用户更新镜像
if [ ! $BUILD_VERSION ]; then
if [ $version ]; then
echo "当前容器版本为空dockerhub仓库版本为$version,发送通知"
cd /scripts/docker
node notify_docker_user.js
fi
else
if version_gt $version $BUILD_VERSION; then
echo "当前容器版本为$BUILD_VERSIONdockerhub仓库版本为$version,发送通知"
cd /scripts/docker
node notify_docker_user.js
fi
fi
#######################################通知用户更新镜像-end#####################################################################
##兼容旧镜像的环境变量
if [ !$DEFAULT_LIST_FILE ]; then
defaultListFile="/scripts/docker/crontab_list.sh"
else
defaultListFile="/scripts/docker/$DEFAULT_LIST_FILE"
fi
customListFile="/scripts/docker/$CUSTOM_LIST_FILE"
mergedListFile="/scripts/docker/merged_list_file.sh"
if type ts >/dev/null 2>&1; then
echo '系统已安装moreutils工具包默认定时任务增加ts 输出'
##复制一个新文件来追加|ts防止git pull的时候冲突
cp $defaultListFile /scripts/docker/default_list.sh
defaultListFile="/scripts/docker/default_list.sh"
sed -i 's/>>/|ts >>/g' $defaultListFile
fi
echo "定时任务合并加载最新定时任务列表..."
#判断 自定义文件是否存在 是否存在
if [ $CUSTOM_LIST_FILE ]; then
echo "您配置了自定义任务文件:$CUSTOM_LIST_FILE,自定义任务类型为:$CUSTOM_LIST_MERGE_TYPE..."
if [ -f "$customListFile" ]; then
if [ $CUSTOM_LIST_MERGE_TYPE == "append" ]; then
echo "合并默认定时任务文件:$DEFAULT_LIST_FILE 和 自定义定时任务文件:$CUSTOM_LIST_FILE"
cat $defaultListFile >$mergedListFile
echo -e "" >>$mergedListFile
cat $customListFile >>$mergedListFile
elif [ $CUSTOM_LIST_MERGE_TYPE == "overwrite" ]; then
cat $customListFile >$mergedListFile
echo "$CUSTOM_LIST_FILE but file ..."
echo "配置了自定义任务文件:$CUSTOM_LIST_FILE,自定义任务类型为:$CUSTOM_LIST_MERGE_TYPE..."
touch "$customListFile"
else
echo "配置配置了错误的自定义定时任务类型:$CUSTOM_LIST_MERGE_TYPE自定义任务类型为只能为append或者overwrite..."
cat $defaultListFile >$mergedListFile
fi
else
echo "配置的自定义任务文件:$CUSTOM_LIST_FILE未找到,使用默认配置$DEFAULT_LIST_FILE..."
cat $defaultListFile >$mergedListFile
fi
else
echo "当前使用的为默认定时任务文件 $DEFAULT_LIST_FILE ..."
cat $defaultListFile >$mergedListFile
fi
# 判断最后要加载的定时任务是否包含默认定时任务,不包含的话就加进去
if [ $(grep -c "default_task.sh" $mergedListFile) -eq '0' ]; then
echo "合并后的定时任务文件,未包含必须的默认定时任务,增加默认定时任务..."
echo -e >>$mergedListFile
echo "52 */1 * * * sh /scripts/docker/default_task.sh |ts >> /scripts/logs/default_task.log 2>&1" >>$mergedListFile
fi
echo "加载最新的定时任务文件..."
crontab $mergedListFile

137
docker/docker_entrypoint.sh Normal file
View File

@@ -0,0 +1,137 @@
#!/bin/sh
set -e
export LANG="zh_CN.UTF-8"
if [ $1 ]; then
echo "Currently does not support specifying startup parameters"
echo "Please delete the last command attached to $(docker run) or the configured $(command:) parameter in $(docker-compose.yml)"
echo "暂时不支持指定启动参数,请删除 docker run时最后附带的命令 或者 docker-compose.yml中的配置的command:指令 "
fi
echo "##############################################################################"
echo "Container start , Pull the latest code..."
echo "容器启动git 拉取最新代码..."
git -C /scripts pull
npm install --prefix /scripts
echo "##############################################################################"
######################################获取docker构建文件里面的自定义信息方法-start#####################################################
function getDockerImageLabel() {
repo=akyakya/jd_scripts
imageTag=latest
token=$(curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:${repo}:pull" | jq -r '.token')
digest=$(curl -s -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -H "Authorization: Bearer $token" "https://registry-1.docker.io/v2/${repo}/manifests/${imageTag}" | jq .config.digest -r)
labels=$(curl -s -L -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -H "Authorization: Bearer $token" "https://registry-1.docker.io/v2/${repo}/blobs/$digest" | jq .config.Labels)
echo $labels
}
######################################获取docker构建文件里面的自定义信息方法-end#####################################################
######################################对比版本版本号大小方法-start###################################################################
function version_gt() {
test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"
}
######################################对比版本版本号大小方法-end###################################################################
#######################################通知用户更新镜像-start#####################################################################
echo "check docker images update..."
echo "检查docker镜像更新更新..."
if type jq >/dev/null 2>&1; then
echo "get dockerhub repo images labels..."
echo "获取dockerhub仓库镜像labels信息..."
labels=$(getDockerImageLabel)
export NOTIFY_CONTENT=$(echo $labels | jq -r .UPDATE_CONTENT)
version=$(echo $labels | jq -r .VERSION)
else
# 第一版通知逻辑无法包含在上面判断里面,镜像构建好直接开启通知
echo "Current container version is too old, send update notification"
echo "当前版本过旧,发送镜像更新通知"
export NOTIFY_CONTENT="更新内容较多重新阅读仓库Readme(https://github.com/lxk0301/jd_scripts/tree/master/docker),更新镜像并更新配置后使用。"
cd /scripts/docker
node notify_docker_user.js
fi
#通知通知用户更新镜像
if [ ! $BUILD_VERSION ]; then
if [ $version ]; then
echo "Current container version is empty, dockerhub lastet $version, send update notification"
echo "当前容器版本为空dockerhub仓库版本为$version,发送更新通知"
cd /scripts/docker
node notify_docker_user.js
fi
else
if version_gt $version $BUILD_VERSION; then
echo "Current container version $BUILD_VERSION, dockerhub lastet version $version, send update notification"
echo "当前容器版本为$BUILD_VERSIONdockerhub仓库版本为$version,发送通知"
cd /scripts/docker
node notify_docker_user.js
fi
fi
#######################################通知用户更新镜像-end#####################################################################
##兼容旧镜像的环境变量
if [ !$DEFAULT_LIST_FILE ]; then
defaultListFile="/scripts/docker/crontab_list.sh"
else
defaultListFile="/scripts/docker/$DEFAULT_LIST_FILE"
fi
customListFile="/scripts/docker/$CUSTOM_LIST_FILE"
mergedListFile="/scripts/docker/merged_list_file.sh"
if type ts >/dev/null 2>&1; then
echo 'moreutils tools installed, default task append |ts output'
echo '系统已安装moreutils工具包默认定时任务增加ts 输出'
##复制一个新文件来追加|ts防止git pull的时候冲突
cp $defaultListFile /scripts/docker/default_list.sh
defaultListFile="/scripts/docker/default_list.sh"
sed -i 's/>>/|ts >>/g' $defaultListFile
fi
#判断 自定义文件是否存在 是否存在
if [ $CUSTOM_LIST_FILE ]; then
echo "You have configured a custom list file: $CUSTOM_LIST_FILE, custom list merge type: $CUSTOM_LIST_MERGE_TYPE..."
echo "您配置了自定义任务文件:$CUSTOM_LIST_FILE,自定义任务类型为:$CUSTOM_LIST_MERGE_TYPE..."
if [ -f "$customListFile" ]; then
if [ $CUSTOM_LIST_MERGE_TYPE == "append" ]; then
echo "merge default list file: $DEFAULT_LIST_FILE and custom list file: $CUSTOM_LIST_FILE"
echo "合并默认定时任务文件:$DEFAULT_LIST_FILE 和 自定义定时任务文件:$CUSTOM_LIST_FILE"
cat $defaultListFile >$mergedListFile
echo -e "" >>$mergedListFile
cat $customListFile >>$mergedListFile
elif [ $CUSTOM_LIST_MERGE_TYPE == "overwrite" ]; then
cat $customListFile >$mergedListFile
echo "merge custom list file: $CUSTOM_LIST_FILE..."
echo "合并自定义任务文件:$CUSTOM_LIST_FILE"
touch "$customListFile"
else
echo "配置配置了错误的自定义定时任务类型:$CUSTOM_LIST_MERGE_TYPE自定义任务类型为只能为append或者overwrite..."
cat $defaultListFile >$mergedListFile
fi
else
echo "Not found custom list file: $CUSTOM_LIST_FILE ,use default list file: $DEFAULT_LIST_FILE"
echo "自定义任务文件:$CUSTOM_LIST_FILE 未找到,使用默认配置$DEFAULT_LIST_FILE..."
cat $defaultListFile >$mergedListFile
fi
else
echo "The currently used is the default crontab task file: $DEFAULT_LIST_FILE ..."
echo "当前使用的为默认定时任务文件 $DEFAULT_LIST_FILE ..."
cat $defaultListFile >$mergedListFile
fi
# 判断最后要加载的定时任务是否包含默认定时任务,不包含的话就加进去
if [ $(grep -c "default_task.sh" $mergedListFile) -eq '0' ]; then
echo "Merged crontab task filethe required default task is not included, append default task..."
echo "合并后的定时任务文件,未包含必须的默认定时任务,增加默认定时任务..."
echo -e >>$mergedListFile
echo "52 */1 * * * sh /scripts/docker/default_task.sh |ts >> /scripts/logs/default_task.log 2>&1" >>$mergedListFile
fi
echo "Load the latest crontab task file..."
echo "加载最新的定时任务文件..."
crontab $mergedListFile
echo "Start crontab task main process..."
echo "启动crondtab定时任务主进程..."
crond -f

View File

@@ -2,9 +2,8 @@ jd_scripts:
image: akyakya/jd_scripts
container_name: jd_scripts
restart: always
#如果需要自定定义定时任务的需要自己写好`my_crontab_list.sh`文件 ,取消下面的挂载注释 ,通过 `volumes`挂载进去。
volumes:
# - ./my_crontab_list.sh:/scripts/docker/my_crontab_list.sh
- ./my_crontab_list.sh:/scripts/docker/my_crontab_list.sh
- ./logs:/scripts/logs
tty: true
environment:
@@ -40,13 +39,6 @@ jd_scripts:
#是否开启debug模式打印日志
# 例: JD_DEBUG=false
- JD_DEBUG=
#如果使用自定义定时任务,取消下面一行的注释
#- CRONTAB_LIST_FILE=my_crontab_list.sh
command:
- /bin/sh
- -c
- |
#crontab /scripts/docker/my_crontab_list.sh #如果挂载了自定义任务文件,取消此条注释即可
crond
git -C /scripts/ pull
node
#使用自定义定任务追加默认任务之后上面volumes挂载之后这里配置对应的文件名
- CUSTOM_LIST_FILE=my_crontab_list.sh

View File

@@ -0,0 +1,44 @@
jd_scripts:
image: akyakya/jd_scripts
container_name: jd_scripts
restart: always
volumes:
- ./my_crontab_list.sh:/scripts/docker/my_crontab_list.sh
- ./logs:/scripts/logs
tty: true
environment:
# 注意环境变量填写值的时候一律不需要引号(""或者'')下面这些只是事例,根据自己的需求增加删除
#jd cookies
# 例: JD_COOKIE=pt_key=XXX;pt_pin=XXX
- JD_COOKIE=
#微信server酱通
- PUSH_KEY=
#Bark App通知
- BARK_PUSH=
#telegram机器人通知
- TG_BOT_TOKEN=
- TG_USER_ID=
#钉钉机器人通知
- DD_BOT_TOKEN=
- DD_BOT_SECRET=
#京东种豆得豆
- PLANT_BEAN_SHARECODES=
#京东农场
# 例: FRUITSHARECODES=京东农场的互助码
- FRUITSHARECODES=
#京东萌宠
# 例: PETSHARECODES=东东萌宠的互助码
- PETSHARECODES=
# 宠汪汪的喂食数量
- JOY_FEED_COUNT=
#京小超
# - SUPERMARKET_SHARECODES=
#兑换多少数量的京豆20或者1000京豆,或者其他奖品的文字)
# 例: MARKET_COIN_TO_BEANS=1000
- MARKET_COIN_TO_BEANS=
#是否开启debug模式打印日志
# 例: JD_DEBUG=false
- JD_DEBUG=
#使用自定义定任务追加默认任务之后上面volumes挂载之后这里配置对应的文件名和自定义文件使用方式为overwrite
- CUSTOM_LIST_FILE=my_crontab_list.sh
- CUSTOM_LIST_MERGE_TYPE=overwrite

View File

@@ -0,0 +1,42 @@
jd_scripts:
image: akyakya/jd_scripts
container_name: jd_scripts
restart: always
volumes:
- ./logs:/scripts/logs
tty: true
environment:
# 注意环境变量填写值的时候一律不需要引号(""或者'')下面这些只是事例,根据自己的需求增加删除
#jd cookies
# 例: JD_COOKIE=pt_key=XXX;pt_pin=XXX
- JD_COOKIE=
#微信server酱通
- PUSH_KEY=
#Bark App通知
- BARK_PUSH=
#telegram机器人通知
- TG_BOT_TOKEN=
- TG_USER_ID=
#钉钉机器人通知
- DD_BOT_TOKEN=
- DD_BOT_SECRET=
#京东种豆得豆
- PLANT_BEAN_SHARECODES=
#京东农场
# 例: FRUITSHARECODES=京东农场的互助码
- FRUITSHARECODES=
#京东萌宠
# 例: PETSHARECODES=东东萌宠的互助码
- PETSHARECODES=
# 宠汪汪的喂食数量
- JOY_FEED_COUNT=
#京小超
# - SUPERMARKET_SHARECODES=
#兑换多少数量的京豆20或者1000京豆,或者其他奖品的文字)
# 例: MARKET_COIN_TO_BEANS=1000
- MARKET_COIN_TO_BEANS=
#是否开启debug模式打印日志
# 例: JD_DEBUG=false
- JD_DEBUG=

View File

@@ -1,7 +1,7 @@
{
"cap_add" : [],
"cap_drop" : [],
"cmd" : "/bin/sh -c 'crontab /scripts/docker/my_crontab_list.sh && crond && node'",
"cmd" : "",
"cpu_priority" : 50,
"devices" : null,
"enable_publish_all_ports" : false,
@@ -25,7 +25,7 @@
"value" : ""
},
{
"key" : "CRONTAB_LIST_FILE",
"key" : "CUSTOM_LIST_FILE",
"value" : "my_crontab_list.sh"
}
],

View File

@@ -0,0 +1,69 @@
{
"cap_add" : [],
"cap_drop" : [],
"cmd" : "",
"cpu_priority" : 50,
"devices" : null,
"enable_publish_all_ports" : false,
"enable_restart_policy" : true,
"enabled" : true,
"env_variables" : [
{
"key" : "PATH",
"value" : "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
},
{
"key" : "CDN_JD_DAILYBONUS",
"value" : "true"
},
{
"key" : "JD_COOKIE",
"value" : "pt_key=xxx;pt_pin=xxx;"
},
{
"key" : "PUSH_KEY",
"value" : ""
},
{
"key" : "CUSTOM_LIST_FILE",
"value" : "my_crontab_list.sh"
},
{
"key" : "CUSTOM_LIST_MERGE_TYPE",
"value" : "overwrite"
}
],
"exporting" : false,
"id" : "3a2f6f27c23f93bc104585c22569c760cc9ce82df09cdb41d53b491fe1d0341c",
"image" : "akyakya/jd_scripts",
"is_ddsm" : false,
"is_package" : false,
"links" : [],
"memory_limit" : 0,
"name" : "jd_scripts",
"network" : [
{
"driver" : "bridge",
"name" : "bridge"
}
],
"network_mode" : "default",
"port_bindings" : [],
"privileged" : false,
"shortcut" : {
"enable_shortcut" : false
},
"use_host_network" : false,
"volume_bindings" : [
{
"host_volume_file" : "/docker/jd_scripts/my_crontab_list.sh",
"mount_point" : "/scripts/docker/my_crontab_list.sh",
"type" : "rw"
},
{
"host_volume_file" : "/docker/jd_scripts/logs",
"mount_point" : "/scripts/logs",
"type" : "rw"
}
]
}

View File

@@ -1,7 +1,7 @@
{
"cap_add" : null,
"cap_drop" : null,
"cmd" : "/bin/sh -c 'crond && node'",
"cmd" : "",
"cpu_priority" : 0,
"devices" : null,
"enable_publish_all_ports" : false,

51
docker/example/multi.yml Normal file
View File

@@ -0,0 +1,51 @@
version: "3"
services:
jd_scripts1: #默认
image: akyakya/jd_scripts
restart: always
container_name: jd_scripts1
tty: true
volumes:
- ./logs1:/scripts/logs
environment:
- JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
- TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
- TG_USER_ID=12xxxx206
jd_scripts2: #默认
image: akyakya/jd_scripts
restart: always
container_name: jd_scripts2
tty: true
volumes:
- ./logs2:/scripts/logs
environment:
- JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
- TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
- TG_USER_ID=12xxxx206
jd_scripts4: #自定义追加默认之后
image: akyakya/jd_scripts
restart: always
container_name: jd_scripts4
tty: true
volumes:
- ./logs4:/scripts/logs
- ./my_crontab_list4.sh:/scripts/docker/my_crontab_list.sh
environment:
- JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
- TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
- TG_USER_ID=12xxxx206
- CUSTOM_LIST_FILE=my_crontab_list.sh
jd_scripts5: #自定义覆盖默认
image: akyakya/jd_scripts
restart: always
container_name: jd_scripts5
tty: true
volumes:
- ./logs5:/scripts/logs
- ./my_crontab_list5.sh:/scripts/docker/my_crontab_list.sh
environment:
- JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
- TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
- TG_USER_ID=12xxxx206
- CUSTOM_LIST_FILE=my_crontab_list.sh
- CUSTOM_LIST_MERGE_TYPE=overwrite

View File

@@ -0,0 +1,40 @@
jd_scripts:
image: akyakya/jd_scripts:supportbot
container_name: jd_scripts
restart: always
volumes:
- ./logs:/scripts/logs
tty: true
environment:
# 注意环境变量填写值的时候一律不需要引号(""或者'')下面这些只是事例,根据自己的需求增加删除
#jd cookies
# 例: JD_COOKIE=pt_key=XXX;pt_pin=XXX
- JD_COOKIE=
#微信server酱通
- PUSH_KEY=
#Bark App通知
- BARK_PUSH=
#telegram机器人通知
- TG_BOT_TOKEN=
- TG_USER_ID=
#钉钉机器人通知
- DD_BOT_TOKEN=
- DD_BOT_SECRET=
#京东种豆得豆
- PLANT_BEAN_SHARECODES=
#京东农场
# 例: FRUITSHARECODES=京东农场的互助码
- FRUITSHARECODES=
#京东萌宠
# 例: PETSHARECODES=东东萌宠的互助码
- PETSHARECODES=
# 宠汪汪的喂食数量
- JOY_FEED_COUNT=
#京小超
# - SUPERMARKET_SHARECODES=
#兑换多少数量的京豆20或者1000京豆,或者其他奖品的文字)
# 例: MARKET_COIN_TO_BEANS=1000
- MARKET_COIN_TO_BEANS=
#是否开启debug模式打印日志
# 例: JD_DEBUG=false
- JD_DEBUG=

View File

@@ -0,0 +1,9 @@
const notify = require('../sendNotify');
function image_update_notify() {
if (process.env.NOTIFY_CONTENT) {
notify.sendNotify("⚠Docker镜像版本更新通知⚠", process.env.NOTIFY_CONTENT)
}
}
image_update_notify();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 63 KiB

View File

@@ -47,7 +47,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = 'https://rdcseason.m.jd.com/api/';

View File

@@ -38,7 +38,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = 'https://api.m.jd.com/client.action';
const inviteCodes = [`P04z54XCjVUm4aW5nJcXCCyoR8C6s-kRmWs@P04z54XCjVUm4aW5m9cZ2bx3y5Ow@P04z54XCjVUm4aW5u2ak7ZCdan1BeYMuZ9HwF34gJjW@P04z54XCjVUm4aW5m9cZ2T6jChKkkjZEdhiKUY`, `P04z54XCjVUm4aW5nJcXCCyoR8C6s-kRmWs@P04z54XCjVUm4aW5m9cZ2bx3y5Ow`];

View File

@@ -36,7 +36,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
!(async () => {
if (!cookiesArr[0]) {

View File

@@ -39,7 +39,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = 'https://api.m.jd.com/';
!(async () => {

View File

@@ -31,7 +31,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = `https://api.m.jd.com/api?appid=jdsupermarket`;

View File

@@ -39,7 +39,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = 'https://car-member.jd.com/api/';
!(async () => {

View File

@@ -35,7 +35,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = 'https://api.m.jd.com/client.action';
!(async () => {

View File

@@ -25,7 +25,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
!(async () => {
if (!cookiesArr[0]) {

View File

@@ -41,7 +41,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = 'https://digital-floor.m.jd.com/adf/index/';
!(async () => {

View File

@@ -46,7 +46,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
!(async () => {
await requireConfig();

View File

@@ -45,7 +45,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = 'https://api.m.jd.com/';
!(async () => {

View File

@@ -85,7 +85,7 @@ async function jdFruit() {
// option['media-url'] = $.farmInfo.farmUserPro.goodsImage;
subTitle = `【京东账号${$.index}${$.nickName}`;
message = `【水果名称】${$.farmInfo.farmUserPro.name}\n`;
console.log(`\n【您的互助码shareCode】 ${$.farmInfo.farmUserPro.shareCode}\n`);
console.log(`\n【您的${$.name}互助码shareCode】 ${$.farmInfo.farmUserPro.shareCode}\n`);
console.log(`\n【已成功兑换水果】${$.farmInfo.farmUserPro.winTimes}\n`);
message += `【已兑换水果】${$.farmInfo.farmUserPro.winTimes}\n`;
await masterHelpShare();//助力好友

View File

@@ -37,7 +37,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = 'https://api.m.jd.com/client.action';
const inviteCodes = [`P04z54XCjVUnoaW5nJcXCCyoR8C6i9QR16e`, 'P04z54XCjVUnoaW5m9cZ2T6jChKkh8FWbFAplQ', `P04z54XCjVUnoaW5u2ak7ZCdan1Bdbpik_F9ud7lznm`, `P04z54XCjVUnoaW5m9cZ2ariXVJwFN5uKHNqnc`];

View File

@@ -46,7 +46,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
let wantProduct = ``;//心仪商品名称
const JD_API_HOST = 'https://api.m.jd.com/client.action';
@@ -219,8 +221,11 @@ async function algorithm() {
message += `兑换所需电量:${$.canMakeList[0].fullScore}\n`;
message += `您当前总电量:${$.batteryValue * 1}\n`;
if ($.canMakeList[0].couponCount > 0 && $.batteryValue * 1 >= $.canMakeList[0].fullScore) {
$.msg($.name, '', `京东账号${$.index}${$.nickName}\n${message}【满足】兑换${$.canMakeList[0].name}所需总电量:${$.canMakeList[0].fullScore}\n请点击弹窗直达活动页面\n选择此心仪商品并手动投入电量兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'});
if ($.isNode()) await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `【京东账号${$.index}${$.nickName}\n${message}【满足】兑换${$.canMakeList[0].name}所需总电量:${$.canMakeList[0].fullScore}\n请速去活动页面查看`);
let nowTimes = new Date(new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000);
if (new Date(nowTimes).getHours() === 12) {
$.msg($.name, '', `京东账号${$.index}${$.nickName}\n${message}【满足】兑换${$.canMakeList[0].name}所需总电量:${$.canMakeList[0].fullScore}\n请点击弹窗直达活动页面\n选择此心仪商品并手动投入电量兑换`, {'open-url': 'openjd://virtual?params=%7B%20%22category%22:%20%22jump%22,%20%22des%22:%20%22m%22,%20%22url%22:%20%22https://h5.m.jd.com/babelDiy/Zeus/2uSsV2wHEkySvompfjB43nuKkcHp/index.html%22%20%7D'});
if ($.isNode()) await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `【京东账号${$.index}${$.nickName}\n${message}【满足】兑换${$.canMakeList[0].name}所需总电量:${$.canMakeList[0].fullScore}\n请速去活动页面查看`);
}
} else {
console.log(`\n目前电量${$.batteryValue * 1},不满足兑换 ${$.canMakeList[0].name}所需的 ${$.canMakeList[0].fullScore}电量\n`)
}

View File

@@ -35,7 +35,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
let message = '', subTitle = '';
let FEED_NUM = ($.getdata('joyFeedCount') * 1) || 10; //每次喂养数量 [10,20,40,80]

View File

@@ -30,7 +30,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
let jdNotify = true;//是否开启静默运行。默认true开启
let message = '', subTitle = '';

View File

@@ -33,7 +33,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = 'https://jdjoy.jd.com';
!(async () => {

View File

@@ -73,7 +73,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
if ($.getdata('jd_joy_invite_pin')) {
invite_pins = [];
invite_pins.push($.getdata('jd_joy_invite_pin'));

View File

@@ -43,7 +43,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
!(async () => {
await requireConfig();

View File

@@ -39,7 +39,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = 'https://api.m.jd.com/api';
!(async () => {

View File

@@ -36,7 +36,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = 'https://api.m.jd.com/client.action';
!(async () => {

View File

@@ -39,7 +39,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = 'https://api.m.jd.com/api';
!(async () => {

View File

@@ -29,7 +29,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
let jdNotify = true;//是否开启静默运行默认true开启

View File

@@ -38,7 +38,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = 'https://api.m.jd.com/api';
!(async () => {

View File

@@ -42,7 +42,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = 'https://api.m.jd.com/api';

View File

@@ -115,7 +115,7 @@ async function jdPet() {
}
return
}
console.log(`\n【您的互助码shareCode】 ${$.petInfo.shareCode}\n`);
console.log(`\n【您的${$.name}互助码shareCode】 ${$.petInfo.shareCode}\n`);
await taskInit();
if ($.taskInit.resultCode === '9999' || !$.taskInit.result) {
console.log('初始化任务异常, 请稍后再试');

View File

@@ -30,7 +30,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
!(async () => {
if (!cookiesArr[0]) {

View File

@@ -89,7 +89,7 @@ async function jdPlantBean() {
if ($.plantBeanIndexResult.code === '0') {
const shareUrl = $.plantBeanIndexResult.data.jwordShareInfo.shareUrl
$.myPlantUuid = getParam(shareUrl, 'plantUuid')
console.log(`\n【您的互助码plantUuid${$.myPlantUuid}\n`);
console.log(`\n【您的${$.name}互助码】 ${$.myPlantUuid}\n`);
roundList = $.plantBeanIndexResult.data.roundList;
currentRoundId = roundList[1].roundId;//本期的roundId
lastRoundId = roundList[0].roundId;//上期的roundId

View File

@@ -134,7 +134,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = 'https://starsingle.m.jd.com/guardianstar/';
const inviteCodes = ['65561ad5-af72-4d1c-a5be-37b3de372b67@2d5f579d-e6d1-479e-931f-c275d602caf5@a3551e1d-fb07-40f0-b9ad-d50e4b480098@696cfa20-3719-442a-a331-0e07beaeb375@718868ed-2202-465d-b3a4-54e76b30d02a','65561ad5-af72-4d1c-a5be-37b3de372b67@2d5f579d-e6d1-479e-931f-c275d602caf5']

View File

@@ -41,7 +41,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = 'https://api.m.jd.com/api';

View File

@@ -29,7 +29,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
let message = '', subTitle = '';

View File

@@ -54,7 +54,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = 'https://lkyl.dianpusoft.cn/api';

View File

@@ -33,7 +33,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
let jdNotify = true;//是否开启静默运行。默认true开启
let message = '', subTitle = '';

View File

@@ -38,7 +38,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = 'https://api.m.jd.com/client.action';
$.newShareCodes = [`P04z54XCjVUnIaW5nJcXCCyoR8C6p8txXBH`, 'P04z54XCjVUnIaW5m9cZ2T6jChKki0Hfndla5k', 'P04z54XCjVUnIaW5u2ak7ZCdan1BT0NlbBGZ1-rnMYj', 'P04z54XCjVUnIaW5m9cZ2ariXVJwI64DaVTNXQ'];

View File

@@ -1377,7 +1377,9 @@ function requireConfig() {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
console.log(`${cookiesArr.length}个京东账号\n`);
console.log(`京小超已改版,目前暂不用助力, 故无助力码`)

View File

@@ -43,7 +43,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const JD_API_HOST = 'https://api.m.jd.com/api';
!(async () => {

View File

@@ -32,7 +32,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push(...[$.getdata('CookieJD'), $.getdata('CookieJD2')]);
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const jdNotify = $.getdata('jdUnsubscribeNotify');//是否关闭通知false打开通知推送true关闭通知推送
let goodPageSize = $.getdata('jdUnsubscribePageSize') || 20;// 运行一次取消多少个已关注的商品。数字0表示不取关任何商品

View File

@@ -41,8 +41,9 @@ if ($.isNode()) {
let cookiesData = $.getdata('CookiesJD') || "[]";
cookiesData = jsonParse(cookiesData);
cookiesArr = cookiesData.map(item => item.cookie);
cookiesArr.push($.getdata('CookieJD'));
cookiesArr.push($.getdata('CookieJD2'));
cookiesArr.reverse();
cookiesArr.push(...[$.getdata('CookieJD2'), $.getdata('CookieJD')]);
cookiesArr.reverse();
}
const starID = [
'bolangwutiaoren',