1
This commit is contained in:
parent
8452a0c3c3
commit
08117b8508
190
hlna.py
190
hlna.py
@ -10,40 +10,6 @@ from pathlib import Path
|
||||
from rcon.source import Client
|
||||
|
||||
home_dir = Path.home()
|
||||
dir_config = f"{home_dir}/.config/hlna/"
|
||||
dir_unit = f"{home_dir}/.config/systemd/user/"
|
||||
dir_server = f"{home_dir}/Servers/"
|
||||
dir_logs = f"{dir_config}logs/"
|
||||
|
||||
dir_server_ark = f"{dir_server}ARK/"
|
||||
dir_server_exec = f"{dir_server_ark}ShooterGame/Binaries/Linux/"
|
||||
|
||||
dir_maps_ark = f"{dir_config}/ARK/"
|
||||
dir_deactivated = f"{dir_maps_ark}deactivated/"
|
||||
|
||||
dir_server_7days = f"{dir_server}/7Days/"
|
||||
|
||||
mods_id = ""
|
||||
now = datetime.datetime.now()
|
||||
date = now.strftime("%Y-%m-%d")
|
||||
time = now.strftime("%H:%M:%S")
|
||||
|
||||
|
||||
@click.group()
|
||||
def hlna():
|
||||
pass
|
||||
|
||||
|
||||
def create_dir(directory):
|
||||
"""Проверка и создание директории"""
|
||||
if not os.path.exists(directory):
|
||||
os.makedirs(directory)
|
||||
|
||||
|
||||
create_dir(dir_server)
|
||||
create_dir(dir_unit)
|
||||
create_dir(dir_config)
|
||||
create_dir(dir_logs)
|
||||
|
||||
|
||||
def find_file(path):
|
||||
@ -58,10 +24,32 @@ def find_file(path):
|
||||
return arr
|
||||
|
||||
|
||||
dir_config = f"{home_dir}/.config/hlna/"
|
||||
dir_maps_ark = f"{dir_config}/ARK/"
|
||||
dir_deactivated = f"{dir_maps_ark}deactivated/"
|
||||
list_config = find_file(dir_maps_ark)
|
||||
delist_config = find_file(dir_deactivated)
|
||||
|
||||
|
||||
def path_server():
|
||||
dir_server = input(f"""Укажите путь до каталога, где будут храниться файлы сервера. По-умолчанию {home_dir}/Servers/
|
||||
:""")
|
||||
if dir_server == "":
|
||||
dir_server = f"{home_dir}/Servers/"
|
||||
yaml_create(game := "path_server", dir_server)
|
||||
return dir_server
|
||||
|
||||
@click.group()
|
||||
def hlna():
|
||||
pass
|
||||
|
||||
|
||||
def create_dir(directory):
|
||||
"""Проверка и создание директории"""
|
||||
if not os.path.exists(directory):
|
||||
os.makedirs(directory)
|
||||
|
||||
|
||||
def print_line(text):
|
||||
"""Добавление тире вокруг текста, покраска"""
|
||||
print(colorama.Fore.YELLOW + "-" * 30)
|
||||
@ -126,7 +114,7 @@ def config_ark(list_config=list_config):
|
||||
if list_config:
|
||||
print("Уже установленные карты: ")
|
||||
for i in list_config:
|
||||
data = read_yaml(i)
|
||||
data = read_yaml(i, game="ARK")
|
||||
print(f"{i} : {data['map']}")
|
||||
|
||||
count_maps = check_int("Укажите количество карт: \n")
|
||||
@ -157,7 +145,7 @@ def config_ark(list_config=list_config):
|
||||
|
||||
if list_config:
|
||||
for i in list_config:
|
||||
data = read_yaml(i)
|
||||
data = read_yaml(i, game="ARK")
|
||||
port_s.append(data['Port'])
|
||||
rcon_p.append(data['RCONPort'])
|
||||
query_p.append(data['QueryPort'])
|
||||
@ -204,7 +192,7 @@ def config_ark(list_config=list_config):
|
||||
return port
|
||||
|
||||
if list_config:
|
||||
data = read_yaml(list_config[-1])
|
||||
data = read_yaml(list_config[-1], game="ARK")
|
||||
while True:
|
||||
name_server = input("Укажите название Сервера: \n")
|
||||
if name_server == "":
|
||||
@ -262,9 +250,7 @@ def config_ark(list_config=list_config):
|
||||
else:
|
||||
listen_server = True
|
||||
|
||||
yaml_create(game := "ARK", cluster_server, map_s, list_config[-1], port_server, query_port, rcon_enabled,
|
||||
rcon_port,
|
||||
adminpassword_server, password_server, max_players, cluster_id, cluster_dir_override, listen_server)
|
||||
yaml_create(game := "ARK", dir_server := "", cluster_server, map_s, list_config[-1], port_server, query_port, rcon_enabled, rcon_port, adminpassword_server, password_server, max_players, cluster_id, cluster_dir_override, listen_server)
|
||||
|
||||
|
||||
def config_7daystodie():
|
||||
@ -287,9 +273,13 @@ def xml_parser():
|
||||
print("Я не умею парсить))")
|
||||
|
||||
|
||||
def yaml_create(game, cluster_server, map_s, name_server, port_server, query_port, rcon_enabled, rcon_port,
|
||||
adminpassword_server, password_server, max_players, cluster_id, cluster_dir_override, listen_server):
|
||||
settings_hlna = [
|
||||
def yaml_create(game, dir_server="", cluster_server="", map_s="", name_server="", port_server="", query_port="", rcon_enabled="", rcon_port="",
|
||||
adminpassword_server="", password_server="", max_players="", id_mods_ark="", cluster_id="", cluster_dir_override="", listen_server=""):
|
||||
if game == "ARK":
|
||||
print_line(dir_maps_ark)
|
||||
print_line(name_server)
|
||||
path_yaml = dir_maps_ark + name_server
|
||||
settings = [
|
||||
{
|
||||
'map': map_s,
|
||||
'Cluster': cluster_server,
|
||||
@ -301,24 +291,31 @@ def yaml_create(game, cluster_server, map_s, name_server, port_server, query_por
|
||||
'ServerAdminPassword': adminpassword_server,
|
||||
'ServerPassword': password_server,
|
||||
'MaxPlayers': max_players,
|
||||
'ModsId': mods_id,
|
||||
'ModsId': id_mods_ark,
|
||||
'Listen': listen_server,
|
||||
'ServerPath': dir_server_ark,
|
||||
'clusterid': cluster_id,
|
||||
'clusterdir': cluster_dir_override
|
||||
}
|
||||
]
|
||||
with open(dir_maps_ark + f"{name_server}", 'w') as yamlfile:
|
||||
yaml.dump(settings_hlna, yamlfile)
|
||||
print(colorama.Fore.GREEN + "Конфиг создан" + colorama.Style.RESET_ALL)
|
||||
elif game == "path_server":
|
||||
path_yaml = dir_config + "config"
|
||||
settings = [
|
||||
{
|
||||
'path_server': dir_server
|
||||
}
|
||||
]
|
||||
elif game != "":
|
||||
systemd_unit_create(game)
|
||||
|
||||
with open(path_yaml, 'w') as yamlfile:
|
||||
yaml.dump(settings, yamlfile)
|
||||
print(colorama.Fore.GREEN + "Конфиг создан" + colorama.Style.RESET_ALL)
|
||||
|
||||
def systemd_unit_create(game, config_7days="", name_server=list_config):
|
||||
if game == "ARK":
|
||||
id_game = "376030"
|
||||
for i in name_server:
|
||||
data = read_yaml(i)
|
||||
data = read_yaml(i, game="ARK")
|
||||
ntff = "" if not data['Cluster'] else "-NoTransferFromFiltering"
|
||||
unit_dir_server = dir_server_ark
|
||||
systemd_unit_exec = f"{dir_server_exec}ShooterGameServer {data['map']}?listen={data['Listen']}?SessionName={data['SessionName']}?Port={data['Port']}?QueryPort={data['QueryPort']}?RCONEnabled={data['RCONEnabled']}?RCONPort={data['RCONPort']}?ServerAdminPassword={data['ServerAdminPassword']}?MaxPlayers={data['MaxPlayers']} -clusterid={data['clusterid']} -ClusterDirOverride={data['clusterdir']} {ntff}"
|
||||
@ -354,19 +351,18 @@ WantedBy=default.target
|
||||
os.system(f"systemctl --user enable {unit_name}")
|
||||
|
||||
|
||||
# def test_mod_install():
|
||||
# pathTest = f"{dir_server_ark}ShooterGame/Saved/Config/LinuxServer/"
|
||||
# if os.path.exists(pathTest):
|
||||
# os.chdir(pathTest)
|
||||
# # "Добавить файл в Game.ini, если модов несколько добавляем еще строку ModIDS=<ModId> [ModInstaller] ModIDS=<ModID>"
|
||||
# # c этим не разобрался
|
||||
# os.system("echo ActiveMods=2943454417 >> GameUserSettings.ini")
|
||||
# else:
|
||||
# print_line("Сервер не установлен")
|
||||
#
|
||||
#
|
||||
# test_mod_install()
|
||||
|
||||
@hlna.command(help='Для скачивания и установки модов')
|
||||
@click.option('-g', help="Название игры для запуска. (ark, 7days")
|
||||
@click.option('-m', default='all', help="Название карты для запуска или all для запуска все карт")
|
||||
def modinstall(g, m):
|
||||
if g == "ark":
|
||||
id_game = "346110"
|
||||
if not os.path.isdir(dir_workshop_ark):
|
||||
create_dir(dir_workshop_ark)
|
||||
id_mods_ark = input("""Укажите id модов через запятую
|
||||
:""")
|
||||
os.environ.get('mod_branch', 'Windows')
|
||||
os.system(f"steamcmd +login anonymous +workshop_download_item {id_game} {id_mods_ark} +quit")
|
||||
|
||||
@hlna.command()
|
||||
@click.option("-m", required=True, help="Название Сервера")
|
||||
@ -433,7 +429,7 @@ def servers(list_config=list_config):
|
||||
print("Сервера не сконфигурированы")
|
||||
else:
|
||||
for i in list_config:
|
||||
data = read_yaml(i)
|
||||
data = read_yaml(i, game="ARK")
|
||||
x = os.system(f"lsof -w -i :{data['Port']}")
|
||||
if x == 0:
|
||||
print(colorama.Fore.GREEN + "Сервер запущен" + colorama.Style.RESET_ALL)
|
||||
@ -476,33 +472,30 @@ def servers(list_config=list_config):
|
||||
@hlna.command(help='Для запуска, сконфигурированного сервера или кластера')
|
||||
@click.option('-g', help="Название игры для запуска. (ark, 7days")
|
||||
@click.option('-m', default='all', help="Название карты для запуска или all для запуска все карт")
|
||||
@click.option('-b', default='', help="")
|
||||
def start(g, m, b):
|
||||
start_stop("start", g, m, b)
|
||||
def start(g, m):
|
||||
start_stop("start", g, m)
|
||||
|
||||
|
||||
@hlna.command(help='Для запуска, сконфигурированного сервера или кластера')
|
||||
@hlna.command(help='Для остановки, сконфигурированного сервера или кластера')
|
||||
@click.option('-g', help="Название игры для запуска. (ark, 7days")
|
||||
@click.option('-m', default='all', help="Название карты для запуска или all для запуска все карт")
|
||||
@click.option('-b', default='', help="")
|
||||
def stop(g, m, b):
|
||||
start_stop("stop", g, m, b)
|
||||
def stop(g, m):
|
||||
start_stop("stop", g, m)
|
||||
|
||||
|
||||
@hlna.command(help='Для запуска, сконфигурированного сервера или кластера')
|
||||
@hlna.command(help='Для перезапуска, сконфигурированного сервера или кластера')
|
||||
@click.option('-g', help="Название игры для запуска. (ark, 7days")
|
||||
@click.option('-m', default='all', help="Название карты для запуска или all для запуска все карт")
|
||||
@click.option('-b', default='', help="")
|
||||
def restart(g, m, b):
|
||||
start_stop("restart", g, m, b)
|
||||
def restart(g, m):
|
||||
start_stop("restart", g, m)
|
||||
|
||||
|
||||
def start_stop(action, g, m, b, list_config=list_config):
|
||||
def start_stop(action, g, m, list_config=list_config):
|
||||
if g == "ark":
|
||||
dict_mapname = {}
|
||||
dict_allmapname = []
|
||||
for i in list_config:
|
||||
data = read_yaml(i)
|
||||
data = read_yaml(i, game="ARK")
|
||||
dict_mapname[data['SessionName']] = data['map']
|
||||
dict_allmapname.append(data['SessionName'])
|
||||
names_serverstart = []
|
||||
@ -510,14 +503,13 @@ def start_stop(action, g, m, b, list_config=list_config):
|
||||
if v in m:
|
||||
names_serverstart.append(ns)
|
||||
if list_config != []: #Перенести выше для проверки наличия конфигов
|
||||
if b == '':
|
||||
if m == "all":
|
||||
names_serverstart = dict_allmapname
|
||||
print(f"Выполняется для карт(-ы) {names_serverstart}")
|
||||
else:
|
||||
names_serverstart = choose_map(names_serverstart)
|
||||
for i in names_serverstart:
|
||||
data = read_yaml(i)
|
||||
data = read_yaml(i, game="ARK")
|
||||
y = os.system(f"~/git/hln-a/hlna.py rcon SaveWorld -m {i}") if action == "restart" or action == "stop" else ""
|
||||
x = os.system(f"systemctl --user {action} ark_{data['SessionName'].lower()}.service")
|
||||
print_line(y)
|
||||
@ -531,10 +523,13 @@ def start_stop(action, g, m, b, list_config=list_config):
|
||||
print_line("Готово")
|
||||
|
||||
|
||||
def read_yaml(list_config, flag=True):
|
||||
def read_yaml(list_config=list_config, flag=True, game=""):
|
||||
# Читаем конфиги активных или неактивных карт в зависимости от флага
|
||||
dirs = f"{dir_maps_ark}{list_config}" if flag else f"{dir_deactivated}{list_config}"
|
||||
with open(dirs, "r") as yamlfile:
|
||||
if game == "ARK":
|
||||
path_yaml = f"{dir_maps_ark}{list_config}" if flag else f"{dir_deactivated}{list_config}"
|
||||
elif game == "path_server":
|
||||
path_yaml = dir_config + "config"
|
||||
with open(path_yaml, "r") as yamlfile:
|
||||
data = yaml.load(yamlfile, Loader=yaml.FullLoader)
|
||||
return data[0] # возвращаем словарь со всеми значениями
|
||||
|
||||
@ -571,7 +566,7 @@ def rcon(m, c):
|
||||
if list_config:
|
||||
rcon_ports = []
|
||||
for i in list_config:
|
||||
data = read_yaml(i)
|
||||
data = read_yaml(i, game="ARK")
|
||||
dict_mapname[data['RCONPort']] = data['map']
|
||||
dict_adminpwd[data['RCONPort']] = data['ServerAdminPassword']
|
||||
if m == "all":
|
||||
@ -597,5 +592,36 @@ def zero(x=""):
|
||||
return ""
|
||||
|
||||
|
||||
if not os.path.exists(dir_config + "config"):
|
||||
dir_server = path_server()
|
||||
else:
|
||||
print_line("else")
|
||||
data = read_yaml(game="path_server")
|
||||
if data['path_server'] == "":
|
||||
path_server()
|
||||
else:
|
||||
print_line(data['path_server'])
|
||||
dir_server = data['path_server']
|
||||
|
||||
|
||||
dir_unit = f"{home_dir}/.config/systemd/user/"
|
||||
dir_logs = f"{dir_config}logs/"
|
||||
|
||||
dir_server_ark = f"{dir_server}ARK/"
|
||||
dir_workshop_ark = f"{dir_server_ark}steamapps/workshop/"
|
||||
dir_server_exec = f"{dir_server_ark}ShooterGame/Binaries/Linux/"
|
||||
|
||||
dir_server_7days = f"{dir_server}/7Days/"
|
||||
|
||||
now = datetime.datetime.now()
|
||||
date = now.strftime("%Y-%m-%d")
|
||||
time = now.strftime("%H:%M:%S")
|
||||
create_dir(dir_server)
|
||||
create_dir(dir_unit)
|
||||
create_dir(dir_config)
|
||||
create_dir(dir_logs)
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
hlna()
|
||||
|
Loading…
Reference in New Issue
Block a user