o
    Zzj–  ã                   @   sj   d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	 ddl
mZmZmZ G dd„ deeeef ƒZd	S )
z0This module contains the ChatBoostHandler class.é    )ÚFinal)ÚUpdate)ÚBaseHandler)Úparse_chat_idÚparse_username)ÚCCTÚRTÚHandlerCallbackc                       s¤   e Zd ZU dZdZdZee ed< 	 dZ	ee ed< 	 dZ
ee ed< 	 ed	d	d
fdddeeeef deded	B ded	B def‡ fdd„Zdedefdd„Z‡  ZS )ÚChatBoostHandlera~  
    Handler class to handle Telegram updates that contain a chat boost.

    Warning:
        When setting :paramref:`block` to :obj:`False`, you cannot rely on adding custom
        attributes to :class:`telegram.ext.CallbackContext`. See its docs for more info.

    .. versionadded:: 20.8

    Args:
        callback (:term:`coroutine function`): The callback function for this handler. Will be
            called when :meth:`check_update` has determined that an update should be processed by
            this handler. Callback signature::

                async def callback(update: Update, context: CallbackContext)

            The return value of the callback is usually ignored except for the special case of
            :class:`telegram.ext.ConversationHandler`.
        chat_boost_types (:obj:`int`, optional): Pass one of
            :attr:`CHAT_BOOST`, :attr:`REMOVED_CHAT_BOOST` or
            :attr:`ANY_CHAT_BOOST` to specify if this handler should handle only updates with
            :attr:`telegram.Update.chat_boost`,
            :attr:`telegram.Update.removed_chat_boost` or both. Defaults to
            :attr:`CHAT_BOOST`.
        chat_id (:obj:`int` | Collection[:obj:`int`], optional): Filters reactions to allow
            only those which happen in the specified chat ID(s).
        chat_username (:obj:`str` | Collection[:obj:`str`], optional): Filters reactions to allow
            only those which happen in the specified username(s).
        block (:obj:`bool`, optional): Determines whether the return value of the callback should
            be awaited before processing the next handler in
            :meth:`telegram.ext.Application.process_update`. Defaults to :obj:`True`.

            .. seealso:: :wiki:`Concurrency`

    Attributes:
        callback (:term:`coroutine function`): The callback function for this handler.
        chat_boost_types (:obj:`int`): Optional. Specifies if this handler should handle only
            updates with :attr:`telegram.Update.chat_boost`,
            :attr:`telegram.Update.removed_chat_boost` or both.
        block (:obj:`bool`): Determines whether the callback will run in a blocking way.
    )Ú	_chat_idsÚ_chat_usernamesÚchat_boost_typeséÿÿÿÿÚ
CHAT_BOOSTr   ÚREMOVED_CHAT_BOOSTé   ÚANY_CHAT_BOOSTNTÚselfzChatBoostHandler[CCT, RT]Úcallbackr   Úchat_idÚchat_usernameÚblockc                    s.   t ƒ j||d� || _t|ƒ| _t|ƒ| _d S )N)r   )ÚsuperÚ__init__r   r   r   r   r   )r   r   r   r   r   r   ©Ú	__class__© úb/var/www/kodo/tsheker/venv/lib/python3.10/site-packages/telegram/ext/_handlers/chatboosthandler.pyr   V   s   
zChatBoostHandler.__init__ÚupdateÚreturnc                 C   s¨   t |tƒsdS |js|jsdS | j| jkr|jsdS | j| jkr%|js%dS t| j| j	fƒs/dS |j
 }r7|jnd}|r>|jnd}t| joH|| jv ƒpSt| j	oR|| j	v ƒS )zäDetermines whether an update should be passed to this handler's :attr:`callback`.

        Args:
            update (:class:`telegram.Update` | :obj:`object`): Incoming update.

        Returns:
            :obj:`bool`

        FTN)Ú
isinstancer   Ú
chat_boostÚremoved_chat_boostr   r   r   Úanyr   r   Úeffective_chatÚidÚusernameÚbool)r   r   Úchatr   r   r   r   r   Úcheck_updatec   s   

ÿzChatBoostHandler.check_update)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   r   ÚintÚ__annotations__r   r   r	   r   r   r   Ústrr'   r   Úobjectr)   Ú__classcell__r   r   r   r   r
      s6   
 *úÿþýüûúr
   N)r-   Útypingr   Útelegramr   Ú"telegram.ext._handlers.basehandlerr   Ú#telegram.ext._utils._update_parsingr   r   Útelegram.ext._utils.typesr   r   r	   r
   r   r   r   r   Ú<module>   s   