Files
bot/configs/config.py

74 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# config.py
from pathlib import Path
from typing import Optional
from pydantic import field_validator
from pydantic_settings import BaseSettings, SettingsConfigDict
class _Settings(BaseSettings):
model_config = SettingsConfigDict(
env_file=".env",
env_file_encoding="utf-8",
extra="ignore",
case_sensitive=False,
validate_default=True,
)
BOT_TOKEN: Optional[str] = None
PREFIX: Optional[str] = '/'
WELCOME_CHANNEL_ID: int = 0
ADMIN_ROLE_NAME: str = "Администратор"
AFK_NICKNAME:str ="AFK"
WARNINGS_FILE: Path = Path("data/warnings.json")
REMINDERS_FILE: Path = Path("data/reminders.json")
BLACKLIST_FILE: Path = Path("data/blacklist.json")
LOG_FILE_NAME: Path = Path("bot.log")
LOG_LEVEL: str = "info"
@field_validator("BOT_TOKEN")
def validate_bot_token(cls, v: Optional[str]) -> str:
if not v:
raise ValueError("Не задан BOT_TOKEN (проверь .env или переменные окружения)")
return v
@field_validator("WELCOME_CHANNEL_ID")
def validate_channel_id(cls, v: int) -> int:
if v <= 0:
raise ValueError("WELCOME_CHANNEL_ID должен быть положительным ID канала")
return v
@field_validator("ADMIN_ROLE_NAME")
def validate_admin_role_name(cls, v: str) -> str:
if not v.strip():
raise ValueError("ADMIN_ROLE_NAME не может быть пустым")
return v
@field_validator("LOG_LEVEL")
def validate_log_level(cls, v: str) -> str:
allowed: set[str] = {"debug", "info", "warning", "error", "critical"}
if v.lower() not in allowed:
raise ValueError(f"LOG_LEVEL должен быть одним из: {', '.join(allowed)}")
return v.lower()
@field_validator("AFK_NICKNAME")
def validate_afk_nickname(cls, v: str) -> str:
# если пустая строка или None, используем дефолт "AFK"
if not v or not v.strip():
return "AFK"
return v.strip()
@field_validator("WARNINGS_FILE", "REMINDERS_FILE", "BLACKLIST_FILE", "LOG_FILE_NAME", mode="before")
def validate_paths(cls, v) -> Optional[Path]:
return Path(v) if isinstance(v, str) else v
# Создаём экземпляр класса настроек
settings = _Settings()
# Настройка экспорта в модули
__all__ = ("settings",)