mirror of
				https://github.com/LonamiWebs/Telethon.git
				synced 2025-10-31 07:57:38 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			48 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from .tlmessage import TLMessage
 | |
| from ..tlobject import TLObject
 | |
| 
 | |
| 
 | |
| class MessageContainer(TLObject):
 | |
|     CONSTRUCTOR_ID = 0x73f1f8dc
 | |
| 
 | |
|     # Maximum size in bytes for the inner payload of the container.
 | |
|     # Telegram will close the connection if the payload is bigger.
 | |
|     # 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).
 | |
|     #
 | |
|     # This limit is not 100% accurate and may in some cases be higher.
 | |
|     # However, sending up to 100 requests at once in a single container
 | |
|     # is a reasonable conservative value, since it could also depend on
 | |
|     # other factors like size per request, but we cannot know this.
 | |
|     MAXIMUM_LENGTH = 100
 | |
| 
 | |
|     def __init__(self, messages):
 | |
|         self.messages = messages
 | |
| 
 | |
|     def to_dict(self):
 | |
|         return {
 | |
|             '_': 'MessageContainer',
 | |
|             'messages':
 | |
|                 [] if self.messages is None else [
 | |
|                     None if x is None else x.to_dict() for x in self.messages
 | |
|                 ],
 | |
|         }
 | |
| 
 | |
|     @classmethod
 | |
|     def from_reader(cls, reader):
 | |
|         # This assumes that .read_* calls are done in the order they appear
 | |
|         messages = []
 | |
|         for _ in range(reader.read_int()):
 | |
|             msg_id = reader.read_long()
 | |
|             seq_no = reader.read_int()
 | |
|             length = reader.read_int()
 | |
|             before = reader.tell_position()
 | |
|             obj = reader.tgread_object()  # May over-read e.g. RpcResult
 | |
|             reader.set_position(before + length)
 | |
|             messages.append(TLMessage(msg_id, seq_no, obj))
 | |
|         return MessageContainer(messages)
 |