v1.0
This commit is contained in:
68
updater/updater.py
Normal file
68
updater/updater.py
Normal 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)
|
||||
Reference in New Issue
Block a user