forked from NotFate/bot
Настройка локального окружения переменных
This commit is contained in:
65
configs/config.py
Normal file
65
configs/config.py
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
# 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 = "Администратор"
|
||||||
|
|
||||||
|
WARNINGS_FILE: Path = Path("warnings.json")
|
||||||
|
REMINDERS_FILE: Path = Path("reminders.json")
|
||||||
|
BLACKLIST_FILE: Path = Path("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("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",)
|
||||||
Reference in New Issue
Block a user