AIORateLimiter¶
- class telegram.ext.AIORateLimiter(overall_max_rate=30, overall_time_period=1, group_max_rate=20, group_time_period=60, max_retries=0)[source]¶
Bases:
telegram.ext.BaseRateLimiter
Implementation of
BaseRateLimiter
using the library aiolimiter.Important
If you want to use this class, you must install PTB with the optional requirement
rate-limiter
, i.e.pip install "python-telegram-bot[rate-limiter]"
The rate limiting is applied by combining two levels of throttling and
process_request()
roughly boils down to:async with group_limiter(group_id): async with overall_limiter: await callback(*args, **kwargs)
Here,
group_id
is determined by checking if there is achat_id
parameter in thedata
. Theoverall_limiter
is applied only if achat_id
argument is present at all.Attention
Some bot methods accept a
chat_id
parameter in form of a@username
for supergroups and channels. As we can’t know which@username
corresponds to which integerchat_id
, these will be treated as different groups, which may lead to exceeding the rate limit.As channels can’t be differentiated from supergroups by the
@username
or integerchat_id
, this also applies the group related rate limits to channels.A
RetryAfter
exception will halt all requests forretry_after
+ 0.1 seconds. This may be stricter than necessary in some cases, e.g. the bot may hit a rate limit in one group but might still be allowed to send messages in another group.
Note
This class is to be understood as minimal effort reference implementation. If you would like to handle rate limiting in a more sophisticated, fine-tuned way, we welcome you to implement your own subclass of
BaseRateLimiter
. Feel free to check out the source code of this class for inspiration.See also
Added in version 20.0.
- Parameters:
overall_max_rate (
float
) – The maximum number of requests allowed for the entire bot peroverall_time_period
. When set to 0, no rate limiting will be applied. Defaults to30
.overall_time_period (
float
) – The time period (in seconds) during which theoverall_max_rate
is enforced. When set to 0, no rate limiting will be applied. Defaults to 1.group_max_rate (
float
) – The maximum number of requests allowed for requests related to groups and channels pergroup_time_period
. When set to 0, no rate limiting will be applied. Defaults to 20.group_time_period (
float
) – The time period (in seconds) during which thegroup_max_rate
is enforced. When set to 0, no rate limiting will be applied. Defaults to 60.max_retries (
int
) – The maximum number of retries to be made in case of aRetryAfter
exception. If set to 0, no retries will be made. Defaults to0
.
- async process_request(callback, args, kwargs, endpoint, data, rate_limit_args)[source]¶
Processes a request by applying rate limiting.
See
telegram.ext.BaseRateLimiter.process_request()
for detailed information on the arguments.- Parameters:
rate_limit_args (
None
|int
) – If set, specifies the maximum number of retries to be made in case of aRetryAfter
exception. Defaults toAIORateLimiter.max_retries
.