mirror of
https://github.com/whyour/qinglong.git
synced 2025-05-23 06:46:09 +08:00
282 lines
7.8 KiB
Bash
Executable File
282 lines
7.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
|
||
## 路径
|
||
ShellDir=${JD_DIR:-$(cd $(dirname $0); pwd)}
|
||
[[ ${JD_DIR} ]] && HelpJd=jd || HelpJd=jd.sh
|
||
[[ ${JD_DIR} ]] && ShellJd=jd || ShellJd=${ShellDir}/jd.sh
|
||
ScriptsDir=${ShellDir}/scripts
|
||
ConfigDir=${ShellDir}/config
|
||
FileConf=${ConfigDir}/config.sh
|
||
FileConfSample=${ShellDir}/sample/config.sh.sample
|
||
LogDir=${ShellDir}/log
|
||
ListScripts=($(cd ${ScriptsDir}; ls *.js | grep -E "j[drx]_"))
|
||
ListCron=${ConfigDir}/crontab.list
|
||
ListCronLxk=${ScriptsDir}/docker/crontab_list.sh
|
||
ListJs=${LogDir}/js.list
|
||
|
||
## 导入config.sh
|
||
function Import_Conf {
|
||
if [ -f ${FileConf} ]
|
||
then
|
||
. ${FileConf}
|
||
if [ -z "${Cookie1}" ]; then
|
||
echo -e "请先在config.sh中配置好Cookie...\n"
|
||
exit 1
|
||
fi
|
||
else
|
||
echo -e "配置文件 ${FileConf} 不存在,请先按教程配置好该文件...\n"
|
||
exit 1
|
||
fi
|
||
}
|
||
|
||
## 更新crontab
|
||
function Detect_Cron {
|
||
if [[ $(cat ${ListCron}) != $(crontab -l) ]]; then
|
||
crontab ${ListCron}
|
||
fi
|
||
}
|
||
|
||
## 用户数量UserSum
|
||
function Count_UserSum {
|
||
for ((i=1; i<=1000; i++)); do
|
||
Tmp=Cookie$i
|
||
CookieTmp=${!Tmp}
|
||
[[ ${CookieTmp} ]] && UserSum=$i || break
|
||
done
|
||
}
|
||
|
||
## 组合Cookie和互助码子程序
|
||
function Combin_Sub {
|
||
CombinAll=""
|
||
if [[ ${AutoHelpOther} == true ]] && [[ $1 == ForOther* ]]; then
|
||
|
||
ForOtherAll=""
|
||
MyName=$(echo $1 | perl -pe "s|ForOther|My|")
|
||
|
||
for ((m=1; m<=${UserSum}; m++)); do
|
||
TmpA=${MyName}$m
|
||
TmpB=${!TmpA}
|
||
ForOtherAll="${ForOtherAll}@${TmpB}"
|
||
done
|
||
|
||
for ((n=1; n<=${UserSum}; n++)); do
|
||
for num in ${TempBlockCookie}; do
|
||
[[ $n -eq $num ]] && continue 2
|
||
done
|
||
CombinAll="${CombinAll}&${ForOtherAll}"
|
||
done
|
||
|
||
else
|
||
for ((i=1; i<=${UserSum}; i++)); do
|
||
for num in ${TempBlockCookie}; do
|
||
[[ $i -eq $num ]] && continue 2
|
||
done
|
||
Tmp1=$1$i
|
||
Tmp2=${!Tmp1}
|
||
CombinAll="${CombinAll}&${Tmp2}"
|
||
done
|
||
fi
|
||
|
||
echo ${CombinAll} | perl -pe "{s|^&||; s|^@+||; s|&@|&|g; s|@+&|&|g; s|@+|@|g; s|@+$||}"
|
||
}
|
||
|
||
## 组合Cookie、Token与互助码
|
||
function Combin_All {
|
||
export JD_COOKIE=$(Combin_Sub Cookie)
|
||
export FRUITSHARECODES=$(Combin_Sub ForOtherFruit)
|
||
export PETSHARECODES=$(Combin_Sub ForOtherPet)
|
||
export PLANT_BEAN_SHARECODES=$(Combin_Sub ForOtherBean)
|
||
export DREAM_FACTORY_SHARE_CODES=$(Combin_Sub ForOtherDreamFactory)
|
||
export DDFACTORY_SHARECODES=$(Combin_Sub ForOtherJdFactory)
|
||
export JDZZ_SHARECODES=$(Combin_Sub ForOtherJdzz)
|
||
export JDJOY_SHARECODES=$(Combin_Sub ForOtherJoy)
|
||
export JXNC_SHARECODES=$(Combin_Sub ForOtherJxnc)
|
||
export JXNCTOKENS=$(Combin_Sub TokenJxnc)
|
||
export BOOKSHOP_SHARECODES=$(Combin_Sub ForOtherBookShop)
|
||
export JD_CASH_SHARECODES=$(Combin_Sub ForOtherCash)
|
||
export JDSGMH_SHARECODES=$(Combin_Sub ForOtherSgmh)
|
||
export JDCFD_SHARECODES=$(Combin_Sub ForOtherCfd)
|
||
export JDGLOBAL_SHARECODES=$(Combin_Sub ForOtherGlobal)
|
||
}
|
||
|
||
## 转换JD_BEAN_SIGN_STOP_NOTIFY或JD_BEAN_SIGN_NOTIFY_SIMPLE
|
||
function Trans_JD_BEAN_SIGN_NOTIFY {
|
||
case ${NotifyBeanSign} in
|
||
0)
|
||
export JD_BEAN_SIGN_STOP_NOTIFY="true"
|
||
;;
|
||
1)
|
||
export JD_BEAN_SIGN_NOTIFY_SIMPLE="true"
|
||
;;
|
||
esac
|
||
}
|
||
|
||
## 转换UN_SUBSCRIBES
|
||
function Trans_UN_SUBSCRIBES {
|
||
export UN_SUBSCRIBES="${goodPageSize}\n${shopPageSize}\n${jdUnsubscribeStopGoods}\n${jdUnsubscribeStopShop}"
|
||
}
|
||
|
||
## 申明全部变量
|
||
function Set_Env {
|
||
Count_UserSum
|
||
Combin_All
|
||
Trans_JD_BEAN_SIGN_NOTIFY
|
||
Trans_UN_SUBSCRIBES
|
||
}
|
||
|
||
## 随机延迟
|
||
function Random_Delay {
|
||
if [[ -n ${RandomDelay} ]] && [[ ${RandomDelay} -gt 0 ]]; then
|
||
CurMin=$(date "+%-M")
|
||
if [[ ${CurMin} -gt 2 && ${CurMin} -lt 30 ]] || [[ ${CurMin} -gt 31 && ${CurMin} -lt 59 ]]; then
|
||
CurDelay=$((${RANDOM} % ${RandomDelay} + 1))
|
||
echo -e "\n命令未添加 \"now\",随机延迟 ${CurDelay} 秒后再执行任务,如需立即终止,请按 CTRL+C...\n"
|
||
sleep ${CurDelay}
|
||
fi
|
||
fi
|
||
}
|
||
|
||
## 使用说明
|
||
function Help {
|
||
echo -e "本脚本的用法为:"
|
||
echo -e "1. bash ${HelpJd} xxx # 如果设置了随机延迟并且当时时间不在0-2、30-31、59分内,将随机延迟一定秒数"
|
||
echo -e "2. bash ${HelpJd} xxx now # 无论是否设置了随机延迟,均立即运行"
|
||
echo -e "3. bash ${HelpJd} runall # 运行所有非挂机脚本,非常耗时"
|
||
echo -e "4. bash ${HelpJd} hangup # 重启挂机程序"
|
||
echo -e "5. bash ${HelpJd} resetpwd # 重置控制面板用户名和密码"
|
||
echo -e "\n针对用法1、用法2中的\"xxx\",可以不输入后缀\".js\",另外,如果前缀是\"jd_\"的话前缀也可以省略。"
|
||
echo -e "当前有以下脚本可以运行(仅列出以jd_、jr_、jx_开头的脚本):"
|
||
cd ${ScriptsDir}
|
||
for ((i=0; i<${#ListScripts[*]}; i++)); do
|
||
Name=$(grep "new Env" ${ListScripts[i]} | awk -F "'|\"" '{print $2}')
|
||
echo -e "$(($i + 1)).${Name}:${ListScripts[i]}"
|
||
done
|
||
}
|
||
|
||
## nohup
|
||
function Run_Nohup {
|
||
if [[ $(ps -ef | grep "${js}" | grep -v "grep") != "" ]]; then
|
||
ps -ef | grep "${js}" | grep -v "grep" | awk '{print $2}' | xargs kill -9
|
||
fi
|
||
[ ! -d ${LogDir}/${js} ] && mkdir -p ${LogDir}/${js}
|
||
LogTime=$(date "+%Y-%m-%d-%H-%M-%S")
|
||
LogFile="${LogDir}/${js}/${LogTime}.log"
|
||
nohup node ${js}.js > ${LogFile} &
|
||
}
|
||
|
||
## 运行挂机脚本
|
||
function Run_HangUp {
|
||
HangUpJs="jd_crazy_joy_coin"
|
||
cd ${ScriptsDir}
|
||
for js in ${HangUpJs}; do
|
||
Import_Conf ${js} && Set_Env
|
||
if type pm2 >/dev/null 2>&1; then
|
||
pm2 stop ${js}.js 2>/dev/null
|
||
pm2 flush
|
||
pm2 start -a ${js}.js --watch "${ScriptsDir}/${js}.js" --name="${js}"
|
||
else
|
||
Run_Nohup >/dev/null 2>&1
|
||
fi
|
||
done
|
||
}
|
||
|
||
## 重置密码
|
||
function Reset_Pwd {
|
||
cp -f ${ShellDir}/sample/auth.json ${ConfigDir}/auth.json
|
||
echo -e "控制面板重置成功,用户名:admin,密码:adminadmin\n"
|
||
}
|
||
|
||
## 一次性运行所有脚本
|
||
function Run_All {
|
||
if [ ! -f ${ListJs} ]; then
|
||
cat ${ListCronLxk} | grep -E "j[drx]_\w+\.js" | perl -pe "s|.+(j[drx]_\w+)\.js.+|\1|" | sort -u > ${ListJs}
|
||
fi
|
||
echo -e "\n==================== 开始运行所有非挂机脚本 ====================\n"
|
||
echo -e "请注意:本过程将非常非常耗时,一个账号可能长达几小时,账号越多耗时越长,如果是手动运行,退出终端也将终止运行。\n"
|
||
echo -e "倒计时5秒...\n"
|
||
for ((sec=5; sec>0; sec--)); do
|
||
echo -e "$sec...\n"
|
||
sleep 1
|
||
done
|
||
for file in $(cat ${ListJs}); do
|
||
echo -e "==================== 运行 $file.js 脚本 ====================\n"
|
||
bash ${ShellJd} $file now
|
||
done
|
||
}
|
||
|
||
## 正常运行单个脚本
|
||
function Run_Normal {
|
||
Import_Conf $1 && Detect_Cron && Set_Env
|
||
|
||
FileNameTmp1=$(echo $1 | perl -pe "s|\.js||")
|
||
FileNameTmp2=$(echo $1 | perl -pe "{s|jd_||; s|\.js||; s|^|jd_|}")
|
||
SeekDir="${ScriptsDir} ${ScriptsDir}/backUp ${ConfigDir}"
|
||
FileName=""
|
||
WhichDir=""
|
||
|
||
for dir in ${SeekDir}
|
||
do
|
||
if [ -f ${dir}/${FileNameTmp1}.js ]; then
|
||
FileName=${FileNameTmp1}
|
||
WhichDir=${dir}
|
||
break
|
||
elif [ -f ${dir}/${FileNameTmp2}.js ]; then
|
||
FileName=${FileNameTmp2}
|
||
WhichDir=${dir}
|
||
break
|
||
fi
|
||
done
|
||
|
||
if [ -n "${FileName}" ] && [ -n "${WhichDir}" ]
|
||
then
|
||
[ $# -eq 1 ] && Random_Delay
|
||
LogTime=$(date "+%Y-%m-%d-%H-%M-%S")
|
||
LogFile="${LogDir}/${FileName}/${LogTime}.log"
|
||
[ ! -d ${LogDir}/${FileName} ] && mkdir -p ${LogDir}/${FileName}
|
||
cd ${WhichDir}
|
||
node ${FileName}.js 2>&1 | tee ${LogFile}
|
||
else
|
||
echo -e "\n在${ScriptsDir}、${ScriptsDir}/backUp、${ConfigDir}三个目录下均未检测到 $1 脚本的存在,请确认...\n"
|
||
Help
|
||
fi
|
||
}
|
||
|
||
## 命令检测
|
||
case $# in
|
||
0)
|
||
echo
|
||
Help
|
||
;;
|
||
1)
|
||
case $1 in
|
||
hangup)
|
||
Run_HangUp
|
||
;;
|
||
resetpwd)
|
||
Reset_Pwd
|
||
;;
|
||
runall)
|
||
Run_All
|
||
;;
|
||
*)
|
||
Run_Normal $1
|
||
;;
|
||
esac
|
||
;;
|
||
2)
|
||
case $2 in
|
||
now)
|
||
Run_Normal $1 $2
|
||
;;
|
||
*)
|
||
echo -e "\n命令输入错误...\n"
|
||
Help
|
||
;;
|
||
esac
|
||
;;
|
||
*)
|
||
echo -e "\n命令过多...\n"
|
||
Help
|
||
;;
|
||
esac
|