Не рабочая версия, точнее частично рабочая,скорее всего не работает старт, enable,disable

This commit is contained in:
sitisll 2023-02-22 17:08:12 +03:00
parent 597dc822be
commit 7ae27b8e81

161
hlna.py

@ -1,16 +1,22 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import os import os
import re import re
import yaml
import threading import threading
from pathlib import Path
from pathlib import Path
from pprint import pprint
import yaml
import click import click
import colorama import colorama
home_dir = Path.home() home_dir = Path.home()
dir_server = f"{home_dir}/ARK_Servers/" dir_server = f"{home_dir}/ARK_Servers/"
config_hlna = f"{home_dir}/.config/hlna/" config_hlna = f"{home_dir}/.config/hlna/"
"Убрать"
mods_id = "" mods_id = ""
listen_server = True listen_server = True
@ -70,12 +76,13 @@ create_dir(config_hlna)
@hlna.command(help='Для конфигурирования параметров запускаемого сервера или кластера серверов') @hlna.command(help='Для конфигурирования параметров запускаемого сервера или кластера серверов')
def config(map_server=list_config): def config(name_server=list_config):
query_p = [] query_p = []
port_s = [] port_s = []
cluster_dir_override = "" cluster_dir_override = ""
cluster_id = "" cluster_id = ""
count_cluster = check_int("""Укажите требуется ли кластер? count_cluster = check_int("""Укажите требуется ли кластер?
1. Да 1. Да
2. Нет 2. Нет
@ -89,22 +96,21 @@ def config(map_server=list_config):
cluster_dir_override = (dir_server + cluster_id) cluster_dir_override = (dir_server + cluster_id)
else: else:
cluster_server = False cluster_server = False
if map_server != []: if name_server != []:
print("Уже установленные карты: ") print("Уже установленные карты: ")
for i in map_server: for i in name_server:
print(i) con = read_yaml(i)
print(f"{i} : {con['map']}")
count_maps = check_int("Укажите количество карт: \n") count_maps = check_int("Укажите количество карт: \n")
if count_maps == 0: # 0 возрвращает check_int когда, ничего не было введено if count_maps == 0: # 0 возрвращает check_int когда, ничего не было введено
count_maps = 1 count_maps = 1
print
for i in range(count_maps): for i in range(count_maps):
while True: while True:
"Проверка на выбор карты из списка" "Проверка на выбор карты из списка"
for k in map_server: for k in name_server:
with open(f"{home_dir}/.config/hlna/{k}", "r") as yamlfile: data = read_yaml(k)
data = yaml.load(yamlfile, Loader=yaml.FullLoader)
data = data[0]
port_s.append(data['Port']) port_s.append(data['Port'])
query_p.append(data['QueryPort']) query_p.append(data['QueryPort'])
@ -130,32 +136,33 @@ def config(map_server=list_config):
break break
if amount_map == 1: if amount_map == 1:
map_server.append("TheIsland") map_s = "TheIsland"
elif amount_map == 2: elif amount_map == 2:
map_server.append("TheCenter") map_s = "TheCenter"
elif amount_map == 3: elif amount_map == 3:
map_server.append("ScorchedEarth_P") map_s = "ScorchedEarth_P"
elif amount_map == 4: elif amount_map == 4:
map_server.append("Ragnarok") map_s = "Ragnarok"
elif amount_map == 5: elif amount_map == 5:
map_server.append("Aberration_P") map_s = "Aberration_P"
elif amount_map == 6: elif amount_map == 6:
map_server.append("Extinction") map_s = "Extinction"
elif amount_map == 7: elif amount_map == 7:
map_server.append("Valguero_P") map_s = "Valguero_P"
elif amount_map == 8: elif amount_map == 8:
map_server.append("Genesis") map_S = "Genesis"
elif amount_map == 9: elif amount_map == 9:
map_server.append("CrystalIsles") map_s = "CrystalIsles"
elif amount_map == 10: elif amount_map == 10:
map_server.append("Gen2") map_s = "Gen2"
elif amount_map == 11: elif amount_map == 11:
map_server.append("LostIsland") map_s = "LostIsland"
elif amount_map == 12: elif amount_map == 12:
map_server.append("Fjordur") map_s = "Fjordur"
name_server = input("Укажите название Сервера: \n") name_server.append(input("Укажите название Сервера: \n"))
if name_server == "": if name_server[-1] == "":
name_server = map_server[-1] name_server.pop()
name_server.append(map_s)
while True: while True:
port_server = check_int("Укажите порт Сервера <7777>: \n") port_server = check_int("Укажите порт Сервера <7777>: \n")
@ -185,10 +192,14 @@ def config(map_server=list_config):
max_players = check_int("Укажите максимальное количество игроков: \n") max_players = check_int("Укажите максимальное количество игроков: \n")
if max_players == 0: if max_players == 0:
max_players = 70 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): 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):
settings_hlna = [ settings_hlna = [
{ {
'map' : map_s,
'Cluster' : cluster_server, 'Cluster' : cluster_server,
'SessionName' : name_server, 'SessionName' : name_server,
'Port' : port_server, 'Port' : port_server,
@ -200,19 +211,19 @@ def yaml_create(cluster_server, map_server, name_server, port_server, query_port
'ServerPath' : dir_server 'ServerPath' : dir_server
} }
] ]
print(cluster_id)
if cluster_id != None: if cluster_id != None:
settings_hlna[0]['clusterid'] = cluster_id settings_hlna[0]['clusterid'] = cluster_id
settings_hlna[0]['clusterdir'] = cluster_dir_override settings_hlna[0]['clusterdir'] = cluster_dir_override
with open(config_hlna + f"{map_server[-1]}", 'w') as yamlfile: with open(config_hlna + f"{name_server}", 'w') as yamlfile:
data = yaml.dump(settings_hlna, yamlfile) data = yaml.dump(settings_hlna, yamlfile)
print(colorama.Fore.GREEN + "Конфиг создан" + colorama.Style.RESET_ALL) print(colorama.Fore.GREEN + "Конфиг создан" + colorama.Style.RESET_ALL)
@hlna.command() @hlna.command()
@click.option("-m", required=True, help="Название карты") @click.option("-m", required=True, help="Название Сервера")
@click.option("-e/-d", default=True, help="-e активировать карты, -d деактивировать") @click.option("-e/-d", default=True, help="-e активировать карты, -d деактивировать")
def enablemap(m,e): def enablemap(m,e):
"Тут переписать надо"
m = m.split(",") m = m.split(",")
m = check_name_map(m, False) m = check_name_map(m, False)
create_dir(config_hlna + "deactivated") create_dir(config_hlna + "deactivated")
@ -220,9 +231,7 @@ def enablemap(m,e):
port_s = [] port_s = []
query_p = [] query_p = []
for k in list_config: for k in list_config:
with open(f"{home_dir}/.config/hlna/{k}", "r") as yamlfile: data = read_yaml(k)
data = yaml.load(yamlfile, Loader=yaml.FullLoader)
data = data[0]
port_s.append(data['Port']) port_s.append(data['Port'])
query_p.append(data['QueryPort']) query_p.append(data['QueryPort'])
for i in m: for i in m:
@ -230,14 +239,12 @@ def enablemap(m,e):
if i in list_config: if i in list_config:
print(f"Карта {i} уже есть в активных") print(f"Карта {i} уже есть в активных")
continue continue
with open(f"{home_dir}/.config/hlna/deactivated/{i}", "r") as yamlfile: data = read_yaml(i)
data = yaml.load(yamlfile, Loader=yaml.FullLoader)
data = data[0]
if data['Port'] in port_s: if data['Port'] in port_s:
print("Предлагаем заменить") print("Предлагаем заменить")
if data['QueryPort'] in query_p: if data['QueryPort'] in query_p:
print("Заменить query port?") print("Заменить query port?")
x = os.system(f"mv {config_hlna}deactivated/{i} {config_hlna + i} 2>> {config_hlna}logs") x = os.system(f"mv {config_hlna}deactivated/{i} {config_hlna + i} 2>> {config_hlna}logs") #Добавить текущее время
if x == 0: if x == 0:
print(f"Карта активирована - {i}") print(f"Карта активирована - {i}")
else: else:
@ -252,7 +259,7 @@ def enablemap(m,e):
if i in delist_config: if i in delist_config:
print(f"Карта {i} уже есть в деактивированных") print(f"Карта {i} уже есть в деактивированных")
continue continue
x = os.system(f"mv {config_hlna + i} {config_hlna}deactivated/{i} 2>> {config_hlna}logs") x = os.system(f"mv {config_hlna + i} {config_hlna}deactivated/{i} 2>> {config_hlna}logs") #Добавить текущее время
if x == 0: if x == 0:
print(f"Карта деактивирована - {i}") print(f"Карта деактивирована - {i}")
else: else:
@ -264,45 +271,43 @@ def enablemap(m,e):
@hlna.command() @hlna.command()
def servers(map_server=list_config): def servers(map_server=list_config):
'Добавить сортивку по кластерам и вывод несколько столбиков'
if map_server==[] and delist_config==[]: if map_server==[] and delist_config==[]:
print("Сервера не установлены") print("Сервера не установлены")
else: else:
for i in map_server: 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) data = read_yaml(i)
x = os.system(f"lsof -w -i :{port_server}") x = os.system(f"lsof -w -i :{data['Port']}")
if x == 0: if x == 0:
print(colorama.Fore.GREEN + "Сервер запущен" + colorama.Style.RESET_ALL) print(colorama.Fore.GREEN + "Сервер запущен" + colorama.Style.RESET_ALL)
else: else:
print(colorama.Fore.RED + "Сервер не запущен" + colorama.Style.RESET_ALL) print(colorama.Fore.RED + "Сервер не запущен" + colorama.Style.RESET_ALL)
print(f""" print(f"""
Сервер: {i} Сервер: {i}
Имя сервера: {name_server} Моды: {data['ModsId']}
Кластер: {cluster_server} Пароль: {data['ServerPassword']}
Порт сервера: {port_server} Кластер: {data['Cluster']}
Query порт: {query_port} Кластер id: {data['clusterid']}
Пароль: {password_server} Query порт: {data['QueryPort']}
Максимальное кол-во игроков: {max_players} Порт сервера: {data['Port']}
Моды: {mods_id} Максимальное кол-во игроков: {data['MaxPlayers']}""")
Кластер id: {cluster_id}""")
print("-" * 40) print("-" * 40)
print("\n")
if delist_config!=[]: if delist_config!=[]:
x = input("Есть неактивные сервера, показать Y/n: ") x = input("Есть неактивные сервера, показать Y/n: ")
if x!="n": if x!="n":
for i in delist_config: for i in delist_config:
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, False) data = read_yaml(i, False)
print(f""" print(f"""
Сервер: {i} Сервер: {i}
Имя сервера: {name_server} Моды: {data['ModsId']}
Кластер: {cluster_server} Пароль: {data['ServerPassword']}
Порт сервера: {port_server} Кластер: {data['Cluster']}
Query порт: {query_port} Кластер id: {data['clusterid']}
Пароль: {password_server} Query порт: {data['QueryPort']}
Максимальное кол-во игроков: {max_players} Порт сервера: {data['Port']}
Моды: {mods_id} Максимальное кол-во игроков: {data['MaxPlayers']}""")
Кластер id: {cluster_id}""")
print("-" * 40) print("-" * 40)
print("\n")
@ -323,41 +328,39 @@ def start(m, map_server=list_config):
for i in map_server: 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) data = read_yaml(i)
create_dir(dir_server + i) create_dir(data['ServerPath'] + i)
print_line("Качаем карту: " + i) print_line("Качаем карту: " + i)
os.system(f"steamcmd +force_install_dir {dir_server + i} +login anonymous +app_update 376030 +quit") x = os.system(f"steamcmd +force_install_dir {data['ServerPath'] + i} +login anonymous +app_update 376030 +quit")
print_line("Карта скачана: " + i) print_line("Карта скачана: " + i)
def start(i): def start(i):
os.chdir(dir_server + i + "/ShooterGame/Binaries/Linux/") os.chdir(data['ServerPath'] + 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}") 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]}")
if os.path.exists(dir_server + i + "ShooterGame/Binaries/Linux/"): if x == 0:
threads = threading.Thread(target=start, args=(i,)) threads = threading.Thread(target=start, args=(i,))
threads.start() threads.start()
else: else:
print(f"Карта {i} не установлена") print(f"Карта {i} не установлена")
@hlna.command(help='Для запуска, сконфигурированного сервера или кластера')
@click.option('-m', required=True, help="Название карты для удаления")
def delete(m):
print("В разработке...")
def read_yaml(map_server, flag=True): def read_yaml(map_server, flag=True):
"Читаем конфиги активных или неактивных карт в зависимости от флага"
if flag == True: if flag == True:
dirs=f"{home_dir}/.config/hlna/{map_server}" dirs=f"{home_dir}/.config/hlna/{map_server}"
else: 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: with open(dirs, "r") as yamlfile:
data = yaml.load(yamlfile, Loader=yaml.FullLoader) data = yaml.load(yamlfile, Loader=yaml.FullLoader)
data = data[0] return data[0] # возвращаем словарь со всеми значениями
dir_server = data['ServerPath']
name_server = data['SessionName']
port_server = data['Port']
query_port = data['QueryPort']
password_server = data['ServerPassword']
max_players = data['MaxPlayers']
mods_id = data['ModsId']
listen_server = data['Listen']
cluster_server = data['Cluster']
cluster_id = data['clusterid']
cluster_dir_ovverride = data['clusterdir']
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): def check_name_map(maps, flag=True):