This commit is contained in:
shufflewzc 2021-12-16 12:35:28 +08:00
parent cc654a265e
commit c9be0b5495
5 changed files with 1548 additions and 702 deletions

BIN
.DS_Store vendored

Binary file not shown.

BIN
Scripts/sh/.DS_Store vendored

Binary file not shown.

View File

@ -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仓库
repo1='panghu999_jd_scripts' #预设的 panghu999 仓库
repo2='JDHelloWorld_jd_scripts' #预设的 JDHelloWorld 仓库
repo3='he1pu_JDHelp' #预设的 he1pu 仓库
repo4='shufflewzc_faker2' #预设的 shufflewzc 仓库
repo=$repo4 #默认调用 shufflewzc_faker2 仓库脚本日志
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,13 +36,18 @@ 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"
DiyHelpType=""
diy_help_rules() {
case $1 in
Fruit)
@ -77,9 +82,9 @@ BreakHelpNum="4 9-14 15~18 19_21" ## 屏蔽账号序号或序号区间
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=(
@ -138,7 +143,7 @@ name_js=(
"$repo"_jd_health
"$repo"_jd_carnivalcity
"$repo"_jd_city
"$repo4"_jd_moneyTree_heip
"$repo"_jd_moneyTree_he?p
"$repo"_jd_cfd
)
@ -189,6 +194,7 @@ gen_pt_pin_array() {
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
}
@ -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]}"
@ -422,12 +478,13 @@ local i j k
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
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
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
@ -457,6 +514,7 @@ local ShareCode_log="$ShareCode_dir/$config_name.log"
local i j k
#更新配置文件中的互助规则
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
@ -465,7 +523,7 @@ for ((j=1; j<=200; j++)); do
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
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
@ -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,6 +577,8 @@ export_codes_sub_only(){
else
echo "## 从日志中未找到任何互助码"
fi
else
echo "#【$(date +%X)】 未运行过 $chinese_name 的脚本,未产生日志"
fi
}
@ -528,57 +588,53 @@ 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
}
check_jd_cookie() {
[[ "$(curl -s --noproxy "*" "https://bean.m.jd.com/bean/signIndex.action" -H "cookie: $1")" ]] && echo "COOKIE 有效" || echo "COOKIE 已失效"
}
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 失效,将被删除"
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 "COOKIE 有效"
echo "(API 连接失败)"
fi
}
@ -588,11 +644,7 @@ 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
}
@ -602,7 +654,7 @@ 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
[[ -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
@ -614,85 +666,151 @@ if [[ $CLEANBAK = "1" ]]; then
else
diff_time=$(($(date +%s) - $(date +%s -d "$log_date")))
fi
[[ $diff_time -gt $(($CLEANBAK_DAYS * 86400)) ]] && rm -vf $log
[[ $diff_time -gt $(($CLEANBAK_DAYS * 86400)) ]] && rm -rf $log
fi
done
fi
}
install_dependencies_normal(){
#检查 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
}
test() {
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
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/*
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
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
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
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
;;
*)
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_dependencies_all(){
install_dependencies_normal $package_name
uninstall_dependencies() {
for i in $package_name; do
install_dependencies_force $i
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_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
}
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

View File

@ -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/"
@ -101,6 +104,18 @@ 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_token 填写在go-cqhttp文件设置的访问密钥
@ -110,111 +125,143 @@ export GOBOT_URL=""
export GOBOT_TOKEN=""
export GOBOT_QQ=""
## 10. 临时屏蔽某个Cookie
## 如果某些 Cookie 已经失效了但暂时还没法更新可以使用此功能在不删除该Cookie和重新修改Cookie编号的前提下临时屏蔽掉某些编号的Cookie
## 多个Cookie编号以半角的空格分隔两侧一对半角双引号使用此功能后在运行js脚本时账户编号将发生变化
## 举例1TempBlockCookie="2" 临时屏蔽掉 Cookie2
## 举例2TempBlockCookie="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*)
## 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=""
;;
*jd_dreamFactory* | *jd_jdfactory*)
TempBlockCookie=""
;;
*jd_jdzz* | *jd_joy*)
TempBlockCookie=""
;;
*)
TempBlockCookie=""
;;
esac
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
## 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 次组队
)
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
## 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 变量名= 声明即可
@ -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:使用作者远程仓库更新的idFalse使用本地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账号AB账号开团则BC会参加A的团A会参加B的团。账号内互助之后开团账号若有剩下参团次数会尝试加入作者团
### 成团条件成团所需人数根据活动所需人数变化一般为5-7人若5人成团则5个CK能成团一次9个CK能成团两次13个CK能成团三次
export OPEN_DREAMFACTORY_TUAN=""
# JDHelloWorld 环境变量
## 1、宠汪汪二代目
### 默认8010、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" ##显示正常CKtrue为显示
export CHECKCK_CKALWAYSNOTIFY="true" ##通知CK状态true为永远通知
export CHECKCK_CKAUTOENABLE="false" ##自动启用CKfalse为停用
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一大串字符\"}"

View File

@ -1,6 +1,6 @@
#!/usr/bin/env bash
# Build 20210822-001
## Build 20211214-002-test
name_js=(
jd_fruit
@ -18,7 +18,7 @@ name_js=(
jd_health
jd_carnivalcity
jd_city
jd_moneyTree_heip
jd_moneyTree
jd_cfdtx
)
name_config=(
@ -40,6 +40,25 @@ name_config=(
MoneyTree
TokenJxnc
)
name_chinese=(
东东农场
东东萌宠
京东种豆得豆
京喜工厂
东东工厂
crazyJoy任务
京东赚赚
京喜农场
口袋书店
签到领现金
闪购盲盒
京喜财富岛
东东健康社区
京东手机狂欢城
城城领现金
摇钱树
京喜token
)
env_name=(
FRUITSHARECODES ## 1、东东农场互助码
PETSHARECODES ## 2、东东萌宠互助码
@ -79,105 +98,539 @@ var_name=(
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
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")
export_uesr_info() {
for i in $@; do
for j in "${!ori_array[@]}"; do
[[ ${ori_array[j]} == *$i* ]] && echo ${ori_uesr_info[j]}
done
done
}
# 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
local envs=$(eval echo "\$tmp_jdCookie")
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
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
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
tmp="${array[i]}"
j=$((i - 1))
tmp="${array[j]}"
combined_all="$combined_all&$tmp"
done
jdCookie=$(echo $combined_all | sed 's/^&//g')
[[ ! -z $jdCookie ]] && export JD_COOKIE="$jdCookie"
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() {
p=$1
q=$2
export jd_zdjr_activityId=$3
export jd_zdjr_activityUrl=$4
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
}
team_task(){
[[ -z $JD_COOKIE ]] && source $file_env
local envs=$(eval echo "\$JD_COOKIE")
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
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
result=$(echo -e "$COOKIES_HEAD$COOKIES")
if [[ $result ]]; then
export JD_COOKIE=$result
node /ql/scripts/$scr
team_ck
fi
# echo $JD_COOKIE
}
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
}
## 组合互助码格式化为全局变量的函数
@ -226,13 +679,15 @@ combine_all() {
## 正常依次运行时,组合互助码格式化为全局变量
combine_only() {
for ((i = 0; i < ${#env_name[*]}; i++)); do
case $first_param in
*${name_js[i]}.js | *${name_js[i]}.ts)
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 ${env_name[i]}=$result
export ShareCodeConfigChineseName=${name_chinese[i]}
export ShareCodeConfigName=${name_config[i]}
export ShareCodeEnvName=${env_name[i]}
fi
fi
;;
@ -243,17 +698,29 @@ combine_only() {
done
}
TempBlock_JD_COOKIE && Random_JD_COOKIE
if [ $scr_name ]; then
team_task
else
combine_only
## 提前替换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
}
[[ -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