This commit is contained in:
Евгений Храмов 2023-05-15 23:57:58 +03:00
parent bfddc0607d
commit d7c46b0cc5

156
hlna.py

@ -96,7 +96,6 @@ def unpack(src, dst):
logging.critical(msg)
return print(msg)
# Read the actual archive data
data = b''
read_data = 0
@ -167,15 +166,44 @@ def config():
print_line("Пока есть только ARK и 7Days xD")
def ports_array():
port_s = []
query_p = []
rcon_p = []
for k in list_config:
data_port = read_yaml(k, game="ARK")
port_s.append(data_port['Port'])
query_p.append(data_port['QueryPort'])
rcon_p.append(data_port['RCONPort'])
return port_s, query_p, rcon_p
def ports(port, ports_arr, flag):
while True:
if not port:
if not ports_arr:
if flag == 0:
port = 7777
elif flag == 1:
port = 27015
elif flag == 2:
port = 27044
print("Port=", port)
return port
else:
port = max(ports_arr) + 2
if port in ports_arr:
print("Порт уже занят")
else:
return port
def config_ark(list_config=list_config):
"""конфигурирование сервера арк"""
create_dir(dir_server_ark)
create_dir(dir_maps_ark)
path_server()
"""Сбор данных для конфига"""
port_s = []
rcon_p = []
query_p = []
cluster_id = ""
cluster_dir_override = ""
@ -230,11 +258,9 @@ def config_ark(list_config=list_config):
break
if list_config:
for k in list_config:
data_port = read_yaml(k, game="ARK")
port_s.append(data_port['Port'])
rcon_p.append(data_port['RCONPort'])
query_p.append(data_port['QueryPort'])
port_s, query_p, rcon_p = ports_array()
else:
port_s = query_p = rcon_p = []
if amount_map == 1:
map_s = "TheIsland"
@ -264,19 +290,6 @@ def config_ark(list_config=list_config):
# Если вдруг каким-то боком проверка не отработает и не будет нужной цифры
map_s = 'TheIsland'
def ports(ports_arr):
while True:
port = check_int("")
if not port:
if not ports_arr:
return 0
else:
port = max(ports_arr) + 2
if port in ports_arr:
print("Порт уже занят")
else:
return port
if list_config:
data = read_yaml(list_config[-1], game="ARK")
while True:
@ -301,22 +314,15 @@ def config_ark(list_config=list_config):
list_config.append(name_server) # если enter, то ставим последним элементом карту
break
print("Укажите порт сервера: ")
port_server = ports(port_s)
if port_server == 0:
port_server = 7777
print("Порт Сервера=", port_server)
print("Укажите query порт сервера: ")
query_port = ports(query_p)
if query_port == 0:
query_port = 27015
print("Query Port=", query_port)
port = check_int("Укажите порт сервера: ")
port_server = ports(port, port_s, True)
port = check_int("Укажите query порт сервера: ")
query_port = ports(port, query_p, False)
port = check_int("Укажите порт сервера: ")
rcon_port = ports(port, rcon_p, True)
rcon_enabled = True
if rcon_p == []:
rcon_port = 27020
else:
rcon_port = max(rcon_p) + 1
password_server = input("Укажите пароль Сервера: \n")
adminpassword_server = 123
@ -335,7 +341,7 @@ def config_ark(list_config=list_config):
listen_server = False
else:
listen_server = True
"""Вызов создания конфига"""
yaml_create("ARK", "", cluster_server, map_s, list_config[-1], port_server, query_port,
rcon_enabled, rcon_port, adminpassword_server, password_server, max_players,
cluster_id, cluster_dir_override, listen_server)
@ -343,7 +349,7 @@ def config_ark(list_config=list_config):
def config_7daystodie():
"""конфигурирование сервера 7 days to die"""
list_simvols = ("$","@","-",".","%","{","}","+","/")
list_simvols = ("$", "@", "-", ".", "%", "{", "}", "+", "/")
create_dir(dir_server_7days)
config_7days = input("Введите имя конфига (serverconfig):\n")
if config_7days == "":
@ -494,7 +500,8 @@ def modextract(id_mod, id_game_workshop, dir_ark_mods):
os.system(f"rm -rf {dir_ark_mods}")
os.system(f"mv -f {dir_steam_workshop} {dir_ark_mods}")
modname = subprocess.check_output(['curl', '-s', f'https://steamcommunity.com/sharedfiles/filedetails/?id={id_mod}']).decode('utf-8')
modname = subprocess.check_output(
['curl', '-s', f'https://steamcommunity.com/sharedfiles/filedetails/?id={id_mod}']).decode('utf-8')
modname = re.search(r'<div class="workshopItemTitle">(.+)</div>', modname)
modname = modname and modname.group(1)
@ -531,61 +538,51 @@ def modextract(id_mod, id_game_workshop, dir_ark_mods):
@hlna.command(help='Выключение/включение серверов (без удаления) <hlna switch -m all -d')
@click.option("-m", required=True, help="Название cервера")
@click.argument('g', nargs=1)
@click.option("-m", required=False, help="Название cервера")
@click.option("-e/-d", default=True, help="-e активировать карты, -d деактивировать")
def switch(m, e):
def switch(g, m, e): #добавить all
if g == "ark":
m = m.split(",")
if not os.path.isdir(dir_deactivated):
create_dir(dir_deactivated)
if e:
port_s = []
query_p = []
for k in list_config:
data = read_yaml(k)
port_s.append(data['Port'])
query_p.append(data['QueryPort'])
port_s, query_p, rcon_p = ports_array()
state_config = list_config if e else delist_config
state_msg = "активных" if e else "не активных"
for i in m:
try:
if i in list_config:
print(f"Карта {i} уже есть в активных")
continue
data = read_yaml(i, False)
if data['Port'] in port_s:
print("Предлагаем заменить")
continue
if data['QueryPort'] in query_p:
print("Заменить query port?")
if i in state_config:
print(f"Карта {i} уже есть в {state_msg}")
continue
data = read_yaml(i, not e)
if e:
data['Port'] = ports(data['Port'], port_s, e)
data['QueryPort'] = ports(data['QueryPort'], port_s, e)
data['RCONPort'] = ports(data['RCONPort'], port_s, e)
yaml_create("ARK", data['map'], data['Cluster'], data['SessionName'], data['Port'], data['QueryPort'],
data['RCONEnabled'], data['RCONPort'], data['ServerAdminPassword'], data['ServerPassword'],
data['MaxPlayers'], data['ModsId'], data['Listen'], data['ServerPath'], data['clusterid'],
data['clusterdir'])
x = os.system(
f"mv {dir_deactivated}{i} {dir_maps_ark} >> {dir_logs}{date} 2>&1")
os.system(f"systemctl --user stop ark_{i}")
os.system(f"systemctl --user disable ark_{i}")
f"rm {dir_deactivated}{i} >> {dir_logs}{date} 2>&1")
with open(f"{dir_logs}{date}.log", "a") as f:
f.write(f"[{t}] File {i} has been moved to {dir_maps_ark}\n")
f.write(f"[{t}] Сервер {i} перемещён из {state_msg}\n")# переписать эту залупу
else:
x = os.system(f"mv {dir_maps_ark}{i} {dir_deactivated} >> {dir_logs}{date} 2>&1")
with open(f"{dir_logs}{date}.log", "a") as f:
f.write(f"[{t}] Сервер {i} перемещён из {state_msg}\n")
if x == 0:
print(f"Карта активирована - {i}")
print(f"Готов - {i}")
start = "start" if e else "stop"
enable = "enable" if e else "disable"
os.system(f"systemctl --user {start} ark_{i}")
os.system(f"systemctl --user {enable} ark_{i}")
else:
print(f"{i} либо уже активирована, либо такой карты нет")
except:
print("ошибка при активации карты")
else:
for i in m:
try:
if i in delist_config:
print(f"Карта {i} уже есть в деактивированных")
continue
x = os.system(
f"mv {dir_maps_ark}{i} {dir_deactivated} >> {dir_logs}{date} 2>&1")
os.system(f"systemctl --user enable ark_{i}")
os.system(f"systemctl --user start ark_{i}")
with open(f"{dir_logs}{date}.log", "a") as f:
f.write(f"[{t}] File {i} has been moved to {dir_deactivated}\n")
if x == 0:
print(f"Карта деактивирована - {i}")
else:
print(f"{i} либо деактивирована, либо такой карты нет")
except:
print("ошибка при деактивации карты")
@hlna.command(help='Выводит статус настроеных серверов')
@ -648,7 +645,6 @@ def start(g, m):
@click.option('-g', required=True, help="Название игры для запуска. (ark, 7days")
@click.option('-m', default='all', help="Название карты для запуска или all для запуска все карт")
def stop(g, m):
start_stop("stop", g, m)