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```
-![TG_PUSH2](../icon/TG_PUSH2.png) +![TG_PUSH2](../icon/TG_PUSH2.png)
+ +**新创建的机器人需要跟它发一条消息来开启对话,否则可能会遇到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',