Fix MessageEntity serialization for API calls #457

This commit is contained in:
Alex Root Junior 2020-11-08 18:58:06 +02:00
parent b170bbc5f6
commit d0bfa8a13b
2 changed files with 43 additions and 9 deletions

View file

@ -310,6 +310,7 @@ class Bot(BaseBot, DataMixin, ContextInstanceMixin):
"""
reply_markup = prepare_arg(reply_markup)
entities = prepare_arg(entities)
payload = generate_payload(**locals())
if self.parse_mode:
payload.setdefault('parse_mode', self.parse_mode)
@ -410,6 +411,7 @@ class Bot(BaseBot, DataMixin, ContextInstanceMixin):
:rtype: :obj:`types.Message`
"""
reply_markup = prepare_arg(reply_markup)
caption_entities = prepare_arg(caption_entities)
payload = generate_payload(**locals())
if self.parse_mode:
@ -473,6 +475,7 @@ class Bot(BaseBot, DataMixin, ContextInstanceMixin):
:rtype: :obj:`types.Message`
"""
reply_markup = prepare_arg(reply_markup)
caption_entities = prepare_arg(caption_entities)
payload = generate_payload(**locals(), exclude=['photo'])
if self.parse_mode:
payload.setdefault('parse_mode', self.parse_mode)
@ -557,6 +560,7 @@ class Bot(BaseBot, DataMixin, ContextInstanceMixin):
:rtype: :obj:`types.Message`
"""
reply_markup = prepare_arg(reply_markup)
caption_entities = prepare_arg(caption_entities)
payload = generate_payload(**locals(), exclude=['audio', 'thumb'])
if self.parse_mode:
payload.setdefault('parse_mode', self.parse_mode)
@ -641,6 +645,7 @@ class Bot(BaseBot, DataMixin, ContextInstanceMixin):
:rtype: :obj:`types.Message`
"""
reply_markup = prepare_arg(reply_markup)
caption_entities = prepare_arg(caption_entities)
payload = generate_payload(**locals(), exclude=['document'])
if self.parse_mode:
payload.setdefault('parse_mode', self.parse_mode)
@ -726,6 +731,7 @@ class Bot(BaseBot, DataMixin, ContextInstanceMixin):
:rtype: :obj:`types.Message`
"""
reply_markup = prepare_arg(reply_markup)
caption_entities = prepare_arg(caption_entities)
payload = generate_payload(**locals(), exclude=['video', 'thumb'])
if self.parse_mode:
payload.setdefault('parse_mode', self.parse_mode)
@ -815,6 +821,7 @@ class Bot(BaseBot, DataMixin, ContextInstanceMixin):
:rtype: :obj:`types.Message`
"""
reply_markup = prepare_arg(reply_markup)
caption_entities = prepare_arg(caption_entities)
payload = generate_payload(**locals(), exclude=["animation", "thumb"])
if self.parse_mode:
payload.setdefault('parse_mode', self.parse_mode)
@ -889,6 +896,7 @@ class Bot(BaseBot, DataMixin, ContextInstanceMixin):
:rtype: :obj:`types.Message`
"""
reply_markup = prepare_arg(reply_markup)
caption_entities = prepare_arg(caption_entities)
payload = generate_payload(**locals(), exclude=['voice'])
if self.parse_mode:
payload.setdefault('parse_mode', self.parse_mode)
@ -1413,6 +1421,7 @@ class Bot(BaseBot, DataMixin, ContextInstanceMixin):
:rtype: :obj:`types.Message`
"""
options = prepare_arg(options)
explanation_entities = prepare_arg(explanation_entities)
open_period = prepare_arg(open_period)
close_date = prepare_arg(close_date)
payload = generate_payload(**locals())
@ -2199,6 +2208,7 @@ class Bot(BaseBot, DataMixin, ContextInstanceMixin):
:rtype: :obj:`typing.Union[types.Message, base.Boolean]`
"""
reply_markup = prepare_arg(reply_markup)
entities = prepare_arg(entities)
payload = generate_payload(**locals())
if self.parse_mode:
payload.setdefault('parse_mode', self.parse_mode)
@ -2250,6 +2260,7 @@ class Bot(BaseBot, DataMixin, ContextInstanceMixin):
:rtype: :obj:`typing.Union[types.Message, base.Boolean]`
"""
reply_markup = prepare_arg(reply_markup)
caption_entities = prepare_arg(caption_entities)
payload = generate_payload(**locals())
if self.parse_mode:
payload.setdefault('parse_mode', self.parse_mode)

View file

@ -1,10 +1,9 @@
import sys
from . import base
from . import fields
from .user import User
from ..utils import helper, markdown
from ..utils.deprecated import deprecated
from . import base, fields
from .user import User
class MessageEntity(base.TelegramObject):
@ -13,6 +12,7 @@ class MessageEntity(base.TelegramObject):
https://core.telegram.org/bots/api#messageentity
"""
type: base.String = fields.Field()
offset: base.Integer = fields.Field()
length: base.Integer = fields.Field()
@ -20,6 +20,26 @@ class MessageEntity(base.TelegramObject):
user: User = fields.Field(base=User)
language: base.String = fields.Field()
def __init__(
self,
type: base.String,
offset: base.Integer,
length: base.Integer,
url: base.String = None,
user: User = None,
language: base.String = None,
**kwargs
):
super().__init__(
type=type,
offset=offset,
length=length,
url=url,
user=user,
language=language,
**kwargs
)
def get_text(self, text):
"""
Get value of entity
@ -27,18 +47,20 @@ class MessageEntity(base.TelegramObject):
:param text: full text
:return: part of text
"""
if sys.maxunicode == 0xffff:
return text[self.offset:self.offset + self.length]
if sys.maxunicode == 0xFFFF:
return text[self.offset : self.offset + self.length]
if not isinstance(text, bytes):
entity_text = text.encode('utf-16-le')
entity_text = text.encode("utf-16-le")
else:
entity_text = text
entity_text = entity_text[self.offset * 2:(self.offset + self.length) * 2]
return entity_text.decode('utf-16-le')
entity_text = entity_text[self.offset * 2 : (self.offset + self.length) * 2]
return entity_text.decode("utf-16-le")
@deprecated("This method doesn't work with nested entities and will be removed in aiogram 3.0")
@deprecated(
"This method doesn't work with nested entities and will be removed in aiogram 3.0"
)
def parse(self, text, as_html=True):
"""
Get entity value with markup
@ -95,6 +117,7 @@ class MessageEntityType(helper.Helper):
:key: TEXT_LINK
:key: TEXT_MENTION
"""
mode = helper.HelperMode.snake_case
MENTION = helper.Item() # mention - @username