commit
This commit is contained in:
84
code/config.py
Normal file
84
code/config.py
Normal file
@@ -0,0 +1,84 @@
|
||||
from typing import Dict, Optional
|
||||
from pydantic import field_validator
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
|
||||
__all__ = ("settings",)
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
"""Конфигурация основных режимов и параметров с валидацией"""
|
||||
|
||||
model_config = SettingsConfigDict(
|
||||
env_file=".env",
|
||||
env_file_encoding="utf-8",
|
||||
extra="ignore",
|
||||
case_sensitive=False,
|
||||
)
|
||||
|
||||
# Режимы и базовые параметры
|
||||
PYTHONUNBUFFERED: str = "1"
|
||||
API_ID: Optional[int] = None
|
||||
API_HASH: Optional[str] = None
|
||||
SOURCE_CHANNEL: Optional[int] = None
|
||||
BOT_TOKEN: Optional[str] = None
|
||||
BOT_USERNAME: Optional[str] = None
|
||||
PHONE_NUMBER: Optional[str] = None
|
||||
PASSWORD: Optional[str] = None
|
||||
ACCOUNT_MODE: bool = True # True = аккаунт, False = бот
|
||||
MSG_PHOTO: bool = True # True = фото, False = inline
|
||||
PERIOD: int = 3600
|
||||
|
||||
# Файл по умолчанию для отправки
|
||||
DEFAULT_PHOTO: str = "assets/image.jpg"
|
||||
TEXT_MESSAGE: str = (
|
||||
"Приветствую, меня зовут Инокендий\n"
|
||||
"#флуд #ролевая #геншинимпакт #геншин #flood #rp #genshin"
|
||||
)
|
||||
|
||||
# Словарь групп: {chat_id: reply_to_message_id}
|
||||
GROUP_IDS: Dict[int, Optional[int]] = {}
|
||||
|
||||
# ================== Валидаторы ==================
|
||||
@field_validator('PYTHONUNBUFFERED')
|
||||
def validate_unbuffered(cls, v: str) -> str:
|
||||
if v not in ('0', '1'):
|
||||
raise ValueError("PYTHONUNBUFFERED должен быть '0' или '1'")
|
||||
return v
|
||||
|
||||
@field_validator('ACCOUNT_MODE')
|
||||
def validate_account_mode(cls, v: bool) -> bool:
|
||||
if not isinstance(v, bool):
|
||||
raise ValueError("ACCOUNT_MODE должен быть булевым: True = аккаунт, False = бот")
|
||||
return v
|
||||
|
||||
@field_validator('PERIOD')
|
||||
def validate_period(cls, v: int) -> int:
|
||||
if v <= 0:
|
||||
raise ValueError("PERIOD должен быть положительным числом")
|
||||
return v
|
||||
|
||||
@field_validator('API_ID')
|
||||
def validate_api_id(cls, v: int) -> int:
|
||||
if v is None or v <= 0:
|
||||
raise ValueError("API_ID должен быть положительным числом")
|
||||
return v
|
||||
|
||||
@field_validator('GROUP_IDS', mode='before')
|
||||
def parse_group_ids(cls, v):
|
||||
"""
|
||||
Конвертирует строку вида "-1003057872759:0,-1002417346920:2"
|
||||
в словарь {chat_id: reply_to_message_id}
|
||||
"""
|
||||
if isinstance(v, str):
|
||||
try:
|
||||
return {int(k): int(val) for k, val in (x.split(":") for x in v.split(","))}
|
||||
except Exception:
|
||||
raise ValueError(
|
||||
"Неправильный формат GROUP_IDS. "
|
||||
"Пример: -100123:0,-100456:2"
|
||||
)
|
||||
return v
|
||||
|
||||
|
||||
# Экземпляр класса
|
||||
settings: Settings = Settings()
|
||||
Reference in New Issue
Block a user