From 207d5ebdcb1b28f57033a0f849cc006f242196ec Mon Sep 17 00:00:00 2001 From: Lonami Exo Date: Mon, 19 Nov 2018 08:29:44 +0100 Subject: [PATCH] Avoid packing more than 1024 messages in a single container --- telethon/extensions/messagepacker.py | 5 +++-- telethon/tl/core/messagecontainer.py | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/telethon/extensions/messagepacker.py b/telethon/extensions/messagepacker.py index fe7b1e6b..394cb4ae 100644 --- a/telethon/extensions/messagepacker.py +++ b/telethon/extensions/messagepacker.py @@ -53,8 +53,9 @@ class MessagePacker: batch = [] size = 0 - # Fill a new batch to return while the size is small enough - while self._deque: + # Fill a new batch to return while the size is small enough, + # as long as we don't exceed the maximum length of messages. + while self._deque and len(batch) <= MessageContainer.MAXIMUM_LENGTH: state = self._deque.popleft() size += len(state.data) + TLMessage.SIZE_OVERHEAD diff --git a/telethon/tl/core/messagecontainer.py b/telethon/tl/core/messagecontainer.py index 800a31f0..f93f7b53 100644 --- a/telethon/tl/core/messagecontainer.py +++ b/telethon/tl/core/messagecontainer.py @@ -15,6 +15,11 @@ class MessageContainer(TLObject): # The overhead of the container itself is subtracted. MAXIMUM_SIZE = 1044456 - 8 + # Maximum amount of messages that can't be sent inside a single + # container, inclusive. Beyond this limit Telegram will respond + # with BAD_MESSAGE 64 (invalid container). + MAXIMUM_LENGTH = 1024 + def __init__(self, messages): self.messages = messages