This commit is contained in:
2025-10-03 09:31:12 +07:00
commit 26c59ffb82
15 changed files with 573 additions and 0 deletions

84
code/config.py Normal file
View 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()