diff --git a/telethon/network/mtproto_sender.py b/telethon/network/mtproto_sender.py index 9616e5cc..04a2020e 100644 --- a/telethon/network/mtproto_sender.py +++ b/telethon/network/mtproto_sender.py @@ -101,9 +101,8 @@ class MtProtoSender: requests = iter(requests) messages = [TLMessage(self.session, next(requests))] for r in requests: - messages.append(TLMessage( - self.session, InvokeAfterMsgRequest(messages[-1].msg_id, r) - )) + messages.append(TLMessage(self.session, r, + after_id=messages[-1].msg_id)) else: messages = [TLMessage(self.session, r) for r in requests] diff --git a/telethon/tl/tl_message.py b/telethon/tl/tl_message.py index bcb48279..f6246de2 100644 --- a/telethon/tl/tl_message.py +++ b/telethon/tl/tl_message.py @@ -1,11 +1,12 @@ import struct from . import TLObject, GzipPacked +from ..tl.functions import InvokeAfterMsgRequest class TLMessage(TLObject): """https://core.telegram.org/mtproto/service_messages#simple-container""" - def __init__(self, session, request): + def __init__(self, session, request, after_id=None): super().__init__() del self.content_related self.msg_id = session.get_new_msg_id() @@ -13,16 +14,27 @@ class TLMessage(TLObject): self.request = request self.container_msg_id = None + # After which message ID this one should run. We do this so + # InvokeAfterMsgRequest is transparent to the user and we can + # easily invoke after while confirming the original request. + self.after_id = after_id + def to_dict(self, recursive=True): return { 'msg_id': self.msg_id, 'seq_no': self.seq_no, 'request': self.request, 'container_msg_id': self.container_msg_id, + 'after_id': self.after_id } def __bytes__(self): - body = GzipPacked.gzip_if_smaller(self.request) + if self.after_id is None: + body = GzipPacked.gzip_if_smaller(self.request) + else: + body = GzipPacked.gzip_if_smaller( + InvokeAfterMsgRequest(self.after_id, self.request)) + return struct.pack('