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