U
    ;g                     @   st   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eeef edeedddZG d	d
 d
ZdS )    N)UnionOptionalAsyncGenerator)rawtypesenumspyrogram.Clientenums.ChatMembersFilterclientchat_idoffsetfilterlimitqueryc           	         s   |t jjt jjt jjfk}|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   )Zchannelr   r   r   hash<   )Zsleep_thresholdc                 S   s   i | ]}|j |qS  id).0ur   r   g/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/pyrogram/methods/chats/get_chat_members.py
<dictcomp>6   s      zget_chunk.<locals>.<dictcomp>c                 S   s   i | ]}|j |qS r   r   )r   cr   r   r   r   7   s      c                    s   g | ]}t j| qS r   )r   
ChatMember_parse)r   memberchatsr   usersr   r   
<listcomp>9   s     zget_chunk.<locals>.<listcomp>)r   ChatMembersFilterSEARCHZBANNEDZ
RESTRICTEDvalueinvoker   	functionsZchannelsZGetParticipantsresolve_peerparticipantsr!   r    )	r   r   r   r   r   r   Zis_queryablermembersr   r   r   	get_chunk   s&    r,   c                	   @   s@   e Zd Zddejjfdeeef eede	e
d  dddZd	S )
GetChatMembers r   r   r	   )ztypes.ChatMemberN)selfr   r   r   r   returnc                 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  q`dS d}
d}t|pd}td|}t| |||||d	I dH }|sdS |t|7 }|D ] }	|	V  |
d
7 }
|
|kr dS qqdS )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.

            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   r)   c                 S   s   i | ]}|j |qS r   r   )r   ir   r   r   r   }   s      z3GetChatMembers.get_chat_members.<locals>.<dictcomp>r   i   r
      )r(   
isinstancer   r   ZInputPeerChatr&   r'   messagesZGetFullChatr   getattrZ	full_chatr)   r!   r   r   absminr,   len)r/   r   r   r   r   Zpeerr*   r+   r!   r   currentr   totalr   r   r   get_chat_members=   s@    6

	zGetChatMembers.get_chat_membersN)__name__
__module____qualname__r   r#   r$   r   intstrr   r   r<   r   r   r   r   r-   <   s   

r-   )loggingtypingr   r   r   Zpyrogramr   r   r   	getLoggerr=   logr@   rA   r,   r-   r   r   r   r   <module>   s   

 