U
    ;g                     @   sd   d dl Z d dlmZmZmZ d dlZd dlmZ d dlmZ d dlmZ e 	e
ZG dd dZdS )    N)UnionListIterable)raw)types)utilsc                
   @   sR   e Zd Zddeeef eeee f eeee f eeded f dddZdS )	GetMessagesN   zpyrogram.Clientztypes.Message)selfchat_idmessage_idsreply_to_message_idsrepliesreturnc                    s   |r|t jjfn|r |t jjfnd\} |dkr8td| |I dH }t|t }|r`t|n|g} fdd|D }|dk rd}t|t jj	rt j
jj||d}nt j
jj|d	}| j|d
dI dH }	tj| |	|dI dH }
|r|
S |
r|
d S dS )a  Get one or more messages from a chat by using message identifiers.

        You can retrieve up to 200 messages at once.

        .. include:: /_includes/usable-by/users-bots.rst

        Parameters:
            chat_id (``int`` | ``str``):
                Unique identifier (int) or username (str) of the target chat.
                For your personal cloud (Saved Messages) you can simply use "me" or "self".
                For a contact that exists in your Telegram address book you can use his phone number (str).

            message_ids (``int`` | Iterable of ``int``, *optional*):
                Pass a single message identifier or an iterable of message ids (as integers) to get the content of the
                message themselves.

            reply_to_message_ids (``int`` | Iterable of ``int``, *optional*):
                Pass a single message identifier or an iterable of message ids (as integers) to get the content of
                the previous message you replied to using this message.
                If *message_ids* is set, this argument will be ignored.

            replies (``int``, *optional*):
                The number of subsequent replies to get for each message.
                Pass 0 for no reply at all or -1 for unlimited replies.
                Defaults to 1.

        Returns:
            :obj:`~pyrogram.types.Message` | List of :obj:`~pyrogram.types.Message`: In case *message_ids* was not
            a list, a single message is returned, otherwise a list of messages is returned.

        Example:
            .. code-block:: python

                # Get one message
                await app.get_messages(chat_id, 12345)

                # Get more than one message (list of messages)
                await app.get_messages(chat_id, [12345, 12346])

                # Get message by ignoring any replied-to message
                await app.get_messages(chat_id, message_id, replies=0)

                # Get message with all chained replied-to messages
                await app.get_messages(chat_id, message_id, replies=-1)

                # Get the replied-to message of a message
                await app.get_messages(chat_id, reply_to_message_ids=message_id)

        Raises:
            ValueError: In case of invalid arguments.
        )NNNzENo argument supplied. Either pass message_ids or reply_to_message_idsc                    s   g | ]} |d qS )id ).0iZids_typer   f/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/pyrogram/methods/messages/get_messages.py
<listcomp>i   s     z,GetMessages.get_messages.<locals>.<listcomp>r   i)Zchannelr   r   )Zsleep_threshold)r   )r   r   ZInputMessageIDZInputMessageReplyTo
ValueErrorZresolve_peer
isinstanceintlistZInputPeerChannelZ	functionsZchannelsr   messagesZinvoker   Zparse_messages)r
   r   r   r   r   ZidsZpeerZis_iterableZrpcrr   r   r   r   get_messages"   s$    ;zGetMessages.get_messages)NNr	   )	__name__
__module____qualname__r   r   strr   r   r   r   r   r   r   r   !   s      
r   )loggingtypingr   r   r   Zpyrogramr   r   r   	getLoggerr    logr   r   r   r   r   <module>   s   
