o
    -˜ŽjC  ã                   @   s~   d dl Z d dlmZmZmZ d dlZd dlmZmZmZ e  	e
¡Zdddeeef dedd	d
edefdd„ZG dd„ dƒZdS )é    N)ÚUnionÚOptionalÚAsyncGenerator)ÚrawÚtypesÚenumsÚclientúpyrogram.ClientÚchat_idÚoffsetÚfilterúenums.ChatMembersFilterÚlimitÚqueryc           	      ƒ   s¤   �|t jjt jjt jjfv }|r|j|d�n| ¡ }ˆjtjj	j
ˆ |¡I d H |||dd�dd�I d H }|j}dd„ |jD ƒ‰dd„ |jD ƒ‰ ‡ ‡‡fd	d
„|D ƒS )N)Úqr   )Úchannelr   r   r   Úhashé<   )Úsleep_thresholdc                 S   ó   i | ]}|j |“qS © ©Úid)Ú.0Úur   r   úd/var/www/kodo/Anonymous/send/lib/python3.10/site-packages/pyrogram/methods/chats/get_chat_members.pyÚ
<dictcomp>7   ó    zget_chunk.<locals>.<dictcomp>c                 S   r   r   r   )r   Úcr   r   r   r   8   r   c                    s   g | ]}t j ˆ|ˆˆ ¡‘qS r   )r   Ú
ChatMemberÚ_parse)r   Úmember©Úchatsr   Úusersr   r   Ú
<listcomp>:   s    zget_chunk.<locals>.<listcomp>)r   ÚChatMembersFilterÚSEARCHÚBANNEDÚ
RESTRICTEDÚvalueÚinvoker   Ú	functionsÚchannelsÚGetParticipantsÚresolve_peerÚparticipantsr$   r#   )	r   r
   r   r   r   r   Úis_queryableÚrÚmembersr   r"   r   Ú	get_chunk   s(   €þûør4   c                   @   sJ   e Zd Zddejjfdddeeef dededd	d
e	e
d  fdd„ZdS )ÚGetChatMembersÚ r   Úselfr	   r
   r   r   r   r   Úreturn)ztypes.ChatMemberNc                 C  sö   �|   |¡I dH }t|tjjƒr@|  tjjj|j	d�¡I dH }t
|jjdg ƒ}dd„ |jD ƒ}|D ]}	tj | |	|i ¡V  q1dS d}
d}t|ƒpId}td|ƒ}	 t| |||||d
�I dH }|sadS |t|ƒ7 }|D ]}	|	V  |
d7 }
|
|kry dS qiqP)aé  Get the members list of a chat.

        A chat can be either a basic group, a supergroup or a channel.
        Requires administrator rights in channels.

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

        Parameters:
            chat_id (``int`` | ``str``):
                Unique identifier (int) or username (str) of the target chat.
                You can also use chat public link in form of *t.me/<username>* (str).

            query (``str``, *optional*):
                Query string to filter members based on their display names and usernames.
                Only applicable to supergroups and channels. Defaults to "" (empty string).
                A query string is applicable only for :obj:`~pyrogram.enums.ChatMembersFilter.SEARCH`,
                :obj:`~pyrogram.enums.ChatMembersFilter.BANNED` and :obj:`~pyrogram.enums.ChatMembersFilter.RESTRICTED`
                filters only.

            limit (``int``, *optional*):
                Limits the number of members to be retrieved.

            filter (:obj:`~pyrogram.enums.ChatMembersFilter`, *optional*):
                Filter used to select the kind of members you want to retrieve. Only applicable for supergroups
                and channels.

        Returns:
            ``Generator``: On success, a generator yielding :obj:`~pyrogram.types.ChatMember` objects is returned.

        Example:
            .. code-block:: python

                from pyrogram import enums

                # Get members
                async for member in app.get_chat_members(chat_id):
                    print(member)

                # Get administrators
                administrators = []
                async for m in app.get_chat_members(chat_id, filter=enums.ChatMembersFilter.ADMINISTRATORS):
                    administrators.append(m)

                # Get bots
                bots = []
                async for m in app.get_chat_members(chat_id, filter=enums.ChatMembersFilter.BOTS):
                    bots.append(m)
        N)r
   r0   c                 S   r   r   r   )r   Úir   r   r   r      r   z3GetChatMembers.get_chat_members.<locals>.<dictcomp>r   iÿÿÿéÈ   T)r   r
   r   r   r   r   é   )r/   Ú
isinstancer   r   ÚInputPeerChatr+   r,   ÚmessagesÚGetFullChatr
   ÚgetattrÚ	full_chatr0   r$   r   r    ÚabsÚminr4   Úlen)r7   r
   r   r   r   Úpeerr2   r3   r$   r!   Úcurrentr   Útotalr   r   r   Úget_chat_members>   sH   €7ÿ
ÿ
ú	ÿìzGetChatMembers.get_chat_membersN)Ú__name__Ú
__module__Ú__qualname__r   r&   r'   r   ÚintÚstrr   r   rH   r   r   r   r   r5   =   s"    ûÿ
þýüû
úr5   )ÚloggingÚtypingr   r   r   Úpyrogramr   r   r   Ú	getLoggerrI   ÚlogrL   rM   r4   r5   r   r   r   r   Ú<module>   s&   
ÿ
þýüû
ú 