Ë
    †jC  ã                   ón   — d Z ddlmZmZ ddlmZmZ ddlmZm	Z	 ddl
mZ ddlmZ  G d„ dee	e   «      Zy	)
zOThis module contains a class that allows to rate limit requests to the Bot API.é    )ÚABCÚabstractmethod)ÚCallableÚ	Coroutine)ÚAnyÚGeneric)ÚJSONDict)ÚRLARGSc                   óº   — e Zd ZdZdZedd„«       Zedd„«       Zedede	e
e
eez  ee   z  f   f   d	e
d
eee
f   dedeee
f   dedz  deez  ee   z  fd„«       Zy)ÚBaseRateLimiteraÌ  
    Abstract interface class that allows to rate limit the requests that python-telegram-bot
    sends to the Telegram Bot API. An implementation of this class
    must implement all abstract methods and properties.

    This class is a :class:`~typing.Generic` class and accepts one type variable that specifies
    the type of the argument :paramref:`~process_request.rate_limit_args` of
    :meth:`process_request` and the methods of :class:`~telegram.ext.ExtBot`.

    Hint:
        Requests to :meth:`~telegram.Bot.get_updates` are never rate limited.

    .. seealso:: :wiki:`Architecture Overview <Architecture>`,
        :wiki:`Avoiding Flood Limits <Avoiding-flood-limits>`

    .. versionadded:: 20.0
    © ÚreturnNc              ƒ   ó   K  — y­w)zKInitialize resources used by this class. Must be implemented by a subclass.Nr   ©Úselfs    ú\/var/www/html/datingFans/myenv/lib/python3.12/site-packages/telegram/ext/_baseratelimiter.pyÚ
initializezBaseRateLimiter.initialize2   ó   è ø� ùó   ‚c              ƒ   ó   K  — y­w)zMStop & clear resources used by this class. Must be implemented by a subclass.Nr   r   s    r   ÚshutdownzBaseRateLimiter.shutdown6   r   r   Úcallback.ÚargsÚkwargsÚendpointÚdataÚrate_limit_argsc              ƒ   ó   K  — y­w)a;  
        Process a request. Must be implemented by a subclass.

        This method must call :paramref:`callback` and return the result of the call.
        `When` the callback is called is up to the implementation.

        Important:
            This method must only return once the result of :paramref:`callback` is known!

        If a :exc:`~telegram.error.RetryAfter` error is raised, this method may try to make
        a new request by calling the callback again.

        Warning:
            This method *should not* handle any other exception raised by :paramref:`callback`!

        There are basically two different approaches how a rate limiter can be implemented:

        1. React only if necessary. In this case, the :paramref:`callback` is called without any
           precautions. If a :exc:`~telegram.error.RetryAfter` error is raised, processing requests
           is halted for the :attr:`~telegram.error.RetryAfter.retry_after` and finally the
           :paramref:`callback` is called again. This approach is often amendable for bots that
           don't have a large user base and/or don't send more messages than they get updates.
        2. Throttle all outgoing requests. In this case the implementation makes sure that the
           requests are spread out over a longer time interval in order to stay below the rate
           limits. This approach is often amendable for bots that have a large user base and/or
           send more messages than they get updates.

        An implementation can use the information provided by :paramref:`data`,
        :paramref:`endpoint` and :paramref:`rate_limit_args` to handle each request differently.

        Examples:
            * It is usually desirable to call :meth:`telegram.Bot.answer_inline_query`
              as quickly as possible, while delaying :meth:`telegram.Bot.send_message`
              is acceptable.
            * There are `different <https://core.telegram.org/bots/faq              #my-bot-is-hitting-limits-how-do-i-avoid-this>`_ rate limits for group chats and
              private chats.
            * When sending broadcast messages to a large number of users, these requests can
              typically be delayed for a longer time than messages that are direct replies to a
              user input.

        Args:
            callback (Callable[..., :term:`coroutine`]): The coroutine function that must be called
                to make the request.
            args (tuple[:obj:`object`]): The positional arguments for the :paramref:`callback`
                function.
            kwargs (dict[:obj:`str`, :obj:`object`]): The keyword arguments for the
                :paramref:`callback` function.
            endpoint (:obj:`str`): The endpoint that the request is made for, e.g.
                ``"sendMessage"``.
            data (dict[:obj:`str`, :obj:`object`]): The parameters that were passed to the method
                of :class:`~telegram.ext.ExtBot`. Any ``api_kwargs`` are included in this and
                any :paramref:`~telegram.ext.ExtBot.defaults` are already applied.

                Example:

                    When calling::

                        await ext_bot.send_message(
                            chat_id=1,
                            text="Hello world!",
                            api_kwargs={"custom": "arg"}
                        )

                    then :paramref:`data` will be::

                        {"chat_id": 1, "text": "Hello world!", "custom": "arg"}

            rate_limit_args (:obj:`None` | :class:`object`): Custom arguments passed to the methods
                of :class:`~telegram.ext.ExtBot`. Can e.g. be used to specify the priority of
                the request.

        Returns:
            :obj:`bool` | dict[:obj:`str`, :obj:`object`] | :obj:`None`: The result of the
            callback function.
        Nr   )r   r   r   r   r   r   r   s          r   Úprocess_requestzBaseRateLimiter.process_request:   r   r   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   r   r   r   r   r   Úboolr	   ÚlistÚdictÚstrr
   r   r   ó    r   r   r      sÝ   „ ñð$ €IàòZó ðZð ò\ó ð\ð ðTà˜3 	¨#¨s°D¸8±OÀdÈ8ÁnÑ4TÐ*TÑ UÐUÑVðTð ðTð �S˜#�X‘ð	Tð
 ðTð �3˜�8‰nðTð   $™ðTð 
�‰˜4 ™>Ñ	)òTó ñTr)   r   N)r#   Úabcr   r   Úcollections.abcr   r   Útypingr   r   Útelegram._utils.typesr	   Útelegram.ext._utils.typesr
   r   r   r)   r   ú<module>r/      s.   ðñ& Vç #ß /ß å *Ý ,ôr�c˜7 6™?õ rr)   