""" Базовый абстрактный класс для работы с мессенджерами. Автор: Сергей Антропов Сайт: https://devops.org.ru """ import logging from abc import ABC, abstractmethod from typing import Optional, Union, Dict, Any logger = logging.getLogger(__name__) class MessengerClient(ABC): """Базовый абстрактный класс для всех мессенджеров.""" @abstractmethod async def send_message( self, chat_id: Union[str, int], text: str, thread_id: Optional[int] = None, reply_markup: Optional[Dict[str, Any]] = None, disable_web_page_preview: bool = True, parse_mode: str = "HTML", **kwargs ) -> bool: """ Отправить текстовое сообщение. Args: chat_id: ID чата или группы (может быть строкой или числом). text: Текст сообщения. thread_id: ID треда в группе (опционально, не все мессенджеры поддерживают). reply_markup: Клавиатура с кнопками (опционально, формат зависит от мессенджера). disable_web_page_preview: Отключить превью ссылок. parse_mode: Режим парсинга (HTML, Markdown, и т.д.). **kwargs: Дополнительные параметры для конкретного мессенджера. Returns: True если сообщение отправлено успешно, False в противном случае. """ pass @abstractmethod async def send_photo( self, chat_id: Union[str, int], photo: Union[str, bytes], caption: Optional[str] = None, thread_id: Optional[int] = None, parse_mode: str = "HTML", **kwargs ) -> bool: """ Отправить фото. Args: chat_id: ID чата или группы. photo: Путь к файлу, URL, bytes или BytesIO объект с фото. caption: Подпись к фото (опционально). thread_id: ID треда в группе (опционально). parse_mode: Режим парсинга (HTML, Markdown). **kwargs: Дополнительные параметры. Returns: True если фото отправлено успешно, False в противном случае. """ pass @abstractmethod async def send_video( self, chat_id: Union[str, int], video: Union[str, bytes], caption: Optional[str] = None, thread_id: Optional[int] = None, parse_mode: str = "HTML", duration: Optional[int] = None, width: Optional[int] = None, height: Optional[int] = None, **kwargs ) -> bool: """ Отправить видео. Args: chat_id: ID чата или группы. video: Путь к файлу, URL, bytes или BytesIO объект с видео. caption: Подпись к видео (опционально). thread_id: ID треда в группе (опционально). parse_mode: Режим парсинга (HTML, Markdown). duration: Длительность видео в секундах (опционально). width: Ширина видео (опционально). height: Высота видео (опционально). **kwargs: Дополнительные параметры. Returns: True если видео отправлено успешно, False в противном случае. """ pass @abstractmethod async def send_audio( self, chat_id: Union[str, int], audio: Union[str, bytes], caption: Optional[str] = None, thread_id: Optional[int] = None, parse_mode: str = "HTML", duration: Optional[int] = None, performer: Optional[str] = None, title: Optional[str] = None, **kwargs ) -> bool: """ Отправить аудио. Args: chat_id: ID чата или группы. audio: Путь к файлу, URL, bytes или BytesIO объект с аудио. caption: Подпись к аудио (опционально). thread_id: ID треда в группе (опционально). parse_mode: Режим парсинга (HTML, Markdown). duration: Длительность аудио в секундах (опционально). performer: Исполнитель (опционально). title: Название трека (опционально). **kwargs: Дополнительные параметры. Returns: True если аудио отправлено успешно, False в противном случае. """ pass @abstractmethod async def send_document( self, chat_id: Union[str, int], document: Union[str, bytes], caption: Optional[str] = None, thread_id: Optional[int] = None, parse_mode: str = "HTML", filename: Optional[str] = None, **kwargs ) -> bool: """ Отправить документ. Args: chat_id: ID чата или группы. document: Путь к файлу, URL, bytes или BytesIO объект с документом. caption: Подпись к документу (опционально). thread_id: ID треда в группе (опционально). parse_mode: Режим парсинга (HTML, Markdown). filename: Имя файла (опционально). **kwargs: Дополнительные параметры. Returns: True если документ отправлен успешно, False в противном случае. """ pass @property @abstractmethod def messenger_type(self) -> str: """Тип мессенджера (telegram, max, и т.д.).""" pass @property @abstractmethod def supports_threads(self) -> bool: """Поддерживает ли мессенджер треды.""" pass