@@ -321,9 +321,13 @@ class Event(object):
321321 """ Событие, полученное от longpoll-сервера.
322322
323323 Имеет поля в соответствии с `документацией
324- <https://vk.com/dev/using_longpoll ?f=3.%20Структура%20событий >`_.
324+ <https://vk.com/dev/using_longpoll_2 ?f=3.%2BСтруктура%2Bсобытий >`_.
325325
326- События с полем `timestamp` также дополнительно имеют поле `datetime`
326+ События `MESSAGE_NEW` и `MESSAGE_EDIT` имеют (среди прочих) такие поля:
327+ - `text` - `экранированный <https://ru.wikipedia.org/wiki/Мнемоники_в_HTML>`_ текст
328+ - `message` - оригинальный текст сообщения.
329+
330+ События с полем `timestamp` также дополнительно имеют поле `datetime`.
327331 """
328332
329333 def __init__ (self , raw ):
@@ -375,12 +379,9 @@ def __init__(self, raw):
375379 elif self .type is VkEventType .PEER_FLAGS_REPLACE :
376380 self ._parse_peer_flags ()
377381
378- elif self .type is VkEventType .MESSAGE_NEW :
382+ elif self .type in [ VkEventType .MESSAGE_NEW , VkEventType . MESSAGE_EDIT ] :
379383 self ._parse_message ()
380384
381- elif self .type is VkEventType .MESSAGE_EDIT :
382- self .text = self .text .replace ('<br>' , '\n ' )
383-
384385 elif self .type in [VkEventType .USER_ONLINE , VkEventType .USER_OFFLINE ]:
385386 self .user_id = abs (self .user_id )
386387 self ._parse_online_status ()
@@ -427,12 +428,21 @@ def _parse_peer_flags(self):
427428 )
428429
429430 def _parse_message (self ):
430- if self .flags & VkMessageFlag .OUTBOX :
431- self .from_me = True
432- else :
433- self .to_me = True
431+ if self .type is VkEventType .MESSAGE_NEW :
432+ if self .flags & VkMessageFlag .OUTBOX :
433+ self .from_me = True
434+ else :
435+ self .to_me = True
436+
437+ # ВК возвращает сообщения в html-escaped виде,
438+ # при этом переводы строк закодированы как <br> и не экранированы
434439
435440 self .text = self .text .replace ('<br>' , '\n ' )
441+ self .message = self .text \
442+ .replace ('<' , '<' ) \
443+ .replace ('>' , '>' ) \
444+ .replace ('"' , '"' ) \
445+ .replace ('&' , '&' )
436446
437447 def _parse_online_status (self ):
438448 try :
0 commit comments