class telegram.ext.ExtBot(token, base_url='https://api.telegram.org/bot', base_file_url='https://api.telegram.org/file/bot', request=None, get_updates_request=None, private_key=None, private_key_password=None, defaults=None, arbitrary_callback_data=False, local_mode=False, rate_limiter=None)[source]

Bases: telegram.Bot, typing.Generic

This object represents a Telegram Bot with convenience extensions.


Not to be confused with telegram.Bot.

For the documentation of the arguments, methods and attributes, please see telegram.Bot.

All API methods of this class have an additional keyword argument rate_limit_args. This can be used to pass additional information to the rate limiter, specifically to telegram.ext.BaseRateLimiter.process_request.rate_limit_args.

This class is a Generic class and accepts one type variable that specifies the generic type of the rate_limiter used by the bot. Use None if no rate limiter is used.


  • The keyword argument rate_limit_args can not be used, if rate_limiter is None.

  • The method get_updates() is the only method that does not have the additional argument, as this method will never be rate limited.

Added in version 13.6.

Changed in version 20.0: Removed the attribute arbitrary_callback_data. You can instead use bot.callback_data_cache.maxsize to access the size of the cache.

Changed in version 20.5: Removed deprecated methods set_sticker_set_thumb and setStickerSetThumb.

property callback_data_cache[source]

Optional. The cache for objects passed as callback data for telegram.InlineKeyboardButton.

Changed in version 20.0: * This property is now read-only. * This property is now optional and can be None if arbitrary_callback_data is set to False.



property defaults[source]

The telegram.ext.Defaults used by this bot, if any.

async initialize()[source]

See telegram.Bot.initialize(). Also initializes the ExtBot.rate_limiter (if set) by calling telegram.ext.BaseRateLimiter.initialize().


If this bot allows for arbitrary callback data, this inserts the cached data into all corresponding buttons within this update.


Checks telegram.Message.via_bot and telegram.Message.from_user to figure out if a) a reply markup exists and b) it was actually sent by this bot. If not, the message will be returned unchanged.

Note that this will fail for channel posts, as telegram.Message.from_user is None for those! In the corresponding reply markups, the callback data will be replaced by telegram.ext.InvalidCallbackData.


In place, i.e. the passed telegram.Message will be changed!


update (telegram.Update) – The update.

property rate_limiter[source]

The telegram.ext.BaseRateLimiter used by this bot, if any.

Added in version 20.0.

async shutdown()[source]

See telegram.Bot.shutdown(). Also shuts down the ExtBot.rate_limiter (if set) by calling telegram.ext.BaseRateLimiter.shutdown().