From 368bc9029891b23185be31ac237162b01c8617d7 Mon Sep 17 00:00:00 2001 From: sitisll Date: Fri, 17 Mar 2023 12:29:06 +0300 Subject: [PATCH 1/4] bot rcon --- hlna_bot.py | 66 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 23 deletions(-) diff --git a/hlna_bot.py b/hlna_bot.py index 19c2a99..140eb25 100755 --- a/hlna_bot.py +++ b/hlna_bot.py @@ -86,6 +86,9 @@ def m_mainmenu(m): k_status = types.KeyboardButton("🧾 Статус") menu.add(k_status) + + k_rcon = types.KeyboardButton("🧾 RCON") + menu.add(k_rcon) k_mods = types.KeyboardButton("⏬ Установка модов") menu.add(k_mods) @@ -97,31 +100,20 @@ def m_mainmenu(m): @hlna_bot.message_handler(content_types=["text"]) def m_chose(m): if m.text.strip() == '🦖 Старт': - if list_config == []: - 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: - hlna.read_yaml(list_config[-1], flag=True) - menu_start = types.ReplyKeyboardMarkup(resize_keyboard=True) - for i in list_config: - k_mapname = types.KeyboardButton(i) - menu_start.add(k_mapname) - k_back = types.KeyboardButton("Назад") - menu_start.add(k_back) - hlna_bot.send_message(m.chat.id, text="{0.first_name}, выбери карту".format(m.from_user), reply_markup=menu_start) + check_maps(m) elif m.text.strip() == '🧾 Статус': check_status(m) elif m.text.strip() == 'Назад': m_mainmenu(m) - for i in list_config: - if m.text.strip() == f'{i}': - hlna.print_line(f"Старт карты {i}") - hlna.start() + elif m.text.strip() == '🧾 RCON': + hlna_bot.send_message(m.chat.id, text="{0.first_name}, Введите RCON команду".format(m.from_user),) + hlna_bot.register_next_step_handler(m, rcon) + hlna_bot.send_message(m.chat.id, text="Цикл FOR".format(m.from_user),) + # Попробовать засунуть в отдельную функцию и вызвать через next_step в блоке Старт, после check_maps + #for i in list_config: + # if m.text.strip() == f'{i}': + # hlna.print_line(f"Старт карты {i}") + # hlna.start() # @hlna_bot.message_handler(content_types=["text"]) # def m_mapstart(m): @@ -131,11 +123,39 @@ def m_chose(m): # hlna.print_line(f"Старт карты {i}") # hlna.start() - +def rcon(m): + command = m.text.strip() + check_maps(m) + + hlna_bot.register_next_step_handler(m, rcon_2, command) +def rcon_2(m,command): + print(m.text.strip()) + for i in list_config: + if m.text.strip() == f'{i}': + print(f"python3 ./hlna.py {command} -m {i}") + os.system(f"python3 ./hlna.py {command} -m {i}") def m_install(m): if m.text.strip() == 'Установить': hlna_bot.send_message(m.chat.id, subprocess.check_output(hlna.config(), shell=True)) - +def check_maps(m): + if list_config == []: + 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: + hlna.read_yaml(list_config[-1], flag=True) + menu_start = types.ReplyKeyboardMarkup(resize_keyboard=True) + for i in list_config: + k_mapname = types.KeyboardButton(i) + menu_start.add(k_mapname) + k_back = types.KeyboardButton("Назад") + menu_start.add(k_back) + hlna_bot.send_message(m.chat.id, text="{0.first_name}, выбери карту".format(m.from_user), reply_markup=menu_start) + print("Бот запущен") hlna_bot.polling(none_stop=True, interval=0, timeout=999) From 9f270c8ed768d55ff2491fd4c19517ce9d66ded3 Mon Sep 17 00:00:00 2001 From: sitisll Date: Fri, 17 Mar 2023 15:41:10 +0300 Subject: [PATCH 2/4] =?UTF-8?q?=D1=81=D1=82=D0=B0=D1=80=D1=82=20=D0=B2?= =?UTF-8?q?=D1=81=D0=B5=D1=85=20=D0=BA=D0=B0=D1=80=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hlna.py | 30 ++++++++++++++++-------------- hlna_bot.py | 2 ++ 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/hlna.py b/hlna.py index c322f3b..b9b6cc5 100755 --- a/hlna.py +++ b/hlna.py @@ -365,24 +365,26 @@ def servers(map_server=list_config): @click.option('-m', default='all', help="Название карты для запуска или all для запуска все карт") @click.option('-b', default='', help="") def start(m,b, 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 != []: + 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 = [] if m == "all": print("Запускаем все активные карты") + names_serverstart = name_server + else: + 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 b == '': - names_serverstart = choose_map(names_serverstart) + if b == '': + names_serverstart = choose_map(names_serverstart) server_dir = dir_server + "ShooterGame/Binaries/Linux/" print_line("Валидация файлов сервера") diff --git a/hlna_bot.py b/hlna_bot.py index 140eb25..a78e025 100755 --- a/hlna_bot.py +++ b/hlna_bot.py @@ -15,6 +15,8 @@ list_config = hlna.list_config def start(): + + if not os.path.exists(f"{hlna.home_dir}/.config/hlna/bot/hlna_bot"): key_api = input("Укажите ключ бота\n") os.chdir(f"{hlna.home_dir}/.config/hlna/") From f291b7f732431d7d57adace16bca9ce17b9d5e05 Mon Sep 17 00:00:00 2001 From: sitisll Date: Fri, 17 Mar 2023 17:36:13 +0300 Subject: [PATCH 3/4] pid --- hlna.py | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/hlna.py b/hlna.py index b9b6cc5..085e8d9 100755 --- a/hlna.py +++ b/hlna.py @@ -383,8 +383,8 @@ def start(m,b, name_server=list_config): names_serverstart.append(ns) print_line(f"Карта которая запускается {ns}") - if b == '': - names_serverstart = choose_map(names_serverstart) + if b == '': + names_serverstart = choose_map(names_serverstart) server_dir = dir_server + "ShooterGame/Binaries/Linux/" print_line("Валидация файлов сервера") @@ -400,7 +400,14 @@ def start(m,b, name_server=list_config): ntff = "-NoTransferFromFiltering" def starting(i): + pid = os.getpid() + settings = [{data['SessionName']:pid}] + create_dir(f"{home_dir}/.config/hlna/ServerSettings/conf.txt") + with open(f"{home_dir}/.config/hlna/ServerSettings/conf.txt", 'a') as yamlfile: + yaml.dump(settings, yamlfile) + os.system(f"{server_dir}ShooterGameServer {i}?SessionName={data['SessionName']}?Port={data['Port']}?QueryPort={data['QueryPort']}?RCONEnabled={data['RCONEnabled']}?RCONPort={data['RCONPort']}?ServerAdminPassword={data['ServerAdminPassword']}?MaxPlayers={data['MaxPlayers']}?GameModIds={data['ModsId']}?listen={data['Listen']} -clusterid={data['clusterid']} -ClusterDirOverride={data['clusterdir']} {ntff}") + if x == 0: print_line("Запускаем карту" + i) threads = threading.Thread(target=starting, args=(starting_map,)) @@ -426,7 +433,36 @@ def delete(m, list_config=list_config): else: continue """ +@hlna.command() +@click.option('-m', default='all', help="Название карты для завершения или all для завершения всех карт") +def shootdown(m): + pids = pid() + print(pids) + shootdown_servers = [] + if list_config != []: + if m == "all": + shootdown_servers = pids + else: + arr = m.split(',') + dict_mapname = {} + for i in list_config: + data = read_yaml(i) + dict_mapname[data['SessionName']] = data['map'] + for ns, v in dict_mapname.items(): + if v in m: + shootdown_servers.append(ns) + shootdown_servers = choose_map(shootdown_servers) + + for i in shootdown_servers: + os.system(f"kill {i}") + else: + print("Ни одной карты не установлено") +def pid(): + with open(f"{home_dir}/.config/hlna/ServerSettings/conf.txt", "r") as yamlfile: + data = yaml.load(yamlfile, Loader=yaml.FullLoader) + return data[0] # возвращаем словарь со всеми значениями + def read_yaml(name_server, flag=True): # Читаем конфиги активных или неактивных карт в зависимости от флага if flag == True: From c7a75b518a3fe9e64860248800983c20d78ac0da Mon Sep 17 00:00:00 2001 From: xpamych Date: Sun, 19 Mar 2023 17:32:21 +0300 Subject: [PATCH 4/4] 1 --- hlna.py | 61 +++++++++++++++++++++++---------------------------------- 1 file changed, 25 insertions(+), 36 deletions(-) diff --git a/hlna.py b/hlna.py index 085e8d9..b6a257b 100755 --- a/hlna.py +++ b/hlna.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 import os +import psutil import threading from pathlib import Path @@ -14,7 +15,8 @@ from rcon.source import Client home_dir = Path.home() dir_server = f"{home_dir}/ARK_Servers/" -dir_config = f"{home_dir}/.config/hlna/maps/" +dir_config = f"{home_dir}/.config/hlna/" +dir_config_maps = f"{dir_config}maps/" mods_id = "" listen_server = True @@ -36,8 +38,8 @@ def find_file(path): return arr -list_config = find_file(dir_config) -delist_config = find_file(dir_config+"deactivated") +list_config = find_file(dir_config_maps) +delist_config = find_file(dir_config_maps+"deactivated") def print_line(text): @@ -51,10 +53,6 @@ def create_dir(directory): """Проверка и создание директории""" if not os.path.exists(directory): os.mkdir(directory) - if not os.path.exists(f"{home_dir}/.config/hlna/maps"): - os.chdir(f"{home_dir}/.config/hlna/") - os.chdir(f"{home_dir}/.config/hlna/") - os.mkdir("maps") def check_int(number=""): @@ -72,6 +70,7 @@ def check_int(number=""): create_dir(dir_server) create_dir(dir_config) +create_dir(dir_config_maps) @hlna.command(help='Для конфигурирования параметров запускаемого сервера или кластера серверов') @@ -254,16 +253,16 @@ def yaml_create(cluster_server, map_s, name_server, port_server, query_port, rco 'clusterdir' : cluster_dir_override } ] - with open(dir_config + f"{name_server}", 'w') as yamlfile: + with open(dir_config_maps + f"{name_server}", 'w') as yamlfile: yaml.dump(settings_hlna, yamlfile) print(colorama.Fore.GREEN + "Конфиг создан" + colorama.Style.RESET_ALL) -def test_mod_install(): - pathTest = f"{dir_server}ShooterGame/Saved/Config/LinuxServer/" - os.chdir(pathTest) - # "Добавить файл в Game.ini, если модов несколько добавляем еще строку ModIDS= [ModInstaller] ModIDS=" c этим не разобрался - os.system("echo ActiveMods=2943454417 >> GameUserSettings.ini") -test_mod_install() +# def test_mod_install(): +# pathTest = f"{dir_server}ShooterGame/Saved/Config/LinuxServer/" +# os.chdir(pathTest) +# # "Добавить файл в Game.ini, если модов несколько добавляем еще строку ModIDS= [ModInstaller] ModIDS=" c этим не разобрался +# os.system("echo ActiveMods=2943454417 >> GameUserSettings.ini") +# test_mod_install() @hlna.command() @click.option("-m", required=True, help="Название Сервера") @@ -272,7 +271,7 @@ def enablemap(m,e): """Тут переписать надо""" m = m.split(",") # m = check_name_map(m, False) - create_dir(dir_config + "deactivated") + create_dir(dir_config_maps + "deactivated") if e == True: port_s = [] query_p = [] @@ -290,7 +289,7 @@ def enablemap(m,e): print("Предлагаем заменить") if data['QueryPort'] in query_p: print("Заменить query port?") - x = os.system(f"mv {dir_config}deactivated/{i} {dir_config + i} 2>> {dir_config}logs") #Добавить текущее время + x = os.system(f"mv {dir_config_maps}deactivated/{i} {dir_config + i} 2>> {dir_config}logs") #Добавить текущее время if x == 0: print(f"Карта активирована - {i}") else: @@ -305,7 +304,7 @@ def enablemap(m,e): if i in delist_config: print(f"Карта {i} уже есть в деактивированных") continue - x = os.system(f"mv {dir_config + i} {dir_config}deactivated/{i} 2>> {dir_config}logs") #Добавить текущее время + x = os.system(f"mv {dir_config_maps + i} {dir_config_maps}deactivated/{i} 2>> {dir_config}logs") #Добавить текущее время if x == 0: print(f"Карта деактивирована - {i}") else: @@ -400,24 +399,18 @@ def start(m,b, name_server=list_config): ntff = "-NoTransferFromFiltering" def starting(i): - pid = os.getpid() - settings = [{data['SessionName']:pid}] - create_dir(f"{home_dir}/.config/hlna/ServerSettings/conf.txt") - with open(f"{home_dir}/.config/hlna/ServerSettings/conf.txt", 'a') as yamlfile: - yaml.dump(settings, yamlfile) - os.system(f"{server_dir}ShooterGameServer {i}?SessionName={data['SessionName']}?Port={data['Port']}?QueryPort={data['QueryPort']}?RCONEnabled={data['RCONEnabled']}?RCONPort={data['RCONPort']}?ServerAdminPassword={data['ServerAdminPassword']}?MaxPlayers={data['MaxPlayers']}?GameModIds={data['ModsId']}?listen={data['Listen']} -clusterid={data['clusterid']} -ClusterDirOverride={data['clusterdir']} {ntff}") - if x == 0: print_line("Запускаем карту" + i) threads = threading.Thread(target=starting, args=(starting_map,)) threads.start() + else: print(f"Карта не запущена, сервер не установлен") else: print("Ни одной карты не установлено") - + """ @hlna.command(help='Для удаления серверов') @click.option('-m', required=True, help="Название карты для удаления") @@ -425,7 +418,7 @@ def delete(m, list_config=list_config): for i in list_config: data = read_yaml(i) if data['map_s'] == m: - + n = input(f"Вы действительно хотите удалить сервер? Это действие отменить невозможно - {i}, y\\N") if n == "y": os.system(f"rm {home_dir}/.config/hlna/{i}") @@ -435,13 +428,12 @@ def delete(m, list_config=list_config): """ @hlna.command() @click.option('-m', default='all', help="Название карты для завершения или all для завершения всех карт") -def shootdown(m): - pids = pid() - print(pids) +def restart(m): shootdown_servers = [] if list_config != []: if m == "all": - shootdown_servers = pids + for i in list_config: + os.system(f"$HOME/Yandex.Disk/git/hln-a/hlna.py rcon DoRestartLevel -m {i}") else: arr = m.split(',') dict_mapname = {} @@ -458,10 +450,7 @@ def shootdown(m): os.system(f"kill {i}") else: print("Ни одной карты не установлено") -def pid(): - with open(f"{home_dir}/.config/hlna/ServerSettings/conf.txt", "r") as yamlfile: - data = yaml.load(yamlfile, Loader=yaml.FullLoader) - return data[0] # возвращаем словарь со всеми значениями + def read_yaml(name_server, flag=True): # Читаем конфиги активных или неактивных карт в зависимости от флага @@ -499,8 +488,8 @@ def choose_map(arr): @click.argument('c', nargs=1) @click.option('-m', required=True, help="Название карты для применения rcon команды") def rcon(m,c): - print_line("Команда: ", c) - print_line("Карты: ", m) + # print_line(f"Команда: , {c}") + # print_line(f"Карты: , {m}") dict_mapname = {} dict_adminpwd = {} for i in list_config: