MihoyoBBSTools/server.py

198 lines
7.2 KiB
Python
Raw Normal View History

2022-08-05 09:09:03 +00:00
#Server Mod
import os
import time
import threading
import main as single
import main_multi as multi
from loghelper import log
import json
time_interval=720 #默认签到间隔时间单位minute(分钟)
mod=1 #单用户模式/自动判断
def runingtime():
return int(time.time())
2022-08-05 17:46:31 +00:00
def control(time_interval,mod,event,detal):
2022-08-05 09:09:03 +00:00
last_time=runingtime()
while True:
now_time=runingtime()
if now_time>last_time+time_interval*60:
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")
last_time=runingtime()
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-05 17:46:31 +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-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
show=False #显示倒计时信息
if show:
detal.set()
help="command windows\nstop:stop server\nreload:reload config and refish tiem\nsingle:test single 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(*.json) enable(attribute) Ture(value)\ntime x:set interval time (minute)\nshow true/false:show the time count"
2022-08-05 09:09:03 +00:00
log.info(help)
while True:
command=input()
if command=="help" or command=="?" or command=="":
log.info(help)
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
if command=="reload":
return True
if command=="test":
try:
single.main()
except:
log.info("single_user start failed")
if command=="single":
try:
single.main()
except:
log.info("single_user start failed")
if command=="mulit":
try:
multi.main_multi(True)
except:
log.info("multi_user start failed")
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-05 09:09:03 +00:00
if command[i]=="mod":
if len(command)==2:
2022-08-05 17:46:31 +00:00
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-05 17:46:31 +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")
if command[i]=="show":
if len(command)==2:
if command[1]=="true":
show=True
detal.set()
log.info("switching to detail mod")
if command[1]=="false":
detal.unset()
show=False
log.info("switching to slient mod")
2022-08-05 09:09:03 +00:00
else:
log.info("Error Command")
if command[i]=="add":
2022-08-05 10:01:07 +00:00
cookie=""
for m in range(i,len(command)):
cookie+=command[m]
log.info("adding")
if (mod==1):
name="config"
else:
log.info("Plase input your config name(*.json):")
name=input()
config = {
2022-08-05 09:09:03 +00:00
'enable': True, 'version': 5,
'account': {
2022-08-05 10:01:07 +00:00
'cookie': cookie,
2022-08-05 09:09:03 +00:00
'login_ticket': '',
'stuid': '',
'stoken': ''
},
'mihoyobbs': {
'enable': True, 'checkin': True, 'checkin_multi': True, 'checkin_multi_list': [2, 5],
'read_posts': True, 'like_posts': True, 'un_like': True, 'share_post': True
},
'games': {
'cn': {
'enable': True,
'genshin': {'auto_checkin': True, 'black_list': []},
'hokai2': {'auto_checkin': False, 'black_list': []},
'honkai3rd': {'auto_checkin': False, 'black_list': []},
'tears_of_themis': {'auto_checkin': False, 'black_list': []},
},
'os': {
'enable': False, 'cookie': '',
'genshin': {'auto_checkin': False, 'black_list': []}
}
}
}
2022-08-05 10:01:07 +00:00
file_path = os.path.dirname(os.path.realpath(__file__)) + "/config/"+name+".json"
file=open(file_path,'w')
file.write(json.dumps(config))
file.close()
log.info("Saving OK")
2022-08-05 09:09:03 +00:00
if command[i]=="set":
if len(command)==4:
file_path = os.path.dirname(os.path.realpath(__file__)) + "/config/"+command[1]+".json"
if os.path.exists(file_path)==False:
log.info("User is not exist")
else:
with open(file_path, "r") as f:
new_conifg=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_conifg[command[2]]=value
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
if __name__=='__main__':
log.info('Running in Server Mod')
time_interval = 720
file_path = os.path.dirname(os.path.realpath(__file__)) + "/config/config.json"
if os.path.exists(file_path):
mod=1
else:
mod=2
while True:
log.info("switching to mod {}".format(mod))
t1_stop = threading.Event()
2022-08-05 17:46:31 +00:00
detal = threading.Event()
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