from __future__ import annotations from typing import Any from yuxi.utils.logging_config import logger class SetupContract: EMPTY_GIF_CONTENT = b"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" RESPONSE_TIMEOUT_S = 3.0 PIPE_TERMINATE_ID = "telegram:pipe:terminate" ACK_TIMEOUT_S = 1.0 def __init__(self, config: dict[str, Any] | None = None): cfg = config or {} self._bot_display_name: str | None = None self._bot_username: str | None = None self._setup_completed = False async def initialize_setup(self, bot) -> bool: try: me = await bot.get_me() self._bot_username = me.username or "" self._bot_display_name = me.first_name or self._bot_username logger.info(f"[Telegram] Setup initialized for @{self._bot_username}") return True except Exception as e: logger.error(f"[Telegram] Setup initialization failed: {e}") return False @property def bot_display_name(self) -> str: return self._bot_display_name or "Telegram Bot" @property def bot_username(self) -> str | None: return self._bot_username @property def setup_completed(self) -> bool: return self._setup_completed def mark_setup_completed(self) -> None: self._setup_completed = True def get_setup_status(self) -> dict[str, Any]: return { "initialized": self._setup_completed, "bot_display_name": self._bot_display_name, "bot_username": self._bot_username, "response_timeout_s": self.RESPONSE_TIMEOUT_S, "ack_timeout_s": self.ACK_TIMEOUT_S, } @staticmethod def create_empty_gif() -> bytes: import base64 return base64.b64decode(SetupContract.EMPTY_GIF_CONTENT)