diff --git a/.DS_Store b/.DS_Store index 57282fe..fd95340 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/Scripts/sh/.DS_Store b/Scripts/sh/.DS_Store index 85faefb..480d8ad 100644 Binary files a/Scripts/sh/.DS_Store and b/Scripts/sh/.DS_Store differ diff --git a/Scripts/sh/Helpcode2.8/code.sh b/Scripts/sh/Helpcode2.8/code.sh index 5afe3ef..e32802b 100644 --- a/Scripts/sh/Helpcode2.8/code.sh +++ b/Scripts/sh/Helpcode2.8/code.sh @@ -1,28 +1,28 @@ #!/usr/bin/env bash -## Build 20210821-001 +## Build 20211208-001-test ## 导入通用变量与函数 dir_shell=/ql/shell . $dir_shell/share.sh -dir_env_db=/$dir_db/env.db - -## 删除失效Cookie开关,默认是0,表示关闭;设置为1,表示开启 -DEL_COOKIE="0" - ## 预设的仓库及默认调用仓库设置 ## 将"repo=$repo1"改成repo=$repo2"或其他,以默认调用其他仓库脚本日志 ## 也可自行搜索本脚本内的"name_js=("和"name_js_only",将"repo"改成"repo2"或其他,用以自由组合调用仓库的脚本日志 -repo1='shufflewzc_faker3' #预设的 Faker3仓库 -repo4='shufflewzc_faker2' #预设的 shufflewzc 仓库 -repo=$repo4 #默认调用 shufflewzc_faker2 仓库脚本日志 +repo1='panghu999_jd_scripts' #预设的 panghu999 仓库 +repo2='JDHelloWorld_jd_scripts' #预设的 JDHelloWorld 仓库 +repo3='he1pu_JDHelp' #预设的 he1pu 仓库 +repo4='shufflewzc_faker2' #预设的 shufflewzc 仓库 +repo5='Wenmoux_scripts_wen_chinnkarahoi' #预设的 Wenmoux 仓库,用于读取口袋书店互助码。需提前拉取温某人的仓库或口袋书店脚本并完整运行。 +repo6='Aaron-lv_sync_jd_scripts' #预设的 Aaron-lv 仓库 +repo7='smiek2221_scripts' #预设的 smiek2221 仓库 +repo="" #空值,表示遍历所有仓库脚本日志 ## 调试模式开关,默认是0,表示关闭;设置为1,表示开启 DEBUG="1" ## 本脚本限制的最大线程数量 -proc_num="7" +proc_num="10" ## 备份配置文件开关,默认是1,表示开启;设置为0,表示关闭。备份路径 /ql/config/bak/ BACKUP="1" @@ -36,27 +36,32 @@ CLEANBAK_DAYS="2" ## 填 0 使用“全部一致互助模板”,所有账户要助力的码全部一致 ## 填 1 使用“均等机会互助模板”,所有账户获得助力次数一致 ## 填 2 使用“随机顺序互助模板”,本套脚本内账号间随机顺序助力,每次生成的顺序都不一致。 -HelpType="1" +## 填 3 使用“车头A模式互助模板”,本套脚本内指定前 N 个账号优先助力,N 个以后账号间随机助力(随机部分账号顺序随机)。 +## 填 4 使用“车头B模式互助模板”,本套脚本内指定前 N 个账号优先助力,N 个以后账号间随机助力(随机部分账号顺序固定)。 +HelpType="" + +## 定义前 N 个账号优先助力,N 个以后账号间随机助力。front_num="N",N 定义值小于账号总数,当HelpType 赋值 3 或 4 时有效 +front_num="5" ## 定义指定活动采用指定的互助模板。 ## 设定值为 DiyHelpType="1" 表示启用功能;不填或填其他内容表示不开启功能。 ## 如果只是想要控制某个活动以执行某种互助规则,可以参考下面 case 这个命令的例子来控制 ## 活动名称参见 name_config 定义内容;具体可在本脚本中搜索 name_config=( 获悉 -DiyHelpType="0" -diy_help_rules(){ +DiyHelpType="" +diy_help_rules() { case $1 in - Fruit) - tmp_helptype="0" # 东东农场使用“全部一致互助模板”,所有账户要助力的码全部一致 - ;; - DreamFactory | JdFactory) - tmp_helptype="1" # 京喜工厂和东东工厂使用“均等机会互助模板”,所有账户获得助力次数一致 - ;; - Jdzz | Joy) - tmp_helptype="2" # 京东赚赚和疯狂的Joy使用“随机顺序互助模板”,本套脚本内账号间随机顺序助力,每次生成的顺序都不一致。 - ;; - *) - tmp_helptype=$HelpType # 其他活动仍按默认互助模板生产互助规则。 - ;; + Fruit) + tmp_helptype="0" # 东东农场使用“全部一致互助模板”,所有账户要助力的码全部一致 + ;; + DreamFactory | JdFactory) + tmp_helptype="1" # 京喜工厂和东东工厂使用“均等机会互助模板”,所有账户获得助力次数一致 + ;; + Jdzz | Joy) + tmp_helptype="2" # 京东赚赚和疯狂的Joy使用“随机顺序互助模板”,本套脚本内账号间随机顺序助力,每次生成的顺序都不一致。 + ;; + *) + tmp_helptype=$HelpType # 其他活动仍按默认互助模板生产互助规则。 + ;; esac } @@ -69,128 +74,129 @@ diy_help_rules(){ ## c) 设定为 BreakHelpNum="6-12" 表示从第 6 至 12 个账号均不被助力; ## d) 设定为 BreakHelpNum="4 9-14 15~18 19_21" 表示第4个账号、第9至14账号、第15至18账号、第19至21账号均不被助力。注意序号区间连接符仅支持 - ~ _; ## 不按示例填写可能引发报错。 -BreakHelpType="0" ## 屏蔽模式 -BreakHelpNum="4 9-14 15~18 19_21" ## 屏蔽账号序号或序号区间 +BreakHelpType="0" ## 屏蔽模式 +BreakHelpNum="4 9-14 15~18 19_21" ## 屏蔽账号序号或序号区间 ## 定义是否自动更新配置文件中的互助码和互助规则 ## 默认为 UpdateType="1" 表示更新互助码和互助规则;UpdateType="2" 表示只更新互助码,不更新互助规则;UpdateType="3" 表示只更新互助规则,不更新互助码;留空或其他数值表示不更新。 UpdateType="1" ## 定义是否自动安装或修复缺失的依赖,默认为1,表示自动修复;留空或其他数值表示不修复。 -FixDependType="1" +FixDependType="" ## 定义监控修复的依赖名称 -package_name="canvas png-js date-fns axios crypto-js ts-md5 tslib @types/node dotenv typescript fs require tslib" +package_name="canvas png-js date-fns axios crypto-js ts-md5 tslib @types/node dotenv got md5 requests typescript fs require tslib jsdom download js-base64 tough-cookie tunnel ws qrcode-terminal jieba prettytable form-data json5 global-agent" ## 需组合的环境变量列表,env_name需要和var_name一一对应,如何有新活动按照格式添加(不懂勿动) env_name=( - FRUITSHARECODES - PETSHARECODES - PLANT_BEAN_SHARECODES - DREAM_FACTORY_SHARE_CODES - DDFACTORY_SHARECODES - JDJOY_SHARECODES - JDZZ_SHARECODES - JXNC_SHARECODES - BOOKSHOP_SHARECODES - JD_CASH_SHARECODES - JDSGMH_SHARECODES - JDCFD_SHARECODES - JDHEALTH_SHARECODES - JD818_SHARECODES - CITY_SHARECODES - MONEYTREE_SHARECODES + FRUITSHARECODES + PETSHARECODES + PLANT_BEAN_SHARECODES + DREAM_FACTORY_SHARE_CODES + DDFACTORY_SHARECODES + JDJOY_SHARECODES + JDZZ_SHARECODES + JXNC_SHARECODES + BOOKSHOP_SHARECODES + JD_CASH_SHARECODES + JDSGMH_SHARECODES + JDCFD_SHARECODES + JDHEALTH_SHARECODES + JD818_SHARECODES + CITY_SHARECODES + MONEYTREE_SHARECODES ) var_name=( - ForOtherFruit - ForOtherPet - ForOtherBean - ForOtherDreamFactory - ForOtherJdFactory - ForOtherJoy - ForOtherJdzz - ForOtherJxnc - ForOtherBookShop - ForOtherCash - ForOtherSgmh - ForOtherCfd - ForOtherHealth - ForOtherCarni - ForOtherCity - ForOtherMoneyTree + ForOtherFruit + ForOtherPet + ForOtherBean + ForOtherDreamFactory + ForOtherJdFactory + ForOtherJoy + ForOtherJdzz + ForOtherJxnc + ForOtherBookShop + ForOtherCash + ForOtherSgmh + ForOtherCfd + ForOtherHealth + ForOtherCarni + ForOtherCity + ForOtherMoneyTree ) ## name_js为脚本文件名,如果使用ql repo命令拉取,文件名含有作者名 ## 所有有互助码的活动,把脚本名称列在 name_js 中,对应 config.sh 中互助码后缀列在 name_config 中,中文名称列在 name_chinese 中。 ## name_js、name_config 和 name_chinese 中的三个名称必须一一对应。 name_js=( - "$repo"_jd_fruit - "$repo"_jd_pet - "$repo"_jd_plantBean - "$repo"_jd_dreamFactory - "$repo"_jd_jdfactory - "$repo"_jd_crazy_joy - "$repo"_jd_jdzz - "$repo"_jd_jxnc - "$repo"_jd_bookshop - "$repo"_jd_cash - "$repo"_jd_sgmh - "$repo"_jd_cfd - "$repo"_jd_health - "$repo"_jd_carnivalcity - "$repo"_jd_city - "$repo4"_jd_moneyTree_heip - "$repo"_jd_cfd + "$repo"_jd_fruit + "$repo"_jd_pet + "$repo"_jd_plantBean + "$repo"_jd_dreamFactory + "$repo"_jd_jdfactory + "$repo"_jd_crazy_joy + "$repo"_jd_jdzz + "$repo"_jd_jxnc + "$repo"_jd_bookshop + "$repo"_jd_cash + "$repo"_jd_sgmh + "$repo"_jd_cfd + "$repo"_jd_health + "$repo"_jd_carnivalcity + "$repo"_jd_city + "$repo"_jd_moneyTree_he?p + "$repo"_jd_cfd ) name_config=( - Fruit - Pet - Bean - DreamFactory - JdFactory - Joy - Jdzz - Jxnc - BookShop - Cash - Sgmh - Cfd - Health - Carni - City - MoneyTree - TokenJxnc + Fruit + Pet + Bean + DreamFactory + JdFactory + Joy + Jdzz + Jxnc + BookShop + Cash + Sgmh + Cfd + Health + Carni + City + MoneyTree + TokenJxnc ) name_chinese=( - 东东农场 - 东东萌宠 - 京东种豆得豆 - 京喜工厂 - 东东工厂 - crazyJoy任务 - 京东赚赚 - 京喜农场 - 口袋书店 - 签到领现金 - 闪购盲盒 - 京喜财富岛 - 东东健康社区 - 京东手机狂欢城 - 城城领现金 - 摇钱树 - 京喜token + 东东农场 + 东东萌宠 + 京东种豆得豆 + 京喜工厂 + 东东工厂 + crazyJoy任务 + 京东赚赚 + 京喜农场 + 口袋书店 + 签到领现金 + 闪购盲盒 + 京喜财富岛 + 东东健康社区 + 京东手机狂欢城 + 城城领现金 + 摇钱树 + 京喜token ) ## 生成pt_pin清单 gen_pt_pin_array() { - local envs=$(eval echo "\$JD_COOKIE") - local array=($(echo $envs | sed 's/&/ /g')) - local tmp1 tmp2 i pt_pin_temp - for i in "${!array[@]}"; do - pt_pin_temp=$(echo ${array[i]} | perl -pe "{s|.*pt_pin=([^; ]+)(?=;?).*|\1|; s|%|\\\x|g}") - [[ $pt_pin_temp == *\\x* ]] && pt_pin[i]=$(printf $pt_pin_temp) || pt_pin[i]=$pt_pin_temp - done + local envs=$(eval echo "\$JD_COOKIE") + local array=($(echo $envs | sed 's/&/ /g')) + local tmp1 tmp2 i pt_pin_temp + for i in "${!array[@]}"; do + pt_pin_temp=$(echo ${array[i]} | perl -pe "{s|.*pt_pin=([^; ]+)(?=;?).*|\1|; s|%|\\\x|g}") + remark_name[i]=$(cat $dir_db/env.db | grep ${array[i]} | grep remarks | perl -pe "{s|.*remarks\":\"([^\"]+).*|\1|g}" | tail -1) + [[ $pt_pin_temp == *\\x* ]] && pt_pin[i]=$(printf $pt_pin_temp) || pt_pin[i]=$pt_pin_temp + done } ## 导出互助码的通用程序,$1:去掉后缀的脚本名称,$2:config.sh中的后缀,$3:活动中文名称 @@ -208,12 +214,12 @@ export_codes_sub() { local envs=$(eval echo "\$JD_COOKIE") local array=($(echo $envs | sed 's/&/ /g')) local user_sum=${#array[*]} - if cd $dir_log/$task_name &>/dev/null && [[ $(ls) ]]; then + if cd $dir_log &>/dev/null && [[ $(ls ./*$task_name*/*.log 2>/dev/null | wc -l) -gt 0 ]]; then ## 寻找所有互助码以及对应的pt_pin i=0 pt_pin_in_log=() code=() - pt_pin_and_code=$(ls -r *.log | xargs awk -v var="的$chinese_name好友互助码" 'BEGIN{FS="[( )】]+"; OFS="&"} $3~var {print $2,$4}') + pt_pin_and_code=$(ls -t ./*$task_name*/*.log | xargs awk -v var="的$chinese_name好友互助码" 'BEGIN{FS="[( )】]+"; OFS="&"} $3~var {print $2,$4}') for line in $pt_pin_and_code; do pt_pin_in_log[i]=$(echo $line | awk -F "&" '{print $1}') code[i]=$(echo $line | awk -F "&" '{print $2}') @@ -254,7 +260,7 @@ export_codes_sub() { done tmp_for_other="$tmp_for_other@\${$config_name_my$j}" else - echo -e "\n#【`date +%X`】 变量值填写不规范,请检查后重试!" + echo -e "\n#【$(date +%X)】 变量值填写不规范,请检查后重试!" tmp_for_other="$tmp_for_other@\${$config_name_my$j}" fi else @@ -288,7 +294,7 @@ export_codes_sub() { done tmp_for_other="$tmp_for_other@\${$config_name_my$k}" else - echo -e "\n#【`date +%X`】 变量值填写不规范,请检查后重试!" + echo -e "\n#【$(date +%X)】 变量值填写不规范,请检查后重试!" tmp_for_other="$tmp_for_other@\${$config_name_my$k}" fi else @@ -315,7 +321,7 @@ export_codes_sub() { done tmp_for_other="$tmp_for_other@\${$config_name_my$n}" else - echo -e "\n#【`date +%X`】 变量值填写不规范,请检查后重试!" + echo -e "\n#【$(date +%X)】 变量值填写不规范,请检查后重试!" tmp_for_other="$tmp_for_other@\${$config_name_my$n}" fi else @@ -326,6 +332,53 @@ export_codes_sub() { done ;; + 3) ## 本套脚本内指定前 N 个账号优先助力,N 个以后账号间随机助力(随机部分账号顺序随机)。 + HelpTemp="车头A模式" + echo -e "\n## 采用\"$HelpTemp\"互助模板" + [[ $user_sum -le $front_num ]] && front_num=$user_sum + for ((m = 0; m < ${#pt_pin[*]}; m++)); do + tmp_for_other="" + j=$((m + 1)) + for ((n = 0; n < $user_sum; n++)); do + [[ $m -eq $n ]] && continue + k=$((n + 1)) + if [[ $k -le $front_num ]]; then + tmp_for_other="$tmp_for_other@\${$config_name_my$k}" + fi + done + tmp_ramdom_for_other="" + random_num_list=$(seq $((front_num + 1)) $user_sum | sort -R) + for x in $random_num_list; do + tmp_ramdom_for_other="$tmp_ramdom_for_other@\${$config_name_my$x}" + done + echo "$config_name_for_other$j=\"$tmp_for_other$tmp_ramdom_for_other\"" | perl -pe "s|($config_name_for_other\d+=\")@|\1|" + done + ;; + + 4) ## 本套脚本内指定前 N 个账号优先助力,N 个以后账号间随机助力(随机部分账号顺序固定)。 + HelpTemp="车头B模式" + echo -e "\n## 采用\"$HelpTemp\"互助模板" + [[ $user_sum -le $front_num ]] && front_num=$user_sum + random_num_list=$(seq $((front_num + 1)) $user_sum | sort -R) + for ((m = 0; m < ${#pt_pin[*]}; m++)); do + tmp_for_other="" + j=$((m + 1)) + for ((n = 0; n < $user_sum; n++)); do + [[ $m -eq $n ]] && continue + k=$((n + 1)) + if [[ $k -le $front_num ]]; then + tmp_for_other="$tmp_for_other@\${$config_name_my$k}" + fi + done + tmp_ramdom_for_other="" + for x in $random_num_list; do + [[ $m -eq $((x - 1)) ]] && continue + tmp_ramdom_for_other="$tmp_ramdom_for_other@\${$config_name_my$x}" + done + echo "$config_name_for_other$j=\"$tmp_for_other$tmp_ramdom_for_other\"" | perl -pe "s|($config_name_for_other\d+=\")@|\1|" + done + ;; + *) ## 按编号优先 HelpTemp="按编号优先" echo -e "\n## 采用\"$HelpTemp\"互助模板" @@ -342,7 +395,7 @@ export_codes_sub() { done tmp_for_other="$tmp_for_other@\${$config_name_my$k}" else - echo -e "\n#【`date +%X`】 变量值填写不规范,请检查后重试!" + echo -e "\n#【$(date +%X)】 变量值填写不规范,请检查后重试!" tmp_for_other="$tmp_for_other@\${$config_name_my$k}" fi else @@ -355,22 +408,22 @@ export_codes_sub() { esac fi else - echo "#【`date +%X`】 未运行过 $task_name.js 脚本,未产生日志" + echo "#【$(date +%X)】 未运行过 $chinese_name 的脚本,未产生日志" fi } ## 汇总输出 export_all_codes() { gen_pt_pin_array - [[ $DEBUG = "1" ]] && echo -e "\n#【`date +%X`】 当前 code.sh 的线程数量:$ps_num" - [[ $DEBUG = "1" ]] && echo -e "\n#【`date +%X`】 预设的 JD_COOKIE 数量:`echo $JD_COOKIE | grep -o 'pt_key' | wc -l`" - [[ $DEBUG = "1" ]] && echo -e "\n#【`date +%X`】 预设的 JD_COOKIE 环境变量数量:`echo $JD_COOKIE | sed 's/&/\n/g' | wc -l`" - [[ $DEBUG = "1" && "$(echo $JD_COOKIE | sed 's/&/\n/g' | wc -l)" = "1" && "$(echo $JD_COOKIE | grep -o 'pt_key' | wc -l)" -gt 1 ]] && echo -e "\n#【`date +%X`】 检测到您将多个 COOKIES 填写到单个环境变量值,请注意将各 COOKIES 采用 & 分隔,否则将无法完整输出互助码及互助规则!" - echo -e "\n#【`date +%X`】 从日志提取互助码,编号和配置文件中Cookie编号完全对应,如果为空就是所有日志中都没有。\n\n#【`date +%X`】 即使某个MyXxx变量未赋值,也可以将其变量名填在ForOtherXxx中,jtask脚本会自动过滤空值。\n" + [[ $DEBUG = "1" ]] && echo -e "\n#【$(date +%X)】 当前 code.sh 的线程数量:$ps_num" + [[ $DEBUG = "1" ]] && echo -e "\n#【$(date +%X)】 预设的 JD_COOKIE 数量:$(echo $JD_COOKIE | grep -o 'pt_key' | wc -l)" + [[ $DEBUG = "1" ]] && echo -e "\n#【$(date +%X)】 预设的 JD_COOKIE 环境变量数量:$(echo $JD_COOKIE | sed 's/&/\n/g' | wc -l)" + [[ $DEBUG = "1" && "$(echo $JD_COOKIE | sed 's/&/\n/g' | wc -l)" = "1" && "$(echo $JD_COOKIE | grep -o 'pt_key' | wc -l)" -gt 1 ]] && echo -e "\n#【$(date +%X)】 检测到您将多个 COOKIES 填写到单个环境变量值,请注意将各 COOKIES 采用 & 分隔,否则将无法完整输出互助码及互助规则!" + echo -e "\n#【$(date +%X)】 从日志提取互助码,编号和配置文件中Cookie编号完全对应,如果为空就是所有日志中都没有。\n\n#【$(date +%X)】 即使某个MyXxx变量未赋值,也可以将其变量名填在ForOtherXxx中,jtask脚本会自动过滤空值。\n" if [[ $DiyHelpType = "1" ]]; then - echo -e "#【`date +%X`】 您已启用指定活动采用指定互助模板功能!" + echo -e "#【$(date +%X)】 您已启用指定活动采用指定互助模板功能!" else - echo -n "#【`date +%X`】 您选择的互助码模板为:" + echo -n "#【$(date +%X)】 您选择的互助码模板为:" case $HelpType in 0) echo "所有账号助力码全部一致。" @@ -381,21 +434,24 @@ export_all_codes() { 2) echo "本套脚本内账号间随机顺序助力。" ;; - *) + 3) + echo "本套脚本内指定前 N 个账号优先助力,N 个以后账号间随机助力(随机部分账号顺序随机)。" + ;; + 4) + echo "本套脚本内指定前 N 个账号优先助力,N 个以后账号间随机助力(随机部分账号顺序固定)。" + ;; + *) echo "按账号编号优先。" ;; esac fi - [[ $BreakHelpType = "1" ]] && echo -e "\n#【`date +%X`】 您已启用屏蔽模式,账号 $BreakHelpNum 将不被助力!" + [[ $BreakHelpType = "1" ]] && echo -e "\n#【$(date +%X)】 您已启用屏蔽模式,账号 $BreakHelpNum 将不被助力!" if [ "$ps_num" -gt $proc_num ]; then - echo -e "\n#【`date +%X`】 检测到 code.sh 的线程过多 ,请稍后再试!" - exit - elif [ -z $repo ]; then - echo -e "\n#【`date +%X`】 未检测到兼容的活动脚本日志,无法读取互助码,退出!" + echo -e "\n#【$(date +%X)】 检测到 code.sh 的线程过多 ,请稍后再试!" exit else - echo -e "\n#【`date +%X`】 默认调用 $repo 的脚本日志,格式化导出互助码,生成互助规则!" - dump_user_info + [[ $repo ]] && echo -e "\n#【$(date +%X)】 默认查询 $repo 的活动脚本日志,格式化导出互助码,生成互助规则!" || echo -e "\n#【$(date +%X)】 遍历活动脚本日志,格式化导出互助码,生成互助规则!" + # dump_user_info for ((i = 0; i < ${#name_js[*]}; i++)); do echo -e "\n## ${name_chinese[i]}:" export_codes_sub "${name_js[i]}" "${name_config[i]}" "${name_chinese[i]}" @@ -404,82 +460,84 @@ export_all_codes() { } #更新配置文件中互助码的函数 -help_codes(){ -local envs=$(eval echo "\$JD_COOKIE") -local array=($(echo $envs | sed 's/&/ /g')) -local user_sum=${#array[*]} -local config_name=$1 -local chinese_name=$2 -local config_name_my=My$config_name -local config_name_for_other=ForOther$config_name -local ShareCode_dir="$dir_log/.ShareCode" -local ShareCode_log="$ShareCode_dir/$config_name.log" -local i j k +help_codes() { + local envs=$(eval echo "\$JD_COOKIE") + local array=($(echo $envs | sed 's/&/ /g')) + local user_sum=${#array[*]} + local config_name=$1 + local chinese_name=$2 + local config_name_my=My$config_name + local config_name_for_other=ForOther$config_name + local ShareCode_dir="$dir_log/.ShareCode" + local ShareCode_log="$ShareCode_dir/$config_name.log" + local i j k -#更新配置文件中的互助码 -[[ ! -d $ShareCode_dir ]] && mkdir -p $ShareCode_dir -[[ "$1" = "TokenJxnc" ]] && config_name_my=$1 -if [ ! -f $ShareCode_log ] || [ -z "$(cat $ShareCode_log | grep "^$config_name_my\d")" ]; then - echo -e "\n## $chinese_name\n${config_name_my}1=''\n" >> $ShareCode_log -fi -for ((i=1; i<=200; i++)); do - local new_code="$(cat $latest_log_path | grep "^$config_name_my$i=.\+'$" | sed "s/\S\+'\([^']*\)'$/\1/")" - local old_code="$(cat $ShareCode_log | grep "^$config_name_my$i=.\+'$" | sed "s/\S\+'\([^']*\)'$/\1/")" - if [[ $i -le $user_sum ]]; then - if [ -z "$(grep "^$config_name_my$i" $ShareCode_log)" ]; then - sed -i "/^$config_name_my$[$i-1]='.*'/ s/$/\n$config_name_my$i=\'\'/" $ShareCode_log - fi - if [ "$new_code" != "$old_code" ]; then - if [[ "$new_code" != "undefined" ]] && [[ "$new_code" != "{}" ]]; then - sed -i "s/^$config_name_my$i='$old_code'$/$config_name_my$i='$new_code'/" $ShareCode_log - fi - fi - elif [[ $i -gt $user_sum ]] && [[ $i -gt 1 ]]; then - sed -i "/^$config_name_my$i/d" $ShareCode_log - elif [[ $i -eq 1 ]] && [[ -z "$new_code" ]]; then - sed -i "s/^$config_name_my$i='\S*'$/$config_name_my$i=''/" $ShareCode_log + #更新配置文件中的互助码 + [[ ! -d $ShareCode_dir ]] && mkdir -p $ShareCode_dir + [[ "$1" = "TokenJxnc" ]] && config_name_my=$1 + if [ ! -f $ShareCode_log ] || [ -z "$(cat $ShareCode_log | grep "^$config_name_my\d")" ]; then + echo -e "\n## $chinese_name\n${config_name_my}1=''\n" >>$ShareCode_log fi -done -sed -i "1c ## 上次导入时间:$(date +%Y年%m月%d日\ %X)" $ShareCode_log + echo -e "\n#【$(date +%X)】 正在更新 $chinese_name 的互助码..." + for ((i = 1; i <= 200; i++)); do + local new_code="$(cat $latest_log_path | grep "^$config_name_my$i=.\+'$" | sed "s/\S\+'\([^']*\)'$/\1/")" + local old_code="$(cat $ShareCode_log | grep "^$config_name_my$i=.\+'$" | sed "s/\S\+'\([^']*\)'$/\1/")" + if [[ $i -le $user_sum ]]; then + if [ -z "$(grep "^$config_name_my$i" $ShareCode_log)" ]; then + sed -i "/^$config_name_my$(($i - 1))='.*'/ s/$/\n$config_name_my$i=\'\'/" $ShareCode_log + fi + if [ "$new_code" != "$old_code" ]; then + if [[ "$new_code" != "undefined" ]] && [[ "$new_code" != "{}" ]]; then + sed -i "s/^$config_name_my$i='$old_code'$/$config_name_my$i='$new_code'/" $ShareCode_log + fi + fi + elif [[ $i -gt $user_sum ]] && [[ $i -gt 1 ]]; then + sed -i "/^$config_name_my$i/d" $ShareCode_log + elif [[ $i -eq 1 ]] && [[ -z "$new_code" ]]; then + sed -i "s/^$config_name_my$i='\S*'$/$config_name_my$i=''/" $ShareCode_log + fi + done + sed -i "1c ## 上次导入时间:$(date +%Y年%m月%d日\ %X)" $ShareCode_log } #更新配置文件中互助规则的函数 -help_rules(){ -local envs=$(eval echo "\$JD_COOKIE") -local array=($(echo $envs | sed 's/&/ /g')) -local user_sum=${#array[*]} -local config_name=$1 -local chinese_name=$2 -local config_name_my=My$config_name -local config_name_for_other=ForOther$config_name -local ShareCode_dir="$dir_log/.ShareCode" -local ShareCode_log="$ShareCode_dir/$config_name.log" -local i j k +help_rules() { + local envs=$(eval echo "\$JD_COOKIE") + local array=($(echo $envs | sed 's/&/ /g')) + local user_sum=${#array[*]} + local config_name=$1 + local chinese_name=$2 + local config_name_my=My$config_name + local config_name_for_other=ForOther$config_name + local ShareCode_dir="$dir_log/.ShareCode" + local ShareCode_log="$ShareCode_dir/$config_name.log" + local i j k -#更新配置文件中的互助规则 -if [ -z "$(cat $ShareCode_log | grep "^$config_name_for_other\d")" ]; then - echo -e "${config_name_for_other}1=\"\"" >> $ShareCode_log -fi -for ((j=1; j<=200; j++)); do - local new_rule="$(cat $latest_log_path | grep "^$config_name_for_other$j=.\+\"$" | sed "s/\S\+\"\([^\"]*\)\"$/\1/")" - local old_rule="$(cat $ShareCode_log | grep "^$config_name_for_other$j=.\+\"$" | sed "s/\S\+\"\([^\"]*\)\"$/\1/")" - if [[ $j -le $user_sum ]]; then - if [ -z "$(grep "^$config_name_for_other$j" $ShareCode_log)" ]; then - sed -i "/^$config_name_for_other$[$j-1]=".*"/ s/$/\n$config_name_for_other$j=\"\"/" $ShareCode_log - fi - if [ "$new_rule" != "$old_rule" ]; then - sed -i "s/^$config_name_for_other$j=\"$old_rule\"$/$config_name_for_other$j=\"$new_rule\"/" $ShareCode_log - fi - elif [[ $j -gt $user_sum ]] && [[ $j -gt 1 ]]; then - sed -i "/^$config_name_for_other$j/d" $ShareCode_log - elif [[ $j -eq 1 ]] && [[ -z "$new_rule" ]]; then - sed -i "s/^$config_name_for_other$j=\"\S*\"$/$config_name_for_other$j=\"\"/" $ShareCode_log + #更新配置文件中的互助规则 + echo -e "\n#【$(date +%X)】 正在更新 $chinese_name 的互助规则..." + if [ -z "$(cat $ShareCode_log | grep "^$config_name_for_other\d")" ]; then + echo -e "${config_name_for_other}1=\"\"" >>$ShareCode_log fi -done -sed -i "1c ## 上次导入时间:$(date +%Y年%m月%d日\ %X)" $ShareCode_log + for ((j = 1; j <= 200; j++)); do + local new_rule="$(cat $latest_log_path | grep "^$config_name_for_other$j=.\+\"$" | sed "s/\S\+\"\([^\"]*\)\"$/\1/")" + local old_rule="$(cat $ShareCode_log | grep "^$config_name_for_other$j=.\+\"$" | sed "s/\S\+\"\([^\"]*\)\"$/\1/")" + if [[ $j -le $user_sum ]]; then + if [ -z "$(grep "^$config_name_for_other$j" $ShareCode_log)" ]; then + sed -i "/^$config_name_for_other$(($j - 1))=".*"/ s/$/\n$config_name_for_other$j=\"\"/" $ShareCode_log + fi + if [ "$new_rule" != "$old_rule" ]; then + sed -i "s/^$config_name_for_other$j=\"$old_rule\"$/$config_name_for_other$j=\"$new_rule\"/" $ShareCode_log + fi + elif [[ $j -gt $user_sum ]] && [[ $j -gt 1 ]]; then + sed -i "/^$config_name_for_other$j/d" $ShareCode_log + elif [[ $j -eq 1 ]] && [[ -z "$new_rule" ]]; then + sed -i "s/^$config_name_for_other$j=\"\S*\"$/$config_name_for_other$j=\"\"/" $ShareCode_log + fi + done + sed -i "1c ## 上次导入时间:$(date +%Y年%m月%d日\ %X)" $ShareCode_log } -export_codes_sub_only(){ +export_codes_sub_only() { if [ "$(cat $dir_scripts/"$repo"_jd_cfd.js | grep "// console.log(\`token")" != "" ]; then echo -e "\n# 正在修改 "$repo"_jd_cfd.js ,待完全运行 "$repo"_jd_cfd.js 后即可输出 token !" fi @@ -491,12 +549,12 @@ export_codes_sub_only(){ local envs=$(eval echo "\$JD_COOKIE") local array=($(echo $envs | sed 's/&/ /g')) local user_sum=${#array[*]} - if cd $dir_log/$task_name &>/dev/null && [[ $(ls) ]]; then + if cd $dir_log &>/dev/null && [[ $(ls ./*$task_name*/*.log 2>/dev/null | wc -l) -gt 0 ]]; then ## 寻找所有互助码以及对应的pt_pin i=0 pt_pin_in_log=() code=() - pt_pin_and_code=$(ls -r *.log | xargs awk -v var="的$chinese_name好友互助码" 'BEGIN{FS="[( )】]+"; OFS="&"} $3~var {print $2,$4}') + pt_pin_and_code=$(ls -t ./*$task_name*/*.log | xargs awk -v var="的$chinese_name好友互助码" 'BEGIN{FS="[( )】]+"; OFS="&"} $3~var {print $2,$4}' | xargs awk -v var="的$chinese_name好友互助码" 'BEGIN{FS="[( )】]+"; OFS="&"} $3~var {print $2,$4}') for line in $pt_pin_and_code; do pt_pin_in_log[i]=$(echo $line | awk -F "&" '{print $1}') code[i]=$(echo $line | awk -F "&" '{print $2}') @@ -519,180 +577,240 @@ export_codes_sub_only(){ else echo "## 从日志中未找到任何互助码" fi -fi + else + echo "#【$(date +%X)】 未运行过 $chinese_name 的脚本,未产生日志" + fi } #更新互助码和互助规则 -update_help(){ -case $UpdateType in +update_help() { + case $UpdateType in 1) if [ "$ps_num" -le $proc_num ] && [ -f $latest_log_path ]; then backup_del - echo -e "\n#【`date +%X`】 开始更新配置文件的互助码和互助规则" + echo -e "\n#【$(date +%X)】 开始更新配置文件的互助码和互助规则" for ((i = 0; i < ${#name_config[*]}; i++)); do help_codes "${name_config[i]}" "${name_chinese[i]}" [[ "${name_config[i]}" != "TokenJxnc" ]] && help_rules "${name_config[i]}" "${name_chinese[i]}" done - echo -e "\n#【`date +%X`】 配置文件的互助码和互助规则已完成更新" + echo -e "\n#【$(date +%X)】 配置文件的互助码和互助规则已完成更新" elif [ ! -f $latest_log_path ]; then - echo -e "\n#【`date +%X`】 日志文件不存在,请检查后重试!" + echo -e "\n#【$(date +%X)】 日志文件不存在,请检查后重试!" fi ;; 2) if [ "$ps_num" -le $proc_num ] && [ -f $latest_log_path ]; then backup_del - echo -e "\n#【`date +%X`】 开始更新配置文件的互助码,不更新互助规则" + echo -e "\n#【$(date +%X)】 开始更新配置文件的互助码,不更新互助规则" for ((i = 0; i < ${#name_config[*]}; i++)); do help_codes "${name_config[i]}" "${name_chinese[i]}" done - echo -e "\n#【`date +%X`】 配置文件的互助码已完成更新" + echo -e "\n#【$(date +%X)】 配置文件的互助码已完成更新" elif [ ! -f $latest_log_path ]; then - echo -e "\n#【`date +%X`】 日志文件不存在,请检查后重试!" + echo -e "\n#【$(date +%X)】 日志文件不存在,请检查后重试!" fi ;; 3) if [ "$ps_num" -le $proc_num ] && [ -f $latest_log_path ]; then backup_del - echo -e "\n#【`date +%X`】 开始更新配置文件的互助规则,不更新互助码" + echo -e "\n#【$(date +%X)】 开始更新配置文件的互助规则,不更新互助码" for ((i = 0; i < ${#name_config[*]}; i++)); do [[ "${name_config[i]}" != "TokenJxnc" ]] && help_rules "${name_config[i]}" "${name_chinese[i]}" done - echo -e "\n#【`date +%X`】 配置文件的互助规则已完成更新" + echo -e "\n#【$(date +%X)】 配置文件的互助规则已完成更新" elif [ ! -f $latest_log_path ]; then - echo -e "\n#【`date +%X`】 日志文件不存在,请检查后重试!" + echo -e "\n#【$(date +%X)】 日志文件不存在,请检查后重试!" fi ;; *) - echo -e "\n#【`date +%X`】 您已设置不更新配置文件的互助码和互助规则,跳过更新!" + echo -e "\n#【$(date +%X)】 您已设置不更新配置文件的互助码和互助规则,跳过更新!" ;; -esac + esac } -check_jd_cookie(){ -[[ "$(curl -s --noproxy "*" "https://bean.m.jd.com/bean/signIndex.action" -H "cookie: $1")" ]] && echo "COOKIE 有效" || echo "COOKIE 已失效" +check_jd_cookie() { + local test_connect="$(curl -I -s --connect-timeout 5 --retry 3 --noproxy "*" https://bean.m.jd.com/bean/signIndex.action -w %{http_code} | tail -n1)" + local test_jd_cookie="$(curl -s --connect-timeout 5 --retry 3 --noproxy "*" "https://bean.m.jd.com/bean/signIndex.action" -H "cookie: $1")" + if [ "$test_connect" -eq "302" ]; then + [[ "$test_jd_cookie" ]] && echo "(COOKIE 有效)" || echo "(COOKIE 已失效)" + else + echo "(API 连接失败)" + fi } -delete_old_cookie(){ -local ifold=$(curl -s --noproxy "*" "https://bean.m.jd.com/bean/signIndex.action" -H "cookie: $1") -if [ ! "$ifold" ]; then - sed -i "s/$1/d" $dir_env_db - echo "COOKIE 失效,将被删除" -else - echo "COOKIE 有效" -fi -} - -dump_user_info(){ -echo -e "\n## 账号用户名及 COOKIES 整理如下:" -local envs=$(eval echo "\$JD_COOKIE") -local array=($(echo $envs | sed 's/&/ /g')) +dump_user_info() { + echo -e "\n## 账号用户名及 COOKIES 整理如下:" + local envs=$(eval echo "\$JD_COOKIE") + local array=($(echo $envs | sed 's/&/ /g')) for ((m = 0; m < ${#pt_pin[*]}; m++)); do j=$((m + 1)) - if [[ $DEL_COOKIE = "1" ]]; then - echo -e "## 用户名 $j:${pt_pin[m]} (`delete_old_cookie ${array[m]}`)\nCookie$j=\"${array[m]}\"" - else - echo -e "## 用户名 $j:${pt_pin[m]} (`check_jd_cookie ${array[m]}`)\nCookie$j=\"${array[m]}\"" - fi + echo -e "## 用户名 $j:${pt_pin[m]} 备注:${remark_name[m]} $(check_jd_cookie ${array[m]})\nCookie$j=\"${array[m]}\"" done } -backup_del(){ -[[ ! -d $dir_log/.bak_ShareCode ]] && mkdir -p $dir_log/.bak_ShareCode -local bak_ShareCode_full_path_list=$(find $dir_log/.bak_ShareCode/ -name "*.log") -local diff_time -if [[ $BACKUP = "1" ]]; then - for ((i = 0; i < ${#name_config[*]}; i++)); do - [[ -f $dir_log/.ShareCode/${name_config[i]}.log ]] && cp $dir_log/.ShareCode/${name_config[i]}.log $dir_log/.bak_ShareCode/${name_config[i]}_`date "+%Y-%m-%d-%H-%M-%S"`.log - done -fi -if [[ $CLEANBAK = "1" ]]; then - for log in $bak_ShareCode_full_path_list; do - local log_date=$(echo $log | awk -F "_" '{print $NF}' | cut -c1-10) - if [[ $(date +%s -d $log_date 2>/dev/null) ]]; then - if [[ $is_macos -eq 1 ]]; then - diff_time=$(($(date +%s) - $(date -j -f "%Y-%m-%d" "$log_date" +%s))) - else - diff_time=$(($(date +%s) - $(date +%s -d "$log_date"))) +backup_del() { + [[ ! -d $dir_log/.bak_ShareCode ]] && mkdir -p $dir_log/.bak_ShareCode + local bak_ShareCode_full_path_list=$(find $dir_log/.bak_ShareCode/ -name "*.log") + local diff_time + if [[ $BACKUP = "1" ]]; then + for ((i = 0; i < ${#name_config[*]}; i++)); do + [[ -f $dir_log/.ShareCode/${name_config[i]}.log ]] && cp $dir_log/.ShareCode/${name_config[i]}.log $dir_log/.bak_ShareCode/${name_config[i]}_$(date "+%Y-%m-%d-%H-%M-%S").log + done + fi + if [[ $CLEANBAK = "1" ]]; then + for log in $bak_ShareCode_full_path_list; do + local log_date=$(echo $log | awk -F "_" '{print $NF}' | cut -c1-10) + if [[ $(date +%s -d $log_date 2>/dev/null) ]]; then + if [[ $is_macos -eq 1 ]]; then + diff_time=$(($(date +%s) - $(date -j -f "%Y-%m-%d" "$log_date" +%s))) + else + diff_time=$(($(date +%s) - $(date +%s -d "$log_date"))) + fi + [[ $diff_time -gt $(($CLEANBAK_DAYS * 86400)) ]] && rm -rf $log fi - [[ $diff_time -gt $(($CLEANBAK_DAYS * 86400)) ]] && rm -vf $log + done + fi +} + +#检查 node 依赖状态并修复 +install_node_dependencies_all() { + node_dependencies_ori_status() { + if [[ -n $(echo $(cnpm ls $1) | grep ERR) ]]; then + return 1 + elif [[ -n $(echo $(cnpm ls $1 -g) | grep ERR) ]]; then + return 2 + elif [[ $(cnpm ls $1) =~ $1 ]]; then + return 3 + elif [[ $(cnpm ls $1 -g) =~ $1 ]]; then + return 4 fi - done -fi -} + } -install_dependencies_normal(){ - for i in $@; do - case $i in - canvas) - cd /ql/scripts - if [[ "$(echo $(npm ls $i) | grep ERR)" != "" ]]; then - npm uninstall $i - fi - if [[ "$(npm ls $i)" =~ (empty) ]]; then - apk add --no-cache build-base g++ cairo-dev pango-dev giflib-dev && npm i $i --prefix /ql/scripts --build-from-source - fi - ;; - *) - if [[ "$(npm ls $i)" =~ $i ]]; then - npm uninstall $i - elif [[ "$(echo $(npm ls $i -g) | grep ERR)" != "" ]]; then - npm uninstall $i -g - fi - if [[ "$(npm ls $i -g)" =~ (empty) ]]; then - [[ $i = "typescript" ]] && npm i $i -g --force || npm i $i -g - fi - ;; - esac - done -} + test() { + for i in $@; do + node_dependencies_ori_status + echo -e "$i : $?" + done + } -install_dependencies_force(){ - for i in $@; do - case $i in - canvas) - cd /ql/scripts - if [[ "$(npm ls $i)" =~ $i && "$(echo $(npm ls $i) | grep ERR)" != "" ]]; then - npm uninstall $i - rm -rf /ql/scripts/node_modules/$i - rm -rf /usr/local/lib/node_modules/lodash/* - fi - if [[ "$(npm ls $i)" =~ (empty) ]]; then - apk add --no-cache build-base g++ cairo-dev pango-dev giflib-dev && npm i $i --prefix /ql/scripts --build-from-source --force - fi - ;; - *) - cd /ql/scripts - if [[ "$(npm ls $i)" =~ $i ]]; then - npm uninstall $i - rm -rf /ql/scripts/node_modules/$i - rm -rf /usr/local/lib/node_modules/lodash/* - elif [[ "$(npm ls $i -g)" =~ $i && "$(echo $(npm ls $i -g) | grep ERR)" != "" ]]; then - npm uninstall $i -g - rm -rf /ql/scripts/node_modules/$i - rm -rf /usr/local/lib/node_modules/lodash/* - fi - if [[ "$(npm ls $i -g)" =~ (empty) ]]; then - npm i $i -g --force - fi - ;; - esac - done -} + install_node_dependencie() { + # node_dependencies_ori_status $1 + # if [[ $? = 1 || $? = 2 ]]; then + # cnpm uninstall $1 + # elif [[ $? = 3 ]]; then + # cnpm uninstall $1 -g + # fi + # + # node_dependencies_ori_status $1 + # if [[ $? = 4 ]]; then + # if [[ $1 = "canvas" ]]; then + # apk add --no-cache build-base g++ cairo-dev pango-dev giflib-dev && cnpm install $1 -g + # else + # cnpm install $1 -g --force + # fi + # fi -install_dependencies_all(){ - install_dependencies_normal $package_name + node_dependencies_ori_status $1 + if [[ $? = 1 ]]; then + [[ $1 = "canvas" ]] && { + cnpm uninstall $1 + rm -rf /ql/scripts/node_modules/canvas + rm -rf /usr/local/lib/node_modules/lodash/canvas + } || cnpm uninstall $1 + elif [ $? = 2 ]; then + [[ $1 = "canvas" ]] && { + cnpm uninstall $1 -g + rm -rf /usr/local/lib/node_modules/canvas + } || cnpm uninstall $1 -g + fi + + node_dependencies_ori_status $1 + if [[ $? != 3 && $? != 4 ]]; then + [[ $1 = "canvas" ]] && { + apk add --no-cache build-base g++ cairo-dev pango-dev giflib-dev + cnpm install $1 -g --force + } || cnpm install $1 -g --force + fi + } + + uninstall_dependencies() { + for i in $package_name; do + cnpm uninstall $i + cnpm uninstall i $i + cnpm uninstall $i -g + cnpm uninstall i $i -g + done + } + + check_node_dependencies_setup_status() { + for i in $package_name; do + cnpm ls $i -g + done + } + + cnpm install -g cnpm + [[ $(npm ls cnpm -g) =~ (empty) ]] && npm install cnpm -g for i in $package_name; do - install_dependencies_force $i + install_node_dependencie $i done + #cnpm update --force + #cnpm i --legacy-peer-deps + #cnpm i --package-lock-only + #cnpm audit fix + #cnpm audit fix --force } -kill_proc(){ -ps -ef|grep "$1"|grep -Ev "$2"|awk '{print $1}'|xargs kill -9 +kill_proc() { + ps -ef | grep "$1" | grep -Ev "$2" | awk '{print $1}' | xargs kill -9 +} + +batch_deps_scripts() { + switch_status=( + on + on + on + ) + + scripts_name=( + ql.js + sendNotify.js + JD_DailyBonus.js + ) + + test_connect() { + curl -o /dev/null -s -w %{http_code} $1 + } + + get_remote_filesize() { + curl -sI $1 | grep -i Content-Length | awk '{print $2}' + } + + get_local_filesize() { + stat -c %s $1 + } + + scripts_source=( + https://cdn.jsdelivr.net/gh/ccwav/QLScript2@main/ql.js + https://cdn.jsdelivr.net/gh/ccwav/QLScript2@main/sendNotify.js + https://cdn.jsdelivr.net/gh/NobyDa/Script@master/JD-DailyBonus/JD_DailyBonus.js + ) + + download_scripts() { + if [[ "$(test_connect $1)" -eq "200" ]]; then + curl -C - -s --connect-timeout 5 --retry 3 --noproxy "*" $1 -o $dir_config/tmp_$2 + [[ $(get_remote_filesize $1) -eq $(get_local_filesize $dir_config/tmp_$2) ]] && mv -f $dir_config/tmp_$2 $dir_config/$2 || rm -rf $dir_config/tmp_$2 + fi + } + + for ((i = 0; i < ${#scripts_source[*]}; i++)); do + { if [[ ${switch_status[i]} = "on" ]]; then download_scripts ${scripts_source[i]} ${scripts_name[i]}; fi; } & + done } ## 执行并写入日志 kill_proc "code.sh" "grep|$$" >/dev/null 2>&1 -[[ $FixDependType = "1" ]] && [[ "$ps_num" -le $proc_num ]] && install_dependencies_all >/dev/null 2>&1 & +batch_deps_scripts & +[[ $FixDependType = "1" ]] && [[ "$ps_num" -le $proc_num ]] && install_node_dependencies_all >/dev/null 2>&1 & latest_log=$(ls -r $dir_code | head -1) latest_log_path="$dir_code/$latest_log" ps_num="$(ps | grep code.sh | grep -v grep | wc -l)" @@ -702,3 +820,5 @@ update_help ## 修改curtinlv入会领豆配置文件的参数 [[ -f /ql/repo/curtinlv_JD-Script/OpenCard/OpenCardConfig.ini ]] && sed -i "4c JD_COOKIE = '$(echo $JD_COOKIE | sed "s/&/ /g; s/\S*\(pt_key=\S\+;\)\S*\(pt_pin=\S\+;\)\S*/\1\2/g;" | perl -pe "s| |&|g")'" /ql/repo/curtinlv_JD-Script/OpenCard/OpenCardConfig.ini + +exit diff --git a/Scripts/sh/Helpcode2.8/config_sample.sh b/Scripts/sh/Helpcode2.8/config_sample.sh index edbd32e..965ecb7 100644 --- a/Scripts/sh/Helpcode2.8/config_sample.sh +++ b/Scripts/sh/Helpcode2.8/config_sample.sh @@ -1,6 +1,6 @@ -## Version: v3.0.0 -## Date: 2021-11-12 -## Mod: Build20211112-002 Faker Repository config +## Version: v2.8.0 +## Date: 2021-06-20 +## Mod: Build 20211214-002-test ## Update Content: 可持续发展纲要\n1. session管理破坏性修改\n2. 配置管理可编辑config下文件\n3. 自定义脚本改为查看脚本\n4. 移除互助相关 ## 上面版本号中,如果第2位数字有变化,那么代表增加了新的参数,如果只有第3位数字有变化,仅代表更新了注释,没有增加新的参数,可更新可不更新 @@ -11,8 +11,11 @@ AutoDelCron="true" ## 在运行 ql repo 命令时,是否自动增加新的本地定时任务 AutoAddCron="true" +## 拉取脚本时默认的定时规则,当匹配不到定时规则时使用,例如: 0 9 * * * +DefaultCronRule="37 0 * * *" + ## ql repo命令拉取脚本时需要拉取的文件后缀,直接写文件后缀名即可 -RepoFileExtensions="js py ts" +RepoFileExtensions="js py sh ts" ## 由于github仓库拉取较慢,所以会默认添加代理前缀,如不需要请移除 GithubProxyUrl="https://ghproxy.com/" @@ -50,7 +53,7 @@ export BARK_SOUND="" ## 下方填写推送消息分组,默认为"QingLong" export BARK_GROUP="QingLong" -## 3. Telegram +## 3. Telegram ## 下方填写自己申请@BotFather的Token,如10xxx4:AAFcqxxxxgER5uw export TG_BOT_TOKEN="" ## 下方填写 @getuseridbot 中获取到的纯数字ID @@ -71,7 +74,7 @@ export TG_PROXY_AUTH="" ## 如需使用,请赋值代理地址链接,并自行解除下一行的注释 export TG_API_HOST="" -## 4. 钉钉 +## 4. 钉钉 ## 官方文档:https://developers.dingtalk.com/document/app/custom-robot-access ## 下方填写token后面的内容,只需 https://oapi.dingtalk.com/robot/send?access_token=XXX 等于=符号后面的XXX即可 export DD_BOT_TOKEN="" @@ -101,120 +104,164 @@ export PUSH_PLUS_TOKEN="" ## 1. 需订阅者扫描二维码 2、如果您是创建群组所属人,也需点击“查看二维码”扫描绑定,否则不能接受群组消息推送 export PUSH_PLUS_USER="" +## 仅指定的脚本采用 pushplus 推送 +## case $1 in +## ccwav_QLScript2_jd_bean_change* | ccwav_QLScript2_jd_CheckCK* | *jd_scripts_jd_dreamFactory* | *jd_jxgc* | *jd_pigPet* ) +## export PUSH_PLUS_TOKEN="" ##填写 pushplus 的 token +## export PUSH_PLUS_USER="" #填写 pushplus 的群组名称,不填的话只推送到 pushplus 的个人消息 +## ;; +## *) +## export PUSH_PLUS_TOKEN="" ##必填项。默认为空,表示其他脚本不推送 pushplus。 +## export PUSH_PLUS_USER="" ##必填项。默认为空,表示其他脚本不推送 pushplus 群组。 +## ;; +## esac + ## 9. go-cqhttp -## gobot_url 推送到个人QQ: http://127.0.0.1/send_private_msg 群:http://127.0.0.1/send_group_msg +## gobot_url 推送到个人QQ: http://127.0.0.1/send_private_msg 群:http://127.0.0.1/send_group_msg ## gobot_token 填写在go-cqhttp文件设置的访问密钥 -## gobot_qq 如果GOBOT_URL设置 /send_private_msg 则需要填入 user_id=个人QQ 相反如果是 /send_group_msg 则需要填入 group_id=QQ群 +## gobot_qq 如果GOBOT_URL设置 /send_private_msg 则需要填入 user_id=个人QQ 相反如果是 /send_group_msg 则需要填入 group_id=QQ群 ## go-cqhttp相关API https://docs.go-cqhttp.org/api export GOBOT_URL="" export GOBOT_TOKEN="" export GOBOT_QQ="" -## 10. 临时屏蔽某个Cookie -## 如果某些 Cookie 已经失效了,但暂时还没法更新,可以使用此功能在不删除该Cookie和重新修改Cookie编号的前提下,临时屏蔽掉某些编号的Cookie -## 多个Cookie编号以半角的空格分隔,两侧一对半角双引号,使用此功能后,在运行js脚本时账户编号将发生变化 -## 举例1:TempBlockCookie="2" 临时屏蔽掉 Cookie2 -## 举例2:TempBlockCookie="2 4" 临时屏蔽掉 Cookie2 和 Cookie4 +## 10 临时禁止Cookie +### 分为 按 Cookie 序号、按 pt_pin(用户名) 2 种模式禁止将 Cookie 提交活动脚本: +### 其他说明:①全局模式和局部模式可同时生效; +### ②支持黑名单模式(即不使用该模式,详见 局部模式环境变量 recombin_ck_envs 说明); -## 如果只是想要屏蔽某个 Cookie 不参加某些活动,可以参考下面 case 这个命令的例子来控制 -## case $1 in -## *jd_fruit*) # 东东农场活动脚本关键词 -## TempBlockCookie="5" # Cookie5 不玩东东农场 -## ;; -## *jd_dreamFactory* | *jd_jdfactory*) # 京喜工厂和东东工厂的活动脚本关键词 -## TempBlockCookie="2" # Cookie2 不玩京喜工厂和东东工厂 -## ;; -## *jd_jdzz* | *jd_joy*) # 京喜赚赚和宠汪汪的活动脚本关键词 -## TempBlockCookie="3 7_8 9-10 12~13" # Cookie3 、Cookie7至8、Cookie9至10、Cookie12至13 不玩京东赚赚和宠汪汪 -## ;; -## *) # 必选项。其他活动 -## TempBlockCookie="" # 必选项。默认为空值,表示其他帐号参加全部活动。填写帐号序号表示指定的 Cookie 只能参加之前 case 选项的活动 -## ;; -## esac -case $1 in - *jd_fruit*) - TempBlockCookie="" - ;; - *jd_dreamFactory* | *jd_jdfactory*) - TempBlockCookie="" - ;; - *jd_jdzz* | *jd_joy*) - TempBlockCookie="" - ;; - *) - TempBlockCookie="" - ;; -esac +## 10.1 全局模式选项 +### 赋值要求:①TempBlockCookie 只能填数字或者区间,表示按 Cookie 序号禁止账号; +### ②TempBlockPin 只能填写 pt_pin 值 或者 用户名(支持中文),表示按 pt_pin 或者 用户名(支持中文) 禁止账号。 +### ③对全部脚本有效(除非 recombin_ck_envs 另有设定); +### ⑧例如:TempBlockCookie="1,2,5_8,12~19 20",表示第 1、2、5至8、12至19、20位账号均被禁止参加活动。数字与数字,数字与区间之间可用 ~、_、空格隔开; ; +### ⑧例如:TempBlockPin="张三 jd_13134567890,%E7%95%AA%E8%8C%84%E5%8A%A0%E4%B8%AA%E8%9B%8B",表示 张三、jd_13134567890、番茄加个蛋、这几个账号均被禁止参加活动。各账号间可用 , 或空格隔开; +TempBlockCookie="" +TempBlockPin="" -## 11. 随机Cookie -## Cookie 按随机顺序参加活动。取消 # 注释后,填 1 表示开启功能。 -# RandomMode="" -## 从原 Cookie 中随机提取指定数量的 Cookie 参加活动,当 RandomMode="1" 时生效。取消 # 注释后,赋值后生效。 -### 赋值要求:"空值"、"非数字"、"小于2或大于 Cookie 总数的数值",均自动调整为全部 Cookie 按随机顺序参加活动; -### "大于或等于2,且小于或等于 Cookie 总数的数值",抽取指定数值的 Cookie 按随机顺序参数活动。 -# ran_num="" -## 如果想指定活动进行随机模式,可以参考下面 case 这个命令的例子来控制 -## case $1 in -## *jd_fruit*) # 东东农场活动脚本关键词 -## RandomMode="1" # 东东农场开启随机模式 -## ran_num="" # 东东农场全部 Cookie 按随机顺序参加活动 -## ;; -## *jd_dreamFactory* | *jd_jdfactory*) # 京喜工厂和东东工厂的活动脚本关键词 -## RandomMode="1" # 京喜工厂和东东工厂开启随机模式 -## ran_num="5" # 京喜工厂和东东工厂抽取指定 5 个 Cookie 按随机顺序参数活动。 -## ;; -## *) # 必选项。其他活动 -## RandomMode="" # 必选项。默认为空值,表示其他帐号均不开启随机模式。 -## ran_num="" # 必选项。默认为空值。若 RandomMode="1" 且此处赋值,表示其他活动均抽取指定数值的 Cookie 按随机顺序参数活动。 -## ;; -## esac -case $1 in - *jd_fruit*) - RandomMode="" - ran_num="" - ;; - *jd_dreamFactory* | *jd_jdfactory*) - RandomMode="" - ran_num="" - ;; - *) - RandomMode="" - ran_num="" - ;; -esac +## 10.2 局部模式环境变量 +### 释义:①单脚本规则单元:脚本1文件名关键词@参数1@参数2; +### ②两个及以上脚本共享一套规则单元:脚本1文件名关键词|脚本2文件名关键词@参数1@参数2。多脚本共用一套规则单元时,脚本文件名关键词之间采用 | 分隔符。 +### 赋值要求:①脚本文件名关键词,例如,东东农场的活动脚本关键词 jd_fruit;多个脚本关键词采用 | 符号分隔。例如:jd_fruit|jd_dreamFactory; +### ②脚本文件名关键词与各参数采用 @ 连接。释义附后。如果不设定参数1,表示该脚本所有账号参加活动(即:黑名单); +### ③参数1。表示 TempBlockCookie。不能有空格,建议序号与序号、序号与区间采用 , 分隔; +### ④参数2。表示 TempBlockPin。不能有空格,建议各pt_pin(或用户名)采用 , 分隔; +### ⑤各个规则单元之间采用 & 连接,例如:jd_fruit|jd_dreamFactory@1,3-4,7~9&jd_plantBean@2,4-6,8@张三&jd_pigPet@-@张三&jd_plantBean; +### jd_fruit|jd_dreamFactory@1,3-5,7~9 使用模式:按序号,1、3至5、7至9不参加活动 +### jd_plantBean@2,4-6,8@张三 使用模式:按序号,2、4至6、8不参加活动,且张三也不参加活动 +### jd_pigPet@-@张三 使用模式:按pt_pin或用户名,张三不参加活动。注意,参数1位置需要加一个 - 作为占位符 +### jd_plantBean 使用模式:所有账号参加活动 -## 12. 组队环境变量 -### 环境变量填写要求较高,建议群组内确认填写结果 -scr_name="$1" ## 不可删除 -case $1 in - *jd_sendBean* | *jd_sddd*) ## 送豆得豆活动脚本关键词 - teamer_num="11" ## 单个队伍中的总账号数为 11 个 - team_num="1" ## 每个账号发起组队的最大队伍数为 1 个 - ;; - *xmGame*) ## 小米-星空大冒险活动脚本关键词 - teamer_num="11" ## 单个队伍中的总账号数为 11 个 - team_num="1" ## 每个账号发起组队的最大队伍数为 1 个 - ;; - *jd_zdjr*) ## 组队瓜分京豆活动脚本关键词 - teamer_num="5 5 5 5" ## 对应各个活动中单个队伍中的总账号数分别为 5 5 5 5 个 - team_num="2 3 3 5" ## 对应各个活动中每个账号发起组队的最大队伍数为 2 3 3 5 个 - activityId=( ## 活动 activityId;需手动抓包。按数组分行填写至括号内 - 54f071f4eb794092a872392696be7d8d - 0582063f78434ed599becfc8f812c2ee - bbda11ba7a9644148d65c8b0b78f0bd2 - 92c03af2ce744f6f94de181ccee15e4f - ) - activityUrl=( ## 活动 activityUrl;需手动抓包。按数组分行填写至括号内 - https://cjhydz-isv.isvjcloud.com - https://lzkjdz-isv.isvjcloud.com - https://lzkjdz-isv.isvjcloud.com - https://cjhydz-isv.isvjcloud.com - ) - ;; - *) ## 不可删除 - scr_name="" ## 不可删除 - ;; ## 不可删除 -esac +## 10.2.1 局部模式环境变量的启用数量 +### 释义:顾名思义; +### 赋值要求:①正整数。如果填写 3 ,表示 tempblock_ck_envs1 ~ tempblock_ck_envs3 生效; +tempblock_ck_envs_num="" +## 10.2.2 多组环境变量 +### 释义:可以自由定义多组局部模式环境变量,如果多组变量中针对同一个脚本设置了多次变量,第一次变量有效,其他变量无效; +### 赋值要求:详见“局部模式环境变量”赋值要求; +# tempblock_ck_envs1="jd_fruit@1,3-4,7~9&jd_plantBean@2,4-6,8@张三&jd_pigPet@-@张三&jd_plantBean" +# tempblock_ck_envs2="Check|jd_islogin_xh@3-5@法外狂徒" +tempblock_ck_envs1="" +tempblock_ck_envs2="" + +## 11 重组Cookie +### 分为 随机、优先、轮换、组队和分段 5 种模式: +### 1、随机模式:支持自定义从所有 Cookie 中随机抽取若干数量的账号按随机顺序参加活动; +### 2、优先模式:支持自定义前若干数量的账号固定按照正常顺序参加活动,其余账号按随机顺序参加活动; +### 3、轮换模式:支持自定义前若干数量的账号固定按照正常顺序参加活动,其余账号按轮换模式参加活动。所谓轮换就是指若干数量的账号每过一天挪动到 Cookie 队伍末尾; +### 4、组队模式:只支持 js 脚本。根据游戏规则每支队伍的成员数量、每个账号能发起的组队次数上限自动按顺序参加活动。 +### 5、分段模式:只支持 js 脚本。支持自定义按若干数量拆分账号,按分段顺序参加活动。支持各段启动活动脚本的延隔时间。 +### 其他说明:①全局模式和局部模式可同时生效; +### ②支持黑名单模式(即不使用该模式,详见 局部模式环境变量 recombin_ck_envs 说明); + +## 11.1 全局模式选项 +### 模式 +### 赋值要求:①只能填 1 2 3 4 5,分别表示随机、优先、轮换、组队、分段 5 种模式,对全部脚本有效(除非 recombin_ck_envs 另有设定); +### ②若填写为其他内容,则所有账号按正常顺序参加活动(除非 recombin_ck_envs 另有设定); +Recombin_CK_Mode="" + +### 参数 1 +### 释义:①在随机模式下:表示随意抽取 N 个账号随机顺序参加活动; +### ②在优先模式和轮换模式下:表示前 N 个账号固定按正常顺序参加活动; +### ③在组队模式下:表示每支队伍的成员数量; +### ④在分段模式下:表示前 N 个账号固定按正常顺序参加活动; +### 赋值要求:①填写不大于 Cookie 总数的 0 或正整数,对全部脚本有效(除非 recombin_ck_envs 另有设定); +### ②随机模式下:若赋空值或非数字字符,则所有账号随机顺序参加活动;若填写数值为 0 或大于等于 Cookie 总数,则所有账号按正常顺序参加活动; +### ③优先模式下:若填写数值为 0 或大于等于 Cookie 总数,则所有账号切换回正常顺序参加活动; +### ④轮换模式下:若填写数值为 0 ,表示所有账号参加轮换;若填写数值为大于等于 Cookie 总数,则所有账号切换回正常顺序参加活动; +### ⑤组队模式下:若填写数值为 0 或其他内容,则所有账号切换回正常顺序参加活动。 +### ⑥分段模式下:若填写数值为 0 ,表示所有账号参与分段;若填写数值为大于等于 Cookie 总数,则所有账号切换回正常顺序参加活动; +Recombin_CK_ARG1="" + +### 参数 2 +### 释义:①随机模式和优先模式下:无意义; +### ②轮换模式下:表示自定义轮换频次,即单日参加轮换的账号数量; +### ③在组队模式下:表示每个账号发起组队的次数; +### ④在分段模式下:表示每个分段的账号数量; +### 赋值要求:①轮换模式下:只能填不大于参与轮换账号数量(即:总Cookie数量-固定Cookie数量)的正整数; +### ②轮换模式下:若填写为其他内容或留空,则自动调整为按天计算轮换频次(即:参与轮换账号数量÷当月总天数的商值,取上整数); +### ③组队模式下:若填写为其他内容或留空,则所有账号切换回正常顺序参加活动。 +### ④分段模式下:只能填大于固定账号数量且不大于 Cookie 总数的数值。若填写为其他内容或留空,则所有账号切换回正常顺序参加活动。 +Recombin_CK_ARG2="" + +## 重组Cookie前是否剔除失效Cookie +### 释义:①如果开启,会在模式参数已设定的情况下,执行任务前进行 Cookie 有效性验证并剔除失效的 Cookie。受 Cookie 总数量影响任务启动的即时性; +### 赋值要求:①填 1 表示开启,填其他内容或空值表示关闭; +Remove_Void_CK="" + +## 11.2 局部模式环境变量 +### 释义:①单脚本规则单元:脚本1文件名关键词@模式@参数1@参数2@参数3@参数4@参数5; +### ②两个及以上脚本共享一套规则单元:脚本1文件名关键词|脚本2文件名关键词@模式@参数1@参数2@参数3@参数4@参数5。多脚本共用一套规则单元时,脚本文件名关键词之间采用|分隔符。 +### 赋值要求:①脚本文件名关键词,例如,东东农场的活动脚本关键词 jd_fruit,支持某个作者的脚本通配符模糊匹配,例如:ccwav*jd_fruit表示只对ccwav的jd_fruit脚本生效。多个脚本关键词采用 | 符号分隔。例如:jd_fruit|jd_dreamFactory; +### ②脚本文件名关键词与各参数采用 @ 连接。释义附后。如果不设定参数1,表示该脚本按正常账号顺序参加活动(即:黑名单); +### ③模式。表示 Recombin_CK_Mode; +### ④参数1。表示 Recombin_CK_ARG1; +### ⑤参数2。表示 Recombin_CK_ARG2; +### ⑥参数3。表示 Recombin_CK_ARG3;组队模式、分段模式:表示各分段启动活动脚本的延隔时间,支持 d(天)、h(小时)、m(分钟)、s(秒可略写)。如 1d2h3m4s 表示 1天2小时3分钟4秒; +### ⑦参数4。表示 Recombin_CK_ARG4;组队模式、分段模式:表示各分段启动活动脚本的间隔时间。需参数3为 - 占位符时生效; +### ⑧参数5。表示 Recombin_CK_ARG5;组队瓜分京豆脚本 (jd_zdjr) :表示调用 activity_env 变量组(用法附后)的指定环境变量。例如,填 0,表示所有变量执行一次,填 1 表示只调用第 1 组变量。需参数3、参数4已赋值或为 - 占位符时生效; +### ⑨各个规则单元之间采用 & 连接。可以针对同一脚本设置多个规则单元,以实现模式迭代组合。当多次变量遇到组队或分段模式时,终止迭代,即:随机、优先、轮换三者间可以无限迭代;这三者与组队、分段其中之一实现单轮迭代; +### ⑩例如:jd_cfd&jd_fruit|jd_dreamFactory@1@5&jd_pet@2@6&jd_pigPet@3@5&jd_plantBean@3@7@4&jd_jxlhb@4@80@1&jd_islogin_xh@5@4@8&jd_islogin_xh@5@4@8@15&ccwav*speed_sign@5@0@20@-@5400&iroyway*zdjr@3@5&iroyway*zdjr@4@5@4@-@-@1; +### jd_cfd 脚本按正常账号顺序参加活动 +### jd_fruit|jd_dreamFactory@1@5 共用模式:1随机,抽5个CK顺序随机 +### jd_pet@2@6 使用模式:2优先,前6个CK顺序优先,其余CK顺序随机 +### jd_pigPet@3@5 使用模式:3轮换,前5个CK顺序固定,根据CK总数和当月天数自动计算每天轮换CK数量 +### jd_plantBean@3@7@4 使用模式:3轮换,前7个CK顺序固定,每天轮换4个CK +### jd_jxlhb@4@80@1 使用模式:4组队,队伍成员数量80,每个账号组队1次 +### jd_islogin_xh@5@4@8 使用模式:5分段,前4个CK顺序固定,每段成员数量8,各分段并发执行启动脚本 +### jd_islogin_xh@5@4@8@15 使用模式:5分段,前4个CK顺序固定,每段成员数量8,每段启动脚本的延隔时间为15秒,即本段开始启动脚本后 15 秒,下一段启动脚本。第 4 个参数表示每个分段启动活动脚本的延隔时间,单位:秒; +### ccwav*speed_sign@5@0@20@-@5400 ccwav 的 speed_sign 脚本。使用模式:5分段,所有账号参与分段,每段成员数量20,每段启动脚本的间隔时间为 5400 秒即本段脚本执行完成后,等待 5400 秒,下一段启动脚本。当第 4 个参数使用 - 占位符时,第 5 个参数表示每个分段启动活动脚本的间隔时间,单位:秒。 +### iroyway*zdjr@3@5&iroyway*zdjr@4@5@4@-@-@1 iroyway*zdjr 脚本。使用模式:先3轮换再4组队。 + +## 11.2.1 局部模式环境变量的启用数量 +### 释义:顾名思义; +### 赋值要求:①正整数。如果填写 3 ,表示 recombin_ck_envs1 ~ recombin_ck_envs3 生效; +recombin_ck_envs_num="5" +## 11.2.2 多组环境变量 +### 释义:可以自由定义多组局部模式环境变量; +### 赋值要求:详见“局部模式环境变量”赋值要求。如果多组变量中针对同一个脚本设置了多次模式及参数变量,实现迭代组合,等同于局部模式环境变量的赋值要求 ⑨ ; +recombin_ck_envs1="jd_fruit|jd_pet|jd_plantBean|jd_dreamFactory|jd_jdfactory|jd_crazy_joy|jd_jdzz|jd_jxnc|jd_bookshop|jd_cash|jd_sgmh|jd_cfd|jd_health|jd_carnivalcity|jd_city|jd_moneyTree_heip@3@5" ## 强制轮换 +recombin_ck_envs2="iroyway*zdjr@4@-@-@-@-@3" # 组队瓜分京豆。参数1、参数2,使用 - 占位符,表示引用 组队瓜分京豆活动变量组 的前两个参数,作为几人成队和发起几次组队 +recombin_ck_envs3="jd_jxlhb|jd_88hb@4@78@1" # 领88元红包 +recombin_ck_envs4="CheckCK|checkCookie|cookieCheck|checkCookie|bean_change|wskey|code&jd_islogin_xh" # 强制黑名单 +recombin_ck_envs5="ccwav*speed_sign@5@0@20@-@1h" # ccwav 防黑号京东极速版任务分段 + +## 11.2.3 组队瓜分京豆环境变量组 +### 释义:用于自定义多组 activityId 和 activityUrl; +### 赋值要求:详见示例: +activity_env=( + 5@3@48a4106275f24bb7871e396fcf39d767@https://lzkjdz-isv.isvjcloud.com # 第 1 组环境变量。前两个参数表示 5 人成队,每个账号最多发起 3 次组队 + 5@2@a64e40b100b44e2d9213712fa3fdcd67@https://cjhydz-isv.isvjcloud.com # 第 2 组环境变量。前两个参数表示 5 人成队,每个账号最多发起 2 次组队 + 5@3@e56a4af7b2e940ec9270f24dd67a20d3@https://lzkjdz-isv.isvjcloud.com # 第 3 组环境变量。前两个参数表示 5 人成队,每个账号最多发起 3 次组队 + teamer_num@team_num@activityId4@activityUrl4 # 第 4 组环境变量。前两个参数表示 teamer_num 人成队,每个账号最多发起 team_num 次组队 +) + +## 12 基础 js 依赖文件的预先替换 +### 释义:目前仅支持将 /ql/config 路径下的 ql.js、sendNotify.js、JD_DailyBonus.js 三个文件,在 task 命令启动时会自动替换到当前运行的脚本所在的文件夹。 +### 赋值要求:例如:ql|JD_DailyBonus&sendNotify@JDHelloWorld_jd_scripts|ccwav_QLScript2。各个定义单元之间采用 & 连接。 +### ql|JD_DailyBonus 两个脚本均不屏蔽仓库文件夹复制替换 +### sendNotify@JDHelloWorld_jd_scripts|ccwav_QLScript2 sendNotify.js 不复制到 /ql/scripts/路径下的 JDHelloWorld 和 ccwav 的仓库文件夹。文件夹名称必须精确完整写出,不支持模糊匹配。 +js_deps_replace_envs="ql|JD_DailyBonus&sendNotify@JDHelloWorld_jd_scripts|ccwav_QLScript2" ## 其他需要的变量,脚本中需要的变量使用 export 变量名= 声明即可 @@ -287,7 +334,7 @@ export FRUIT_BEAN_CARD="true" ## 12、是否取关商品。环境变量内容的意思依次是是否取关全部商品(0表示一个都不),是否取关全部店铺数(0表示一个都不),遇到此商品不再进行取关,遇到此店铺不再进行取关 export UN_SUBSCRIBES="300,300,," ## 12、jd_unsubscribe这个任务是用来取关每天做任务关注的商品和店铺,默认在每次运行时取关20个商品和20个店铺 -### 如果取关数量不够,可以根据情况增加,还可以设置 jdUnsubscribeStopGoods 和 jdUnsubscribeStopShop +### 如果取关数量不够,可以根据情况增加,还可以设置 jdUnsubscribeStopGoods 和 jdUnsubscribeStopShop ### 商品取关数量 export goodPageSize="30" ### 店铺取关数量 @@ -316,100 +363,312 @@ export PURCHASE_SHOPS="true" export TUAN_ACTIVEID="" ## 22、京东UA。点点券脚本运行环境变量 export JD_USER_AGENT="" -## 23、京东试用jd_try相关环境变量 -### 控制每次获取商品数量,默认12 -export JD_TRY_PAGE_SIZE="" -### 商品分类,以 @ 隔开,示例:家用电器@手机数码@电脑办公@家居家装 -export JD_TRY_CIDS_KEYS="" -### 试用类型,以 @ 隔开,示例:免费试用@闪电试 -export JD_TRY_TYPE_KEYS="" -### 过滤试用商品关键字,以 @ 隔开(默认内置了很多关键字,建议使用默认) -export JD_TRY_GOOD_FILTERS="" -### 试用商品最低价格 -export JD_TRY_MIN_PRICE="" -### 试用商品最多提供数量(过滤垃圾商品) -export JD_TRY_MAX_SUPPLY_COUNT="" -# 龙猪猪环境变量 -## 京豆雨通知,填写true为不关闭推送,false为关闭推送 -export RAIN_NOTIFY_CONTROL="false" -## 整点京豆雨RRA -export SUPER_RAIN_RRA="" -## 半点京豆雨RRA -export HALF_RAIN_RRA="" +# curtinlv 环境变量 +## 1、赚京豆 +### 助力账号,填写pt_pin或用户名的值,如 zlzh = ['aaaa','xxxx','yyyy'] ,支持ENV +### export zlzh="$(echo $JD_COOKIE | sed "s/&/ /g; s/\S*pt_pin=\([^;]\+\);\S*/\'\1\',/g; s/^/[/; s/$\|,$/]/;" | awk 'BEGIN{for(i=0;i<10;i++)hex[i]=i;hex["A"]=hex["a"]=10;hex["B"]=hex["b"]=11;hex["C"]=hex["c"]=12;hex["D"]=hex["d"]=13;hex["E"]=hex["e"]=14;hex["F"]=hex["f"]=15;}{gsub(/\+/," ");i=$0;while(match(i,/%../)){;if(RSTART>1);printf"%s",substr(i,1,RSTART-1);printf"%c",hex[substr(i,RSTART+1,1)]*16+hex[substr(i,RSTART+2,1)];i=substr(i,RSTART+RLENGTH);}print i;}')" ## 支持中文用户名 +export zlzh="$(echo $JD_COOKIE | sed "s/&/ /g; s/\S*pt_pin=\([^;]\+\);\S*/\'\1\',/g; s/^/[/; s/$\|,$/]/;")" +## 2、全民抢京豆 +### export qjd_zlzh="$(echo $JD_COOKIE | sed "s/&/ /g; s/\S*pt_pin=\([^;]\+\);\S*/\'\1\',/g; s/^/[/; s/$\|,$/]/;" | awk 'BEGIN{for(i=0;i<10;i++)hex[i]=i;hex["A"]=hex["a"]=10;hex["B"]=hex["b"]=11;hex["C"]=hex["c"]=12;hex["D"]=hex["d"]=13;hex["E"]=hex["e"]=14;hex["F"]=hex["f"]=15;}{gsub(/\+/," ");i=$0;while(match(i,/%../)){;if(RSTART>1);printf"%s",substr(i,1,RSTART-1);printf"%c",hex[substr(i,RSTART+1,1)]*16+hex[substr(i,RSTART+2,1)];i=substr(i,RSTART+RLENGTH);}print i;}')" ## 支持中文用户名 +export qjd_zlzh="$(echo $JD_COOKIE | sed "s/&/ /g; s/\S*pt_pin=\([^;]\+\);\S*/\'\1\',/g; s/^/[/; s/$\|,$/]/;")" +## 3、签到领现金助力 +### export cash_zlzh="$(echo $JD_COOKIE | sed "s/&/ /g; s/\S*pt_pin=\([^;]\+\);\S*/\'\1\',/g; s/^/[/; s/$\|,$/]/;" | awk 'BEGIN{for(i=0;i<10;i++)hex[i]=i;hex["A"]=hex["a"]=10;hex["B"]=hex["b"]=11;hex["C"]=hex["c"]=12;hex["D"]=hex["d"]=13;hex["E"]=hex["e"]=14;hex["F"]=hex["f"]=15;}{gsub(/\+/," ");i=$0;while(match(i,/%../)){;if(RSTART>1);printf"%s",substr(i,1,RSTART-1);printf"%c",hex[substr(i,RSTART+1,1)]*16+hex[substr(i,RSTART+2,1)];i=substr(i,RSTART+RLENGTH);}print i;}')" ## 支持中文用户名 +export cash_zlzh="$(echo $JD_COOKIE | sed "s/&/ /g; s/\S*pt_pin=\([^;]\+\);\S*/\'\1\',/g; s/^/[/; s/$\|,$/]/;")" +## 4、京喜工厂开团助力 for Python +### 支持指定账号开团,跑1次脚本默认开3次团,如未指定账号默认给账号一开团。 +### 变量ENV 指定开团账号。可填用户名 或 pt_pin 的值。示例:export jxgc_kaituan="用户1&用户2" +export jxgc_kaituan="$(echo $JD_COOKIE | sed "s/&/ /g; s/\S*pt_pin=\([^;]\+\)\S*;/\1/g; s/ /\&/g;" | awk 'BEGIN{for(i=0;i<10;i++)hex[i]=i;hex["A"]=hex["a"]=10;hex["B"]=hex["b"]=11;hex["C"]=hex["c"]=12;hex["D"]=hex["d"]=13;hex["E"]=hex["e"]=14;hex["F"]=hex["f"]=15;}{gsub(/\+/," ");i=$0;while(match(i,/%../)){;if(RSTART>1);printf"%s",substr(i,1,RSTART-1);printf"%c",hex[substr(i,RSTART+1,1)]*16+hex[substr(i,RSTART+2,1)];i=substr(i,RSTART+RLENGTH);}print i;}')" ## 支持中文用户名 +## 5、入会开卡 +### int,入会送豆满足此值,否则不入会 +export openCardBean="30" +### 布尔值,是否记录符合条件的shopid(默认True) +export record="true" +### 布尔值, True:仅记录,不入会(默认False) +export onlyrecord="false" +### 布尔值,开启记忆功能,接力上一次异常中断位置继续。(默认yes) +export memory="false" +### 布尔值,True:只打印部分日志 False:打印所有日志 +export printlog="true" +### Float,限制速度,单位秒,如果请求过快报错适当调整0.5秒以上 +export sleepNum="0.5" +### 布尔值,True:使用作者远程仓库更新的id,False:使用本地shopid.txt的id +export isRemoteSid="true" +## 6、东东超市商品兑换 +### 填写商品名字,兼容模糊关键词 +export coinToBeans='京豆包' +### 多账号并发,默认开启 True,关闭 False +export blueCoin_Cc='True' +### 轮次 +export startMaxNum="30" +### 多线程并发,相当于每秒点击兑换次数...适当调整,手机会发烫 +export dd_thread="30" +### 开始抢兑时间 +export starttime="23:59:59.00000000" +### 结束时间 +export endtime="00:00:30.00000000" -# 柠檬(胖虎部分环境变量) -## 1、京喜工厂抢茅台 -### 自定义商品变量 -export shopid="1598" ##你要商品ID 冰箱 -export shopid1="1607" ##你要商品ID 茅台 -## 2、推一推 -### 入口:极速版-赚金币 -### 分享到QQ查看邀请码,packetId就是 -### 自定义变量 -export tytpacketId="" -## 3、拆红包 -export chbpacketId="" -## 4、是兄弟就砍我 -### 是兄弟就来砍我脚本要参加砍价的商品ID -export actId="" -export actId1="" -export actId2="" -export actId3="" -export actId4="" -### 是兄弟就来砍我脚本要要参加砍价的邀请码 -export packetId="" -## 5、是兄弟就砍我2 -### 惊喜欢乐砍 自定义变量 入口:京喜APP-我的-惊喜欢乐砍 -export launchid="" ##你的邀请码 -### 第一次参加变量设置为true查看商品ID,填写商品ID后自动获取邀请码邀请;如果只助力,变量设置为false -export first="false" -export active="" ##商品ID -## 6、赚金币 -### 入口:极速版-百元生活费-赚金币-邀请好友 -### 第一次运行可不填写邀请码,运行一次查看自己的邀请码 -export InviterPin="" ##你的邀请码 -## 7、0元砍价,入口:京东-我的-0元砍价 -### 使用教程: -### 第一步,运行脚本一次日志查看商品ID -### 获取你要砍价的商品ID后变量填写 -export skuId="" ##这里填获取的商品ID -### 第二步,再运行一次日志查看商品activityId变量填写 -export activity="" ##这里填获取的商品activityId -## 8、邀请有礼 -### 自定义邀请码环境变量 -export yqm="" ##你的邀请码 -## 9、全民挖现金 -### 入口:京东-我的-全民挖现金 -### 运行一次查看邀请码 变量你的邀请码 -export shareCode="" -## 10、省钱大赢家本期活动ID -export redEnvelopeId="" -## 11、省钱大赢家邀请码 -export inviter="" -## 12、签到领现金添加变量方式 -## 自行添加变量设置邀请码 格式如下 默认10个 -export cashinviteCode="" -export cashinviteCode2="" -export cashinviteCode3="" -## 13、大老板农场 新增自定义变量通知开关。true通知打开,false为关闭 -export dlbtz="true" -## 14、零食街自动兑换变量 -### 自行取消注释和注释 -##export lsjdh="jdAward1" ##兑换5豆 -##export lsjdh="jdAward2" ##兑换10豆 -export lsjdh="jdAward3" ##兑换100豆 -##export lsjdh="jdAward4" ##兑换牛奶 +# smiek2221 环境变量 +## 1、京东签到图形验证修改火爆问题 +### 如果 read ECONNRESET 错误 可以试试 +### 环境变量 JOY_HOST 修改域名 https://jdjoy.jd.com 可以改成ip https://49.7.27.236 +### 如果上面ip不行就自己去ping下域名对应的ip cmd窗口输入—>ping jdjoy.jd.com 再改 +### 不要频繁请求 请过个半小时 1小时在执行 +export JOY_HOST="" +## 2、图形验证文件 JDJRValidator_Pure.js 验证次数 +### 新增验证次数上限 默认25次 验证可能无法成功 +export JDJR_validator_Count="25" +## 3、财富大陆热气球接客次数 +### 新增热气球接客 默认每次运行执行10次 +export gua_wealth_island_serviceNum="500" +## 4、修复点点券 +### 新增显示有多少个非法请求 可以开通知 +export DDQ_NOTIFY_CONTROL="" ##不填或false为通知,true为不通知 +## 5、24 及之后的开卡变量 +export guaopencard_All="true" +export guaopencard_addSku_All="true" +export guaopencardRun_All="true" +export guaopencard_draw="true" +export guaunknownTask_addSku_All="true" +export guaunknownTask_card_All="true" +export gua_carnivalcity_draw="true" +export guaopenwait_All="true" +export guaopencard_draw45="3" +for ((s = 0; s <= 100; s++)); do + export guaopencard$s="3" + export guaopencard_draw$s="3" + export guaopencard_addSku$s="true" +done +## 6、城城领现金自动抽奖 +export jdJxdExchange="true" +export JD_CITY_HELPSHARE="false" # false 优先内部助力 | true 优先助力池 +# cdle 环境变量 +## 1、签到领现金兑换 +### 填写 pt_pin@金额,pt_pin为用户名,可以在 COOKIES 中提取;金额为 2 或 10,例如 LiLei@2 或 HanMeimei@10。多值用 & 连接,例如 LiLei@2&HanMeimei@10 +### export exchangeAccounts="$(echo $JD_COOKIE | sed "s/&/\n/g; s/\S*pt_pin=\([^;]\+\);\S*/\1@10/g; s/\n/\&/g;")" ##兑10元现金,比较难兑 +export exchangeAccounts="$(echo $JD_COOKIE | sed "s/&/ /g; s/\S*pt_pin=\([^;]\+\);\S*/\1@2/g; s/ /&/g;")" ##兑2元现金 +## 2、愤怒的现金 +### 极速助力,打击黑产盗取现金的犯罪行为。默认向前助力9个账号,若要指定被助力账号,需cashHelpPins环境变量中填入需要助力的pt_pin,有多个请用@符号连接。 +export cashHelpPins="$(echo $JD_COOKIE | sed "s/&/\n/g; s/\S*pt_pin=\([^;]\+\);\S*/\1/g; s/\n/@/g;")" +## 3、愤怒的锦鲤 +### 助力账号,填写pt_pin或用户名的值。多个 pt_pin 值用 @ 连接 +export kois="$(echo $JD_COOKIE | sed "s/&/\n/g; s/\S*pt_pin=\([^;]\+\);\S*/\1/g; s/\n/@/g;")" +## 4、发财大赢家助力 +### 需要设置环境变量dyjHelpPins来指定要助力的账号 +export dyjHelpPins="$(echo $JD_COOKIE | sed "s/&/\n/g; s/\S*pt_pin=\([^;]\+\);\S*/\1/g; s/\n/@/g;")" +## 5、早起赢现金 +### 入口:京东汽车-瓜分万元 +### 备注:支付一元才能参与活动,填写环境变量morningScPins给指定账号打卡 +export morningScPins="$(echo $JD_COOKIE | sed "s/&/\n/g; s/\S*pt_pin=\([^;]\+\);\S*/\1/g; s/\n/@/g;")" +## 6、赚30元 +### 备注:赚30元每日签到红包、天降红包助力,在earn30Pins环境变量中填入需要签到和接受助力的账号。 +### 技巧:每月可以提现100元,但需要邀请一个新人下首单。可以用已注册手机号重新注册为新人账号,切换ip可以提高成功率。 +export earn30Pins="$(echo $JD_COOKIE | sed "s/&/\n/g; s/\S*pt_pin=\([^;]\+\);\S*/\1/g; s/\n/@/g;")" +## 7、真·抢京豆 +### 高速并发抢京豆,专治偷助力。设置环境变量angryBeanPins为指定账号助力,默认不助力。 +### 环境变量angryBeanMode可选值priority或speed或smart,默认smart模式。 +### 默认推送通知,如要屏蔽通知需将环境变量enableAngryBeanNotify的值设为false。 +export angryBeanPins="$(echo $JD_COOKIE | sed "s/&/ /g; s/\S*pt_pin=\([^;]\+\);\S*/\1/g; s/ /@/g;")" +export angryBeanMode="priority" +export enableAngryBeanNotify="true" +# star261 环境变量 +## 1、京喜工厂开团 +### 默认第一个CK开团,例:若OPEN_DREAMFACTORY_TUAN="2,3",则第2,第3个CK开团,其他账号参加第2,第3个CK开的团。每执行一次,会领取上一次成团的奖励和新开一次团,每天执行4次能开完3次团和领取3次团的奖励。一个账号能参团一次,一个账号一天能开三次团,请根据自己的情况设置需要开团的CK,一般至少5个CK能成团 +### 助力规则:开团账号开团,其他账号自动参团。 例:有A,B,C账号,A,B账号开团,则B,C会参加A的团,A会参加B的团。账号内互助之后,开团账号若有剩下参团次数,会尝试加入作者团 +### 成团条件:成团所需人数根据活动所需人数变化,一般为5-7人,若5人成团,则5个CK能成团一次,9个CK能成团两次,13个CK能成团三次 +export OPEN_DREAMFACTORY_TUAN="" +# JDHelloWorld 环境变量 +## 1、宠汪汪二代目 +### 默认80,10、20、40、80可选 +export feedNum="80" +### 默认双人跑 +export JD_JOY_teamLevel="2" +## 2、新版京喜财富岛提现 +### 提现金额,可选0.1 0.5 1 2 10 +export CFD_CASHOUT_MONEY=10 +### token,顺序、数量必须与cookie一致。抓包地址:https://m.jingxi.com/jxbfd/user/ExchangePrize +### export CFD_CASH_TOKEN='[{"strPgtimestamp":"你的值","strPhoneID":"你的值","strPgUUNum":"你的值"},{"strPgtimestamp":"你的值","strPhoneID":"你的值","strPgUUNum":"你的值"}]' +export CFD_CASH_TOKEN='[{"strPgtimestamp":"1626623544085","strPhoneID":"878e21db65d2d606","strPgUUNum":"56eaaf98f7d7a69c59e50c6bb40e79c1"}]' +## 3、宠汪汪等提示预存验证码数量不足 +export validate_num="" ##你需要的数值 + +# Aaron-lv 环境变量 +## 1、京东健康社区京豆兑换 +export JD_HEALTH_REWARD_NAME="20" ##只能兑换京豆,填写纯数字20 10 5 3 # Ninja 环境变量 ## 1、通知黑名单 ### 使用 & 分隔,例如 东东乐园&东东萌宠 export NOTIFY_SKIP_LIST="" -# Faker2库环境变量 +# 不知名大佬环境变量 ## 1、清空购物车 -export JD_CART_REMOVE="" -export JD_CART_REMOVESIZE="" +### 将需要跳过清理的账号(cookie中的pt_pin)放到变量CleanUsers中,多个用@隔开 +export CleanUsers="" + +# ccwav 环境变量 +## [1] jd_CheckCK.js +### 当有自动禁用或自动启用事件发生才会发送通知,如果要每次都通知则需设定变量 +### 自动检测账号是否正常,不正常的自动禁用,正常的如果是禁用状态则自动启用 +export CHECKCK_SHOWSUCCESSCK="false" ##显示正常CK,true为显示 +export CHECKCK_CKALWAYSNOTIFY="true" ##通知CK状态,true为永远通知 +export CHECKCK_CKAUTOENABLE="false" ##自动启用CK,false为停用 +export CHECKCK_CKNOWARNERROR="true" ##服务器空数据等错误不触发通知,false为通知 +## [2] jd_bean_change.js +### 自用的京东资产变动查询加强版 +### 京东资产变动 + 白嫖榜 + 京东月资产变动,注意事项:如果你遇到TG Bark报错,那是因为报文过长,请使用分段通知功能. +### 1. BEANCHANGE_PERSENT 分段通知 +### 例:export BEANCHANGE_PERSENT="10"总共有22个账号,结果会分成3条推送通知,1~10为第一条推送,11~20为第二条推送,剩余的为第三条推送 +export BEANCHANGE_PERSENT="10" ##10合1 +### 2. BEANCHANGE_USERGP2 BEANCHANGE_USERGP3 BEANCHANGE_USERGP4 根据Pt_Pin的值进行分组通知 +### 注意:分组通知会强制禁用BEANCHANGE_PERSENT变量! +### 分组通知的通知标题为 脚本名+"#"+分组数值 +### 主要用于搭配通知脚本的分组通知使用. +### 3. BEANCHANGE_ENABLEMONTH +### 每月1号17点后如果执行资产查询,开启京东月资产变动的统计和推送. +### 拆分通知和分组通知的变量都可以兼容. +### 标题按照分组分别为 京东月资产变动 京东月资产变动#2 京东月资产变动#3 +### 开启 : export BEANCHANGE_ENABLEMONTH="true" +### 4.BEANCHANGE_ALLNOTIFY +### 设置推送置顶公告,&表示换行,公告会出现在资产通知中(包括一对一). +### 例子 : export BEANCHANGE_ALLNOTIFY="你好&今天天气不错...&&哥斯拉大战金刚...." +### 显示: +### +### 【✨✨✨✨公告✨✨✨✨】 +### 你好 +### 今天天气不错... +### +### 哥斯拉大战金刚.... +### 5. BEANCHANGE_ENABLEMONTH +### 当设定BEANCHANGE_ExJxBeans="true"且时间在17点之后,会自动将临期京豆兑换成喜豆续命. +export BEANCHANGE_ExJxBeans="true" +## [3] sendNotify.js +### 1. 通知黑名单 +### 如果通知标题在此变量里面存在(&隔开),则用屏蔽不发送通知,继承Ninja。例:export NOTIFY_SKIP_LIST="京东CK检测&京东资产变动" +export NOTIFY_SKIP_NAMETYPELIST="" +### 2. 多套通知。NOTIFY_GROUP2_LIST NOTIFY_GROUP3_LIST NOTIFY_GROUP4_LIST NOTIFY_GROUP5_LIST NOTIFY_GROUP6_LIST +### 如果通知标题在此变量里面存在(&隔开),则用第2/3/4/5/6套推送变量进行配置. +##分组2推送 +## export PUSH_PLUS_TOKEN_hxtrip2="" +## export PUSH_PLUS_USER_hxtrip2="" +export PUSH_PLUS_TOKEN2="" +export PUSH_PLUS_USER2="" +export TG_BOT_TOKEN2="" +export TG_USER_ID2="" +### export NOTIFY_GROUP2_LIST="京东白嫖榜&京东月资产变动&省钱大赢家之翻翻乐&京东CK检测&京喜工厂&金融养猪" +### 3. NOTIFY_SHOWNAMETYPE +### 例:账号名:ccwav 别名:ccwav的别名 Remark:代码玩家 +#export NOTIFY_SHOWNAMETYPE="1" ##效果: 账号名称:代码玩家 +export NOTIFY_SHOWNAMETYPE="2" ##效果: 账号名称:ccwav的别名(代码玩家) +#export NOTIFY_SHOWNAMETYPE="3" ##不做处理,效果: 账号名称:ccwav +#export NOTIFY_SHOWNAMETYPE="4" ##不做处理,效果: 账号名称:ccwav(代码玩家) +### 4. NOTIFY_SKIP_NAMETYPELIST +### 单独指定某些脚本不做NOTIFY_SHOWNAMETYPE变量处理。例:export NOTIFY_SKIP_NAMETYPELIST="东东农场&东东工厂" +export NOTIFY_SKIP_NAMETYPELIST="" +### 5. NOTIFY_NOREMIND +### 对 东东农场领取 东东萌宠领取 京喜工厂领取 汪汪乐园养joy领取 脚本任务更新的通知进行屏蔽,可自行删减. +### export NOTIFY_NOREMIND="京喜工厂&汪汪乐园养joy" +### 6. 屏蔽ck失效通知 +### 执行所有脚本时,如果有单独推送CK失效的请求也不会推送失效通知 +export NOTIFY_NOCKFALSE="true" +### 7. NOTIFY_AUTHOR +### 通知底部显示:本通知 By 测试人 +#export NOTIFY_AUTHOR="测试人" +### 8. NOTIFY_NOLOGINSUCCESS +### 屏蔽青龙登陆成功通知,登陆失败不屏蔽(新版貌似可以直接设定了) +export NOTIFY_NOLOGINSUCCESS="true" +### 9. NOTIFY_CUSTOMNOTIFY +### 强大的自定义通知,格式为 脚本名称&推送组别&推送类型 (推送组别总共5组) +### 推送类型: Server酱&pushplus&Bark&TG机器人&钉钉&企业微信机器人&企业微信应用消息&iGotNotify&gobotNotify +### export NOTIFY_CUSTOMNOTIFY=["京东资产变动&组1&Server酱&Bark&企业微信应用消息&TG机器人&iGotNotify","京东白嫖榜&组1&TG机器人&pushplus&iGotNotify","京东CK检测&组1&TG机器人&pushplus&iGotNotify"] +export NOTIFY_CUSTOMNOTIFY="" +### 10. NOTIFY_CKTASK +### 当接收到发送CK失效通知和Ninja 运行通知时候执行子线程任务,支持js py ts +### export NOTIFY_CKTASK="jd_CheckCK.js" +### 11. PUSH_PLUS_TOKEN_hxtrip 和 PUSH_PLUS_USER_hxtrip +### 增加pushplus.hxtrip.com的推送加接口,貌似更稳定,普通用法和NOTIFY_CUSTOMNOTIFY用法同PUSH_PLUS. +export PUSH_PLUS_TOKEN_hxtrip="" +export PUSH_PLUS_USER_hxtrip="" +### 12. jd_joy_reward_Mod.js 宠汪汪积分兑换有就换版 +export JOY_GET20WHEN16="true" ##控制16点才触发20京豆兑换. +### 13. CK失效时执行脚本 +export NOTIFY_CKTASK="ccwav_QLScript2_jd_CheckCK.js" +### 14. 用 WxPusher 进行一对一推送 +### 详细教程有人写了,不知道是幸运还是不幸: https://www.kejiwanjia.com/jiaocheng/27909.html +### 填写变量 WP_APP_TOKEN_ONE,可在管理台查看: https://wxpusher.zjiecode.com/admin/main/app/appToken +### 手动建立CK_WxPusherUid.json,可以参考CKName_cache.json,只是nickName改成Uid, +### 每个用户的uid可在管理台查看: https://wxpusher.zjiecode.com/admin/main/wxuser/list +### 另外: export WP_APP_ONE_TEXTSHOWREMARK="true",启用一对一推送标题显示备注信息,默认不启用. +### CK_WxPusherUid.json 内容(pt_pin 如果是汉字需要填写转码后的!): +### [ +### { +### "pt_pin": "ccwav", +### "Uid": "UID_AAAAAAAA" +### }, +### { +### "pt_pin": "中文名", +### "Uid": "BBBBBBBBBB" +### } +### ] +### 15. NOTIFY_SKIP_TEXT +### 如果此变量(&隔开)的关键字在通知内容里面存在,则屏蔽不发送通知. +### 例子 : export NOTIFY_SKIP_TEXT="忘了种植&异常" + +# X1a0He 环境变量 +## 1、简化版京东日资产变动通知 +### 支持环境变量控制每次发送的账号个数,默认为2 +export JD_BEAN_CHANGE_SENDNUM="10" +## 2、清空购物车 +### 使用前请认真看对应注释:https://raw.githubusercontent.com/X1a0He/jd_scripts_fixed/main/jd_cart_remove.js +### 当环境变量中存在JD_CART并设置为true时才会执行删除购物车 +export JD_CART="true" +### 运行一次取消多全部已关注的商品。数字0表示不取关任何商品,默认20 +export JD_CART_REMOVESIZE="20" +### 是否清空,如果为false,则上面设置了多少就只删除多少条 +export JD_CART_REMOVEALL="true" +### 关键词,用@分隔 +export JD_CART_KEYWORDS="" +## 3、京东试用 +### 由ZCY01二次修改:脚本默认不运行,由X1a0He修复:依然保持脚本默认不运行。true为运行 +### 使用前请认真看对应注释:https://raw.githubusercontent.com/X1a0He/jd_scripts_fixed/main/jd_try_xh.js +export JD_TRY="true" +export JD_TRY_PRICE="0" +export JD_TRY_TABID="1@2@3@4@5@6@7@8@9@10" +export JD_TRY_TITLEFILTERS="保护套@擦杯布@打底裤@档案袋@电商@吊带@俄语@儿童@辅导@妇女@肛门@钢化膜@钢圈@宫颈@狗@和田玉@黑丝@狐臭@互动课@脚气@教程@解酒@戒烟@卷尺@课@老太太@流量卡@六级@美少女@糜烂@棉签@女纯棉@女孩@女内裤@女内衣@女性内裤@女性内衣@培训@培训@屏风底座@驱蚊@祛痘@软件@三角裤@少女@少女内衣@生殖器@手机壳@手机膜@刷头@私处@四级@四六级@童装@娃娃@玩具@网课@网络课程@网校@卫生巾@卫生条@文胸@小靓美@卸妆@胸罩@癣@洋娃娃@衣架@益智@阴道@阴道炎@英语@英语@婴儿@幼儿@鱼@孕妇@在线@在线网络@纸尿裤@中年@种子" +export JD_TRY_TRIALPRICE="0" +export JD_TRY_MINSUPPLYNUM="1" +export JD_TRY_APPLYNUMFILTER="10000" +export JD_TRY_APPLYINTERVAL="5000" +export JD_TRY_MAXLENGTH="100" +export JD_TRY_PASSZC="true" +export JD_TRY_PLOG="true" +export JD_TRY_WHITELIST="false" +export JD_TRY_WHITELISTKEYWORDS="" +## 4、批量取关店铺和商品 +### 是否执行取消关注,默认true +### 使用前请认真看对应注释:https://raw.githubusercontent.com/X1a0He/jd_scripts_fixed/main/jd_unsubscribe_xh.js +export JD_UNSUB="true" +export JD_UNSEB_NOTIFY="false" +export JD_UNSUB_GPAGESIZE="20" +export JD_UNSUB_SPAGESIZE="20" +export JD_UNSUB_GKEYWORDS="" +export JD_UNSUB_SKEYWORDS="" +export JD_UNSUB_INTERVAL="3000" +export JD_UNSUB_PLOG="true" + +# jiulan 环境变量 +export JOYPARK_JOY_START="120" # 只做前几个CK +export JOY_COIN_MAXIMIZE="1" # 最大化硬币收益,如果合成后全部挖土后还有空位,则开启此模式(默认关闭) 0关闭 1开启 + +# ddo +export JD_CITY_HELPPOOL="true" + +# Aaron-lv +## 1、京东金融签到 +### 添加京东签到 金融签到body兼容,body抓包获取 不同账号不通用 +### 变量名: JD_BEAN_SIGN_BODY +### 格式: 演示为两个账号,多账号以此类推 +### export JD_BEAN_SIGN_BODY="{\"pin\":\"ck1的pt_pin\",\"body\":\"reqData=xxxx一大串字符\"}&{\"pin\":\"ck2的pt_pin\",\"body\":\"reqData=xxx一大串字符\"}" diff --git a/Scripts/sh/Helpcode2.8/task_before.sh b/Scripts/sh/Helpcode2.8/task_before.sh index 5ef4415..b2b96c4 100644 --- a/Scripts/sh/Helpcode2.8/task_before.sh +++ b/Scripts/sh/Helpcode2.8/task_before.sh @@ -1,183 +1,636 @@ #!/usr/bin/env bash -# Build 20210822-001 +## Build 20211214-002-test name_js=( - jd_fruit - jd_pet - jd_plantBean - jd_dreamFactory - jd_jdfactory - jd_crazy_joy - jd_jdzz - jd_jxnc - jd_bookshop - jd_cash - jd_sgmh - jd_cfd - jd_health - jd_carnivalcity - jd_city - jd_moneyTree_heip - jd_cfdtx + jd_fruit + jd_pet + jd_plantBean + jd_dreamFactory + jd_jdfactory + jd_crazy_joy + jd_jdzz + jd_jxnc + jd_bookshop + jd_cash + jd_sgmh + jd_cfd + jd_health + jd_carnivalcity + jd_city + jd_moneyTree + jd_cfdtx ) name_config=( - Fruit - Pet - Bean - DreamFactory - JdFactory - Joy - Jdzz - Jxnc - BookShop - Cash - Sgmh - Cfd - Health - Carni - City - MoneyTree - TokenJxnc + Fruit + Pet + Bean + DreamFactory + JdFactory + Joy + Jdzz + Jxnc + BookShop + Cash + Sgmh + Cfd + Health + Carni + City + MoneyTree + TokenJxnc +) +name_chinese=( + 东东农场 + 东东萌宠 + 京东种豆得豆 + 京喜工厂 + 东东工厂 + crazyJoy任务 + 京东赚赚 + 京喜农场 + 口袋书店 + 签到领现金 + 闪购盲盒 + 京喜财富岛 + 东东健康社区 + 京东手机狂欢城 + 城城领现金 + 摇钱树 + 京喜token ) env_name=( - FRUITSHARECODES ## 1、东东农场互助码 - PETSHARECODES ## 2、东东萌宠互助码 - PLANT_BEAN_SHARECODES ## 3、种豆得豆互助码 - DREAM_FACTORY_SHARE_CODES ## 4、京喜工厂互助码 - DDFACTORY_SHARECODES ## 5、东东工厂互助码 - JDJOY_SHARECODES ## 6、疯狂的JOY互助码 - JDZZ_SHARECODES ## 7、京东赚赚互助码 - JXNC_SHARECODES ## 8、京喜农场助力码 - BOOKSHOP_SHARECODES ## 9、口袋书店互助码 - JD_CASH_SHARECODES ## 10、签到领现金互助码 - JDSGMH_SHARECODES ## 11、闪购盲盒互助码 - JDCFD_SHARECODES ## 12、京喜财富岛互助码 - JDHEALTH_SHARECODES ## 13、东东健康社区互助码 - JD818_SHARECODES ## 14、京东手机狂欢城互助码 - CITY_SHARECODES ## 15、城城领现金互助码 - MONEYTREE_SHARECODES ## 16、摇钱树 - JXNCTOKENS ## 17、京喜Token(京喜财富岛提现用) + FRUITSHARECODES ## 1、东东农场互助码 + PETSHARECODES ## 2、东东萌宠互助码 + PLANT_BEAN_SHARECODES ## 3、种豆得豆互助码 + DREAM_FACTORY_SHARE_CODES ## 4、京喜工厂互助码 + DDFACTORY_SHARECODES ## 5、东东工厂互助码 + JDJOY_SHARECODES ## 6、疯狂的JOY互助码 + JDZZ_SHARECODES ## 7、京东赚赚互助码 + JXNC_SHARECODES ## 8、京喜农场助力码 + BOOKSHOP_SHARECODES ## 9、口袋书店互助码 + JD_CASH_SHARECODES ## 10、签到领现金互助码 + JDSGMH_SHARECODES ## 11、闪购盲盒互助码 + JDCFD_SHARECODES ## 12、京喜财富岛互助码 + JDHEALTH_SHARECODES ## 13、东东健康社区互助码 + JD818_SHARECODES ## 14、京东手机狂欢城互助码 + CITY_SHARECODES ## 15、城城领现金互助码 + MONEYTREE_SHARECODES ## 16、摇钱树 + JXNCTOKENS ## 17、京喜Token(京喜财富岛提现用) ) var_name=( - ForOtherFruit ## 1、东东农场互助规则 - ForOtherPet ## 2、东东萌宠互助规则 - ForOtherBean ## 3、种豆得豆互助规则 - ForOtherDreamFactory ## 4、京喜工厂互助规则 - ForOtherJdFactory ## 5、东东工厂互助规则 - ForOtherJoy ## 6、疯狂的JOY互助规则 - ForOtherJdzz ## 7、京东赚赚互助规则 - ForOtherJxnc ## 8、京喜农场助力码 - ForOtherBookShop ## 9、口袋书店互助规则 - ForOtherCash ## 10、签到领现金互助规则 - ForOtherSgmh ## 11、闪购盲盒互助规则 - ForOtherCfd ## 12、京喜财富岛互助规则 - ForOtherHealth ## 13、东东健康社区互助规则 - ForOtherCarni ## 14、京东手机狂欢城互助规则 - ForOtherCity ## 15、城城领现金互助规则 - ForOtherMoneyTree ## 16、摇钱树 - TokenJxnc ## 17、京喜Token(京喜财富岛提现用) + ForOtherFruit ## 1、东东农场互助规则 + ForOtherPet ## 2、东东萌宠互助规则 + ForOtherBean ## 3、种豆得豆互助规则 + ForOtherDreamFactory ## 4、京喜工厂互助规则 + ForOtherJdFactory ## 5、东东工厂互助规则 + ForOtherJoy ## 6、疯狂的JOY互助规则 + ForOtherJdzz ## 7、京东赚赚互助规则 + ForOtherJxnc ## 8、京喜农场助力码 + ForOtherBookShop ## 9、口袋书店互助规则 + ForOtherCash ## 10、签到领现金互助规则 + ForOtherSgmh ## 11、闪购盲盒互助规则 + ForOtherCfd ## 12、京喜财富岛互助规则 + ForOtherHealth ## 13、东东健康社区互助规则 + ForOtherCarni ## 14、京东手机狂欢城互助规则 + ForOtherCity ## 15、城城领现金互助规则 + ForOtherMoneyTree ## 16、摇钱树 + TokenJxnc ## 17、京喜Token(京喜财富岛提现用) ) -## 临时屏蔽某账号运行活动脚本 -TempBlock_JD_COOKIE(){ +local_scr=$1 +repo_dir="" +sub_dir_scripts="$(ls -l $dir_scripts | awk '/^d/ {print $NF}')" +if [[ ! $local_scr =~ "/" ]] || [[ $local_scr == $dir_scripts/[^/]* ]]; then + local_scr_dir="$dir_scripts" +elif [[ $local_scr == */* ]] && [[ ! $local_scr =~ ql ]]; then + repo_dir="$(echo $local_scr | awk -F '/' '{print $(NF-1)}')" + [[ $sub_dir_scripts[@] =~ $repo_dir ]] && local_scr_dir="$dir_scripts/$repo_dir" +else + local_scr_dir="" +fi + +## 生成pt_pin清单 +gen_pt_pin_array() { source $file_env - local TempBlockCookieInterval="$(echo $TempBlockCookie | perl -pe "{s|~|-|; s|_|-|}" | sed 's/\(\d\+\)-\(\d\+\)/{\1..\2}/g')" - local TempBlockCookieArray=($(eval echo $TempBlockCookieInterval)) - local envs=$(eval echo "\$JD_COOKIE") - local array=($(echo $envs | sed 's/&/ /g')) - local user_sum=${#array[*]} - local m n t - for ((m = 1; m <= $user_sum; m++)); do - n=$((m - 1)) - for ((t = 0; t < ${#TempBlockCookieArray[*]}; t++)); do - [[ "${TempBlockCookieArray[t]}" = "$m" ]] && unset array[n] + ori_jdCookie=$JD_COOKIE + ori_envs=$(eval echo "\$ori_jdCookie") + ori_array=($(echo $ori_envs | sed 's/&/ /g')) + local i j ori_pt_pin_temp + for i in "${!ori_array[@]}"; do + j=$((i + 1)) + ori_pt_pin_temp=$(echo ${ori_array[i]} | perl -pe "{s|.*pt_pin=([^; ]+)(?=;?).*|\1|; s|%|\\\x|g}") + ori_remark_name[i]="$(cat $dir_db/env.db | grep ${ori_array[i]} | grep remarks | perl -pe "{s|.*remarks\":\"([^\"]+).*|\1|g}" | tail -1)" + [[ ! ${ori_remark_name[i]} ]] && ori_remark_name[i]="未备注" + [[ $ori_pt_pin_temp == *\\x* ]] && ori_pt_pin[i]=$(printf $ori_pt_pin_temp) || ori_pt_pin[i]=$ori_pt_pin_temp + ori_sn=$j + ori_uesr_info[i]="序号 $j. 用户名:${ori_pt_pin[i]} 备注:${ori_remark_name[i]}" + done +} + +export_uesr_info() { + for i in $@; do + for j in "${!ori_array[@]}"; do + [[ ${ori_array[j]} == *$i* ]] && echo ${ori_uesr_info[j]} done done - jdCookie=$(echo ${array[*]} | sed 's/\ /\&/g') - [[ ! -z $jdCookie ]] && export JD_COOKIE="$jdCookie" - temp_user_sum=${#array[*]} } -## 随机账号运行活动 -Random_JD_COOKIE(){ - [[ -z $JD_COOKIE ]] && source $file_env - local envs=$(eval echo "\$JD_COOKIE") - local array=($(echo $envs | sed 's/&/ /g')) - local user_sum=${#array[*]} - local combined_all - if [[ $RandomMode = "1" ]]; then - [[ ! $ran_num ]] && ran_num=$user_sum - if [ $(echo $ran_num|grep '[0-9]') ]; then - [[ $ran_num -gt $user_sum || $ran_num -lt 2 ]] && ran_num=$user_sum - ran_sub="$(seq $user_sum | sort -R | head -$ran_num)" - for i in $ran_sub; do - tmp="${array[i]}" - combined_all="$combined_all&$tmp" - done - jdCookie=$(echo $combined_all | sed 's/^&//g') - [[ ! -z $jdCookie ]] && export JD_COOKIE="$jdCookie" - fi +# Cookie 有效性检查 +check_jd_ck() { + local test_jd_cookie="$(curl -s --connect-timeout 5 --retry 3 --noproxy "*" "https://bean.m.jd.com/bean/signIndex.action" -H "cookie: $1")" + [[ "$test_jd_cookie" ]] && return 0 || return 1 +} + +# 移除失效的 Cookie +remove_void_ck() { + gen_pt_pin_array + local tmp_jdCookie i j void_ck_num + if [[ $jdCookie_1 ]]; then + tmp_jdCookie=$jdCookie_1 + else + source $file_env + tmp_jdCookie=$JD_COOKIE fi -} - -## 组队任务 -combine_team(){ - p=$1 - q=$2 - export jd_zdjr_activityId=$3 - export jd_zdjr_activityUrl=$4 -} - -team_task(){ - [[ -z $JD_COOKIE ]] && source $file_env - local envs=$(eval echo "\$JD_COOKIE") + local envs=$(eval echo "\$tmp_jdCookie") local array=($(echo $envs | sed 's/&/ /g')) local user_sum=${#array[*]} - local i j k x y p q - local scr=$scr_name - local teamer_array=($teamer_num) - local team_array=($team_num) - if [[ -f /ql/scripts/$scr ]]; then - for ((i=0; i<${#teamer_array[*]}; i++)); do - combine_team ${teamer_array[i]} ${team_array[i]} ${activityId[i]} ${activityUrl[i]} - [[ $q -ge $(($user_sum/p)) ]] && q=$(($user_sum/p)) - for ((m = 0; m < $user_sum; m++)); do - j=$((m + 1)) - x=$((m/q)) - y=$(((p - 1)*m + 1)) - COOKIES_HEAD="${array[x]}" - COOKIES="" - if [[ $j -le $q ]]; then - for ((n = 1; n < $p; n++)); do - COOKIES="$COOKIES&${array[y]}" - let y++ - done - elif [[ $j -eq $((q + 1)) ]]; then - for ((n = 1; n < $((p-1)); n++)); do - COOKIES_HEAD="${array[x]}&${array[0]}" - COOKIES="$COOKIES&${array[y]}" - let y++ - done - elif [[ $j -gt $((q + 1)) ]]; then - [[ $((y+1)) -le $user_sum ]] && y=$(((p - 1)*m)) || break - for ((n = $m; n < $((m + p -1)); n++)); do - COOKIES="$COOKIES&${array[y]}" - let y++ - [[ $y = $x ]] && y=$((y+1)) - [[ $((y+1)) -gt $user_sum ]] && break - done - fi - result=$(echo -e "$COOKIES_HEAD$COOKIES") - if [[ $result ]]; then - export JD_COOKIE=$result - node /ql/scripts/$scr - fi -# echo $JD_COOKIE + local test_connect="$(curl -I -s --connect-timeout 5 --retry 3 --noproxy "*" https://bean.m.jd.com/bean/signIndex.action -w %{http_code} | tail -n1)" + echo -e "# 开始检测 Cookie 的有效性,可能花费一定时间,请耐心等待 ..." + if [ "$test_connect" -eq "302" ]; then + echo -e "# 本次一共导入 $user_sum 个 Cookie ,其中:" + for ((i = 0; i < $user_sum; i++)); do + j=$((i + 1)) + check_jd_ck ${array[i]} + [[ $? = 0 ]] && echo -e "# $(export_uesr_info ${array[i]}) 状态正常" + [[ $? = 1 ]] && echo -e "# $(export_uesr_info ${array[i]}) 已失效" && unset array[i] + done + jdCookie_2=$(echo ${array[*]} | sed 's/\ /\&/g') + [[ $jdCookie_2 ]] && export JD_COOKIE="$jdCookie_2" + void_ck_num=$((user_sum - ${#array[*]})) + [[ $void_ck_num = 0 ]] && echo -e "# 未检测到失效 Cookie 。" || echo -e "# 已剔除以上 $void_ck_num 个失效的 Cookie 。" + else + echo -e "# API 连接失败,跳过检测。" + fi + echo -e "" +} + +## 临时禁止账号运行活动脚本 +TempBlock_CK() { + ## 按 Cookie 序号禁止账号 + TempBlock_JD_COOKIE() { + ## 导入基础 JD_COOKIE 变量 + source $file_env + local tmp_jdCookie=$JD_COOKIE + local envs=$(eval echo "\$tmp_jdCookie") + local array=($(echo $envs | sed 's/&/ /g')) + local user_sum=${#array[*]} + local TempBlockCookie="$(eval echo $(echo $TempBlockCookie | perl -pe "{s|~\|-|_|g; s|\W+\|[A-Za-z]+| |g; s|(\d+)_(\d+)|{\1..\2}|g;}"))" + local TempBlockPin="$(echo $TempBlockPin | perl -pe "{s|,| |g;}")" + local TempBlockCookieArray=($TempBlockCookie) + local TempBlockPinArray=($TempBlockPin) + local i j k m jdCookie_3 + for ((i = 1; i <= $user_sum; i++)); do + j=$((i - 1)) + for ((k = 0; k < ${#TempBlockCookieArray[*]}; k++)); do + [[ "${TempBlockCookieArray[k]}" = "$i" ]] && unset array[j] + done + pt_pin_temp=$(echo ${array[j]} | perl -pe "{s|.*pt_pin=([^; ]+)(?=;?).*|\1|; s|%|\\\x|g}") + [[ $pt_pin_temp == *\\x* ]] && pt_pin[j]=$(printf $pt_pin_temp) || pt_pin[j]=$pt_pin_temp + for ((m = 0; m < ${#TempBlockPinArray[*]}; m++)); do + pt_pin_temp_block=$(echo ${TempBlockPinArray[m]} | perl -pe "{s|%|\\\x|g}") + [[ $pt_pin_temp_block == *\\x* ]] && pt_pin_block[m]=$(printf $pt_pin_temp_block) || pt_pin_block[m]=$pt_pin_temp_block + [[ "${pt_pin[j]}" =~ "${pt_pin_block[m]}" ]] && unset array[j] done done - exit + jdCookie_1=$(echo ${array[*]} | sed 's/\ /\&/g') + [[ $jdCookie_1 ]] && export JD_COOKIE="$jdCookie_1" + user_sum_1=${#array[*]} + } + + local i j k + if [[ -n "$(echo $tempblock_ck_envs_num | sed -n "/^[0-9]\+$/p")" ]]; then + for ((k = 1; k <= $tempblock_ck_envs_num; k++)); do + if [ tempblock_ck_envs$k ]; then + local tempblock_ck_array=($(eval echo "\$tempblock_ck_envs$k" | perl -pe "{s|&| |g}")) + for i in "${tempblock_ck_array[@]}"; do + local tmp_task_array=($(echo $i | perl -pe "{s|@| |g}")) + local tmp_script_array=($(echo ${tmp_task_array[0]} | perl -pe "{s/\|/ /g}")) + for j in ${tmp_script_array[@]}; do + if [[ $local_scr == *$j* ]]; then + [[ $(echo ${tmp_task_array[1]} | perl -pe "{s|\D||g;}") ]] && TempBlockCookie=${tmp_task_array[1]} || TempBlockCookie="" + TempBlockPin=${tmp_task_array[2]} + break + fi + done + done + fi + done fi + if [[ $TempBlockCookie ]] || [[ $TempBlockPin ]]; then + TempBlock_JD_COOKIE + else + export JD_COOKIE="$tmp_jdCookie" + fi +} + +## 重组 CK +Recombin_CK() { + ## 导入基础 JD_COOKIE 变量 + if [[ $jdCookie_2 ]]; then + tmp_jdCookie=$jdCookie_2 + elif [[ $jdCookie_1 ]]; then + tmp_jdCookie=$jdCookie_1 + else + source $file_env + tmp_jdCookie=$JD_COOKIE + fi + + ## JD_COOKIE 基本分析 + local envs=$(eval echo "\$tmp_jdCookie") + array=($(echo $envs | sed 's/&/ /g')) + user_sum=${#array[*]} + local jdCookie_4 i j k m n + if [[ -n "$(echo $recombin_ck_envs_num | sed -n "/^[0-9]\+$/p")" ]]; then + for ((k = 1; k <= $recombin_ck_envs_num; k++)); do + if [ recombin_ck_envs$k ]; then + local recombin_ck_array=($(eval echo "\$recombin_ck_envs$k" | perl -pe "{s|&| |g}")) + for i in "${recombin_ck_array[@]}"; do + local tmp_task_array=($(echo $i | perl -pe "{s|@| |g}")) + local tmp_script_array=($(echo ${tmp_task_array[0]} | perl -pe "{s/\|/ /g}")) + #[[ $DEBUG_MODE = 1 ]] && echo ${tmp_script_array[@]} + for j in "${tmp_script_array[@]}"; do + if [[ $local_scr == *$j* ]]; then + [[ $DEBUG_MODE = 1 ]] && echo -n "${tmp_script_array[@]}" && echo -e "\n" + Recombin_CK_Mode="${tmp_task_array[1]}" + for ((m = 1; m <= 5; m++)); do + n=$((m + 1)) + eval Recombin_CK_ARG$m="${tmp_task_array[n]}" + [[ $DEBUG_MODE = 1 ]] && eval echo "Recombin_CK_ARG$m : \$Recombin_CK_ARG$m" + done + local temp_status=1 + [[ $Recombin_CK_Mode = 4 || $Recombin_CK_Mode = 5 ]] && Recombin_CK_cal && break 4 || Recombin_CK_cal + fi + done + done + fi + done + fi + + [[ ! $temp_status ]] && Recombin_CK_cal +} + +## 重组 CK 计算 +Recombin_CK_cal() { + ## 随机模式算法 + combine_random() { + local combined_all ran_sub tmp i + echo "# 正在应用 随机Cookie 模式..." + [[ -n "$(echo $1 | sed -n "/^[0-9]\+$/p")" && $1 -le $user_sum ]] && ran_num=$1 || ran_num=$user_sum + echo -e "# 当前总共 $user_sum 个有效账号,本次随机抽取 $ran_num 个账号按随机顺序参加活动。" + ran_sub="$(seq $user_sum | sort -R | head -$ran_num)" + for i in $ran_sub; do + j=$((i - 1)) + tmp="${array[j]}" + combined_all="$combined_all&$tmp" + done + jdCookie_4=$(echo $combined_all | sed 's/^&//g') + [[ $jdCookie_4 ]] && export JD_COOKIE="$jdCookie_4" + #[[ $DEBUG_MODE = 1 ]] && echo $jdCookie_4 + } + + ## 优先模式算法 + combine_priority() { + local combined_all ran_sub jdCookie_priority jdCookie_random m n + if [ $1 ]; then + # 固定区账号数量 + [[ -n "$(echo $1 | sed -n "/^[0-9]\+$/p")" ]] && fixed_num=$1 || fixed_num="0" + if [[ $fixed_num -ge $user_sum ]]; then + echo "# 固定账号数量不得大于或等于有效账号总量,切换回正常 Cookie 模式..." + export JD_COOKIE="$tmp_jdCookie" + elif [[ $fixed_num -eq 0 ]]; then + echo "# 未设定固定账号数量,切换回正常 Cookie 模式..." + export JD_COOKIE="$tmp_jdCookie" + else + echo "# 正在应用 优先Cookie 模式..." + echo -e "# 当前总共 $user_sum 个有效账号,其中前 $fixed_num 个账号为固定顺序。\n# 本次从第 $((fixed_num + 1)) 个账号开始按随机顺序参加活动。" + ran_sub=$(seq $fixed_num $user_sum | sort -R) + for ((m = 0; m < $fixed_num; m++)); do + tmp="${array[m]}" + jdCookie_priority="$jdCookie_priority&$tmp" + done + for n in $ran_sub; do + tmp="${array[n]}" + jdCookie_random="$jdCookie_random&$tmp" + done + combined_all="$jdCookie_priority$jdCookie_random" + jdCookie_4=$(echo $combined_all | perl -pe "{s|^&||; s|&&|&|; s|&$||}") + [[ $jdCookie_4 ]] && export JD_COOKIE="$jdCookie_4" + #[[ $DEBUG_MODE = 1 ]] && echo $jdCookie_4 + fi + else + echo "# 由于参数缺失,切换回正常 Cookie 模式..." + export JD_COOKIE="$tmp_jdCookie" + fi + } + + ## 轮换模式算法 + combine_rotation() { + # 当月总天数 + local total_days=$(cal | grep ^[0-9] | tail -1 | awk -F " " '{print $NF}') + # 今天几号 + local today_day=$(date +%-d) + local combined_all rot_num rot_start_num jdCookie_priority jdCookie_rot_head jdCookie_rot_mid tmp_1 tmp_2 tmp_3 a b c + # 固定区账号数量 + [[ -n "$(echo $1 | sed -n "/^[0-9]\+$/p")" ]] && fixed_num=$1 || fixed_num="0" + if [[ $fixed_num -ge $user_sum ]]; then + echo "# 固定账号数量不得大于或等于有效账号总量,切换回正常 Cookie 模式..." + export JD_COOKIE="$tmp_jdCookie" + elif [[ $today_day -gt 1 ]]; then + echo "# 正在应用 轮换Cookie 模式..." + local rot_total_num=$((user_sum - $fixed_num)) + if [[ $rot_total_num -gt 2 ]]; then + # 轮换区的账号数量 + rot_num=$2 + [[ -z "$(echo $rot_num | sed -n "/^[0-9]\+$/p")" || ! $rot_num || $rot_num -lt 1 || $rot_total_num -lt $rot_num ]] && rot_num=$(((rot_total_num + total_days - 1) / total_days)) && [[ $rot_num -lt 1 ]] && rot_num="1" + rot_start_num=$((fixed_num + rot_num * ((today_day - 1)))) + while [[ $user_sum -lt $((rot_start_num + 1)) ]]; do rot_start_num=$((rot_start_num - rot_total_num)); done + echo -n "# 当前总共 $user_sum 个有效账号" + [[ $fixed_num -gt 0 ]] && echo -e ",其中前 $fixed_num 个账号为固定顺序。" || echo -e ",所有账号参与轮换。" + echo -e "# 今天从第 $((rot_start_num + 1)) 个账号开始轮换,轮换频次为:$rot_num 个账号/天。" + for ((a = 0; a < fixed_num; a++)); do + tmp_1="${array[a]}" + jdCookie_priority="$jdCookie_priority&$tmp_1" + done + for ((b = $rot_start_num; b < $user_sum; b++)); do + tmp_2="${array[b]}" + jdCookie_rot_head="$jdCookie_rot_head&$tmp_2" + done + for ((c = $fixed_num; c < $((rot_start_num)); c++)); do + tmp_3="${array[c]}" + jdCookie_rot_mid="$jdCookie_rot_mid&$tmp_3" + done + combined_all="$jdCookie_priority$jdCookie_rot_head$jdCookie_rot_mid" + jdCookie_4=$(echo $combined_all | perl -pe "{s|^&||; s|&$||}") + [[ $jdCookie_4 ]] && export JD_COOKIE="$jdCookie_4" + #[[ $DEBUG_MODE = 1 ]] && echo $jdCookie_4 + else + echo "# 由于参加轮换的账号数量不足 2 个,切换回正常 Cookie 模式..." + export JD_COOKIE="$tmp_jdCookie" + fi + elif [[ $today_day -eq 1 ]]; then + echo "# 今天是 1 号,不应用轮换模式,全部 Cookie 按正常顺序参加活动..." + export JD_COOKIE="$tmp_jdCookie" + fi + } + + ## 组队模式算法 + combine_team() { + team_ck() { + local tmp combined_tmp combined_all i j k m n + for ((i = 0; i < $team_num_total; i++)); do + #当前队伍是第几组 + j=$((i + 1)) + #发起组队的账号在Cookie数组中的序号 + k=$((i / team_num)) + tmp="" + combined_tmp="" + combined_all="" + if [ $i -ne $team_num ]; then + for ((m = 1; m < $teamer_num; m++)); do + #当前组队的第二账号所在Cookie数组的序号 + n=$(((teamer_num - 1) * i + m)) && [[ $n -ge $user_sum ]] && continue + tmp="${array[n]}" + combined_tmp="$combined_tmp&$tmp" + done + combined_all="${array[k]}$combined_tmp" + elif [ $i -eq $team_num ]; then + for ((m = 1; m < $((teamer_num - 1)); m++)); do + #第二账号发起的第一支组队,该队伍中的第三账号所在Cookie数组的序号 + n=$(((teamer_num - 1) * i + m)) && [[ $n -ge $user_sum ]] && continue + tmp="${array[n]}" + combined_tmp="$combined_tmp&$tmp" + done + combined_all="${array[k]}&${array[0]}$combined_tmp" + fi + jdCookie_4=$combined_all + if [[ $jdCookie_4 ]]; then + export JD_COOKIE="$jdCookie_4" + #[[ $DEBUG_MODE = 1 ]] && echo $jdCookie_4 + if [[ $local_scr == *.js ]]; then + echo -e "\n# 本次提交的是第 $j 组账号。" + if [ $temp_status = 3 ]; then + node /ql/scripts/$local_scr + [[ $interval_time != "0" ]] && echo -e "# 等待 $interval_time 秒后开始进行下一组队任务 ..." + sleep $interval_time + else + node /ql/scripts/$local_scr & + sleep $delay_time + fi + fi + fi + done + exit + } + + run_js_in_team() { + if [[ $teamer_num -ge $user_sum ]]; then + echo "# 每组队伍的成员数量不得大于或等于有效账号总数量,切换回正常 Cookie 模式..." + export JD_COOKIE="$tmp_jdCookie" + elif [[ $((teamer_num * team_num)) -ge $user_sum ]]; then + echo "# 参与组队的总成员数量不得大于或等于有效账号总数量,切换回正常 Cookie 模式..." + export JD_COOKIE="$tmp_jdCookie" + else + echo "# 正在应用 组队Cookie 模式..." + #总组队数量 + team_num_total=$(((user_sum + teamer_num - 2) / (teamer_num - 1))) + #前几个账号发起组队 + team_num_launch=$(((team_num_total + team_num - 1) / team_num)) + [[ $team_num -ge $team_num_total ]] && team_num=$team_num_total && [[ $team_num -lt 1 ]] && team_num=1 + echo -n "# 当前总共 $user_sum 个有效账号,其中前 $team_num_launch 个账号发起组队,每个账号最多可以发起 $team_num 次组队,一共组 $team_num_total 队,每支队伍最多包含 $teamer_num 个账号。" + if [[ -n "$(echo $1 | perl -pe "{s|\.\|s\|m\|h\|d||g}" | sed -n "/^[0-9]\+$/p")" ]]; then + temp_status="1" + local delay_time="$(echo $1 | perl -pe "{s|([a-z])(\d)+|\1 \2|g;}")" + echo -e "各支队伍启动脚本的延隔时间为$(format_time $1)。" + elif [[ $1 = 0 ]]; then + temp_status="2" + local delay_time="0" + echo -e "所有队伍并发启动脚本,可能会占用较高的系统资源导致卡顿。" + elif [[ $1 = "-" ]] && [[ -n "$(echo $2 | perl -pe "{s|\.\|s\|m\|h\|d||g}" | sed -n "/^[0-9]\+$/p")" ]]; then + temp_status="3" + local interval_time="$(echo $2 | perl -pe "{s|([a-z])(\d)|\1 \2|g;}")" + echo -e "各支队伍启动脚本的间隔时间为$(format_time $2)。" + else + temp_status="3" + delay_time="0" + interval_time="0" + echo -e "" + fi + team_ck + fi + } + local p q + if [[ $1 ]] && [[ $2 ]]; then + if [[ $1 = "-" ]] && [[ $2 = "-" ]] && [[ -n "$(echo $5 | sed -n "/^[0-9]\+$/p")" ]]; then + if [[ $5 = 0 ]]; then + for p in ${activity_env[@]}; do + activity_array=($(echo $p | perl -pe "{s|@| |g}")) + teamer_num=${activity_array[0]} + team_num=${activity_array[1]} + export jd_zdjr_activityId=${activity_array[2]} + export jd_zdjr_activityUrl=${activity_array[3]} + echo -e "活动 ID (activityId) : $jd_zdjr_activityId" + echo -e "活动链接(activityUrl): $jd_zdjr_activityUrl" + run_js_in_team $3 $4 + done + elif [[ $5 -gt 0 ]]; then + q=$(($5 - 1)) + activity_array=($(echo ${activity_env[q]} | perl -pe "{s|@| |g}")) + teamer_num=${activity_array[0]} + team_num=${activity_array[1]} + export jd_zdjr_activityId=${activity_array[2]} + export jd_zdjr_activityUrl=${activity_array[3]} + echo -e "活动 ID (activityId) : $jd_zdjr_activityId" + echo -e "活动链接(activityUrl): $jd_zdjr_activityUrl" + run_js_in_team $3 $4 + fi + elif [[ -n "$(echo $1 | sed -n "/^[0-9]\+$/p")" ]] && [[ -n "$(echo $2 | sed -n "/^[0-9]\+$/p")" ]]; then + # 每组队伍的成员数量 + teamer_num=$1 + # 单个账号最多发起的组队数量 + team_num=$2 + else + # 每组队伍的成员数量 + teamer_num=$user_sum + # 单个账号最多发起的组队数量 + team_num=1 + fi + run_js_in_team $3 $4 + else + echo "# 由于参数缺失,切换回 正常 Cookie 模式..." + export JD_COOKIE="$tmp_jdCookie" + fi + } + + ## 分段模式算法 + combine_segmentation() { + local delay_time="$3" + local interval_time="$4" + local jdCookie_priority jdCookie_team_part i j k m n + if [[ $1 ]] && [[ $2 ]]; then + # 固定区账号数量 + [[ -n "$(echo $1 | sed -n "/^[0-9]\+$/p")" ]] && fixed_num=$1 || fixed_num="0" + # 每段账号总数量 + [[ -n "$(echo $2 | sed -n "/^[0-9]\+$/p")" ]] && teamer_total_num=$2 || teamer_total_num=$user_sum + if [[ $fixed_num -ge $teamer_total_num ]]; then + echo "# 固定账号数量不得大于或等于每段账号总数量,切换回正常 Cookie 模式..." + export JD_COOKIE="$tmp_jdCookie" + elif [[ $teamer_total_num -ge $user_sum ]]; then + echo "# 分段账号数量不得大于或等于有效账号总数量,切换回正常 Cookie 模式..." + export JD_COOKIE="$tmp_jdCookie" + elif [[ $fixed_num -lt $teamer_total_num ]]; then + echo "# 正在应用 分段Cookie 模式..." + local teamer_num="$((teamer_total_num - fixed_num))" + local team_total_num=$(((user_sum - fixed_num + teamer_num - 1) / teamer_num)) && [[ $team_total_num -lt 1 ]] && team_total_num=1 + echo -n "# 当前总共 $user_sum 个有效账号" + [[ $fixed_num -ne 0 ]] && echo -n ",其中前 $fixed_num 个账号为固定顺序" + echo -n "。每 $teamer_total_num 个账号分一段,一共分 $team_total_num 段。" + if [[ -n "$(echo $3 | perl -pe "{s|\.\|s\|m\|h\|d||g}" | sed -n "/^[0-9]\+$/p")" ]]; then + temp_status="1" + local delay_time="$(echo $3 | perl -pe "{s|([a-z])(\d)+|\1 \2|g;}")" + echo -e "各分段启动脚本的延隔时间为$(format_time $3)。" + echo -e "# 注意:如果每段的运行时间较长且延隔时间设定较短,运行日志可能会显示混乱,此为正常现象。" + elif [[ $3 = 0 ]]; then + temp_status="2" + local delay_time="0" + echo -e "所有分段并发启动脚本,可能会占用较高的系统资源导致卡顿。" + echo -e "# 注意:运行日志会显示混乱,此为正常现象。" + elif [[ $3 = "-" ]] && [[ -n "$(echo $4 | perl -pe "{s|\.\|s\|m\|h\|d||g}" | sed -n "/^[0-9]\+$/p")" ]]; then + temp_status="3" + local interval_time="$(echo $4 | perl -pe "{s|([a-z])(\d)|\1 \2|g;}")" + echo -e "" + else + temp_status="3" + delay_time="0" + interval_time="0" + echo -e "" + fi + for ((m = 0; m < $fixed_num; m++)); do + tmp="${array[m]}" + jdCookie_priority="$jdCookie_priority&$tmp" + done + for ((i = 0; i < $team_total_num; i++)); do + j=$((i + 1)) + m=$((teamer_num * i + fixed_num)) + n=$((teamer_num * j + fixed_num)) + t=$n && [[ $user_sum -lt $t ]] && t=$user_sum + jdCookie_team_part="" + for ((k = m; k < $n; k++)); do + tmp="${array[k]}" + jdCookie_team_part="$jdCookie_team_part&$tmp" + done + jdCookie_4=$(echo $jdCookie_priority$jdCookie_team_part | perl -pe "{s|^&+\|&+$||g}") + if [[ $jdCookie_4 ]]; then + export JD_COOKIE="$jdCookie_4" + #[[ $DEBUG_MODE = 1 ]] && echo $jdCookie_4 + if [[ $local_scr == *.js ]]; then + [[ $fixed_num -ne 0 ]] && echo -e "\n# 本次提交的是前 $fixed_num 位账号及第 $((m + 1)) - $n 位账号。" || echo -e "\n# 本次提交的是第 $((m + 1)) - $n 位账号。" + if [ $temp_status = 3 ]; then + node /ql/scripts/$local_scr + [[ $interval_time != "0" ]] && echo -e "# 等待$(format_time $interval_time)后开始进行下一段任务 ..." + sleep $interval_time + else + node /ql/scripts/$local_scr & + sleep $delay_time + fi + fi + fi + done + exit + fi + else + echo "# 由于参数缺失,切换回正常 Cookie 模式..." + export JD_COOKIE="$tmp_jdCookie" + fi + } + + # 格式化时间 + format_time() { + for i in $@; do + if [[ -n "$(echo $i | perl -pe "{s|\.||g}" | sed -n "/^[0-9]\+$/p")" ]]; then + time_text=" $i 秒" + elif [[ -n "$(echo $i | perl -pe "{s|\.\|s\|m\|h\|d||g}" | sed -n "/^[0-9]\+$/p")" ]]; then + time_text="$(echo $i | perl -pe "{s|([a-z])(\d)+|\1 \2|g; s|s| 秒|g; s|m| 分|g; s|h| 小时|g; s|d| 天|g; s|^| |g; s|(\d+)$|\1 秒|g;}")" + fi + echo -n "$time_text" + done + } + + # Cookie 环境变量迭代导入 + [[ $jdCookie_4 ]] && array=($(echo $jdCookie_4 | sed 's/&/ /g')) && user_sum=${#array[*]} + ## 移除无效 Cookie + [[ $Recombin_CK_Mode ]] && [[ $Remove_Void_CK = 1 ]] && remove_void_ck + + case $Recombin_CK_Mode in + 1) + combine_random $Recombin_CK_ARG1 + ;; + 2) + combine_priority $Recombin_CK_ARG1 + ;; + 3) + combine_rotation $Recombin_CK_ARG1 $Recombin_CK_ARG2 + ;; + 4) + combine_team $Recombin_CK_ARG1 $Recombin_CK_ARG2 $Recombin_CK_ARG3 $Recombin_CK_ARG4 $Recombin_CK_ARG5 + ;; + 5) + combine_segmentation $Recombin_CK_ARG1 $Recombin_CK_ARG2 $Recombin_CK_ARG3 $Recombin_CK_ARG4 + ;; + *) + export JD_COOKIE="$tmp_jdCookie" + ;; + esac } ## 组合互助码格式化为全局变量的函数 @@ -192,7 +645,7 @@ combine_sub() { local array=($(echo $envs | sed 's/&/ /g')) local user_sum=${#array[*]} local a b i j t sum combined_all - for ((i=1; i <= $user_sum; i++)); do + for ((i = 1; i <= $user_sum; i++)); do local tmp1=$what_combine$i local tmp2=${!tmp1} [[ ${tmp2} ]] && sum=$i || break @@ -226,34 +679,48 @@ combine_all() { ## 正常依次运行时,组合互助码格式化为全局变量 combine_only() { for ((i = 0; i < ${#env_name[*]}; i++)); do - case $first_param in - *${name_js[i]}.js | *${name_js[i]}.ts) - if [[ -f $dir_log/.ShareCode/${name_config[i]}.log ]]; then - . $dir_log/.ShareCode/${name_config[i]}.log - result=$(combine_sub ${var_name[i]}) - if [[ $result ]]; then - export ${env_name[i]}=$result - fi + case $local_scr in + *${name_js[i]}*.js | *${name_js[i]}*.ts) + if [[ -f $dir_log/.ShareCode/${name_config[i]}.log ]]; then + . $dir_log/.ShareCode/${name_config[i]}.log + result=$(combine_sub ${var_name[i]}) + if [[ $result ]]; then + export ShareCodeConfigChineseName=${name_chinese[i]} + export ShareCodeConfigName=${name_config[i]} + export ShareCodeEnvName=${env_name[i]} fi - ;; - *) - export ${env_name[i]}="" - ;; + fi + ;; + *) + export ${env_name[i]}="" + ;; esac done } -TempBlock_JD_COOKIE && Random_JD_COOKIE +## 提前替换js基础依赖 +JS_Deps_Replace() { + if [ $js_deps_replace_envs ]; then + local js_deps_replace_array=($(echo $js_deps_replace_envs | perl -pe "{s|&| |g}")) + for i in "${js_deps_replace_array[@]}"; do + local tmp_task_array=($(echo $i | perl -pe "{s|@| |g}")) + local tmp_script_array=($(echo ${tmp_task_array[0]} | perl -pe "{s/\|/ /g}")) + local tmp_skip_repo=($(echo ${tmp_task_array[1]} | perl -pe "{s/\|/ /g}")) + for j in "${tmp_script_array[@]}"; do + [[ ! $repo_dir ]] || [[ $repo_dir && ! ${tmp_skip_repo[@]} =~ $repo_dir ]] && [[ -f $dir_config/$j.js && $local_scr_dir ]] && cp -rvf $dir_config/$j.js $local_scr_dir/$j.js + done + done + fi +} -if [ $scr_name ]; then - team_task -else - combine_only -fi +[[ -f $dir_config/jdCookie.js && $local_scr_dir ]] && cp -rvf $dir_config/jdCookie.js $local_scr_dir/jdCookie.js +JS_Deps_Replace +TempBlock_CK +Recombin_CK +combine_only #if [[ $(ls $dir_code) ]]; then # latest_log=$(ls -r $dir_code | head -1) # . $dir_code/$latest_log # combine_all #fi -