From d154d7c1e9f23df6064393b8ab3c23ec2b54b7d7 Mon Sep 17 00:00:00 2001 From: Alex Root Junior Date: Fri, 19 May 2017 23:39:40 +0300 Subject: [PATCH] Add message entity --- aiogram/types/message.py | 9 +++++-- aiogram/types/message_entity.py | 45 +++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 aiogram/types/message_entity.py diff --git a/aiogram/types/message.py b/aiogram/types/message.py index 7aca94c6..d06b2d3a 100644 --- a/aiogram/types/message.py +++ b/aiogram/types/message.py @@ -2,6 +2,7 @@ import datetime from aiogram.types import Deserializable from aiogram.types.chat import Chat +from aiogram.types.message_entity import MessageEntity from aiogram.types.user import User @@ -33,8 +34,8 @@ class Message(Deserializable): self.reply_to_message: Message = reply_to_message self.edit_date: datetime.datetime = edit_date self.text: str = text - self.entities = entities + self.audio = audio self.document = document self.game = game @@ -78,6 +79,10 @@ class Message(Deserializable): def _parse_message(cls, message): return Message.de_json(message) if message else None + @classmethod + def _parse_entities(cls, entities): + return [MessageEntity.de_json(entity) for entity in entities] if entities else None + @classmethod def de_json(cls, data): data = cls.check_json(data) @@ -93,8 +98,8 @@ class Message(Deserializable): reply_to_message = cls._parse_message(data.get('reply_to_message', {})) edit_date = cls._parse_date(data.get('edit_date', 0)) text = data.get('text') + entities = cls._parse_entities(data.get('entities')) - entities = data.get('entities') audio = data.get('audio') document = data.get('document') game = data.get('game') diff --git a/aiogram/types/message_entity.py b/aiogram/types/message_entity.py new file mode 100644 index 00000000..4fbb07bd --- /dev/null +++ b/aiogram/types/message_entity.py @@ -0,0 +1,45 @@ +from aiogram.types import Deserializable +from aiogram.types.user import User + + +class MessageEntity(Deserializable): + __slots__ = ('data', 'type', 'offset', 'length', 'url', 'user') + + def __init__(self, data, type, offset, length, url, user): + self.data = data + + self.type = type + self.offset = offset + self.length = length + self.url = url + self.user = user + + @classmethod + def _parse_user(cls, user): + return User.de_json(user) if user else None + + @classmethod + def de_json(cls, data): + data = cls.check_json(data) + + type = data.get('type') + offset = data.get('offset') + length = data.get('length') + url = data.get('url') + user = cls._parse_user(data.get('user')) + + return MessageEntity(data, type, offset, length, url, user) + + +class MessageEntityType: + MENTION = 'mention' # @username + HASHTAG = 'hashtag' + BOT_COMMAND = 'bot_command' + URL = 'url' + EMAIL = 'email' + BOLD = 'bold' # bold text + ITALIC = 'italic' # italic text + CODE = 'code' # monowidth string + PRE = 'pre' # monowidth block + TEXT_LINK = 'text_link' # for clickable text URLs + TEXT_MENTION = 'text_mention' # for users without usernames