Исходный код vk_maria.longpoll.longpoll

from requests import ReadTimeout

from ..types import Event, MessageEvent, CallbackQueryEvent, EventType


[документация]class LongPoll: __CLASS_BY_EVENT_TYPE = { EventType.MESSAGE_NEW.value: MessageEvent, EventType.MESSAGE_REPLY.value: MessageEvent, EventType.MESSAGE_EDIT.value: MessageEvent, EventType.MESSAGE_EVENT.value: CallbackQueryEvent } __DEFAULT_EVENT_CLASS = Event def __init__(self, vk): self._vk = vk self._wait = 25 self._key, self._server, self._ts = self._vk.groups_get_longpoll_server().values() def _update_longpoll(self, update_ts=True): response = self._vk.groups_get_longpoll_server() self._server = response['server'] self._key = response['key'] if update_ts: self._ts = response['ts'] def _parse_event(self, raw_event): event_class = self.__CLASS_BY_EVENT_TYPE.get( raw_event['type'], self.__DEFAULT_EVENT_CLASS ) return event_class(self._vk, raw_event) def _check(self): response = self._vk.method(server=self._server, key=self._key, ts=self._ts, wait=self._wait, act='a_check') if 'failed' not in response: self._ts = response['ts'] return [self._parse_event(raw_event) for raw_event in response['updates']] elif response['failed'] == 1: self._ts = response['ts'] elif response['failed'] == 2: self._update_longpoll(update_ts=False) elif response['failed'] == 3: self._update_longpoll() return []
[документация] def listen(self): while True: try: for event in self._check(): yield event except ReadTimeout: pass