60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
|
|
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)
|