diff --git a/hlna.py b/hlna.py index c7293f7..95011c3 100755 --- a/hlna.py +++ b/hlna.py @@ -1,11 +1,13 @@ #!/usr/bin/env python3 import os +import pprint import re import sys import zlib import time import struct import curses +import pprint import tarfile import logging import datetime @@ -155,9 +157,10 @@ def print_line(*text, flag="", sep=" ", end="\n"): color = colorama.Fore.CYAN else: color = colorama.Fore.WHITE - len_text = str(text) + + len_text = str(*text) len_text = len_text.split("\n") - max_length = max(len(string) for string in len_text) + 2 + max_length = max(len(str(string)) for string in len_text) + 2 print(color + "." * max_length) print(color, *text, sep=sep, end=end) print(color + "." * max_length + colorama.Style.RESET_ALL) @@ -288,11 +291,11 @@ def ports(port, ports_arr, flag): port = 27015 elif flag == 2: port = 23331 - print_line("Port=", port, flag="CYAN") + print_line(f"Port={port}", flag="CYAN") return port else: port = max(ports_arr) + 2 - print_line("Port=", port, flag="CYAN") + print_line(f"Port={port}", flag="CYAN") if port in ports_arr: print_line("Порт уже занят", flag="RED") port = check_int("Введите новый порт") @@ -388,10 +391,7 @@ def config_maps(i): def config_nameserver(map_s): while True: - name_exist_server = choose_map(g="ark", m=map_s)[-1] # вызывается когда не нужен, затем когда доходит до создания юнита в config_ark туда приходит не то имя, которое ожидалось name_server = input("Укажите название Сервера: \n") - if name_exist_server != name_server: - os.system(f"mv {dir_unit}ark_{name_exist_server}.service {dir_unit}ark_{name_server}.service") if name_server == "": if map_s in list_config: count = 1 @@ -414,9 +414,21 @@ def config_nameserver(map_s): if choose_reconf == "" or choose_reconf == "3": exit() elif choose_reconf == "1": - continue + new_nameserver = input("Укажите название Сервера: \n") + try: + if new_nameserver != name_server: + os.system(f"systemctl --user disable {dir_unit}ark_{name_server.lower()}.service") + os.system(f"rm {dir_unit}ark_{name_server.lower()}.service") + os.system(f"mv {dir_maps_ark}{name_server} {dir_maps_ark}{new_nameserver}") + return new_nameserver, True + else: + print_line("Вы ввели тоже имя.") + continue + except Exception: + print_line(Exception) elif choose_reconf == "2": - config_ark(flag=True) + config_ark(flag=False) + break else: print_line("Выберите ВОЗМОЖНОЕ действие") else: @@ -486,31 +498,37 @@ def config_ark(list_config=list_config, flag=False): id_mods_ark = "" cluster_server, cluster_id, cluster_dir_override = config_cluster() - + count_maps = config_nummap() if list_config: - print_line("Уже установленные карты: ", flag="CYAN") + print_line("Существующие активные карты: ", flag="CYAN") for i in list_config: data = read_yaml(g="ark", m=i) - print_line(f"Карта - {i} : Имя сервера {data['SessionName']}", flag="CYAN") - count_maps = config_nummap() + print_line(f"Карта - {data['map']} : Имя сервера {i}", flag="CYAN") for i in range(count_maps): map_s, port_s, query_p, rcon_p = config_maps(i) - if flag: - list_config = [reconf_yaml()] + if flag == True: + reconf_yaml() + break else: - list_config = config_nameserver(map_s) - port_server = config_ports(port_s) - query_port = config_query(query_p) - rcon_port = config_rcon(rcon_p) - rcon_enabled = True - password_server = config_password() - adminpassword_server = config_adminpassword() - max_players = config_players() - listen_server = config_listen() + name_server, flag = config_nameserver(map_s) + if flag == False: + port_server = config_ports(port_s) + query_port = config_query(query_p) + rcon_port = config_rcon(rcon_p) + rcon_enabled = True + password_server = config_password() + adminpassword_server = config_adminpassword() + max_players = config_players() + listen_server = config_listen() - yaml_create("ark", "", cluster_server, map_s, list_config[-1], port_server, query_port, - rcon_enabled, rcon_port, adminpassword_server, password_server, max_players, - id_mods_ark, cluster_id, cluster_dir_override, listen_server) + yaml_create("ark", "", 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) + data = read_yaml(g="ark", m=map_s) + yaml_create("ark", data['ServerPath'], data['Cluster'], data['map'], name_server, data['Port'], + data['QueryPort'], data['RCONEnabled'], data['RCONPort'], data['ServerAdminPassword'], + data['ServerPassword'],data['MaxPlayers'], id_mods_ark, data['clusterid'], data['clusterdir'], + data['Listen']) def config_7daystodie(): @@ -533,7 +551,7 @@ def config_7daystodie(): @click.argument('g', nargs=1) @click.option('-m', default='all', help="Название карты для запуска или all для запуска всех карт") def config_backup(g, m): - if g == "ark": + if g.lower() == "ark": name_server = choose_map(g, m) if m == "all": all_empty = True # флаг @@ -889,28 +907,19 @@ def switch(g, m, e): # добавить all print_line("ошибка операции", flag="RED") -# Добавить возможность вывода информации по запрошенной игре + карте (серверу), а так же по всем. @hlna.command(help='Выводит статус настроеных серверов') -def status(list_config=list_config): - ext_ip = get_external_ip() - if list_config == [] and delist_config == []: - print_line("Сервера не сконфигурированы", flag="RED") - else: - for i in list_config: - data = read_yaml(g="ark", m=i) - x = os.system(f"lsof -w -i :{data['Port']}") - if x == 0: - print_line("Сервер запущен", flag="GREEN") - else: - print_line("Сервер не запущен", flag="RED") - - # этот принт надо отдельной функцией сделать, чтобы убрать дублирование текста - - print_line(f""" - Имя сервера: {i} +@click.argument('g', nargs=1) +@click.option("-m", default='all', help="Название cервера") +def status(g, m="all", list_config=list_config): + """print_status делает вывод, flag - отвечает за показ активных/неактивных, под 7days надо будет дописать""" + def print_status(g, status_map, flag=True): + data = status_map + print_line(data["status"], flag=("YELLOW", "RED")[flag] if data['status'] == "Не запущен" else "GREEN") + print_line(f""" + Имя сервера: {data['SessionName']} Карта: {data['map']} Моды: {data['ModsId']} - Пароль: {data['ServerPassword']}S + Пароль: {data['ServerPassword']} Кластер: {data['Cluster']} Кластер id: {data['clusterid']} Query порт: {data['QueryPort']} @@ -918,26 +927,34 @@ def status(list_config=list_config): Rcon включен: {data['RCONEnabled']} Rcon порт : {data['RCONPort']} Максимальное кол-во игроков: {data['MaxPlayers']} - steam://connect/{ext_ip}:{data['QueryPort']}""", flag="CYAN") + steam://connect/{get_external_ip()}:{data['QueryPort']}""", flag=("YELLOW","CYAN")[flag]) - if delist_config != []: - x = input("Есть неактивные сервера, показать Y/n: ") - if x != "n": - for i in delist_config: - data = read_yaml(m=i,g="ark", flag=False) - print_line(f""" - Имя сервера: {i} - Карта: {data['map']} - Моды: {data['ModsId']} - Пароль: {data['ServerPassword']} - Кластер: {data['Cluster']} - Кластер id: {data['clusterid']} - Query порт: {data['QueryPort']} - Порт сервера: {data['Port']} - Rcon включен: {data['RCONEnabled']} - Rcon порт : {data['RCONPort']} - Максимальное кол-во игроков: {data['MaxPlayers']}""", flag="YELLOW") + def get_param(g, list_con, flag=True): + for i in list_con: + data = read_yaml(g=g, m=i, flag=flag) + status_map["ark"][flag][data["SessionName"]] = data + status_map["ark"][flag][data["SessionName"]]['status'] = "Не запущен" if os.system(f"lsof -w -i :{data['Port']}") else "Запущен" + if list_config == [] and delist_config == []: + print_line("Сервера не сконфигурированы", flag="RED") + exit() + "Это скорее всего можно как то покрасивее записать, но пока так)" + status_map = {} + status_map["ark"] = {} + status_map["ark"][True] = {} + status_map["ark"][False] = {} + get_param("ark", list_config) + get_param("ark", delist_config, False) + if g == "ark": + name_servers = choose_map(g, m) + for i in name_servers: + print_status(g, status_map[g][True][i]) + if delist_config != []: + x = input("Есть неактивные сервера, показать Y/n: ") + if x != "n": + for i in delist_config: + print_status(g, status_map[g][False][i], False) + return status_map @hlna.command(help='Запуск, сконфигурированного сервера или кластера ') @click.argument('g', nargs=1) @@ -1046,11 +1063,15 @@ def choose_map(g, m, list_config=list_config): print_line('Найдены сервера с этой картой', flag="CYAN") for i, map in enumerate(name_servers): print_line(f"{i + 1}) {map}", flag="CYAN") + print_line(f"{i + 2} Все", flag="CYAN") + x = None if i != 0: while True: try: x = input("Выберите сервер из списка, либо несколько через запятую: ").split(',') - x = [int(i) for i in x] + x = [int(j) for j in x] + if i + 2 in x: + return name_servers break except: print_line("Неправильный ввод", flag="RED")