@@ -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+
221253MESSAGE_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
388439class VkLongPoll (object ):
389440 """ Класс для работы с longpoll-сервером
0 commit comments