Adding all files
This commit is contained in:
66
utils/constants.py
Normal file
66
utils/constants.py
Normal file
@@ -0,0 +1,66 @@
|
||||
# utils/constants.py
|
||||
|
||||
# 📌 ID серверов и каналов
|
||||
GUILD_ID = 1351125004451844116
|
||||
WELCOME_CHANNEL_ID = 1371097491662966895
|
||||
ACTIVITY_REPORT_CHANNEL_ID = 1361230160547938355
|
||||
ERROR_LOG_CHANNEL_ID = 1361057662300852426
|
||||
SOURCE_CHANNEL_ID = 1366067509463220348
|
||||
POLL_CHANNEL_ID = 1351153746327109732
|
||||
REMINDER_CHANNEL_ID = 1351125004451844118
|
||||
EVENT_REPORT_CHANNEL_ID = 1366290941643849829
|
||||
|
||||
# 📌 Роли
|
||||
NEWBIE_ROLE_ID = 1371100476493402163
|
||||
VLNKI_ROLE_ID = 1361253146738954280
|
||||
ROLE_SHTAB_ID = 1352007627806216342
|
||||
ROLE_PLAYER_ID = 1352007040087756831
|
||||
GLAV_ROLE_ID = {
|
||||
1355632357285040279, # Военкомат
|
||||
1371332437631565876 # Генерал
|
||||
}
|
||||
|
||||
# 🚫 Игнорируемые/исключённые роли
|
||||
IGNORED_ROLE_IDS = {
|
||||
1371331417333694494, 1371331543251025920, 1352007627806216342,
|
||||
1361056253396123999, 1361752697937854737, 1351147823529201786,
|
||||
1353323447375364139, 1355632357285040279, 1371332437631565876,
|
||||
1371331747026829382, 1363645035639214294, 1353362577219911760,
|
||||
1351197551860125717, 1351309207789506591
|
||||
}
|
||||
|
||||
EXCLUDED_ROLE_IDS = IGNORED_ROLE_IDS | {
|
||||
1371100476493402163, # Новобранец
|
||||
1361060646027792484 # Дух
|
||||
}
|
||||
|
||||
# 🏅 Роли по уровням
|
||||
LEVEL_ROLES = {
|
||||
1: 1366086264897671248, # Мл. сержант
|
||||
2: 1367936114626793612, # Сержант
|
||||
3: 1371208783895986227, # Ст. сержант
|
||||
4: 1371208783895986227, # Старшина
|
||||
5: 1371209813874446386, # Прапорщик
|
||||
6: 1371324489475821789 # Ст. прапорщик
|
||||
}
|
||||
|
||||
# 🎖️ Порог XP на уровни
|
||||
LEVEL_THRESHOLDS = {
|
||||
2: 180,
|
||||
3: 720,
|
||||
4: 2880,
|
||||
5: 8640,
|
||||
6: 25920
|
||||
}
|
||||
|
||||
# 🔧 Категории, настройки
|
||||
CATEGORY_ID_TO_CHECK = 1362413791542907031
|
||||
TRACKED_CATEGORY_IDS = [CATEGORY_ID_TO_CHECK]
|
||||
XP_PER_MINUTE = 1
|
||||
SAVE_INTERVAL_MINUTES = 5
|
||||
|
||||
# 💾 Пути к файлам
|
||||
DATA_FILE = "data/user_data.json"
|
||||
EVENTS_FILE = "data/event_tasks.json"
|
||||
LAST_IDS_FILE = "data/last_rss_ids.json"
|
||||
|
||||
80
utils/storage.py
Normal file
80
utils/storage.py
Normal file
@@ -0,0 +1,80 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user