Skip to content

Commit cd6c9bb

Browse files
Igorpython273
authored andcommitted
Longpoll 52 event, streaming to sphinx (#162)
1 parent c34fa65 commit cd6c9bb

4 files changed

Lines changed: 65 additions & 5 deletions

File tree

docs/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ vk_api – Python модуль для написания скриптов для
4242
bots_longpoll
4343
keyboard
4444
audio
45+
streaming
4546
requests_pool
4647
execute
4748
enums

docs/streaming.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
VkStreaming
2+
==============
3+
4+
Модуль для работы с Streaming API
5+
6+
.. module:: vk_api.streaming
7+
.. autoclass:: VkStreaming
8+
:members:

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
license='Apache License, Version 2.0, see LICENSE file',
3939

4040
packages=['vk_api', 'jconfig'],
41-
install_requires=['requests', 'enum34', 'beautifulsoup4'],
41+
install_requires=['requests', 'enum34', 'beautifulsoup4', 'six'],
4242

4343
classifiers=[
4444
'License :: OSI Approved :: Apache Software License',

vk_api/longpoll.py

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@ class VkEventType(IntEnum):
112112
#: $self — 1 или 0 (вызваны ли изменения самим пользователем).
113113
CHAT_EDIT = 51
114114

115+
#: Изменение информации чата $peer_id с типом $type_id
116+
#: $info — дополнительная информация об изменениях
117+
CHAT_UPDATE = 52
118+
115119
#: Пользователь $user_id набирает текст в диалоге.
116120
#: Событие приходит раз в ~5 секунд при наборе текста. $flags = 1.
117121
USER_TYPING = 61
@@ -218,6 +222,34 @@ class VkPeerFlag(IntEnum):
218222
UNANSWERED = 2
219223

220224

225+
class VkChatEventType(IntEnum):
226+
""" Идентификатор типа изменения в чате """
227+
228+
#: Изменилось название беседы
229+
TITLE = 1
230+
231+
#: Сменилась обложка беседы
232+
PHOTO = 2
233+
234+
#: Назначен новый администратор
235+
ADMIN_ADDED = 3
236+
237+
#: Закреплено сообщение
238+
MESSAGE_PINNED = 5
239+
240+
#: Пользователь присоединился к беседе
241+
USER_JOINED = 6
242+
243+
#: Пользователь покинул беседу
244+
USER_LEFT = 7
245+
246+
#: Пользователя исключили из беседы
247+
USER_KICKED = 8
248+
249+
#: С пользователя сняты права администратора
250+
ADMIN_REMOVED = 9
251+
252+
221253
MESSAGE_EXTRA_FIELDS = [
222254
'peer_id', 'timestamp', 'subject', 'text', 'attachments', 'random_id'
223255
]
@@ -244,6 +276,7 @@ class VkPeerFlag(IntEnum):
244276
VkEventType.PEER_RESTORE_ALL: ['peer_id', 'local_id'],
245277

246278
VkEventType.CHAT_EDIT: ['chat_id', 'self'],
279+
VkEventType.CHAT_UPDATE: ['type_id', 'peer_id', 'info'],
247280

248281
VkEventType.USER_TYPING: ['user_id', 'flags'],
249282
VkEventType.USER_TYPING_IN_CHAT: ['user_id', 'chat_id'],
@@ -316,16 +349,20 @@ def __init__(self, raw):
316349
if self.type in PARSE_MESSAGE_FLAGS_EVENTS:
317350
self._parse_message_flags()
318351

319-
if self.type is VkEventType.PEER_FLAGS_REPLACE:
352+
if self.type is VkEventType.CHAT_UPDATE:
353+
self._parse_chat_info()
354+
self.type = VkChatEventType(self.type_id)
355+
356+
elif self.type is VkEventType.PEER_FLAGS_REPLACE:
320357
self._parse_peer_flags()
321358

322-
if self.type is VkEventType.MESSAGE_NEW:
359+
elif self.type is VkEventType.MESSAGE_NEW:
323360
self._parse_message()
324361

325-
if self.type is VkEventType.MESSAGE_EDIT:
362+
elif self.type is VkEventType.MESSAGE_EDIT:
326363
self.text = self.text.replace('<br>', '\n')
327364

328-
if self.type in [VkEventType.USER_ONLINE, VkEventType.USER_OFFLINE]:
365+
elif self.type in [VkEventType.USER_ONLINE, VkEventType.USER_OFFLINE]:
329366
self.user_id = abs(self.user_id)
330367
self._parse_online_status()
331368

@@ -384,6 +421,20 @@ def _parse_online_status(self):
384421
except ValueError:
385422
pass
386423

424+
def _parse_chat_info(self):
425+
426+
if self.type_id == VkChatEventType.ADMIN_ADDED.value:
427+
self.info = {'admin_id': self.info}
428+
429+
elif self.type_id == VkChatEventType.MESSAGE_PINNED.value:
430+
self.info = {'conversation_message_id': self.info}
431+
432+
elif self.type_id in [VkChatEventType.USER_JOINED.value,
433+
VkChatEventType.USER_LEFT.value,
434+
VkChatEventType.USER_KICKED.value,
435+
VkChatEventType.ADMIN_REMOVED.value]:
436+
self.info = {'user_id': self.info}
437+
387438

388439
class VkLongPoll(object):
389440
""" Класс для работы с longpoll-сервером

0 commit comments

Comments
 (0)