diff --git a/hlna.py b/hlna.py index fc2a8c8..33282e7 100755 --- a/hlna.py +++ b/hlna.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 import os +import re import yaml import threading from pathlib import Path @@ -20,8 +21,22 @@ def hlna(): list_config = next(os.walk(config_hlna), (None, None, []))[2] # [] if no file x = list_config.count('.directory') +y = list_config.count('logs') if x>0: list_config.remove('.directory') +if y>0: + list_config.remove('logs') + + + +delist_config = next(os.walk(config_hlna+"deactivated"), (None, None, []))[2] # [] if no file +x = list_config.count('.directory') +y = list_config.count('logs') +if x>0: + list_config.remove('.directory') +if y>0: + list_config.remove('logs') + def print_line(text): @@ -54,16 +69,11 @@ create_dir(dir_server) create_dir(config_hlna) -@hlna.command(help='Сконфигурировать сервер или кластер серверов') +@hlna.command(help='Для конфигурирования параметров запускаемого сервера или кластера серверов') def config(map_server=list_config): query_p = [] port_s = [] - for i in map_server: - with open(f"{home_dir}/.config/hlna/{i}", "r") as yamlfile: - data = yaml.load(yamlfile, Loader=yaml.FullLoader) - data = data[0] - port_s.append(data['Port']) - query_p.append(data['QueryPort']) + cluster_dir_override = "" cluster_id = "" count_cluster = check_int("""Укажите требуется ли кластер? @@ -86,9 +96,19 @@ def config(map_server=list_config): 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']) + + os.system("clear") amount_map = check_int("""Выберите карту из списка указав номер 1. The Island @@ -136,6 +156,7 @@ def config(map_server=list_config): name_server = input("Укажите название Сервера: \n") if name_server == "": name_server = map_server[-1] + while True: port_server = check_int("Укажите порт Сервера <7777>: \n") if port_server == 0: @@ -146,7 +167,7 @@ def config(map_server=list_config): if port_server is port_s: # если веденный порт есть в списке портов print("Этот порт уже занят") else: - port_s.append(port_server) + break while True: query_port = check_int("Укажите Query-порт Сервера <27015>: \n") @@ -158,15 +179,13 @@ def config(map_server=list_config): if query_port is query_p: # если веденный порт есть в списке портов print("Этот порт уже занят") else: - port_s.append(query_p) + break password_server = input("Укажите пароль Сервера: \n") max_players = check_int("Укажите максимальное количество игроков: \n") - if max_players == "": + 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): settings_hlna = [ { @@ -190,13 +209,71 @@ def yaml_create(cluster_server, map_server, name_server, port_server, query_port print(colorama.Fore.GREEN + "Конфиг создан" + colorama.Style.RESET_ALL) -@hlna.command(help='Текущие установленные сервера') +@hlna.command() +@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") + if e == True: + 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']) + 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] + 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") + if x == 0: + print(f"Карта активирована - {i}") + else: + print(f"{i} либо уже активирована, либо такой карты нет") + except: + print("ошибка") + pass + else: + + for i in m: + try: + 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") + if x == 0: + print(f"Карта деактивирована - {i}") + else: + print(f"{i} либо деактивирована, либо такой карты нет") + except: + pass + + + +@hlna.command() def servers(map_server=list_config): if map_server==[]: 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}") + if x == 0: + print("Сервер запущен") + else: + print("Сервер не запущен") print(f""" Сервер: {i} Имя сервера: {name_server} @@ -207,33 +284,28 @@ def servers(map_server=list_config): Максимальное кол-во игроков: {max_players} Моды: {mods_id} Кластер id: {cluster_id}""") - print("\n") + print("-" * 40) + print("\n") + -@hlna.command(help='Запуск, сконфигурированного сервера или кластера') -def start(map_server=list_config): - map_choise = [] - while True: - "Проверка на выбор имеющихся карт" - check = True - for i in range(len(map_server)): - print(f"{i+1}) {map_server[i]}") - map_list = input("Выбери карты для запуска в формате 1 2 3 или 1,2,3") - map_list = map_list.replace(',', ' ') - map_list = list(set(map_list.split())) - try: - for s in map_list: - if int(s) > len(map_server): - check = False - if len(map_list) <= len(map_server) and check == True: - break - except: - print("Неправильный ввод") - print_line(map_list) - for j in map_list: - print_line(j) - map_choise.append(map_server[int(j) - 1]) - map_server = map_choise +@hlna.command(help='Для запуска, сконфигурированного сервера или кластера') +@click.option('-m', default='all-E', help="Название карты для запуска или all для запуска все карт") +def start(m, map_server=list_config): + if map_server!=[]: + if m == "all": + print("запускаем ВСЕ карты") + elif m == "all-E": + print("Запускаем все активные карты") + else: + m = m.split(",") + m = check_name_map(m) + map_server = m + + else: + print("Ни одной карты не установлено") + + 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) @@ -243,8 +315,11 @@ def start(map_server=list_config): 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}") - threads = threading.Thread(target=start, args=(i,)) - threads.start() + if os.path.exists(dir_server + i + "ShooterGame/Binaries/Linux/"): + threads = threading.Thread(target=start, args=(i,)) + threads.start() + else: + print(f"Карта {i} не установлена") def read_yaml(map_server): @@ -262,10 +337,56 @@ def read_yaml(map_server): cluster_server = data['Cluster'] cluster_id = data['clusterid'] cluster_dir_ovverride = data['clusterdir'] - print(cluster_id) - print(cluster_dir_ovverride) return cluster_server, name_server, port_server, query_port, password_server, max_players, dir_server, mods_id, listen_server, cluster_id, cluster_dir_ovverride +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() =="вымирание" or i.lower() =="scorch" or i.lower() =="выжженные" 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]}") + else: + map_choise.pop() + print("Карта-", i, "не установлена") + else: + if map_choise[-1] in delist_config or map_choise[-1] in list_config: + print_line(f"{i} - Подготавливаем карту {map_choise[-1]}") + else: + map_choise.pop() + print("Карта -", i, "не установлена") + + return map_choise + + + if __name__ == '__main__': - hlna() \ No newline at end of file + hlna()