from __future__ import annotations from dataclasses import dataclass import os from dotenv import load_dotenv @dataclass(frozen=True) class Config: bot_token: str chat_id: int | None db_path: str verify_window_seconds: int thanks_ttl_seconds: int def _get_int(name: str, default: int) -> int: raw = os.getenv(name) if raw is None or raw.strip() == "": return default return int(raw) def load_config() -> Config: load_dotenv() bot_token = (os.getenv("BOT_TOKEN") or "").strip() if not bot_token: raise RuntimeError("BOT_TOKEN is required (set it in .env)") chat_id_raw = (os.getenv("CHAT_ID") or "").strip() chat_id = int(chat_id_raw) if chat_id_raw else None db_path = (os.getenv("DB_PATH") or "./bot.sqlite3").strip() verify_window_seconds = _get_int("VERIFY_WINDOW_SECONDS", 60) thanks_ttl_seconds = _get_int("THANKS_TTL_SECONDS", 60) return Config( bot_token=bot_token, chat_id=chat_id, db_path=db_path, verify_window_seconds=verify_window_seconds, thanks_ttl_seconds=thanks_ttl_seconds, )