From 04f816ec76f8a058c0d34f5af32704a37f21d0c3 Mon Sep 17 00:00:00 2001 From: xpamych Date: Thu, 23 Feb 2023 23:59:22 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BA=D0=B0=D0=BA=D0=BE=D0=B9-=D1=82=D0=BE=20?= =?UTF-8?q?=D1=82=D1=83=D0=BF=D0=BD=D1=8F=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hlna.py | 126 ++++++++++++++++++++++++++------------------------------ 1 file changed, 59 insertions(+), 67 deletions(-) diff --git a/hlna.py b/hlna.py index e8cd514..d58e520 100755 --- a/hlna.py +++ b/hlna.py @@ -9,7 +9,7 @@ from pprint import pprint import yaml import click import colorama - +import click_completion home_dir = Path.home() @@ -21,42 +21,48 @@ mods_id = "" listen_server = True +def complete_env_vars(ctx, param, incomplete): + return [k for k in os.environ if k.startswith(incomplete)] + + @click.group() def hlna(): pass def find_file(path): - "Находим все конфиги в зависимости от пути" + """Находим все конфиги в зависимости от пути""" arr = next(os.walk(path), (None, None, []))[2] # [] if no file x = arr.count('.directory') y = arr.count('logs') - if x>0: + if x > 0: arr.remove('.directory') - if y>0: + if y > 0: arr.remove('logs') return arr list_config = find_file(config_hlna) + delist_config = find_file(config_hlna+"deactivated") def print_line(text): - "Добавление тире вокруг текста, покраска" + """Добавление тире вокруг текста, покраска""" print(colorama.Fore.YELLOW + "-"*30) print(colorama.Fore.GREEN + text) print(colorama.Fore.YELLOW + "-"*30 + colorama.Style.RESET_ALL) +print_line(f"list_config=, {list_config}") def create_dir(directory): - "Проверка и создание директории" + """Проверка и создание директории""" if not os.path.exists(directory): os.mkdir(directory) def check_int(number=""): - "Проверка на ввод числа" + """Проверка на ввод числа""" while True: try: x = input(number) @@ -76,8 +82,9 @@ create_dir(config_hlna) @hlna.command(help='Для конфигурирования параметров запускаемого сервера или кластера серверов') def config(name_server=list_config): + port_s = [] query_p = [] - port_s = [] + id_srv = {} cluster_dir_override = "" cluster_id = "" @@ -102,7 +109,7 @@ def config(name_server=list_config): print(f"{i} : {con['map']}") count_maps = check_int("Укажите количество карт: \n") - if count_maps == 0: # 0 возвращает check_int когда, ничего не было введено + if count_maps == 0: # 0 возвращает check_int когда, ничего не было введено count_maps = 1 for i in range(count_maps): @@ -133,7 +140,9 @@ def config(name_server=list_config): data = read_yaml(k) port_s.append(data['Port']) query_p.append(data['QueryPort']) + id_srv[data['map']] = data['id_server'] + print(id_srv) if amount_map == 1: map_s = "TheIsland" @@ -162,11 +171,23 @@ def config(name_server=list_config): name_server.append(input("Укажите название Сервера: \n")) if name_server[-1] == "": - name_server.pop(); name_server.append(map_s) # если enter, то ставим последним элементом карту + name_server.pop(); name_server.append(map_s) # если enter, то ставим последним элементом карту - label = input("Укажите метку для запуска или конфигурирования этой карты, по умолчанию название карты") - if label == "": - label = map_s + data = read_yaml(name_server[-1]) + while True: + id_server = input("Укажите метку для запуска или конфигурирования этой карты, по умолчанию название карты") + if id_server == "": + print_line("Значение по умолчанию") + else: + if id_srv != []: # Если есть хоть какой-то id + if id_server in id_srv: # Если введёное уже есть в списке меток + print_line("Метка уже занята") + else: + id_srv[data['map']] = data['id_server'] + break + else: + id_srv[data['map']] = data['id_server'] + break while True: port_server = check_int("Укажите порт Сервера <7777>: \n") @@ -175,7 +196,7 @@ def config(name_server=list_config): port_server = 7777 else: port_server = max(port_s) + 2 - if port_server is port_s: # если веденный порт есть в списке портов + if port_server is port_s: # если веденный порт есть в списке портов print("Этот порт уже занят") else: break @@ -197,14 +218,14 @@ def config(name_server=list_config): if max_players == 0: max_players = 70 - yaml_create(cluster_server, map_s, name_server[-1], port_server, query_port, password_server, max_players, cluster_id, cluster_dir_override, label) + yaml_create(cluster_server, map_s, name_server[-1], port_server, query_port, password_server, max_players, cluster_id, cluster_dir_override, id_srv[map_s]) -def yaml_create(cluster_server, map_s, name_server, port_server, query_port, password_server, max_players, cluster_id, cluster_dir_override, label): +def yaml_create(cluster_server, map_s, name_server, port_server, query_port, password_server, max_players, cluster_id, cluster_dir_override, id_srv): settings_hlna = [ { 'map' : map_s, - 'label' : label, + 'id_server' : id_srv, 'Cluster' : cluster_server, 'SessionName' : name_server, 'Port' : port_server, @@ -228,7 +249,7 @@ def yaml_create(cluster_server, map_s, name_server, port_server, query_port, pas @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") @@ -272,12 +293,11 @@ def enablemap(m,e): except: pass - - + @hlna.command() def servers(map_server=list_config): - 'Добавить сортивку по кластерам и вывод несколько столбиков' - if map_server==[] and delist_config==[]: + # Добавить сортивку по кластерам и вывод несколько столбиков + if map_server == [] and delist_config == []: print("Сервера не установлены") else: for i in map_server: @@ -315,8 +335,6 @@ def servers(map_server=list_config): print("-" * 40) - - @hlna.command(help='Для запуска, сконфигурированного сервера или кластера') @click.option('-m', default='all', help="Название карты для запуска или all для запуска все карт") def start(m, map_server=list_config): @@ -339,7 +357,7 @@ def start(m, map_server=list_config): def start(i): 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]}") + 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,)) @@ -351,59 +369,34 @@ def start(m, map_server=list_config): print("Ни одной карты не установлено") - - - - - @hlna.command(help='Для удаления серверов') @click.option('-m', required=True, help="Название карты для удаления") -def delete(m): - print("В разработке...") - - +def delete(m, list_config=list_config): + for i in list_config: + data = read_yaml(i) + if data['id_server'] == m: + n = input(f"Вы действительно хотите удалить сервер? Это действие отменить невозможно - {i}, y\\N") + if n == "y": + os.system(f"rm {home_dir}/.config/hlna/{i}") + os.system(f"rm -rf {dir_server}{i}") + else: + continue + + def read_yaml(map_server, flag=True): - "Читаем конфиги активных или неактивных карт в зависимости от флага" + # Читаем конфиги активных или неактивных карт в зависимости от флага if flag == True: - dirs=f"{home_dir}/.config/hlna/{map_server}" + dirs = f"{home_dir}/.config/hlna/{map_server}" else: - dirs=f"{home_dir}/.config/hlna/deactivated/{map_server}" + dirs = f"{home_dir}/.config/hlna/deactivated/{map_server}" with open(dirs, "r") as yamlfile: data = yaml.load(yamlfile, Loader=yaml.FullLoader) - return data[0] # возвращаем словарь со всеми значениями + return data[0] # возвращаем словарь со всеми значениями def check_name_map(maps, flag=True): map_choise = [] for i in maps: - if (i.lower() =="theisland" or i.lower() =="the island" or i.lower() =="island" or i.lower() =="остров" or i.lower() =="the_island"): - map_choise.append("TheIsland") - elif (i.lower() =="thecenter" or i.lower() =="the center" or i.lower() =="center" or i.lower() =="центр" or i.lower() =="the_center"): - map_choise.append("TheCenter") - elif (i.lower() =="scorchedearth_p" or i.lower() =="scorchedearth" or i.lower() =="scorched" or i.lower() =="scorch" or i.lower() =="выжженные" or i.lower() =="пустыня" or i.lower() =="scorched_earth" or i.lower() =="скорч"): - map_choise.append("ScorchedEarth_P") - elif (i.lower() =="ragnarok" or i.lower() =="рагнарек" or i.lower() =="рагнарёк" or i.lower() =="рагнарок"): - map_choise.append("Ragnarok") - elif (i.lower() =="aberration_p" or i.lower() =="aberration" or i.lower() =="aberation" or i.lower() =="аберация" or i.lower() =="аберрация" or i.lower() =="абберация" or i.lower() =="theaberration"): - map_choise.append("Aberration_P") - elif (i.lower() =="extinction" or i.lower() =="theextinction" or i.lower() =="вымирание"): - map_choise.append("Extinction") - elif (i.lower() =="valguero_p" or i.lower() =="valguero" or i.lower() =="thevalguero" or i.lower() =="валгуеро" or i.lower() =="валгуэро"): - map_choise.append("Valguero_P") - elif (i.lower() =="genesis" or i.lower() =="thegenesis" or i.lower() =="genesis1" or i.lower() =="gen" or i.lower() =="gen1" or i.lower() =="gen_1" or i.lower() =="gen-1" or i.lower() =="genesis_1" or i.lower() =="генезис"): - map_choise.append("Genesis") - elif (i.lower() =="crystalisles" or i.lower() =="crystal_isles" or i.lower() =="crystal" or i.lower() =="кристальныеострова" or i.lower() =="кристальные_острова" or i.lower() =="кристальные-острова" \ - or i.lower() =="crystal-isles"): - map_choise.append("CrystalIsles") - elif (i.lower() =="gen2" or i.lower() =="gen_2" or i.lower() =="gen-2" or i.lower() =="genesis2" or i.lower() =="genesis_2" or i.lower() =="genesis-2" or i.lower() =="генезис2"): - map_choise.append("Gen2") - elif (i.lower() =="lostisland" or i.lower() =="lost_island" or i.lower() =="lost-island"): - map_choise.append("LostIsland") - elif (i.lower() =="fjordur" or i.lower() =="fjord" or i.lower() =="фьордур" or i.lower() =="фьорд") : - map_choise.append("Fjordur") - else: - print("Карта-", i, "не распознана") - continue if flag == True: if map_choise[-1] in list_config: print_line(f"{i} - Подготавливаем карту {map_choise[-1]}") @@ -420,6 +413,5 @@ def check_name_map(maps, flag=True): return map_choise - if __name__ == '__main__': hlna()