print_line

This commit is contained in:
Евгений Храмов 2023-05-28 19:57:43 +03:00
parent 1acba298f4
commit 9d7330f560

86
hlna.py

@ -97,7 +97,7 @@ def unpack(src, dst):
if size_unpacked != size_indexed: if size_unpacked != size_indexed:
msg = f"Header-Index mismatch. Header indicates it should only have {size_unpacked} bytes when uncompressed but the index indicates {size_indexed} bytes." msg = f"Header-Index mismatch. Header indicates it should only have {size_unpacked} bytes when uncompressed but the index indicates {size_indexed} bytes."
logging.critical(msg) logging.critical(msg)
return print_line(msg, flag=False) return print_line(msg, flag="RED")
# Read the actual archive data # Read the actual archive data
data = b'' data = b''
@ -115,19 +115,19 @@ def unpack(src, dst):
if len(uncompressed_data) != size_unpacked_chunk and read_data != len(compression_index): if len(uncompressed_data) != size_unpacked_chunk and read_data != len(compression_index):
msg = f"Index contains more than one partial chunk: was {len(uncompressed_data)} when the full chunk size is {size_unpacked_chunk}, chunk {read_data}/{len(compression_index)}" msg = f"Index contains more than one partial chunk: was {len(uncompressed_data)} when the full chunk size is {size_unpacked_chunk}, chunk {read_data}/{len(compression_index)}"
logging.critical(msg) logging.critical(msg)
return print_line(msg, flag=False) return print_line(msg, flag="RED")
else: else:
msg = f"Uncompressed chunk size is not the same as in the index: was {len(uncompressed_data)} but should be {uncompressed}." msg = f"Uncompressed chunk size is not the same as in the index: was {len(uncompressed_data)} but should be {uncompressed}."
logging.critical(msg) logging.critical(msg)
return print_line(msg, flag=False) return print_line(msg, flag="RED")
else: else:
msg = f"Data types in the headers should be int's. Size Types: unpacked_chunk({type(size_unpacked_chunk)}), packed({type(size_packed)}), unpacked({type(size_unpacked)})" msg = f"Data types in the headers should be int's. Size Types: unpacked_chunk({type(size_unpacked_chunk)}), packed({type(size_packed)}), unpacked({type(size_unpacked)})"
logging.critical(msg) logging.critical(msg)
return print_line(msg, flag=False) return print_line(msg, flag="RED")
else: else:
msg = "The signature and format version is incorrect. Signature was {} should be 2653586369.".format(sigver) msg = "The signature and format version is incorrect. Signature was {} should be 2653586369.".format(sigver)
logging.critical(msg) logging.critical(msg)
return print_line(msg,flag=False) return print_line(msg,flag="RED")
# Write the extracted data to disk # Write the extracted data to disk
with open(dst, 'wb') as f: with open(dst, 'wb') as f:
@ -135,9 +135,16 @@ def unpack(src, dst):
logging.info("Archive has been extracted.") logging.info("Archive has been extracted.")
def print_line(*text, flag=True): def print_line(*text, flag=""):
"""Добавление обводки вокруг текста, покраска""" """Добавление обводки вокруг текста, покраска"""
color = colorama.Fore.GREEN if flag else colorama.Fore.RED if flag == "RED":
color = colorama.Fore.RED
elif flag == "YELLOW":
color = colorama.Fore.YELLOW
elif flag == "GREEN":
color = colorama.Fore.GREEN
elif flag == "CYAN":
color = colorama.Fore.CYAN
print(colorama.Fore.YELLOW + "." * 30) print(colorama.Fore.YELLOW + "." * 30)
print(color, *text) print(color, *text)
print(colorama.Fore.YELLOW + "." * 30 + colorama.Style.RESET_ALL) print(colorama.Fore.YELLOW + "." * 30 + colorama.Style.RESET_ALL)
@ -153,7 +160,7 @@ def check_int(number=""):
x = int(x) x = int(x)
return x return x
except ValueError: except ValueError:
print_line("Введите число") print_line("Введите число", flag="CYAN")
@hlna.command(help='Выбор игры и сбор настроек для сервера(-ов)') @hlna.command(help='Выбор игры и сбор настроек для сервера(-ов)')
@ -167,7 +174,7 @@ def config():
elif count_game == 2: elif count_game == 2:
config_7daystodie() config_7daystodie()
else: else:
print_line("Пока есть только ARK и 7Days xD") print_line("Пока есть только ARK и 7Days xD", flag="YELLOW")
def ports_array(): def ports_array():
@ -192,13 +199,13 @@ def ports(port, ports_arr, flag):
port = 27015 port = 27015
elif flag == 2: elif flag == 2:
port = 23331 port = 23331
print_line("Port=", port) print_line("Port=", port, flag="CYAN")
return port return port
else: else:
port = max(ports_arr) + 2 port = max(ports_arr) + 2
print_line("Port=", port) print_line("Port=", port, flag="CYAN")
if port in ports_arr: if port in ports_arr:
print("Порт уже занят") print_line("Порт уже занят", flag="RED")
else: else:
return port return port
@ -300,15 +307,13 @@ def config_nameserver(map_s):
new_name = f"{map_s}{str(count)}" new_name = f"{map_s}{str(count)}"
count += 1 count += 1
list_config.append(new_name) list_config.append(new_name)
print_line(list_config)
break break
else: else:
print_line(list_config)
list_config.append(map_s) list_config.append(map_s)
break break
else: else:
if name_server in list_config: if name_server in list_config:
print_line("Имя занято", flag=False) print_line("Имя занято", flag="RED")
config_nameserver(map_s) config_nameserver(map_s)
else: else:
list_config.append(name_server) # если enter, то ставим последним элементом карту list_config.append(name_server) # если enter, то ставим последним элементом карту
@ -380,10 +385,8 @@ def config_ark(list_config=list_config):
data = read_yaml(i, g="ark") data = read_yaml(i, g="ark")
print(f"{i} : {data['map']}") print(f"{i} : {data['map']}")
count_maps = config_nummap() count_maps = config_nummap()
print_line(count_maps)
for i in range(count_maps): for i in range(count_maps):
map_s, port_s, query_p, rcon_p = config_maps(i) map_s, port_s, query_p, rcon_p = config_maps(i)
print_line(map_s, port_s, query_p, rcon_p)
list_config = config_nameserver(map_s) list_config = config_nameserver(map_s)
port_server = config_ports(port_s) port_server = config_ports(port_s)
query_port = config_query(query_p) query_port = config_query(query_p)
@ -409,7 +412,7 @@ def config_7daystodie():
elif config_7days == "serverconfig": elif config_7days == "serverconfig":
config_7days = "serverconfig" config_7days = "serverconfig"
elif config_7days in list_simvols: elif config_7days in list_simvols:
print_line("Запрещённые символы", flag=False) print_line("Запрещённые символы", flag="RED")
else: else:
xml_parser() xml_parser()
systemd_unit_create("7Days", config_7days) systemd_unit_create("7Days", config_7days)
@ -425,9 +428,6 @@ def yaml_create(g, dir_server="", cluster_server="", map_s="", name_server="", p
id_mods_ark="", cluster_id="", cluster_dir_override="", listen_server=""): id_mods_ark="", cluster_id="", cluster_dir_override="", listen_server=""):
"""Создаёт на основании собранных данных yaml конфиг""" """Создаёт на основании собранных данных yaml конфиг"""
if g == "ark": if g == "ark":
print_line(type(id_mods_ark))
print_line(id_mods_ark)
print_line(name_server)
path_yaml = dir_maps_ark + name_server path_yaml = dir_maps_ark + name_server
settings = [ settings = [
{ {
@ -522,15 +522,15 @@ def mod(g, m, i, id_mods_ark):
dir_mod_ark = f"{dir_mods_ark}/{id_mod}" dir_mod_ark = f"{dir_mods_ark}/{id_mod}"
if not os.path.isfile(f"{dir_mod_ark}.mod"): if not os.path.isfile(f"{dir_mod_ark}.mod"):
if i: if i:
print_line(f"Скачиваем мод {id_mod}") print_line(f"Скачиваем мод {id_mod}", flag="CYAN")
moddownload(g, m, id_mod, dir_mod_ark) moddownload(g, m, id_mod, dir_mod_ark)
else: else:
os.system(f"rm -rf {dir_mod_ark}") os.system(f"rm -rf {dir_mod_ark}")
print_line(f"{dir_mod_ark} удалён") print_line(f"{dir_mod_ark} удалён", flag="CYAN")
os.system(f"rm {dir_mods_ark}/{id_mod}.mod") os.system(f"rm {dir_mods_ark}/{id_mod}.mod")
print_line(f"{dir_mods_ark}/{id_mod}.mod удалён") print_line(f"{dir_mods_ark}/{id_mod}.mod удалён", flag="CYAN")
else: else:
print_line(f"Мод уже установлен") print_line(f"Мод уже установлен", flag="CYAN")
modupdate(g, m, id_mod, dir_mod_ark) modupdate(g, m, id_mod, dir_mod_ark)
name_server = choose_map(g, m) name_server = choose_map(g, m)
id_mods = id_mods[1:] id_mods = id_mods[1:]
@ -541,14 +541,14 @@ def mod(g, m, i, id_mods_ark):
data['RCONEnabled'], data['RCONPort'], data['ServerAdminPassword'], data['ServerPassword'], data['RCONEnabled'], data['RCONPort'], data['ServerAdminPassword'], data['ServerPassword'],
data['MaxPlayers'], id_mods_ark, data['clusterid'], data['clusterdir'], data['Listen']) data['MaxPlayers'], id_mods_ark, data['clusterid'], data['clusterdir'], data['Listen'])
else: else:
print_line("Введите id модов через запятую без пробелов") print_line("Введите id модов через запятую без пробелов", flag="CYAN")
else: else:
print_line("Не поддерживаемая игра") print_line("Не поддерживаемая игра", flag="RED")
def modupdate(g, m, id_mod, dir_mod_ark): def modupdate(g, m, id_mod, dir_mod_ark):
if g == "ark": if g == "ark":
print_line(f"Проверяем обновление мода {id_mod}") print_line(f"Проверяем обновление мода {id_mod}", flag="CYAN")
with open(os.path.join(dir_mod_ark, f"appworkshop_346110.acf"), "r") as f: with open(os.path.join(dir_mod_ark, f"appworkshop_346110.acf"), "r") as f:
content = f.readlines() content = f.readlines()
content = "".join(content) content = "".join(content)
@ -571,14 +571,14 @@ def modupdate(g, m, id_mod, dir_mod_ark):
steam_date = json_zapros['response']['publishedfiledetails'][0]['time_updated'] steam_date = json_zapros['response']['publishedfiledetails'][0]['time_updated']
if int(steam_date) != int(locale_date): if int(steam_date) != int(locale_date):
print_line(f"Обновляем мод {id_mod}") print_line(f"Обновляем мод {id_mod}", flag="CYAN")
moddownload(g, m, id_mod, dir_mod_ark) moddownload(g, m, id_mod, dir_mod_ark)
else: else:
print_line(f"Мод {id_mod} обновлен") print_line(f"Мод {id_mod} обновлен", flag="GREEN")
def modupdateall(g, m): def modupdateall(g, m):
print_line("Проверяем обновление всех установленных модов") print_line("Проверяем обновление всех установленных модов", flag="CYAN")
for file in os.listdir(dir_mods_ark): for file in os.listdir(dir_mods_ark):
if os.path.isfile(os.path.join(dir_mods_ark, file)): if os.path.isfile(os.path.join(dir_mods_ark, file)):
if file.endswith('.mod'): if file.endswith('.mod'):
@ -701,23 +701,23 @@ def switch(g, m, e): #добавить all
enable = "enable" if e else "disable" enable = "enable" if e else "disable"
os.system(f"systemctl --user {enable} ark_{i}") os.system(f"systemctl --user {enable} ark_{i}")
else: else:
print_line(f"Ошибка перемещения {i}", flag=False) print_line(f"Ошибка перемещения {i}", flag="RED")
except: except:
print_line("ошибка операции", flag=False) print_line("ошибка операции", flag="RED")
@hlna.command(help='Выводит статус настроеных серверов') @hlna.command(help='Выводит статус настроеных серверов')
def status(list_config=list_config): def status(list_config=list_config):
if list_config == [] and delist_config == []: if list_config == [] and delist_config == []:
print_line("Сервера не сконфигурированы", flag=False) print_line("Сервера не сконфигурированы", flag="RED")
else: else:
for i in list_config: for i in list_config:
data = read_yaml(i, g="ark") data = read_yaml(i, g="ark")
x = os.system(f"lsof -w -i :{data['Port']}") x = os.system(f"lsof -w -i :{data['Port']}")
if x == 0: if x == 0:
print_line("Сервер запущен") print_line("Сервер запущен", flag="GREEN")
else: else:
print_line("Сервер не запущен", flag=False) print_line("Сервер не запущен", flag="RED")
# этот принт надо отдельной функцией сделать, чтобы убрать дублирование текста # этот принт надо отдельной функцией сделать, чтобы убрать дублирование текста
@ -786,11 +786,11 @@ def check_exist_servers(g):
"""Проверяет наличие конфигов для активных карт""" """Проверяет наличие конфигов для активных карт"""
if g == "ark": if g == "ark":
if list_config == []: if list_config == []:
print_line("Нет сконфигурированных серверов", flag=False) # добавить отсюда вилку на вопрос с конфигурацией print_line("Нет сконфигурированных серверов", flag="RED") # добавить отсюда вилку на вопрос с конфигурацией
else: else:
return return
elif g == "7days": elif g == "7days":
print_line("7Days") print_line("7Days", flag="CYAN")
def start_stop(action, g, m): def start_stop(action, g, m):
@ -805,12 +805,12 @@ def start_stop(action, g, m):
x = os.system(f"systemctl --user {action} ark_{data['SessionName'].lower()}.service") x = os.system(f"systemctl --user {action} ark_{data['SessionName'].lower()}.service")
if x == 0: if x == 0:
print_line(f"Готово {action} для {g}") print_line(f"Готово {action} для {g}", flag="GREEN")
elif g == "7days": elif g == "7days":
x = os.system(f"systemctl --user {action} 7days.service") x = os.system(f"systemctl --user {action} 7days.service")
if x == 0: if x == 0:
print_line("Готово") print_line("Готово", flag="GREEN")
else: else:
return return
@ -857,7 +857,7 @@ def choose_map(g, m, list_config=list_config):
x = [int(i) for i in x] x = [int(i) for i in x]
break break
except: except:
print_line("Неправильный ввод", flag=False) print_line("Неправильный ввод", flag="RED")
for i in x: for i in x:
name_servers.append(name_servers[i - 1]) name_servers.append(name_servers[i - 1])
print('Выбранные сервера:', name_servers) print('Выбранные сервера:', name_servers)
@ -894,11 +894,11 @@ def rcon_local(m, c):
passwd = dict_adminpwd[port] passwd = dict_adminpwd[port]
with Client('127.0.0.1', port, passwd=str(passwd)) as client: with Client('127.0.0.1', port, passwd=str(passwd)) as client:
response = client.run(c) response = client.run(c)
print_line(f"Rcon выполнен {response} {dict_mapname[port]}") print_line(f"Rcon выполнен {response} {dict_mapname[port]}", flag="GREEN")
else: else:
pass pass
except: except:
print_line(f"Ошибка отправки команды {c} в {m}", flag=False) print_line(f"Ошибка отправки команды {c} в {m}", flag="RED")
def zero(x=""): def zero(x=""):