diff --git a/maxapi/methods/subscribe_webhook.py b/maxapi/methods/subscribe_webhook.py new file mode 100644 index 0000000..478abee --- /dev/null +++ b/maxapi/methods/subscribe_webhook.py @@ -0,0 +1,70 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Optional + +from ..methods.types.subscribed import Subscribed + +from ..enums.http_method import HTTPMethod +from ..enums.api_path import ApiPath +from ..enums.update import UpdateType + +from ..connection.base import BaseConnection + + +if TYPE_CHECKING: + from ..bot import Bot + + +class SubscribeWebhook(BaseConnection): + + """ + Подписывает бота на получение обновлений через WebHook. + После вызова этого метода бот будет получать уведомления о новых событиях в чатах на указанный URL. + Ваш сервер должен прослушивать один из следующих портов: `80`, `8080`, `443`, `8443`, `16384`-`32383`. + + Args: + bot (Bot): Экземпляр бота для выполнения запроса. + url (str): URL HTTP(S)-эндпойнта вашего бота. Должен начинаться с http(s):// + update_types (Optional[List[str]]): Список типов обновлений, которые ваш бот хочет получать. Для полного списка типов см. объект + secret (str): От 5 до 256 символов. Cекрет, который должен быть отправлен в заголовке X-Max-Bot-Api-Secret в каждом запросе Webhook. Разрешены только символы A-Z, a-z, 0-9, и дефис. Заголовок рекомендован, чтобы запрос поступал из установленного веб-узла + """ + + def __init__( + self, + bot: 'Bot', + url: str, + update_types: Optional[List[UpdateType]] = None, + secret: Optional[str] = None + ): + self.bot = bot + self.url = url + self.update_types = update_types + self.secret = secret + + async def fetch(self) -> Subscribed: + + """ + Отправляет запрос на подписку бота на получение обновлений через WebHook + + Returns: + Subscribed: Объект с информацией об операции + """ + + if self.bot is None: + raise RuntimeError('Bot не инициализирован') + + json: Dict[str, Any] = {} + + json['url'] = self.url + + if self.update_types: + json['update_types'] = self.update_types + + if self.secret: + json['secret'] = self.secret + + return await super().request( + method=HTTPMethod.POST, + path=ApiPath.SUBSCRIPTIONS, + model=Subscribed, + params=self.bot.params, + json=json + ) \ No newline at end of file