#!/bin/bash #!/usr/bin/env bash #Author:zsnmwy PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin:/opt/ArchiSteamFarm:/opt/Manage_ArchiSteamFarm:/root/.nvm/versions/node/v8.11.1/bin export PATH DIR_PATH="/opt/ArchiSteamFarm" ARCHISTEAMFARM_FILES_DIR="/opt/ArchiSteamFarm" language=$(cat /opt/.env_language) Judge_Echo_Information() { if [ $language -eq 1 ]; then echo -e "$1" else echo -e "$2" fi } judge() { if [[ $? -eq 0 ]]; then echo -e "${OK} ${GreenBG} $1 完成 ${Font}" else echo -e "${Error} ${RedBG} $1 失败${Font}" exit 1 fi } judge_asf() { asf_id=$(pm2 ls | grep asf) if [[ -n ${asf_id} ]]; then return 0 else return 1 fi } start() { judge_asf if [[ $? -eq 0 ]]; then echo "asf 已经存在了!! 本次操作跳过~~" exit 1 fi dotnet ${DIR_PATH}/ArchiSteamFarm.dll } screen_start() { judge_asf if [[ $? -eq 0 ]]; then echo "asf 已经存在了!! 本次操作跳过~~" exit 1 fi screen dotnet /opt/ArchiSteamFarm/ArchiSteamFarm.dll } start_bg() { judge_asf if [[ $? -eq 0 ]]; then echo "asf 已经存在了!! 本次操作跳过~~" exit 1 fi cd "${DIR_PATH}" pm2 start "dotnet ArchiSteamFarm.dll" -n asf judge "启动方式: dotnet ${DIR_PATH}/ArchiSteamFarm.dll" pm2 log asf } status() { IPC_status=$(cat ${DIR_PATH}/config/ASF.json | grep -Po '"IPC": \K.*?(?=,)') IPC_Password=$(cat ${DIR_PATH}/config/ASF.json | grep -Po '"IPCPassword": \K.*?(?=,)' | cut -d '"' -f2) IPC_Port=$(cat ${ARCHISTEAMFARM_FILES_DIR}/config/ASF.json | grep http | cut -d '"' -f2 | cut -d '/' -f3 | cut -d ':' -f2) if [[ ${IPC_status} == "true" ]]; then echo -e "IPC 已经开启 \\n密码: ${IPC_Password} \\n端口: ${IPC_Port}" else echo "IPC 未开启" fi judge_asf if [[ $? -eq 1 ]]; then echo "[此处不检测 screen任务]asf 还没有启动哟" exit 1 fi pm2 ls judge "列出PM2任务" } remove() { judge_asf if [[ $? -eq 1 ]]; then echo "asf 还没有启动哟 本次操作跳过~~" exit 1 fi pm2 delete asf judge "删除asf" } log() { judge_asf if [[ $? -eq 1 ]]; then echo "asf 还没有启动哟 本次操作跳过~~" exit 1 fi pm2 log asf judge "查看asf日志" } Choose_ipc_true_or_flase() { Judge_Echo_Information "是否开启IPC?" "Use the IPC ?" echo -e "\\n" Judge_Echo_Information "1.开启 \n2.不开启" "1 Yes. Please trun on it. \n2 No. I don't want to use it." read -r -p "请输入数字 | Please fill in a number." IPC_Config case $IPC_Config in 1) IPC_Config="true" Before_Ipc_line_number=$(cat ${ARCHISTEAMFARM_FILES_DIR}/config/ASF.json -n | grep "\"IPC\":" | awk '{print $1}') Now_Icp_string="\"IPC\": ${IPC_Config}," sed -i ''"$(echo "${Before_Ipc_line_number}")"'c '"$(echo "${Now_Icp_string}")"'' ${DIR_PATH}/config/ASF.json judge "Change IPC" ;; 2) IPC_Config="false" Before_Ipc_line_number=$(cat ${ARCHISTEAMFARM_FILES_DIR}/config/ASF.json -n | grep "\"IPC\":" | awk '{print $1}') Now_Icp_string="\"IPC\": ${IPC_Config}," sed -i ''"$(echo "${Before_Ipc_line_number}")"'c '"$(echo "${Now_Icp_string}")"'' ${DIR_PATH}/config/ASF.json judge "Change IPC" ;; *) Choose_ipc_true_or_flase ;; esac } Change_IPC_Password() { while true; do #clear echo -e "\n" read -r -s -p "输入你的IPC密码 (越复杂越好):" ipc_password_first echo -e "\n" echo -e "\n" read -r -s -p "再次输入你的IPC密码 (越复杂越好):" ipc_password_second if [[ "${ipc_password_second}" != "${IPC_Port}" ]]; then if [[ ${ipc_password_first} == ${ipc_password_second} ]]; then Before_Ipc_Password_line_number=$(cat ${ARCHISTEAMFARM_FILES_DIR}/config/ASF.json -n | grep "IPCPassword" | awk '{print $1}') Now_Icp_Password_string="\"IPCPassword\": \"${ipc_password_second}\"," sed -i ''"$(echo "${Before_Ipc_Password_line_number}")"'c '"$(echo "${Now_Icp_Password_string}")"'' ${DIR_PATH}/config/ASF.json break else echo -e "${Error} ${RedBG} 两次输入的密码不正确 ! 重新输入 ${Font}" sleep 2 fi else echo -e "${Error} ${RedBG} IPC密码和IPC端口不能够相同 ${Font}" sleep 2 fi done } Change_IPC_Port() { while true; do echo -e "请输入IPC监听端口 [1-65535]" stty erase '^H' && read -r -p "(默认端口:1242 ):" ipc_port [[ -z "${ipc_port}" ]] && ipc_port="1242" expr ${ipc_port} + 0 &>/dev/null if [[ $? -eq 0 ]]; then if [[ ${ipc_port} -ge 1 ]] && [[ ${ipc_port} -le 65535 ]]; then echo && echo "========================" echo -e " 端口 : ${Red_background_prefix} ${ipc_port} ${Font_color_suffix}" echo "========================" && echo port_exist_check ${ipc_port} echo -e "${Info} ${GreenBG} 尝试修改IPC端口 ${Font}" Before_Ipc_Port_line_number=$(cat ${ARCHISTEAMFARM_FILES_DIR}/config/ASF.json -n | grep "http://" | awk '{print $1}') Ipc_ip=$(cat ${ARCHISTEAMFARM_FILES_DIR}/config/ASF.json | grep -Po '"http://\K.*?(?=:)') Now_Ipc_Port_string="\"http://${Ipc_ip}:${ipc_port}/\"" sed -i ''"$(echo "${Before_Ipc_Port_line_number}")"'c '"$(echo "${Now_Ipc_Port_string}")"'' ${DIR_PATH}/config/ASF.json IPC_Port=$(cat ${ARCHISTEAMFARM_FILES_DIR}/config/ASF.json | grep http | cut -d '"' -f2 | cut -d '/' -f3 | cut -d ':' -f2) if [[ "${IPC_Port}" == "${ipc_port}" ]]; then echo -e "${OK} ${GreenBG} 修改IPC端口成功 ${Font}" sleep 3 exit 0 else echo -e "${Error} ${RedBG} 修改IPC端口失败 换个端口再试试?${Font}" sleep 3 exit 1 fi else echo "输入错误, 请输入正确的端口。" sleep 2 fi else echo "输入错误, 请输入正确的端口。" sleep 2 fi done } port_exist_check() { if [[ 0 -eq $(lsof -i:"$1" | wc -l) ]]; then echo -e "${OK} ${GreenBG} $1 端口未被占用 ${Font}" sleep 1 else echo -e "${Error} ${RedBG} 检测到 $1 端口被占用,以下为 $1 端口占用信息 ${Font}" lsof -i:"$1" echo -e "${OK} ${GreenBG} 5s 后将尝试自动 kill 占用进程 ${Font}" sleep 5 lsof -i:"$1" | awk '{print $2}' | grep -v "PID" | xargs kill -9 echo -e "${OK} ${GreenBG} kill 完成 ${Font}" sleep 1 fi } User_Manage_Panel() { if [[ -e ${ARCHISTEAMFARM_FILES_DIR} ]]; then cd ${ARCHISTEAMFARM_FILES_DIR}/config ls -1 | grep -Po '.*\.json' | grep -v minimal | grep -v example | grep -v ASF | awk -F '.' 'BEGIN{print "\n\n""STEAM ACCOUNT""\n""------------------""\n" }{print NR,"\t",$1}END{print "------------------""\n\n"}' echo -e " 因为已经采用了AES加密,这里没有密码修改功能 密码错了,重启ASF再输就行了 这里也没有账号配置的修改,直接开IPC功能,网页改更快啦~~~ 1.增加Steam账号 2.删除Steam账号 3.退出 " echo -e "${Info} ${RedBG} 请问你想?(输入数字) ${Font}" && read aNumber case $aNumber in 1) User_Manage_Panel_Add_Steam_Account ;; 2) User_Manage_Panel_Delete_Steam_Account ;; 3) exit 0 ;; *) User_Manage_Panel ;; esac else echo -e "${Info} ${RedBG} 没有安装ArchiSteamFarm 请先安装 ${Font}" fi } # Get steam account name Steam_information_account_Get() { while true; do #clear echo -e "\n" read -r -p "输入你的steam账号名:" Steam_account_first echo -e "\n" read -r -p "再次输入你的steam账号名:" Steam_account_second if [[ -n ${Steam_account_second} ]]; then if [[ ${Steam_account_first} == "${Steam_account_second}" ]]; then break else echo -e "${Error} ${RedBG} 两次输入的账号名称不正确 ! 请重新输入 ${Font}" sleep 2 fi else echo -e "${Error} ${RedBG} 请输入你的steam账号 ${Font}" sleep 2 fi done } User_Manage_Panel_Add_Steam_Account() { Steam_information_account_Get while true; do cd ${ARCHISTEAMFARM_FILES_DIR}/config check_account=$(cd ${ARCHISTEAMFARM_FILES_DIR}/config && ls | grep ${Steam_account_second}) if [[ -z ${check_account} ]]; then Bot_Add check_account=$(cd ${ARCHISTEAMFARM_FILES_DIR}/config && ls | grep ${Steam_account_second}) if [[ ! -z ${check_account} ]]; then echo -e "${Info} ${GreenBG} 成功添加账号配置文件 ${check_account} ${Font}" ls -1 | grep -Po '.*\.json' | grep -v minimal | grep -v example | grep -v ASF | awk -F '.' 'BEGIN{print "\n\n""STEAM ACCOUNT\n------------------\n" }{print NR,"\t",$1}END{print "------------------""\n\n"}' sleep 3 exit 0 else echo -e "${Error} ${RedBG} 添加失败 请检查${ARCHISTEAMFARM_FILES_DIR}/config文件夹 ${Font}" sleep 3 exit 1 fi else echo -e "${Error} ${RedBG} 请检查现有账号与新建的账号是否重复${Font}" ls -1 | grep -Po '.*\.json' | grep -v minimal | grep -v example | grep -v ASF | awk -F '.' 'BEGIN{print "\n\n""STEAM ACCOUNT\n------------------\n" }{print NR,"\t",$1}END{print "------------------""\n\n"}' sleep 4 fi done } # 添加一个机器人/BOT 配置文件名为账号名 Bot_Add() { echo -e "${Info} ${GreenBG} 准备添加BOT ${Font}" touch ${ARCHISTEAMFARM_FILES_DIR}/config/${Steam_account_second}.json cat >${ARCHISTEAMFARM_FILES_DIR}/config/${Steam_account_second}.json <