diff --git a/hlna.py b/hlna.py index b9b5cf8..1b10abf 100755 --- a/hlna.py +++ b/hlna.py @@ -1,16 +1,22 @@ #!/usr/bin/env python3 import os import re -import yaml import threading -from pathlib import Path +from pathlib import Path +from pprint import pprint + +import yaml import click import colorama + + home_dir = Path.home() dir_server = f"{home_dir}/ARK_Servers/" config_hlna = f"{home_dir}/.config/hlna/" + +"Убрать" mods_id = "" listen_server = True @@ -70,18 +76,19 @@ create_dir(config_hlna) @hlna.command(help='Для конфигурирования параметров запускаемого сервера или кластера серверов') -def config(map_server=list_config): +def config(name_server=list_config): query_p = [] port_s = [] cluster_dir_override = "" cluster_id = "" + count_cluster = check_int("""Укажите требуется ли кластер? 1. Да 2. Нет : """) if count_cluster == 0: # 0 возвращает функция chek_int, если ничего не было введено - count_cluster = 2 + count_cluster = 2 if count_cluster == 1: cluster_server = True cluster_id = input("Укажите id для кластера, любое сочетание символов: \n") @@ -89,24 +96,23 @@ def config(map_server=list_config): cluster_dir_override = (dir_server + cluster_id) else: cluster_server = False - if map_server != []: + if name_server != []: print("Уже установленные карты: ") - for i in map_server: - print(i) + for i in name_server: + con = read_yaml(i) + print(f"{i} : {con['map']}") count_maps = check_int("Укажите количество карт: \n") if count_maps == 0: # 0 возрвращает check_int когда, ничего не было введено count_maps = 1 - print + for i in range(count_maps): while True: "Проверка на выбор карты из списка" - for k in map_server: - with open(f"{home_dir}/.config/hlna/{k}", "r") as yamlfile: - data = yaml.load(yamlfile, Loader=yaml.FullLoader) - data = data[0] - port_s.append(data['Port']) - query_p.append(data['QueryPort']) + for k in name_server: + data = read_yaml(k) + port_s.append(data['Port']) + query_p.append(data['QueryPort']) os.system("clear") @@ -130,33 +136,34 @@ def config(map_server=list_config): break if amount_map == 1: - map_server.append("TheIsland") + map_s = "TheIsland" elif amount_map == 2: - map_server.append("TheCenter") + map_s = "TheCenter" elif amount_map == 3: - map_server.append("ScorchedEarth_P") + map_s = "ScorchedEarth_P" elif amount_map == 4: - map_server.append("Ragnarok") + map_s = "Ragnarok" elif amount_map == 5: - map_server.append("Aberration_P") + map_s = "Aberration_P" elif amount_map == 6: - map_server.append("Extinction") + map_s = "Extinction" elif amount_map == 7: - map_server.append("Valguero_P") + map_s = "Valguero_P" elif amount_map == 8: - map_server.append("Genesis") + map_S = "Genesis" elif amount_map == 9: - map_server.append("CrystalIsles") + map_s = "CrystalIsles" elif amount_map == 10: - map_server.append("Gen2") + map_s = "Gen2" elif amount_map == 11: - map_server.append("LostIsland") + map_s = "LostIsland" elif amount_map == 12: - map_server.append("Fjordur") - name_server = input("Укажите название Сервера: \n") - if name_server == "": - name_server = map_server[-1] - + map_s = "Fjordur" + name_server.append(input("Укажите название Сервера: \n")) + if name_server[-1] == "": + name_server.pop() + name_server.append(map_s) + while True: port_server = check_int("Укажите порт Сервера <7777>: \n") if port_server == 0: @@ -185,10 +192,14 @@ def config(map_server=list_config): max_players = check_int("Укажите максимальное количество игроков: \n") if max_players == 0: max_players = 70 - yaml_create(cluster_server, map_server, name_server, port_server, query_port, password_server, max_players, cluster_id, cluster_dir_override) -def yaml_create(cluster_server, map_server, name_server, port_server, query_port, password_server, max_players, cluster_id, cluster_dir_override): + + yaml_create(cluster_server, map_s, name_server[-1], port_server, query_port, password_server, max_players, cluster_id, cluster_dir_override) + + +def yaml_create(cluster_server, map_s, name_server, port_server, query_port, password_server, max_players, cluster_id, cluster_dir_override): settings_hlna = [ { + 'map' : map_s, 'Cluster' : cluster_server, 'SessionName' : name_server, 'Port' : port_server, @@ -200,19 +211,19 @@ def yaml_create(cluster_server, map_server, name_server, port_server, query_port 'ServerPath' : dir_server } ] - print(cluster_id) if cluster_id != None: settings_hlna[0]['clusterid'] = cluster_id settings_hlna[0]['clusterdir'] = cluster_dir_override - with open(config_hlna + f"{map_server[-1]}", 'w') as yamlfile: + with open(config_hlna + f"{name_server}", 'w') as yamlfile: data = yaml.dump(settings_hlna, yamlfile) print(colorama.Fore.GREEN + "Конфиг создан" + colorama.Style.RESET_ALL) @hlna.command() -@click.option("-m", required=True, help="Название карты") +@click.option("-m", required=True, help="Название Сервера") @click.option("-e/-d", default=True, help="-e активировать карты, -d деактивировать") def enablemap(m,e): + "Тут переписать надо" m = m.split(",") m = check_name_map(m, False) create_dir(config_hlna + "deactivated") @@ -220,24 +231,20 @@ def enablemap(m,e): port_s = [] query_p = [] for k in list_config: - with open(f"{home_dir}/.config/hlna/{k}", "r") as yamlfile: - data = yaml.load(yamlfile, Loader=yaml.FullLoader) - data = data[0] - port_s.append(data['Port']) - query_p.append(data['QueryPort']) + data = read_yaml(k) + port_s.append(data['Port']) + query_p.append(data['QueryPort']) for i in m: try: if i in list_config: print(f"Карта {i} уже есть в активных") continue - with open(f"{home_dir}/.config/hlna/deactivated/{i}", "r") as yamlfile: - data = yaml.load(yamlfile, Loader=yaml.FullLoader) - data = data[0] + data = read_yaml(i) if data['Port'] in port_s: print("Предлагаем заменить") if data['QueryPort'] in query_p: print("Заменить query port?") - x = os.system(f"mv {config_hlna}deactivated/{i} {config_hlna + i} 2>> {config_hlna}logs") + x = os.system(f"mv {config_hlna}deactivated/{i} {config_hlna + i} 2>> {config_hlna}logs") #Добавить текущее время if x == 0: print(f"Карта активирована - {i}") else: @@ -252,7 +259,7 @@ def enablemap(m,e): if i in delist_config: print(f"Карта {i} уже есть в деактивированных") continue - x = os.system(f"mv {config_hlna + i} {config_hlna}deactivated/{i} 2>> {config_hlna}logs") + x = os.system(f"mv {config_hlna + i} {config_hlna}deactivated/{i} 2>> {config_hlna}logs") #Добавить текущее время if x == 0: print(f"Карта деактивирована - {i}") else: @@ -264,45 +271,43 @@ def enablemap(m,e): @hlna.command() def servers(map_server=list_config): + 'Добавить сортивку по кластерам и вывод несколько столбиков' if map_server==[] and delist_config==[]: print("Сервера не установлены") else: for i in map_server: - cluster_server, name_server, port_server, query_port, password_server, max_players, dir_server, mods_id, listen_server, cluster_id, cluster_dir_ovverride = read_yaml(i) - x = os.system(f"lsof -w -i :{port_server}") + data = read_yaml(i) + x = os.system(f"lsof -w -i :{data['Port']}") if x == 0: print(colorama.Fore.GREEN + "Сервер запущен" + colorama.Style.RESET_ALL) else: print(colorama.Fore.RED + "Сервер не запущен" + colorama.Style.RESET_ALL) print(f""" Сервер: {i} - Имя сервера: {name_server} - Кластер: {cluster_server} - Порт сервера: {port_server} - Query порт: {query_port} - Пароль: {password_server} - Максимальное кол-во игроков: {max_players} - Моды: {mods_id} - Кластер id: {cluster_id}""") + Моды: {data['ModsId']} + Пароль: {data['ServerPassword']} + Кластер: {data['Cluster']} + Кластер id: {data['clusterid']} + Query порт: {data['QueryPort']} + Порт сервера: {data['Port']} + Максимальное кол-во игроков: {data['MaxPlayers']}""") print("-" * 40) - print("\n") + if delist_config!=[]: x = input("Есть неактивные сервера, показать Y/n: ") if x!="n": for i in delist_config: - cluster_server, name_server, port_server, query_port, password_server, max_players, dir_server, mods_id, listen_server, cluster_id, cluster_dir_ovverride = read_yaml(i, False) + data = read_yaml(i, False) print(f""" Сервер: {i} - Имя сервера: {name_server} - Кластер: {cluster_server} - Порт сервера: {port_server} - Query порт: {query_port} - Пароль: {password_server} - Максимальное кол-во игроков: {max_players} - Моды: {mods_id} - Кластер id: {cluster_id}""") + Моды: {data['ModsId']} + Пароль: {data['ServerPassword']} + Кластер: {data['Cluster']} + Кластер id: {data['clusterid']} + Query порт: {data['QueryPort']} + Порт сервера: {data['Port']} + Максимальное кол-во игроков: {data['MaxPlayers']}""") print("-" * 40) - print("\n") @@ -323,41 +328,39 @@ def start(m, map_server=list_config): for i in map_server: - cluster_server, name_server, port_server, query_port, password_server, max_players, dir_server, mods_id, listen_server, cluster_id, cluster_dir_ovverride = read_yaml(i) - create_dir(dir_server + i) + data = read_yaml(i) + create_dir(data['ServerPath'] + i) print_line("Качаем карту: " + i) - os.system(f"steamcmd +force_install_dir {dir_server + i} +login anonymous +app_update 376030 +quit") + x = os.system(f"steamcmd +force_install_dir {data['ServerPath'] + i} +login anonymous +app_update 376030 +quit") print_line("Карта скачана: " + i) def start(i): - os.chdir(dir_server + i + "/ShooterGame/Binaries/Linux/") - os.system(f"./ShooterGameServer {i}?SessionName={name_server}?Port={port_server}?QueryPort={query_port}?MaxPlayers={max_players}?GameModIds={mods_id}?listen={listen_server} -clusterid={cluster_id} -ClusterDirOverride={cluster_dir_ovverride}") - if os.path.exists(dir_server + i + "ShooterGame/Binaries/Linux/"): + os.chdir(data['ServerPath'] + i + "/ShooterGame/Binaries/Linux/") + os.system(f"./ShooterGameServer {i}?SessionName={data['SessionName']}?Port={data['Port']}?QueryPort={data['QueryPort']}?MaxPlayers={data[MaxPlayers]}?GameModIds={data[ModsId]}?listen={data[Listen]} -clusterid={data['clusterid']} -ClusterDirOverride={data[clusterdir]}") + if x == 0: threads = threading.Thread(target=start, args=(i,)) threads.start() else: print(f"Карта {i} не установлена") + + + +@hlna.command(help='Для запуска, сконфигурированного сервера или кластера') +@click.option('-m', required=True, help="Название карты для удаления") +def delete(m): + print("В разработке...") + + def read_yaml(map_server, flag=True): + "Читаем конфиги активных или неактивных карт в зависимости от флага" if flag == True: dirs=f"{home_dir}/.config/hlna/{map_server}" else: dirs=f"{home_dir}/.config/hlna/deactivated/{map_server}" with open(dirs, "r") as yamlfile: data = yaml.load(yamlfile, Loader=yaml.FullLoader) - data = data[0] - dir_server = data['ServerPath'] - name_server = data['SessionName'] - port_server = data['Port'] - query_port = data['QueryPort'] - password_server = data['ServerPassword'] - max_players = data['MaxPlayers'] - mods_id = data['ModsId'] - listen_server = data['Listen'] - cluster_server = data['Cluster'] - cluster_id = data['clusterid'] - cluster_dir_ovverride = data['clusterdir'] - return cluster_server, name_server, port_server, query_port, password_server, max_players, dir_server, mods_id, listen_server, cluster_id, cluster_dir_ovverride + return data[0] # возвращаем словарь со всеми значениями def check_name_map(maps, flag=True):