MihoyoBBSTools/server.py

192 lines
6.6 KiB
Python
Raw Normal View History

2022-08-23 15:55:18 +00:00
# Server Mod
2022-08-05 09:09:03 +00:00
import os
2022-08-28 07:59:31 +00:00
#import json
2022-08-05 09:09:03 +00:00
import time
2022-08-28 07:59:31 +00:00
import config
2022-08-05 09:09:03 +00:00
import threading
import main as single
import main_multi as multi
from loghelper import log
2022-08-23 15:55:18 +00:00
time_interval = 720 # 默认签到间隔时间单位minute(分钟)
mod = 1 # 单用户模式/自动判断
2022-08-05 09:09:03 +00:00
def runingtime():
return int(time.time())
2022-08-23 15:55:18 +00:00
def control(time_interval, mod, event, detal):
last_time = runingtime()
2022-08-05 09:09:03 +00:00
while True:
2022-08-23 15:55:18 +00:00
now_time = runingtime()
if now_time > last_time + time_interval * 60:
2022-08-28 07:59:31 +00:00
last_time = runingtime()
2022-08-23 15:55:18 +00:00
if mod == 1:
2022-08-05 09:09:03 +00:00
try:
single.main()
except:
log.info("single_user start failed")
else:
try:
multi.main_multi(True)
except:
log.info("multi_user start failed")
if event.is_set():
2022-08-05 10:01:07 +00:00
log.info("Stoping threading")
2022-08-05 09:09:03 +00:00
break
2022-08-23 15:55:18 +00:00
if (detal.is_set()):
log.info("The Next check time is {}s".format(last_time - now_time + time_interval * 60))
2022-08-05 09:09:03 +00:00
time.sleep(20)
2022-08-23 15:55:18 +00:00
2022-08-05 17:46:31 +00:00
def command(detal):
2022-08-05 09:09:03 +00:00
global mod
global time_interval
2022-08-05 17:46:31 +00:00
global show
2022-08-28 07:59:31 +00:00
#show = False # 显示倒计时信息
#if show:
# detal.set()
2022-08-23 15:55:18 +00:00
help = "command windows\nstop:stop server\nreload:reload config and refish tiem\nsingle:test single " \
2022-08-28 07:59:31 +00:00
"config\nmulit:test mulit conifg\nmod x:x is refer single or multi, 1 is single, 2 is multi\nadd " \
"'yourcookie'\nset user attribute value: such set username(*.yaml) enable(attribute) Ture(value)\ntime " \
2022-08-23 15:55:18 +00:00
"x:set interval time (minute)\nshow true/false:show the time count "
2022-08-05 09:09:03 +00:00
log.info(help)
2022-08-23 15:55:18 +00:00
while True:
command = input()
2022-08-28 07:59:31 +00:00
if command == "help" or command == "exit" or command == "?" or command == "":
2022-08-05 09:09:03 +00:00
log.info(help)
2022-08-23 15:55:18 +00:00
if command == "stop" or command == "exit":
2022-08-05 10:01:07 +00:00
log.info("Stoping Server Plase Wait")
2022-08-05 09:09:03 +00:00
return False
2022-08-23 15:55:18 +00:00
if command == "reload":
2022-08-05 09:09:03 +00:00
return True
2022-08-23 15:55:18 +00:00
if command == "test":
2022-08-28 07:59:31 +00:00
if mod==1:
try:
single.main()
except:
log.info("single_user start failed")
else:
try:
multi.main_multi(True)
except:
log.info("multi_user start failed")
2022-08-23 15:55:18 +00:00
if command == "single":
2022-08-05 09:09:03 +00:00
try:
single.main()
except:
log.info("single_user start failed")
2022-08-23 15:55:18 +00:00
if command == "mulit":
2022-08-05 09:09:03 +00:00
try:
multi.main_multi(True)
except:
log.info("multi_user start failed")
2022-08-23 15:55:18 +00:00
command = command.split(' ')
for i in range(0, len(command)):
if command[i] == "time":
if len(command) == 2:
time_interval = int(command[1])
2022-08-05 10:01:07 +00:00
log.info("switching interval to {} minute".format(time_interval))
return True
2022-08-23 15:55:18 +00:00
if command[i] == "mod":
if len(command) == 2:
mod_new = int(command[1])
if mod_new > 2 or mod_new < 1:
2022-08-05 09:09:03 +00:00
log.info("error mod")
else:
2022-08-23 15:55:18 +00:00
mod = mod_new
2022-08-05 09:09:03 +00:00
log.info("switching mod to {}".format(mod))
2022-08-05 17:46:31 +00:00
else:
log.info("Error Command")
2022-08-23 15:55:18 +00:00
if command[i] == "show":
if len(command) == 2:
if command[1] == "true":
2022-08-05 17:46:31 +00:00
detal.set()
log.info("switching to detail mod")
2022-08-23 15:55:18 +00:00
if command[1] == "false":
2022-08-28 07:59:31 +00:00
detal.clear()
2022-08-05 17:46:31 +00:00
log.info("switching to slient mod")
2022-08-23 15:55:18 +00:00
2022-08-05 09:09:03 +00:00
else:
log.info("Error Command")
2022-08-23 15:55:18 +00:00
if command[i] == "add":
cookie = ""
2022-08-28 07:59:31 +00:00
for m in range(i+1, len(command)):
2022-08-23 15:55:18 +00:00
cookie += command[m]
2022-08-05 10:01:07 +00:00
log.info("adding")
2022-08-23 15:55:18 +00:00
if mod == 1:
name = "config"
2022-08-05 10:01:07 +00:00
else:
2022-08-28 07:59:31 +00:00
log.info("Plase input your config name(*.yaml):")
2022-08-23 15:55:18 +00:00
name = input()
2022-08-28 07:59:31 +00:00
new_config = config.copy_config()
new_config['account']['cookie']=cookie
file_path = os.path.dirname(os.path.realpath(__file__)) + "/config/" + name + ".yaml"
try:
config.save_config(file_path,new_config)
log.info("Saving OK")
except:
log.info('Saving failed,plase check your file system')
#file = open(file_path, 'w')
#file.write(json.dumps(config))
#file.close()
2022-08-23 15:55:18 +00:00
if command[i] == "set":
if len(command) == 4:
2022-08-28 07:59:31 +00:00
file_path = os.path.dirname(os.path.realpath(__file__)) + "/config/" + command[1] + ".yaml"
2022-08-23 15:55:18 +00:00
if not os.path.exists(file_path):
2022-08-05 09:09:03 +00:00
log.info("User is not exist")
else:
2022-08-28 07:59:31 +00:00
new_config = config.load_config(file_path)
#json.load(f)
value = command[3]
if command[3] == "true":
value = True
if command[3] == "false":
value = False
if command[3].isdigit():
value = int(command[3])
new_config[command[2]] = value
try:
config.save_config(file_path,new_config)
log.info("Saving OK")
except:
log.info('Saving failed,plase check your file system')
#file = open(file_path, 'w')
#file.write(json.dumps(new_conifg))
#file.close()
2022-08-05 10:01:07 +00:00
return True
2022-08-05 09:09:03 +00:00
2022-08-23 15:55:18 +00:00
if __name__ == '__main__':
2022-08-05 09:09:03 +00:00
log.info('Running in Server Mod')
2022-08-28 07:59:31 +00:00
file_path = os.path.dirname(os.path.realpath(__file__)) + "/config/config.yaml"
2022-08-05 09:09:03 +00:00
if os.path.exists(file_path):
2022-08-23 15:55:18 +00:00
mod = 1
2022-08-05 09:09:03 +00:00
else:
2022-08-23 15:55:18 +00:00
mod = 2
2022-08-05 09:09:03 +00:00
while True:
log.info("switching to mod {}".format(mod))
t1_stop = threading.Event()
2022-08-05 17:46:31 +00:00
detal = threading.Event()
2022-08-23 15:55:18 +00:00
thread1 = threading.Thread(name='time_check', target=control, args=(time_interval, mod, t1_stop, detal))
2022-08-05 09:09:03 +00:00
thread1.start()
2022-08-05 10:01:07 +00:00
try:
2022-08-05 17:46:31 +00:00
if command(detal):
2022-08-05 10:01:07 +00:00
t1_stop.set()
continue
else:
t1_stop.set()
break
except:
2022-08-05 09:09:03 +00:00
t1_stop.set()
continue