From 7ac346f0612587cf9a365f3905c79e4206fb33ea Mon Sep 17 00:00:00 2001 From: xpamych Date: Mon, 15 May 2023 20:36:52 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BA=D0=BE=D0=BD=D1=87=D0=B0=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BD=D0=B0=D1=8F=20=D1=87=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hlna.py | 93 ++++++++++++++++++++++++++++++++------------------------- 1 file changed, 53 insertions(+), 40 deletions(-) diff --git a/hlna.py b/hlna.py index 0adcedb..a69cce8 100755 --- a/hlna.py +++ b/hlna.py @@ -36,7 +36,7 @@ delist_config = find_file(dir_deactivated) def path_server(): - 'Получение пути для хранения файлов серверов, записываем путь в yaml файл' + """Получение пути для хранения файлов серверов, записываем путь в yaml файл""" dir_server = input(f"""Укажите путь до каталога, где будут храниться файлы сервера. По-умолчанию {home_dir}/Servers/ :""") if not dir_server: @@ -51,7 +51,7 @@ def hlna(): def unpack(src, dst): - 'Добавить документацию' + """Добавить документацию""" with open(src, 'rb') as f: sigver = struct.unpack('q', f.read(8))[0] unpacked_chunk = f.read(8) @@ -149,9 +149,9 @@ def check_int(number=""): print_line("Введите число") -@hlna.command(help='Сбор настроек для сервера или кластера') +@hlna.command(help='Выбор игры и сбор настроек для сервера(-ов)') def config(): - "Выбор игры для создания сервера" + """Выбор игры для создания сервера""" while True: count_game = check_int("""Выберите игру для конфигурирования 1. ARK Survival Evolved @@ -166,9 +166,10 @@ def config(): def config_ark(list_config=list_config): - "конфигурирование сервера арк" + """конфигурирование сервера арк""" create_dir(dir_server_ark) create_dir(dir_maps_ark) + path_server() """Сбор данных для конфига""" port_s = [] rcon_p = [] @@ -206,7 +207,7 @@ def config_ark(list_config=list_config): for i in range(count_maps): while True: - "Проверка на выбор карты из списка" + """Проверка на выбор карты из списка""" amount_map = check_int("""Выберите карту из списка указав номер 1. The Island 2. The Center @@ -332,14 +333,14 @@ 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) + rcon_enabled, rcon_port, adminpassword_server, password_server, max_players, + cluster_id, cluster_dir_override, listen_server) def config_7daystodie(): - "конфигурирование сервера 7 days to die" + """конфигурирование сервера 7 days to die""" list_simvols = ("$","@","-",".","%","{","}","+","/") create_dir(dir_server_7days) config_7days = input("Введите имя конфига (serverconfig):\n") @@ -355,15 +356,14 @@ def config_7daystodie(): def xml_parser(): - "добавить документацию" - print("Я не умею парсить))") + """добавить документацию""" + print("Я пока не умею парсить xml))") def yaml_create(game, dir_server="", cluster_server="", map_s="", name_server="", port_server="", query_port="", - rcon_enabled="", rcon_port="", - adminpassword_server="", password_server="", max_players="", id_mods_ark="", cluster_id="", - cluster_dir_override="", listen_server=""): - "добавить документацию" + rcon_enabled="", rcon_port="", adminpassword_server="", password_server="", max_players="", + id_mods_ark="", cluster_id="", cluster_dir_override="", listen_server=""): + """Создаёт на основании собранных данных yaml конфиг""" if game == "ARK": path_yaml = dir_maps_ark + name_server settings = [ @@ -401,7 +401,7 @@ def yaml_create(game, dir_server="", cluster_server="", map_s="", name_server="" def systemd_unit_create(game, config_7days="", name_server=list_config): - "добавить документацию" + """Создаёт на основании yaml конфига systemd юнит""" if game == "ARK": id_game = "376030" for i in name_server: @@ -412,12 +412,11 @@ def systemd_unit_create(game, config_7days="", name_server=list_config): unit_file = f"{dir_unit}ark_{data['SessionName']}.service".lower() elif game == "7Days": id_game = "294420" - # сюда дописать обращение к xml для получения уникального имени сервера + # сюда дописать обращение к xml_parser для получения уникального имени сервера unit_dir_server = dir_server_7days systemd_unit_exec = f"{dir_server_7days}startserver.sh -configfile={config_7days}.xml" unit_file = f"{dir_unit}7days.service".lower() - unit_text = f'''[Unit] Description={game}: Server Wants=network-online.target @@ -442,13 +441,13 @@ WantedBy=default.target os.system(f"systemctl --user enable {unit_name}") -@hlna.command(help='Для скачивания и установки модов') +@hlna.command(help='Для скачивания и установки модов ') @click.argument('g', nargs=1) @click.option('-m', default='all', help="Название карты для запуска или all для запуска всех карт") @click.option("-i/-u", default=True, help="-i установить моды, -u удалить моды") @click.argument('id_mods_ark', nargs=-1) def mod(g, m, i, id_mods_ark): - "добавить документацию" + """Проводит операции на модами""" if g == "ark": id_game_workshop = "346110" if not os.path.isdir(dir_workshop_ark): @@ -467,7 +466,7 @@ def mod(g, m, i, id_mods_ark): def modextract(id_mod, id_game_workshop, dir_ark_mods): - "добавить документацию" + """Распаковывает файлы мода и создаёт .mod файл для него""" dir_steam_workshop = f"{dir_workshop_ark}/content/{id_game_workshop}/{id_mod}/WindowsNoEditor" dir_extract = dir_ark_mods if id_mod == "111111111": @@ -561,7 +560,9 @@ def enablemap(m, e): print("Заменить query port?") continue x = os.system( - f"mv {dir_deactivated}{i} {dir_maps_ark} >> {dir_logs}{date} 2>&1") # Добавить текущее время + f"mv {dir_deactivated}{i} {dir_maps_ark} >> {dir_logs}{date} 2>&1") + os.system(f"systemctl --user stop ari_{i}") + os.system(f"systemctl --user disable ari_{i}") with open(f"{dir_logs}{date}.log", "a") as f: f.write(f"[{time}] File {i} has been moved to {dir_maps_ark}\n") if x == 0: @@ -577,7 +578,9 @@ def enablemap(m, e): print(f"Карта {i} уже есть в деактивированных") continue x = os.system( - f"mv {dir_maps_ark}{i} {dir_deactivated} >> {dir_logs}{date} 2>&1") # Добавить текущее время + f"mv {dir_maps_ark}{i} {dir_deactivated} >> {dir_logs}{date} 2>&1") + os.system(f"systemctl --user enable ari_{i}") + os.system(f"systemctl --user start ari_{i}") with open(f"{dir_logs}{date}.log", "a") as f: f.write(f"[{time}] File {i} has been moved to {dir_deactivated}\n") if x == 0: @@ -590,7 +593,7 @@ def enablemap(m, e): @hlna.command() def status(list_config=list_config): - "добавить документацию" + """Выводит статус настроеных серверов""" # Добавить сортивку по кластерам и вывод несколько столбиков if list_config == [] and delist_config == []: print_line("Сервера не сконфигурированы") @@ -640,9 +643,9 @@ def status(list_config=list_config): @click.option('-g', required=True, help="Название игры для запуска. (ark, 7days") @click.option('-m', default='all', help="Название карты для запуска или all для запуска все карт") def start(g, m): - "добавить документацию" - #добавить проверку на ввод аргумента ark/7day если else: давать подсказку - #если нет конфигов, то выводим что серверов нет + """Запускает сервер выбранной игры""" + # добавить проверку на ввод аргумента ark/7day если else: давать подсказку + # если нет конфигов, то выводим что серверов нет start_stop("start", g, m) @@ -650,9 +653,7 @@ def start(g, m): @click.option('-g', required=True, help="Название игры для запуска. (ark, 7days") @click.option('-m', default='all', help="Название карты для запуска или all для запуска все карт") def stop(g, m): - "добавить документацию" - #добавить проверку на ввод аргумента ark/7day если else: давать подсказку - #если нет конфигов, то выводим что серверов нет + """Останавливает сервер""" start_stop("stop", g, m) @@ -660,13 +661,27 @@ def stop(g, m): @click.option('-g', required=True, help="Название игры для запуска. (ark, 7days") @click.option('-m', default='all', help="Название карты для запуска или all для запуска все карт") def restart(g, m): - "добавить документацию" + """Перезагружает сервер""" start_stop("restart", g, m) -def start_stop(action, g, m, list_config=list_config): - "добавить документацию" +def check_exist_servers(g): + """Проверяет наличие конфигов для активных карт""" if g == "ark": + if not os.path.exists(f"{dir_mods_ark}"): + print_line("Нет сконфигурированных серверов") # добавить отсюда вилку на вопрос с конфигурацией + else: + return + elif g == "7days": + print_line("7Days") + + +def start_stop(action, g, m, list_config=list_config): + """Функция изменения статусов сервера""" + if g != "ark" or "7days": + return + elif g == "ark": + check_exist_servers(g) dict_mapname = {} dict_allmapname = [] for i in list_config: @@ -690,8 +705,6 @@ def start_stop(action, g, m, list_config=list_config): x = os.system(f"systemctl --user {action} ark_{data['SessionName'].lower()}.service") if x == 0: print_line("Готово") - else: - print("Ни одной карты не установлено") elif g == "7days": x = os.system(f"systemctl --user {action} 7days.service") if x == 0: @@ -699,7 +712,7 @@ def start_stop(action, g, m, list_config=list_config): def read_yaml(list_config=list_config, flag=True, game=""): - "добавить документацию" + """Читает конфиги и отдаёт данные туда где их запросили""" # Читаем конфиги активных или неактивных карт в зависимости от флага if game == "ARK": path_yaml = f"{dir_maps_ark}{list_config}" if flag else f"{dir_deactivated}{list_config}" @@ -711,7 +724,7 @@ def read_yaml(list_config=list_config, flag=True, game=""): def choose_map(arr): - "добавить документацию" + """Функция выбора карт""" new_arr = [] arr = sorted(arr) print('Найдены сервера с этой картой') @@ -736,7 +749,7 @@ def choose_map(arr): @click.argument('c', nargs=1) @click.option('-m', required=True, help="Название карты для применения rcon команды") def rcon(m, c): - "добавить документацию" + """Функция обеспечивающая отправку команд на игровой сервер через rcon""" dict_mapname = {} dict_adminpwd = {} if list_config: @@ -764,7 +777,7 @@ def rcon(m, c): def zero(x=""): - "Потом пригодится" + """Потом пригодится""" return ""