
    Yi[$                         S r SSKrSSKrSSKJrJr  SSKJrJrJrJ	r	J
r
JrJr  SSKJr  SSKJr  SSKJr  SSKJr  SS	KJrJr  \(       a  SS
KJr  \
" S5      r " S S\\\\4   5      rg)z4This module contains the CallbackQueryHandler class.    N)MatchPattern)TYPE_CHECKINGAnyCallableOptionalTypeVarUnioncast)Update)DEFAULT_TRUE)DVType)BaseHandler)CCTHandlerCallback)ApplicationRTc                      ^  \ rS rSrSrSrSS\4SSS\\\	\
4   S\\\\\   \\\/\\   4   4      S	\\\\\   4      S
\\   4
U 4S jjjrS\S\\\\4      4S jrS\	S\SSS\\\\   4   SS4
S jrSrU =r$ )CallbackQueryHandler%   a  Handler class to handle Telegram
:attr:`callback queries <telegram.Update.callback_query>`. Optionally based on a regex.

Read the documentation of the :mod:`re` module for more information.

Note:
    * If your bot allows arbitrary objects as
      :paramref:`~telegram.InlineKeyboardButton.callback_data`, it may happen that the
      original :attr:`~telegram.InlineKeyboardButton.callback_data` for the incoming
      :class:`telegram.CallbackQuery` can not be found. This is the case when either a
      malicious client tempered with the :attr:`telegram.CallbackQuery.data` or the data was
      simply dropped from cache or not persisted. In these
      cases, an instance of :class:`telegram.ext.InvalidCallbackData` will be set as
      :attr:`telegram.CallbackQuery.data`.

      .. versionadded:: 13.6

    * If neither :paramref:`pattern` nor :paramref:`game_pattern` is set, `any`
      ``CallbackQuery`` will be handled. If only :paramref:`pattern` is set, queries with
      :attr:`~telegram.CallbackQuery.game_short_name` will `not` be considered and vice versa.
      If both patterns are set, queries with either :attr:
      `~telegram.CallbackQuery.game_short_name` or :attr:`~telegram.CallbackQuery.data`
      matching the defined pattern will be handled

      .. versionadded:: 21.5

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.

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>` | :obj:`callable` | :obj:`type`,             optional):
        Pattern to test :attr:`telegram.CallbackQuery.data` against. If a string or a regex
        pattern is passed, :func:`re.match` is used on :attr:`telegram.CallbackQuery.data` to
        determine if an update should be handled by this handler. If your bot allows arbitrary
        objects as :paramref:`~telegram.InlineKeyboardButton.callback_data`, non-strings will
        be accepted. To filter arbitrary objects you may pass:

        - a callable, accepting exactly one argument, namely the
          :attr:`telegram.CallbackQuery.data`. It must return :obj:`True` or
          :obj:`False`/:obj:`None` to indicate, whether the update should be handled.
        - a :obj:`type`. If :attr:`telegram.CallbackQuery.data` is an instance of that type
          (or a subclass), the update will be handled.

        If :attr:`telegram.CallbackQuery.data` is :obj:`None`, the
        :class:`telegram.CallbackQuery` update will not be handled.

        .. seealso:: :wiki:`Arbitrary callback_data <Arbitrary-callback_data>`

        .. versionchanged:: 13.6
           Added support for arbitrary callback data.
    game_pattern (:obj:`str` | :func:`re.Pattern <re.compile>` | optional)
        Pattern to test :attr:`telegram.CallbackQuery.game_short_name` against. If a string or
        a regex pattern is passed, :func:`re.match` is used on
        :attr:`telegram.CallbackQuery.game_short_name` to determine if an update should be
        handled by this handler.

        .. versionadded:: 21.5
    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.
    pattern (:func:`re.Pattern <re.compile>` | :obj:`callable` | :obj:`type`): Optional.
        Regex pattern, callback or type to test :attr:`telegram.CallbackQuery.data` against.

        .. versionchanged:: 13.6
           Added support for arbitrary callback data.
    game_pattern (:func:`re.Pattern <re.compile>`): Optional.
        Regex pattern to test :attr:`telegram.CallbackQuery.game_short_name`
    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`.

)game_patternpatternNselfzCallbackQueryHandler[CCT, RT]callbackr   r   blockc                 R  > [         TU ]  XS9  [        U5      (       a&  [        R                  " U5      (       a  [        S5      e[        U[        5      (       a  [        R                  " U5      n[        U[        5      (       a  [        R                  " U5      nUU l
        X0l        g )N)r   zQThe `pattern` must not be a coroutine function! Use an ordinary function instead.)super__init__callableasyncioiscoroutinefunction	TypeError
isinstancestrrecompiler   r   )r   r   r   r   r   	__class__s        V/app/.venv/lib/python3.13/site-packages/telegram/ext/_handlers/callbackqueryhandler.pyr   CallbackQueryHandler.__init__   s     	/G!<!<W!E!Ec  gs##jj)GlC((::l3L  	 AM    updatereturnc                    [        U[        5      (       a  UR                  (       d  gUR                  R                  nUR                  R                  n[        U R                  U R                  /5      (       d  gU(       a  U R                  (       d  g[        U R                  [        5      (       a  [        X R                  5      $ [        U R                  5      (       a  U R                  U5      $ [        U[        5      (       d  g[        R                  " U R                  U5      =n(       a  U$  gU(       a>  U R                  (       d  g[        R                  " U R                  U5      =n(       a  U$  gg)zDetermines whether an update should be passed to this handler's :attr:`callback`.

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

Returns:
    :obj:`bool`

NTF)r#   r   callback_querydatagame_short_nameanyr   r   typer   r$   r%   match)r   r+   callback_datar0   r3   s        r(   check_update!CallbackQueryHandler.check_update   s#    66**v/D/D--22 //??DLL$"3"3455 <<$,,--!->>%%||M22mS11}==u= >  $$!2!2ODDuD E  r*   contextapplicationz)Application[Any, CCT, Any, Any, Any, Any]check_resultc                 X    U R                   (       a  [        [        U5      nU/Ul        gg)zAdd the result of ``re.match(pattern, update.callback_query.data)`` to
:attr:`CallbackContext.matches` as list with one element.
N)r   r   r   matches)r   r7   r+   r8   r9   s        r(   collect_additional_context/CallbackQueryHandler.collect_additional_context   s%     <<|4L+nGO r*   )__name__
__module____qualname____firstlineno____doc__	__slots__r   r   r   r   r   r   r
   r$   r   r2   r   objectboolr   r   r5   r   r<   __static_attributes____classcell__)r'   s   @r(   r   r   %   s   Vp ,I ;?*M-M!&#r/2M #ws|T8VHhtn4L+MMN
M uS'#,%678M d|M M2)6 )huT6\7J.K )V-- - A	-
 D%*,-- 
- -r*   r   )rB   r    r%   r   r   typingr   r   r   r   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(   <module>rP      sS   & ;  	  O O O  5 ( : :(T]k-;vsB7 k-r*   