diff --git a/hlna.py b/hlna.py index 17acbcd..d48676a 100755 --- a/hlna.py +++ b/hlna.py @@ -145,6 +145,8 @@ def print_line(*text, flag=""): color = colorama.Fore.GREEN elif flag == "CYAN": color = colorama.Fore.CYAN + else: + color = colorama.Fore.WHITE print(colorama.Fore.YELLOW + "." * 30) print(color, *text) print(colorama.Fore.YELLOW + "." * 30 + colorama.Style.RESET_ALL) @@ -465,6 +467,7 @@ def yaml_create(g, dir_server="", cluster_server="", map_s="", name_server="", p def systemd_unit_create(g, name_server=list_config, config_7days=""): """Создаёт на основании yaml конфига systemd юнит""" + g = g.lower() if g == "ark": id_game = "376030" data = read_yaml(name_server, g="ark") @@ -479,6 +482,8 @@ def systemd_unit_create(g, name_server=list_config, config_7days=""): 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() + else: + print_line("Пока доступно 2 игры: ark и 7Days") unit_text = f'''[Unit] Description={g}: Server @@ -508,8 +513,9 @@ WantedBy=default.target @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) +@click.argument('id_mods_ark',required=True, nargs=-1) def mod(g, m, i, id_mods_ark): + g = g.lower() if g == "ark": check_exist_servers(g) if not os.path.isdir(dir_mods_ark): @@ -544,10 +550,11 @@ def mod(g, m, i, id_mods_ark): else: print_line("Введите id модов через запятую без пробелов", flag="CYAN") else: - print_line("Не поддерживаемая игра", flag="RED") + print_line("Не поддерживаемая игра, возможно вы иммели ввиду ark?", flag="RED") def modupdate(g, m, id_mod, dir_mod_ark): + g = g.lower() if g == "ark": print_line(f"Проверяем обновление мода {id_mod}", flag="CYAN") with open(os.path.join(dir_mod_ark, f"appworkshop_346110.acf"), "r") as f: @@ -594,6 +601,7 @@ def modupdateall(g, m): def moddownload(g, m, id_mod, dir_mod_ark): """Распаковывает файлы мода и создаёт .mod файл для него""" + g = g.lower() if g == "ark": id_game_workshop = "346110" dir_steam_workshop = f"{dir_workshop_ark}/content/{id_game_workshop}/{id_mod}/WindowsNoEditor" @@ -664,9 +672,10 @@ def moddownload(g, m, id_mod, dir_mod_ark): @hlna.command(help='Выключение/включение серверов (без удаления) > {dir_logs}{date} 2>&1") - with open(f"{dir_logs}{date}.log", "a") as f: - 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_line(f"Готов - {i}", flag="GREEN") - #start = "start" if e else "stop" - enable = "enable" if e else "disable" - os.system(f"systemctl --user {enable} ark_{i}") - else: - print_line(f"Ошибка перемещения {i}", flag="RED") - except: - print_line("ошибка операции", flag="RED") + state_config = list_config if e else delist_config + state_msg = "активных" if e else "не активных" + for i in m: + try: + if i in state_config: + print_line(f"Карта {i} уже есть в {state_msg}", flag="CYAN") + 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['ServerPath'], data['Cluster'], data['map'], data['SessionName'], data['Port'], + data['QueryPort'], data['RCONEnabled'], data['RCONPort'], data['ServerAdminPassword'], + data['ServerPassword'], data['MaxPlayers'], data['ModsId'], data['clusterid'], data['clusterdir'], + data['Listen']) + x = os.system( + f"rm {dir_deactivated}{i} >> {dir_logs}{date} 2>&1") + with open(f"{dir_logs}{date}.log", "a") as f: + 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_line(f"Готов - {i}", flag="GREEN") + #start = "start" if e else "stop" + enable = "enable" if e else "disable" + os.system(f"systemctl --user {enable} ark_{i}") + else: + print_line(f"Ошибка перемещения {i}", flag="RED") + except: + print_line("ошибка операции", flag="RED") @hlna.command(help='Выводит статус настроеных серверов') @@ -763,6 +772,7 @@ def start(g, m): """Запускает сервер выбранной игры""" # добавить проверку на ввод аргумента ark/7day если else: давать подсказку # если нет конфигов, то выводим что серверов нет + g = g.lower() modupdateall(g, m) start_stop("start", g, m) @@ -771,6 +781,7 @@ def start(g, m): @click.option('-g', required=True, help="Название игры для запуска. (ark, 7days") @click.option('-m', default='all', help="Название карты для запуска или all для запуска все карт") def stop(g, m): + g = g.lower() start_stop("stop", g, m) @@ -778,12 +789,14 @@ def stop(g, m): @click.option('-g', required=True, help="Название игры для запуска. (ark, 7days") @click.option('-m', default='all', help="Название карты для запуска или all для запуска все карт") def restart(g, m): + g = g.lower() modupdateall(g, m) start_stop("restart", g, m) def check_exist_servers(g): """Проверяет наличие конфигов для активных карт""" + g = g.lower() if g == "ark" and not list_config: print_line("Нет сконфигурированных серверов", flag="RED") # добавить отсюда вилку на вопрос с конфигурацией elif g == "7days": @@ -794,11 +807,11 @@ def check_exist_servers(g): def start_stop(action, g, m): """Функция изменения статусов сервера""" + g = g.lower() if g == "ark": x = check_exist_servers(g) if x: name_servers = choose_map(g,m) if m !='all' else list_config - print("name_servers=",name_servers) for i in name_servers: data = read_yaml(i, g="ark", flag=True) if action == "stop" or action == "restart": @@ -811,10 +824,13 @@ def start_stop(action, g, m): x = os.system(f"systemctl --user {action} 7days.service") if x == 0: print_line("Готово", flag="GREEN") + else: + print_line("доступные игры: ark и 7days") def read_yaml(list_config=list_config, flag=True, m="", g=""): """Читает конфиги активных или неактивных карт в зависимости от флага и отдаёт данные туда где их запросили""" + g = g.lower() if g == "ark": if m == "all": list_config=list_config @@ -828,6 +844,8 @@ def read_yaml(list_config=list_config, flag=True, m="", g=""): def choose_map(g, m, list_config=list_config): """Функция выбора карт""" + g = g.lower() + new_arr = [] if g == "ark": dict_mapname = {} dict_allmapname = [] @@ -841,25 +859,29 @@ def choose_map(g, m, list_config=list_config): name_servers.append(ns) if list_config != []: # Перенести выше для проверки наличия конфигов if m == "all": - name_servers = dict_allmapname + new_arr = dict_allmapname print_line(f"Выполняется для карт(-ы) {name_servers}", flag="CYAN") else: - name_servers = sorted(name_servers) - print_line('Найдены сервера с этой картой', flag="CYAN") - for i, map in enumerate(name_servers): - print_line(f"{i + 1}) {map}", flag="CYAN") - while True: - try: - x = input("Выберите сервер из списка, либо несколько через запятую: ").split(',') - x = [int(i) for i in x] - break - except: - print_line("Неправильный ввод", flag="RED") - for i in x: - name_servers.append(name_servers[i - 1]) - print_line(f"Выбранные сервера: {name_servers}", flag="CYAN") + if name_servers: + name_servers = sorted(name_servers) + print_line('Найдены сервера с этой картой', flag="CYAN") + for i, map in enumerate(name_servers): + print_line(f"{i + 1}) {map}", flag="CYAN") + while True: + try: + x = input("Выберите сервер из списка, либо несколько через запятую: ").split(',') + x = [int(i) for i in x] + break + except: + print_line("Неправильный ввод", flag="RED") + print(name_servers) + for i in x: + new_arr.append(name_servers[i - 1]) + print_line(f"Выбранные сервера: {name_servers}", flag="CYAN") + else: + print_line("Не найдено серверов с картой") - return name_servers + return new_arr @hlna.command(help='Отправка команд на игровой сервер через rcon ')