diff --git a/backUp/TG_PUSH.md b/backUp/TG_PUSH.md
index 4004b29..6db47d5 100644
--- a/backUp/TG_PUSH.md
+++ b/backUp/TG_PUSH.md
@@ -8,7 +8,9 @@
Ⅱ.利用[BotFather](https://t.me/BotFather)创建一个属于自己的通知机器人,按照下图中的1、2、3步骤拿到token,格式形如```10xxx4:AAFcqxxxxgER5uw```。填入```TG_BOT_TOKEN```
-
+
+
+**新创建的机器人需要跟它发一条消息来开启对话,否则可能会遇到secret填对了但是收不到消息的情况**
Ⅲ.再次在Telegram上搜索[getuserIDbot](https://t.me/getuserIDbot)机器人,获取UserID。填入```TG_USER_ID```
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 5615cde..c529af5 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -1,23 +1,32 @@
FROM alpine
-MAINTAINER Akira
+LABEL AUTHOR="Akira " \
+ 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"]
diff --git a/docker/Readme.md b/docker/Readme.md
index 7b5d824..cd1a3f3 100644
--- a/docker/Readme.md
+++ b/docker/Readme.md
@@ -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
diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh
index 4fd063d..eeb0fb4 100644
--- a/docker/crontab_list.sh
+++ b/docker/crontab_list.sh
@@ -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
\ No newline at end of file
+10-20/5 11 * * * node /scripts/jd_live.js >> /scripts/logs/jd_live.log 2>&1
diff --git a/docker/crontab_list_ts.sh b/docker/crontab_list_ts.sh
index 4271b17..44cc0c7 100644
--- a/docker/crontab_list_ts.sh
+++ b/docker/crontab_list_ts.sh
@@ -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
diff --git a/docker/default_task.sh b/docker/default_task.sh
new file mode 100644
index 0000000..0ba1daf
--- /dev/null
+++ b/docker/default_task.sh
@@ -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_VERSION,dockerhub仓库版本为$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
diff --git a/docker/docker_entrypoint.sh b/docker/docker_entrypoint.sh
new file mode 100644
index 0000000..53c6c87
--- /dev/null
+++ b/docker/docker_entrypoint.sh
@@ -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_VERSION,dockerhub仓库版本为$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 file,the 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
diff --git a/docker/docker-compose.yml b/docker/example/custom-append.yml
similarity index 68%
rename from docker/docker-compose.yml
rename to docker/example/custom-append.yml
index 93daae3..f2618e4 100644
--- a/docker/docker-compose.yml
+++ b/docker/example/custom-append.yml
@@ -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
+
diff --git a/docker/example/custom-overwrite.yml b/docker/example/custom-overwrite.yml
new file mode 100644
index 0000000..5099b9f
--- /dev/null
+++ b/docker/example/custom-overwrite.yml
@@ -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
diff --git a/docker/example/default.yml b/docker/example/default.yml
new file mode 100644
index 0000000..bdc6c60
--- /dev/null
+++ b/docker/example/default.yml
@@ -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=
+
+
diff --git a/docker/docker多账户使用独立容器使用说明.md b/docker/example/docker多账户使用独立容器使用说明.md
similarity index 100%
rename from docker/docker多账户使用独立容器使用说明.md
rename to docker/example/docker多账户使用独立容器使用说明.md
diff --git a/docker/jd_scripts.my_crontab_list.syno.json b/docker/example/jd_scripts.custom-append.syno.json
similarity index 92%
rename from docker/jd_scripts.my_crontab_list.syno.json
rename to docker/example/jd_scripts.custom-append.syno.json
index 2fddb6b..e6fdce5 100644
--- a/docker/jd_scripts.my_crontab_list.syno.json
+++ b/docker/example/jd_scripts.custom-append.syno.json
@@ -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"
}
],
diff --git a/docker/example/jd_scripts.custom-overwrite.syno.json b/docker/example/jd_scripts.custom-overwrite.syno.json
new file mode 100644
index 0000000..d75581f
--- /dev/null
+++ b/docker/example/jd_scripts.custom-overwrite.syno.json
@@ -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"
+ }
+ ]
+}
diff --git a/docker/jd_scripts.syno.json b/docker/example/jd_scripts.syno.json
similarity index 97%
rename from docker/jd_scripts.syno.json
rename to docker/example/jd_scripts.syno.json
index 042b6de..61acfd6 100644
--- a/docker/jd_scripts.syno.json
+++ b/docker/example/jd_scripts.syno.json
@@ -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,
diff --git a/docker/example/multi.yml b/docker/example/multi.yml
new file mode 100644
index 0000000..8b2faa5
--- /dev/null
+++ b/docker/example/multi.yml
@@ -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
diff --git a/docker/example/use-tg-bot.yml b/docker/example/use-tg-bot.yml
new file mode 100644
index 0000000..8706858
--- /dev/null
+++ b/docker/example/use-tg-bot.yml
@@ -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=
diff --git a/docker/notify_docker_user.js b/docker/notify_docker_user.js
new file mode 100644
index 0000000..55916d0
--- /dev/null
+++ b/docker/notify_docker_user.js
@@ -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();
\ No newline at end of file
diff --git a/icon/TG_PUSH2.png b/icon/TG_PUSH2.png
index a9d8c58..429d784 100644
Binary files a/icon/TG_PUSH2.png and b/icon/TG_PUSH2.png differ
diff --git a/jd_818.js b/jd_818.js
index ddfa8e6..3f7ff7e 100644
--- a/jd_818.js
+++ b/jd_818.js
@@ -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/';
diff --git a/jd_apple_live.js b/jd_apple_live.js
index 0e1609e..49b40a2 100644
--- a/jd_apple_live.js
+++ b/jd_apple_live.js
@@ -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`];
diff --git a/jd_bean_change.js b/jd_bean_change.js
index f114139..0eacf7b 100644
--- a/jd_bean_change.js
+++ b/jd_bean_change.js
@@ -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]) {
diff --git a/jd_bean_home.js b/jd_bean_home.js
index 028cd28..9d2bf5e 100644
--- a/jd_bean_home.js
+++ b/jd_bean_home.js
@@ -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 () => {
diff --git a/jd_blueCoin.js b/jd_blueCoin.js
index f4f941d..503d3a8 100644
--- a/jd_blueCoin.js
+++ b/jd_blueCoin.js
@@ -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`;
diff --git a/jd_car.js b/jd_car.js
index b7c4cb5..2eb6849 100644
--- a/jd_car.js
+++ b/jd_car.js
@@ -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 () => {
diff --git a/jd_club_lottery.js b/jd_club_lottery.js
index 5733dc7..724c977 100644
--- a/jd_club_lottery.js
+++ b/jd_club_lottery.js
@@ -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 () => {
diff --git a/jd_daily_egg.js b/jd_daily_egg.js
index 76672f9..c4c595d 100644
--- a/jd_daily_egg.js
+++ b/jd_daily_egg.js
@@ -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]) {
diff --git a/jd_digital_floor.js b/jd_digital_floor.js
index b426fc7..6ca2a71 100644
--- a/jd_digital_floor.js
+++ b/jd_digital_floor.js
@@ -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 () => {
diff --git a/jd_dreamFactory.js b/jd_dreamFactory.js
index c0c85a2..f431682 100644
--- a/jd_dreamFactory.js
+++ b/jd_dreamFactory.js
@@ -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();
diff --git a/jd_ds.js b/jd_ds.js
index 20a5ad0..b07f736 100644
--- a/jd_ds.js
+++ b/jd_ds.js
@@ -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 () => {
diff --git a/jd_fruit.js b/jd_fruit.js
index b0f4eee..9902fd0 100644
--- a/jd_fruit.js
+++ b/jd_fruit.js
@@ -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();//助力好友
diff --git a/jd_health.js b/jd_health.js
index f8f3f84..5443c20 100644
--- a/jd_health.js
+++ b/jd_health.js
@@ -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`];
diff --git a/jd_jdfactory.js b/jd_jdfactory.js
index ca98901..295ad39 100644
--- a/jd_jdfactory.js
+++ b/jd_jdfactory.js
@@ -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`)
}
diff --git a/jd_joy.js b/jd_joy.js
index e2473c5..f06e5a0 100644
--- a/jd_joy.js
+++ b/jd_joy.js
@@ -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]
diff --git a/jd_joy_feedPets.js b/jd_joy_feedPets.js
index 1e497cb..b1a6c49 100644
--- a/jd_joy_feedPets.js
+++ b/jd_joy_feedPets.js
@@ -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 = '';
diff --git a/jd_joy_reward.js b/jd_joy_reward.js
index 3992fdb..1e4b769 100644
--- a/jd_joy_reward.js
+++ b/jd_joy_reward.js
@@ -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 () => {
diff --git a/jd_joy_run.js b/jd_joy_run.js
index 534ade1..26a5729 100644
--- a/jd_joy_run.js
+++ b/jd_joy_run.js
@@ -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'));
diff --git a/jd_jxstory.js b/jd_jxstory.js
index e1584a3..2e923e1 100644
--- a/jd_jxstory.js
+++ b/jd_jxstory.js
@@ -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();
diff --git a/jd_kd.js b/jd_kd.js
index 04688ac..9709153 100644
--- a/jd_kd.js
+++ b/jd_kd.js
@@ -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 () => {
diff --git a/jd_live.js b/jd_live.js
index 7e31864..dd52aa4 100644
--- a/jd_live.js
+++ b/jd_live.js
@@ -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 () => {
diff --git a/jd_live_redrain.js b/jd_live_redrain.js
index 3bb0136..1086ff5 100644
--- a/jd_live_redrain.js
+++ b/jd_live_redrain.js
@@ -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 () => {
diff --git a/jd_moneyTree.js b/jd_moneyTree.js
index 7d22444..54a2c13 100644
--- a/jd_moneyTree.js
+++ b/jd_moneyTree.js
@@ -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开启
diff --git a/jd_ms_redrain.js b/jd_ms_redrain.js
index 0f3a009..2a84a2f 100644
--- a/jd_ms_redrain.js
+++ b/jd_ms_redrain.js
@@ -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 () => {
diff --git a/jd_necklace.js b/jd_necklace.js
index 1467ea4..0f8a67b 100644
--- a/jd_necklace.js
+++ b/jd_necklace.js
@@ -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';
diff --git a/jd_pet.js b/jd_pet.js
index 7e71281..4fac23d 100644
--- a/jd_pet.js
+++ b/jd_pet.js
@@ -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('初始化任务异常, 请稍后再试');
diff --git a/jd_pigPet.js b/jd_pigPet.js
index ce5afd6..7c66c4f 100644
--- a/jd_pigPet.js
+++ b/jd_pigPet.js
@@ -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]) {
diff --git a/jd_plantBean.js b/jd_plantBean.js
index 1640b5f..e4237bd 100644
--- a/jd_plantBean.js
+++ b/jd_plantBean.js
@@ -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
diff --git a/jd_pubg.js b/jd_pubg.js
index 174b915..241ca26 100644
--- a/jd_pubg.js
+++ b/jd_pubg.js
@@ -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']
diff --git a/jd_redPacket.js b/jd_redPacket.js
index 6aad966..d0dc2aa 100644
--- a/jd_redPacket.js
+++ b/jd_redPacket.js
@@ -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';
diff --git a/jd_shop.js b/jd_shop.js
index ecf3d54..857e930 100644
--- a/jd_shop.js
+++ b/jd_shop.js
@@ -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 = '';
diff --git a/jd_small_home.js b/jd_small_home.js
index be5564c..47d58a6 100644
--- a/jd_small_home.js
+++ b/jd_small_home.js
@@ -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';
diff --git a/jd_speed.js b/jd_speed.js
index d1887b8..32cec98 100644
--- a/jd_speed.js
+++ b/jd_speed.js
@@ -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 = '';
diff --git a/jd_split.js b/jd_split.js
index 4b77a55..aea6da5 100644
--- a/jd_split.js
+++ b/jd_split.js
@@ -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'];
diff --git a/jd_superMarket.js b/jd_superMarket.js
index 916740b..4d25cda 100644
--- a/jd_superMarket.js
+++ b/jd_superMarket.js
@@ -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(`京小超已改版,目前暂不用助力, 故无助力码`)
diff --git a/jd_syj.js b/jd_syj.js
index bda6711..4514dc5 100644
--- a/jd_syj.js
+++ b/jd_syj.js
@@ -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 () => {
diff --git a/jd_unsubscribe.js b/jd_unsubscribe.js
index 968bef4..fa1fbcd 100644
--- a/jd_unsubscribe.js
+++ b/jd_unsubscribe.js
@@ -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表示不取关任何商品
diff --git a/jd_xtg.js b/jd_xtg.js
index 4621585..7646aae 100644
--- a/jd_xtg.js
+++ b/jd_xtg.js
@@ -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',