o
    Zzj™  ã                   @   sª   d Z ddlZddlmZmZ ddlmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZmZ erBdd
lmZ edƒZG dd„ dee
eef ƒZdS )z2This module contains the InlineQueryHandler class.é    N)ÚMatchÚPattern)ÚTYPE_CHECKINGÚAnyÚTypeVarÚcast)ÚUpdate)ÚDEFAULT_TRUE)ÚDVType)ÚBaseHandler)ÚCCTÚHandlerCallback)ÚApplicationÚRTc                       s¬   e Zd ZdZdZdedfdddeeee	f de
ee
 B dB dee d	ee
 dB f
‡ fd
d„Zdedeee
 B dB fdd„Zdededddeee
 B dB ddf
dd„Z‡  ZS )ÚInlineQueryHandlera

  
    BaseHandler class to handle Telegram updates that contain a
    :attr:`telegram.Update.inline_query`.
    Optionally based on a regex. Read the documentation of the :mod:`re` module for more
    information.

    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.
        * :attr:`telegram.InlineQuery.chat_type` will not be set for inline queries from secret
          chats and may not be set for inline queries coming from third-party clients. These
          updates won't be handled, if :attr:`chat_types` is passed.

    Examples:
        :any:`Inline Bot <examples.inlinebot>`


    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`.
        pattern (:obj:`str` | :func:`re.Pattern <re.compile>`, optional): Regex pattern.
            If not :obj:`None`, :func:`re.match` is used on :attr:`telegram.InlineQuery.query`
            to determine if an update should be handled by this handler.
        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`
        chat_types (list[:obj:`str`], optional): List of allowed chat types. If passed, will only
            handle inline queries with the appropriate :attr:`telegram.InlineQuery.chat_type`.

            .. versionadded:: 13.5
    Attributes:
        callback (:term:`coroutine function`): The callback function for this handler.
        pattern (:obj:`str` | :func:`re.Pattern <re.compile>`): Optional. Regex pattern to test
            :attr:`telegram.InlineQuery.query` against.
        chat_types (list[:obj:`str`]): Optional. List of allowed chat types.

            .. versionadded:: 13.5
        block (:obj:`bool`): Determines whether the return value of the callback should be
            awaited before processing the next handler in
            :meth:`telegram.ext.Application.process_update`.

    )Ú
chat_typesÚpatternNÚselfzInlineQueryHandler[CCT, RT]Úcallbackr   Úblockr   c                    s4   t ƒ j||d� t|tƒrt |¡}|| _|| _d S )N)r   )ÚsuperÚ__init__Ú
isinstanceÚstrÚreÚcompiler   r   )r   r   r   r   r   ©Ú	__class__© úd/var/www/kodo/tsheker/venv/lib/python3.10/site-packages/telegram/ext/_handlers/inlinequeryhandler.pyr   [   s
   


zInlineQueryHandler.__init__ÚupdateÚreturnc                 C   sZ   t |tƒr+|jr+| jdur|jj| jvrdS | jr&t | j|jj¡ }r&|S | js+dS d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` | :obj:`re.match`

        NFT)	r   r   Úinline_queryr   Ú	chat_typer   r   ÚmatchÚquery)r   r    r$   r   r   r   Úcheck_updatej   s   
zInlineQueryHandler.check_updateÚcontextÚapplicationz)Application[Any, CCT, Any, Any, Any, Any]Úcheck_resultc                 C   s    | j rtd|ƒ}|g|_dS dS )z�Add the result of ``re.match(pattern, update.inline_query.query)`` to
        :attr:`CallbackContext.matches` as list with one element.
        r   N)r   r   Úmatches)r   r'   r    r(   r)   r   r   r   Úcollect_additional_context€   s   

þz-InlineQueryHandler.collect_additional_context)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r	   r   r   r   r   r   r   r
   ÚboolÚlistr   Úobjectr   r&   r+   Ú__classcell__r   r   r   r   r   %   s:    3ûÿþýü
ûþýüûúr   )r/   r   r   r   Útypingr   r   r   r   Útelegramr   Útelegram._utils.defaultvaluer	   Útelegram._utils.typesr
   Ú"telegram.ext._handlers.basehandlerr   Útelegram.ext._utils.typesr   r   Útelegram.extr   r   r   r   r   r   r   Ú<module>   s   