81 lines
2.6 KiB
Python
81 lines
2.6 KiB
Python
# utils/storage.py
|
|
|
|
import json
|
|
import os
|
|
import datetime
|
|
from utils.constants import DATA_FILE, EVENTS_FILE, LAST_IDS_FILE
|
|
|
|
# 💾 Загрузка пользовательских данных (XP, минуты, уровень)
|
|
def load_user_data() -> dict:
|
|
if not os.path.exists(DATA_FILE):
|
|
return {}
|
|
|
|
try:
|
|
with open(DATA_FILE, "r", encoding="utf-8") as f:
|
|
return json.load(f)
|
|
except json.JSONDecodeError:
|
|
print("⚠️ Ошибка чтения user_data.json")
|
|
return {}
|
|
|
|
# 💾 Сохранение пользовательских данных
|
|
def save_user_data(data: dict):
|
|
with open(DATA_FILE, "w", encoding="utf-8") as f:
|
|
json.dump(data, f, ensure_ascii=False, indent=2)
|
|
|
|
# 📥 Загрузка событий (ивентов)
|
|
def load_event_tasks() -> dict:
|
|
if not os.path.exists(EVENTS_FILE):
|
|
return {}
|
|
|
|
try:
|
|
with open(EVENTS_FILE, "r", encoding="utf-8") as f:
|
|
data = json.load(f)
|
|
|
|
for event_id, value in data.items():
|
|
time_str = value["event"]["start_time"]
|
|
dt = datetime.datetime.fromisoformat(time_str)
|
|
|
|
# Если время без tzinfo, добавляем московскую зону
|
|
if dt.tzinfo is None:
|
|
dt = dt.replace(tzinfo=MOSCOW_TZ)
|
|
|
|
value["event"]["start_time"] = dt
|
|
|
|
return data
|
|
|
|
except Exception as e:
|
|
print(f"❌ Ошибка при загрузке {EVENTS_FILE}: {e}")
|
|
return {}
|
|
|
|
# 💾 Сохранение событий
|
|
def save_event_tasks(event_tasks: dict):
|
|
to_save = {}
|
|
for event_id, value in event_tasks.items():
|
|
to_save[event_id] = {
|
|
"event": {
|
|
"name": value["event"]["name"],
|
|
"start_time": value["event"]["start_time"].isoformat()
|
|
},
|
|
"votes": value["votes"],
|
|
"poll_msg_id": value["poll_msg_id"]
|
|
}
|
|
with open(EVENTS_FILE, "w", encoding="utf-8") as f:
|
|
json.dump(to_save, f, ensure_ascii=False, indent=2)
|
|
|
|
# 📥 Загрузка RSS-ID
|
|
def load_last_ids() -> set:
|
|
if not os.path.exists(LAST_IDS_FILE):
|
|
return set()
|
|
|
|
try:
|
|
with open(LAST_IDS_FILE, "r", encoding="utf-8") as f:
|
|
return set(json.load(f))
|
|
except Exception as e:
|
|
print(f"❌ Ошибка чтения {LAST_IDS_FILE}: {e}")
|
|
return set()
|
|
|
|
# 💾 Сохранение RSS-ID
|
|
def save_last_ids(ids: set):
|
|
with open(LAST_IDS_FILE, "w", encoding="utf-8") as f:
|
|
json.dump(list(ids), f, ensure_ascii=False, indent=2)
|