mirror of
				https://github.com/LonamiWebs/Telethon.git
				synced 2025-11-04 09:57:29 +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)
 |