o
    Xzj^  ã                   @   sD   d dl mZmZmZ ddlmZ ddlmZ eG dd„ deƒƒZdS )é   )ÚEventBuilderÚEventCommonÚname_inner_eventé   )Úutils)Útypesc                       sX   e Zd ZdZ	dddddœ‡ fdd„Zeddd„ƒZ‡ fd	d
„ZG dd„ deƒZ	‡  Z
S )ÚMessageReadae  
    Occurs whenever one or more messages are read in a chat.

    Args:
        inbox (`bool`, optional):
            If this argument is `True`, then when you read someone else's
            messages the event will be fired. By default (`False`) only
            when messages you sent are read by someone else will fire it.

    Example
        .. code-block:: python

            from telethon import events

            @client.on(events.MessageRead)
            async def handler(event):
                # Log when someone reads your messages
                print('Someone has read all your messages until', event.max_id)

            @client.on(events.MessageRead(inbox=True))
            async def handler(event):
                # Log when you read message in a chat (from your "inbox")
                print('You have read messages until', event.max_id)
    NF)Úblacklist_chatsÚfuncÚinboxc                   s   t ƒ j|||d� || _d S )N)r	   r
   )ÚsuperÚ__init__r   )ÚselfÚchatsr	   r
   r   ©Ú	__class__© úV/var/www/kodo/tsheker/venv/lib/python3.10/site-packages/telethon/events/messageread.pyr       s   
zMessageRead.__init__c                 C   sÊ   t |tjƒr|  |j|jd¡S t |tjƒr|  |j|jd¡S t |tjƒr0|  t |j	¡|jd¡S t |tj
ƒrB|  t |j	¡|jd¡S t |tjƒrP| j|jdd�S t |tjƒrc| jt |j	¡|jdd�S d S )NFT)Úmessage_idsÚcontents)Ú
isinstancer   ÚUpdateReadHistoryInboxÚEventÚpeerÚmax_idÚUpdateReadHistoryOutboxÚUpdateReadChannelInboxÚPeerChannelÚ
channel_idÚUpdateReadChannelOutboxÚUpdateReadMessagesContentsÚmessagesÚ!UpdateChannelReadMessagesContents)ÚclsÚupdateÚothersÚself_idr   r   r   Úbuild%   s,   ÿÿÿþÿzMessageRead.buildc                    s   | j |jkrd S tƒ  |¡S ©N)r   Úoutboxr   Úfilter)r   Úeventr   r   r   r*   9   s   zMessageRead.filterc                       sV   e Zd ZdZ		d‡ fdd„	Zedd„ ƒZedd	„ ƒZd
d„ Zdd„ Z	dd„ Z
‡  ZS )zMessageRead.Eventa@  
        Represents the event of one or more messages being read.

        Members:
            max_id (`int`):
                Up to which message ID has been read. Every message
                with an ID equal or lower to it have been read.

            outbox (`bool`):
                `True` if someone else has read your messages.

            contents (`bool`):
                `True` if what was read were the contents of a message.
                This will be the case when e.g. you play a voice note.
                It may only be set on ``inbox`` events.
        NFc                    sF   || _ || _|p	g | _d | _|pt|pg d d�| _tƒ  || j¡ d S )N)Údefault)r)   r   Ú_message_idsÚ	_messagesÚmaxr   r   r   )r   r   r   Úoutr   r   r   r   r   r   P   s   
zMessageRead.Event.__init__c                 C   s   | j  S )zJ
            `True` if you have read someone else's messages.
            )r)   ©r   r   r   r   r   Y   s   zMessageRead.Event.inboxc                 C   s   | j S )zÏ
            The IDs of the messages **which contents'** were read.

            Use :meth:`is_read` if you need to check whether a message
            was read instead checking if it's in here.
            )r-   r1   r   r   r   r   `   s   zMessageRead.Event.message_idsc                 Ã   sJ   �| j du r"|  ¡ I dH }|sg | _ | j S | jj|| jd�I dH | _ | j S )a  
            Returns the list of `Message <telethon.tl.custom.message.Message>`
            **which contents'** were read.

            Use :meth:`is_read` if you need to check whether a message
            was read instead checking if it's in here.
            N)Úids)r.   Úget_input_chatÚ_clientÚget_messagesr-   )r   Úchatr   r   r   r5   j   s   €
ýÿzMessageRead.Event.get_messagesc                    s<   t  |¡r‡ fdd„|D ƒS t|tƒr|ˆ jkS |jˆ jkS )zë
            Returns `True` if the given message (or its ID) has been read.

            If a list-like argument is provided, this method will return a
            list of booleans indicating which messages have been read.
            c                    s&   g | ]}t |tƒr|n|jˆ jk‘qS r   )r   ÚintÚidr   )Ú.0Úmr1   r   r   Ú
<listcomp>„   s    ÿz-MessageRead.Event.is_read.<locals>.<listcomp>)r   Úis_list_liker   r7   r8   r   ©r   Úmessager   r1   r   Úis_read|   s   

ÿÿÿzMessageRead.Event.is_readc                 C   s"   t  |¡rt|  |¡ƒS |  |¡S )z*`True` if the message(s) are read message.)r   r<   Úallr?   r=   r   r   r   Ú__contains__Š   s   

zMessageRead.Event.__contains__)NNFFN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   r   r5   r?   rA   Ú__classcell__r   r   r   r   r   ?   s    ÿ	

	r   r(   )NN)rB   rC   rD   rE   r   Úclassmethodr'   r*   r   r   rG   r   r   r   r   r      s    ÿÿr   N)	Úcommonr   r   r   Ú r   Útlr   r   r   r   r   r   Ú<module>   s
    