diff --git a/hlna.py b/hlna.py index 02d7580..0adcedb 100755 --- a/hlna.py +++ b/hlna.py @@ -132,7 +132,7 @@ def create_dir(directory): def print_line(*text): """Добавление тире вокруг текста, покраска""" print(colorama.Fore.YELLOW + "-" * 30) - print(f"{colorama.Fore.GREEN} + {text}") + print(colorama.Fore.GREEN, *text) print(colorama.Fore.YELLOW + "-" * 30 + colorama.Style.RESET_ALL) @@ -151,6 +151,7 @@ def check_int(number=""): @hlna.command(help='Сбор настроек для сервера или кластера') def config(): + "Выбор игры для создания сервера" while True: count_game = check_int("""Выберите игру для конфигурирования 1. ARK Survival Evolved @@ -158,19 +159,17 @@ def config(): : """) if count_game == 1: config_ark() - break elif count_game == 2: config_7daystodie() - break else: print_line("Пока есть только ARK и 7Days xD") def config_ark(list_config=list_config): + "конфигурирование сервера арк" create_dir(dir_server_ark) create_dir(dir_maps_ark) """Сбор данных для конфига""" - data = {} port_s = [] rcon_p = [] query_p = [] @@ -184,9 +183,14 @@ def config_ark(list_config=list_config): : """) if count_cluster == 1: cluster_server = True - cluster_id = input("Укажите id для кластера, любое сочетание символов: \n") - create_dir(dir_server_ark + cluster_id) - cluster_dir_override = (dir_server_ark + cluster_id) + while True: + cluster_id = input("Укажите id для кластера, любое сочетание символов: \n") + if cluster_id == '': + print("Введите символы: ") + else: + create_dir(dir_server_ark + cluster_id) + cluster_dir_override = (dir_server_ark + cluster_id) + break else: cluster_server = False @@ -223,11 +227,11 @@ def config_ark(list_config=list_config): break if list_config: - for i in list_config: - data = read_yaml(i, game="ARK") - port_s.append(data['Port']) - rcon_p.append(data['RCONPort']) - query_p.append(data['QueryPort']) + 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']) if amount_map == 1: map_s = "TheIsland" @@ -329,16 +333,16 @@ def config_ark(list_config=list_config): else: listen_server = True - yaml_create(game := "ARK", dir_server := "", cluster_server, map_s, list_config[-1], port_server, query_port, + 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) def config_7daystodie(): - list_simvols = "$@-.%{}+/".split() + "конфигурирование сервера 7 days to die" + list_simvols = ("$","@","-",".","%","{","}","+","/") create_dir(dir_server_7days) - print("Введите имя конфига (serverconfig):\n") - config_7days = input() + config_7days = input("Введите имя конфига (serverconfig):\n") if config_7days == "": config_7days = "serverconfig" elif config_7days == "serverconfig": @@ -347,10 +351,11 @@ def config_7daystodie(): print_line("Запрещённые символы") else: xml_parser() - systemd_unit_create(game := "7Days", config_7days) + systemd_unit_create("7Days", config_7days) def xml_parser(): + "добавить документацию" print("Я не умею парсить))") @@ -358,9 +363,8 @@ def yaml_create(game, dir_server="", cluster_server="", map_s="", name_server="" rcon_enabled="", rcon_port="", adminpassword_server="", password_server="", max_players="", id_mods_ark="", cluster_id="", cluster_dir_override="", listen_server=""): + "добавить документацию" if game == "ARK": - print_line(dir_maps_ark) - print_line(name_server) path_yaml = dir_maps_ark + name_server settings = [ { @@ -397,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): - print_line(systemd_unit_create) + "добавить документацию" if game == "ARK": id_game = "376030" for i in name_server: @@ -444,17 +448,16 @@ WantedBy=default.target @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): create_dir(dir_workshop_ark) id_mods_ark = id_mods_ark[0].split(',') - print_line(id_mods_ark) for id_mod in id_mods_ark: dir_ark_mods = f"{dir_mods_ark}/{id_mod}" if i: os.system(f"steamcmd +login anonymous +workshop_download_item {id_game_workshop} {id_mod} +quit") - print_line("вызов экстракт") modextract(id_mod, id_game_workshop, dir_ark_mods) else: os.system(f"rm -rf {dir_ark_mods}") @@ -464,12 +467,11 @@ def mod(g, m, i, id_mods_ark): def modextract(id_mod, id_game_workshop, dir_ark_mods): - print_line(id_mod) + "добавить документацию" dir_steam_workshop = f"{dir_workshop_ark}/content/{id_game_workshop}/{id_mod}/WindowsNoEditor" dir_extract = dir_ark_mods if id_mod == "111111111": return - try: for curdir, subdirs, files in os.walk(os.path.join(dir_steam_workshop)): for file in files: @@ -483,19 +485,19 @@ def modextract(id_mod, id_game_workshop, dir_ark_mods): os.remove(src) if os.path.isfile(uncompressed): os.remove(uncompressed) - except (UnpackException, SignatureUnpackException, CorruptUnpackException) as e: + except Exception as e: + print(e) print("[x] Unpacking .z files failed, aborting mod install") return False + 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'
(.+)
', modname) modname = modname and modname.group(1) if os.path.isfile(f"{dir_ark_mods}.mod"): - print_line(id_mod) os.remove(f"{dir_ark_mods}.mod") with open(f"{dir_extract}/mod.info", "rb") as modinfo: @@ -539,7 +541,7 @@ def enablemap(m, e): m = m.split(",") if not os.path.isdir(dir_deactivated): create_dir(dir_deactivated) - if e == True: + if e: port_s = [] query_p = [] for k in list_config: @@ -566,11 +568,8 @@ def enablemap(m, e): print(f"Карта активирована - {i}") else: print(f"{i} либо уже активирована, либо такой карты нет") - finally: - pass - # except: - # print("ошибка при активации карты") - # pass + except: + print("ошибка при активации карты") else: for i in m: try: @@ -586,14 +585,15 @@ def enablemap(m, e): else: print(f"{i} либо деактивирована, либо такой карты нет") except: - pass + print("ошибка при деактивации карты") @hlna.command() def status(list_config=list_config): + "добавить документацию" # Добавить сортивку по кластерам и вывод несколько столбиков if list_config == [] and delist_config == []: - print("Сервера не сконфигурированы") + print_line("Сервера не сконфигурированы") else: for i in list_config: data = read_yaml(i, game="ARK") @@ -606,7 +606,7 @@ def status(list_config=list_config): Имя сервера: {i} Карта: {data['map']} Моды: {data['ModsId']} - Пароль: {data['ServerPassword']} + Пароль: {data['ServerPassword']}S Кластер: {data['Cluster']} Кластер id: {data['clusterid']} Query порт: {data['QueryPort']} @@ -637,27 +637,35 @@ def status(list_config=list_config): @hlna.command(help='Для запуска, сконфигурированного сервера или кластера') -@click.option('-g', help="Название игры для запуска. (ark, 7days") +@click.option('-g', required=True, help="Название игры для запуска. (ark, 7days") @click.option('-m', default='all', help="Название карты для запуска или all для запуска все карт") def start(g, m): + "добавить документацию" + #добавить проверку на ввод аргумента ark/7day если else: давать подсказку + #если нет конфигов, то выводим что серверов нет start_stop("start", g, m) @hlna.command(help='Для остановки, сконфигурированного сервера или кластера') -@click.option('-g', help="Название игры для запуска. (ark, 7days") +@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) @hlna.command(help='Для перезапуска, сконфигурированного сервера или кластера') -@click.option('-g', help="Название игры для запуска. (ark, 7days") +@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): + "добавить документацию" if g == "ark": dict_mapname = {} dict_allmapname = [] @@ -680,7 +688,6 @@ def start_stop(action, g, m, list_config=list_config): y = os.system( f"~/git/hln-a/hlna.py rcon SaveWorld -m {i}") if action == "restart" or action == "stop" else "" x = os.system(f"systemctl --user {action} ark_{data['SessionName'].lower()}.service") - print_line(y) if x == 0: print_line("Готово") else: @@ -692,6 +699,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}" @@ -703,6 +711,7 @@ def read_yaml(list_config=list_config, flag=True, game=""): def choose_map(arr): + "добавить документацию" new_arr = [] arr = sorted(arr) print('Найдены сервера с этой картой') @@ -727,8 +736,7 @@ def choose_map(arr): @click.argument('c', nargs=1) @click.option('-m', required=True, help="Название карты для применения rcon команды") def rcon(m, c): - print_line(f"Команда: , {c}") - print_line(f"Карты: , {m}") + "добавить документацию" dict_mapname = {} dict_adminpwd = {} if list_config: @@ -742,7 +750,6 @@ def rcon(m, c): rcon_ports.append(rcon_p) else: for rcon_p, name_map in dict_mapname.items(): - print_line(f"переменные name_map и m {name_map} & {m}") # обьединить с таким же блоком в start() if name_map in m: rcon_ports.append(rcon_p) print_line(f"Карта которая запускается {name_map}") @@ -757,6 +764,7 @@ def rcon(m, c): def zero(x=""): + "Потом пригодится" return "" @@ -767,7 +775,6 @@ else: if data['path_server'] == "": path_server() else: - print_line(data['path_server']) dir_server = data['path_server'] dir_unit = f"{home_dir}/.config/systemd/user/"