Исходный код maxo.bot.methods.subscriptions.get_updates

from adaptix.load_error import LoadError
from unihttp.http import HTTPResponse
from unihttp.serialize import ResponseLoader

from maxo import loggers
from maxo.bot.methods.base import MaxoMethod
from maxo.bot.methods.markers import Query
from maxo.omit import Omittable, Omitted
from maxo.types.update_list import UpdateList
from maxo.types.updates import Updates


[документация] class GetUpdates(MaxoMethod[UpdateList], slots=False): """ Получение обновлений о событиях через Long Polling > ! Получение обновлений с помощью [Long Polling](https://dev.max.ru/docs-api/methods/GET/updates) ограничено по скорости и сроку хранения событий - этот способ не подходит для production-окружения. Рекомендуем на всех этапах работы использовать [Webhook](https://dev.max.ru/docs-api/methods/POST/subscriptions) Метод `GET /updates` можно использовать для получения обновлений при разработке и тестировании, если ваш бот не подписан на Webhook. **Для production-окружения используйте только Webhook** Каждое обновление со списком событий имеет свой порядковый номер. Свойство `marker` в ответе указывает на следующее ожидаемое обновление. После того, как вы передали `marker` с указателем на конкретное обновление, все предыдущие считаются прочитанными Если параметр `marker` **не передан** или передано значение `null`, вы получите только последнее обновление #### Пример запроса: ```bash curl -X GET "https://platform-api2.max.ru/updates" \ -H "Authorization: {access_token}" ``` Args: limit: Максимальное количество обновлений о событиях, которое может вернуться в ответе на запрос marker: Чтобы получить последнее обновление событий, передайте `null` или оставьте поле пустым. Чтобы получить все обновления по событиям с момента предыдущего запроса, передайте значение `marker`, которое получили в ответ на предыдущий запрос timeout: Тайм-аут в секундах для долгого опроса types: Список типов событий, которые вы хотите получать, например: `message_created`, `message_callback`. Полный список возможных событий смотрите в описании [объекта `Update`](https://dev.max.ru/docs-api/objects/Update) Источник: https://dev.max.ru/docs-api/methods/GET/updates """ __url__ = "updates" __method__ = "get" limit: Query[Omittable[int]] = Omitted() """Максимальное количество обновлений о событиях, которое может вернуться в ответе на запрос""" marker: Query[Omittable[int | None]] = Omitted() """Чтобы получить последнее обновление событий, передайте `null` или оставьте поле пустым. Чтобы получить все обновления по событиям с момента предыдущего запроса, передайте значение `marker`, которое получили в ответ на предыдущий запрос""" timeout: Query[Omittable[int]] = Omitted() """Тайм-аут в секундах для долгого опроса""" types: Query[Omittable[list[str] | None]] = Omitted() """Список типов событий, которые вы хотите получать, например: `message_created`, `message_callback`. Полный список возможных событий смотрите в описании [объекта `Update`](https://dev.max.ru/docs-api/objects/Update)"""
[документация] def make_response( self, response: HTTPResponse, response_loader: ResponseLoader, ) -> UpdateList: try: return super().make_response(response, response_loader) except LoadError: raw = response.data marker = raw.get("marker") updates: list[Updates] = [] for raw_upd in raw.get("updates", []): try: updates.append(response_loader.load(raw_upd, Updates)) # type: ignore[arg-type] except LoadError: loggers.methods.warning( "Пропуск незагружаемого апдейта. Сообщите об этой ошибке в " "https://github.com/K1rL3s/maxo/issues. Тело апдейта: %s", raw_upd, exc_info=True, ) return UpdateList(updates=updates, marker=marker)