""" Bot configuration """ import os from typing import Optional from dotenv import load_dotenv load_dotenv() class BotConfig: """Bot configuration class""" def __init__(self): self.token: str = os.getenv("BOT_TOKEN", "") self.backend_api_url: str = os.getenv("BACKEND_API_URL", "http://localhost:8080") self.frontend_url: str = os.getenv("FRONTEND_URL", "http://localhost:5173") self.webhook_secret: Optional[str] = os.getenv("WEBHOOK_SECRET") self.webhook_url: Optional[str] = os.getenv("WEBHOOK_URL") self.bot_username: str = os.getenv("BOT_USERNAME", "QuizBot") self.admin_user_ids: list[int] = self._parse_admin_ids() self.operator_user_ids: list[int] = self._parse_operator_ids() def _parse_admin_ids(self) -> list[int]: """Parse admin user IDs from environment variable""" admin_ids = os.getenv("ADMIN_USER_IDS", "") if not admin_ids: return [] try: return [int(id_str.strip()) for id_str in admin_ids.split(",")] except ValueError: return [] def _parse_operator_ids(self) -> list[int]: """Parse operator user IDs from environment variable""" operator_ids = os.getenv("OPERATOR_USER_IDS", "") if not operator_ids: return [] try: return [int(id_str.strip()) for id_str in operator_ids.split(",")] except ValueError: return [] def validate(self) -> bool: """Validate configuration""" if not self.token: raise ValueError("BOT_TOKEN is required") if not self.backend_api_url: raise ValueError("BACKEND_API_URL is required") if not self.frontend_url: raise ValueError("FRONTEND_URL is required") return True def is_admin(self, user_id: int) -> bool: """Check if user is admin""" return user_id in self.admin_user_ids def is_operator(self, user_id: int) -> bool: """Check if user is operator""" return user_id in self.operator_user_ids or self.is_admin(user_id) def has_admin_privileges(self, user_id: int) -> bool: """Check if user has admin or operator privileges""" return self.is_admin(user_id) or self.is_operator(user_id) class AppConfig: """Application configuration""" DEBUG = os.getenv("DEBUG", "false").lower() == "true" LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO") DATABASE_URL = os.getenv("DATABASE_URL", "") REDIS_URL = os.getenv("REDIS_URL", "") # Global configuration instance config = BotConfig() app_config = AppConfig()