This commit is contained in:
2025-01-14 15:16:03 +03:00
parent 6a3fe2d4f2
commit f9ce231443
11 changed files with 178 additions and 1 deletions

68
updater/updater.py Normal file
View File

@@ -0,0 +1,68 @@
from pathlib import Path
import json
import os
import requests
CONFIG_FILE: Path = Path(__file__).parent / "config.json"
CONFIG: dict = {}
with CONFIG_FILE.open() as f:
CONFIG = json.load(f)
TOKEN: str = CONFIG["token"]
MINECRAFT_FOLDER: Path = Path(CONFIG["minecraft"]).resolve()
MODS_FOLDER: Path = MINECRAFT_FOLDER / "mods"
# Создаем папку модов если ее нет
if not MODS_FOLDER.exists():
MODS_FOLDER.mkdir(parents=True)
CURRENT_MODS: list["Path"] = [Path(p).name for p in os.listdir(MODS_FOLDER)]
def get_mod_list():
headers = {'Authorization': TOKEN}
response = requests.get(f'{CONFIG["server.url"]}/mods/files', headers=headers)
if response.status_code == 200:
return response.json().get('files', [])
else:
print(f'Ошибка при получении списка файлов: {response.text}')
return []
def download_file(filename: str, dest: Path):
headers = {'Authorization': TOKEN}
url = f'{CONFIG["server.url"]}/mods/download/{filename}'
response = requests.get(url, headers=headers)
if response.status_code == 200:
with open(dest, 'wb') as f:
f.write(response.content)
print(f'Файл {filename} успешно загружен.')
else:
print(f'Не удалось загрузить файл {filename}: {response.text}')
ACTUAL_MODS: list["str"] = get_mod_list()
TO_DELETE: list["Path"] = []
TO_DOWNLOAD: list["str"] = []
# Проверяем лишние или старые моды
for cur_mod in CURRENT_MODS:
# Проверяем лишние или старые моды
if cur_mod not in ACTUAL_MODS:
TO_DELETE.append(MODS_FOLDER / cur_mod)
for amod in ACTUAL_MODS:
if amod not in CURRENT_MODS:
TO_DOWNLOAD.append(amod)
# Применение действий
# Удаление лишнего
for file in TO_DELETE:
print(f"Удаление {amod}")
os.remove(str(file))
# Скачивание нужного
for filename in TO_DOWNLOAD:
download_file(filename, MODS_FOLDER / filename)