diff --git a/hlna.py b/hlna.py index afad1ae..8089b13 100755 --- a/hlna.py +++ b/hlna.py @@ -1,6 +1,5 @@ #!/usr/bin/env python3 import os -import re import threading from pathlib import Path @@ -46,11 +45,12 @@ delist_config = find_file(config_hlna+"deactivated") def print_line(text): """Добавление тире вокруг текста, покраска""" print(colorama.Fore.YELLOW + "-"*30) - print(colorama.Fore.GREEN + text) + print(f"{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): @@ -103,8 +103,6 @@ def config(name_server=list_config): for i in name_server: data = read_yaml(i) print(f"{i} : {data['map']}") - port_s.append(data['Port']) - query_p.append(data['QueryPort']) id_srv[data['SessionName']] = data['id_server'] count_maps = check_int("Укажите количество карт: \n") @@ -135,6 +133,12 @@ def config(name_server=list_config): if 0 < amount_map <= 12: break + if name_server != []: + for i in name_server: + data = read_yaml(i) + port_s.append(data['Port']) + query_p.append(data['QueryPort']) + if amount_map == 1: map_s = "TheIsland" elif amount_map == 2: @@ -165,34 +169,32 @@ def config(name_server=list_config): if name_server != []: data = read_yaml(name_server[-1]) - h = (input("Укажите название Сервера: \n")) - if h == '': + name_server.append(input("Укажите название Сервера: \n")) + if name_server[-1] == '': if map_s in name_server: name_server.pop(); name_server.append(map_s + str(name_server.count(map_s))) else: name_server.pop(); name_server.append(map_s) # если enter, то ставим последним элементом карту - else: - name_server.append(h) - - - while True: - id_server = input("Укажите метку для запуска или конфигурирования этой карты") - if id_server == "": - if id_srv == {}: - print_line("Значение по умолчанию") - else: - if id_srv != {}: # Если есть хоть какой-то id - if id_server in id_srv[name_server[-1]]: # тут ошибка ! - break - if id_server in id_srv.values(): # Если введёное уже есть в списке меток - print_line("Метка уже занята") - else: - id_srv[name_server[-1]] = id_server - break - else: - id_srv[name_server[-1]] = id_server - break + # while True: + # id_server = input("Укажите метку для запуска или конфигурирования этой карты\n") + # if id_server == "": + # if id_srv == {}: + # print_line("Значение по умолчанию") + # else: + # + # + # if id_srv != {}: # Если есть хоть какой-то id + # # if id_server == id_srv[name_server[-1]]: # тут ошибка ! + # # break + # if id_server in id_srv.values(): # Если введёное уже есть в списке меток + # print_line("Метка уже занята") + # else: + # id_srv[name_server[-1]] = id_server + # break + # else: + # id_srv[name_server[-1]] = id_server + # break while True: port_server = check_int("Укажите порт Сервера <7777>: \n") @@ -223,14 +225,13 @@ 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, id_srv[name_server[-1]]) + 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, id_srv): +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, - 'id_server' : id_srv, 'Cluster' : cluster_server, 'SessionName' : name_server, 'Port' : port_server, @@ -255,7 +256,7 @@ def yaml_create(cluster_server, map_s, name_server, port_server, query_port, pas def enablemap(m,e): """Тут переписать надо""" m = m.split(",") - m = check_name_map(m, False) + # m = check_name_map(m, False) create_dir(config_hlna + "deactivated") if e == True: port_s = [] @@ -312,7 +313,8 @@ def servers(map_server=list_config): else: print(colorama.Fore.RED + "Сервер не запущен" + colorama.Style.RESET_ALL) print(f""" - Сервер: {i} + Имя сервера: {i} + Карта: {data['map']} Моды: {data['ModsId']} Пароль: {data['ServerPassword']} Кластер: {data['Cluster']} @@ -328,7 +330,8 @@ def servers(map_server=list_config): for i in delist_config: data = read_yaml(i, False) print(f""" - Сервер: {i} + Имя сервера: {i} + Карта: {data['map']} Моды: {data['ModsId']} Пароль: {data['ServerPassword']} Кластер: {data['Cluster']} @@ -341,22 +344,31 @@ def servers(map_server=list_config): @hlna.command(help='Для запуска, сконфигурированного сервера или кластера') @click.option('-m', default='all', help="Название карты для запуска или all для запуска все карт") -def start(m, map_server=list_config): - if map_server != []: +def start(m, name_server=list_config): + dict_mapname = {} + for i in name_server: + data = read_yaml(i) + print_line(f"Название сервера: {i} | Карта: {data['map']} | Кластер: {data['clusterid']}") + dict_mapname[data['SessionName']] = data['map'] + print_line(f"Словарь названия сервера и карты {dict_mapname}") + names_serverstart = [] + for ns, v in dict_mapname.items(): + print_line(f"переменные v и m {v} & {m}") + if v in m: + names_serverstart.append(ns) + print_line(f"Карта которая запускается {ns}") + if name_server != []: if m == "all": print("Запускаем все активные карты") - else: - m = m.split(",") - m = check_name_map(m) - map_server = m - for i in map_server: + for i in names_serverstart: data = read_yaml(i) create_dir(data['ServerPath'] + i) print_line("Качаем карту: " + i) + starting_map = dict_mapname[i] 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(data['ServerPath'] + i + "/ShooterGame/Binaries/Linux/") @@ -364,7 +376,8 @@ def start(m, map_server=list_config): 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,)) + print_line("Карта скачана: " + i) + threads = threading.Thread(target=start, args=(starting_map,)) threads.start() else: print(f"Карта {i} не установлена") @@ -387,35 +400,16 @@ def delete(m, list_config=list_config): continue -def read_yaml(map_server, flag=True): +def read_yaml(name_server, flag=True): # Читаем конфиги активных или неактивных карт в зависимости от флага if flag == True: - dirs = f"{home_dir}/.config/hlna/{map_server}" + dirs = f"{home_dir}/.config/hlna/{name_server}" else: - dirs = f"{home_dir}/.config/hlna/deactivated/{map_server}" + dirs = f"{home_dir}/.config/hlna/deactivated/{name_server}" with open(dirs, "r") as yamlfile: data = yaml.load(yamlfile, Loader=yaml.FullLoader) return data[0] # возвращаем словарь со всеми значениями -def check_name_map(maps, flag=True): - map_choise = [] - for i in maps: - 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() diff --git a/hlna_bot.py b/hlna_bot.py index f470de7..17fba5e 100755 --- a/hlna_bot.py +++ b/hlna_bot.py @@ -3,11 +3,12 @@ import time import os import telebot from telebot import types +import subprocess import hlna - -key_api = input("Укажите ключ бота") +key_api = '6192661772:AAHB1dw4rXHOglgyTOpcsxwvLn4d3AKkvP4' +#key_api = input("Укажите ключ бота\n") hlna_bot = telebot.TeleBot(f"{key_api}", parse_mode=None) map_server = hlna.list_config @@ -37,7 +38,12 @@ def m_start(m): def m_chose(m): if m.text.strip() == '🦖 Старт': if map_server == []: - hlna_bot.send_message(m.chat.id, text="{0.first_name}, ниодна карта не установлена".format(m.from_user)) + menu_install = types.ReplyKeyboardMarkup(resize_keyboard=True) + k_install = types.KeyboardButton("Установить") + k_back = types.KeyboardButton("Назад") + menu_install.add(k_back, k_install) + hlna_bot.send_message(m.chat.id, text="{0.first_name}, ниодна карта не установлена".format(m.from_user), reply_markup=menu_install) + hlna_bot.register_next_step_handler(m, m_install) else: menu_start = types.ReplyKeyboardMarkup(resize_keyboard=True) for i in map_server: @@ -48,9 +54,15 @@ def m_chose(m): hlna_bot.send_message(m.chat.id, text="{0.first_name}, выбери карту".format(m.from_user), reply_markup=menu_start) elif m.text.strip() == 'Назад': m_start(m) - elif m.text.strip() == 'TheIsland': - hlna.start() -#def m_start(m): + # elif m.text.strip() == 'TheIsland': + # hlna.start() +def m_install(m): + if m.text.strip() == 'Установить': + hlna_bot.send_message(m.chat.id, subprocess.check_output(hlna.config(), shell=True)) + +print("Bot starting") +hlna_bot.polling(none_stop=True, interval=0, timeout=999) + # print("Start") # @@ -108,6 +120,5 @@ def m_chose(m): # time.sleep(30) # pass -print("Bot starting") -hlna_bot.polling(none_stop=True, interval=0, timeout=999) +