telegram.ext.BasePersistence

class telegram.ext.BasePersistence(store_user_data: bool = True, store_chat_data: bool = True, store_bot_data: bool = True)

Bases: abc.ABC

Interface class for adding persistence to your bot. Subclass this object for different implementations of a persistent bot.

All relevant methods must be overwritten. This means:

Warning

Persistence will try to replace telegram.Bot instances by REPLACED_BOT and insert the bot set with set_bot() upon loading of the data. This is to ensure that changes to the bot apply to the saved objects, too. If you change the bots token, this may lead to e.g. Chat not found errors. For the limitations on replacing bots see replace_bot() and insert_bot().

Note

replace_bot() and insert_bot() are used independently of the implementation of the update/get_*() methods, i.e. you don’t need to worry about it while implementing a custom persistence subclass.

store_user_data

Optional, Whether user_data should be saved by this persistence class.

Type:bool
store_chat_data

Optional. Whether chat_data should be saved by this persistence class.

Type:bool
store_bot_data

Optional. Whether bot_data should be saved by this persistence class.

Type:bool
Parameters:
  • store_user_data (bool, optional) – Whether user_data should be saved by this persistence class. Default is True.
  • store_chat_data (bool, optional) – Whether chat_data should be saved by this persistence class. Default is True .
  • store_bot_data (bool, optional) – Whether bot_data should be saved by this persistence class. Default is True .
REPLACED_BOT = 'bot_instance_replaced_by_ptb_persistence'

Placeholder for telegram.Bot instances replaced in saved data.

Type:str
flush() → None

Will be called by telegram.ext.Updater upon receiving a stop signal. Gives the persistence a chance to finish up saving or close a database connection gracefully. If this is not of any importance just pass will be sufficient.

get_bot_data() → Dict[Any, Any]

“Will be called by telegram.ext.Dispatcher upon creation with a persistence object. It should return the bot_data if stored, or an empty dict.

Returns:The restored bot data.
Return type:dict
get_chat_data() → DefaultDict[int, Dict[Any, Any]]

“Will be called by telegram.ext.Dispatcher upon creation with a persistence object. It should return the chat_data if stored, or an empty defaultdict(dict).

Returns:The restored chat data.
Return type:defaultdict
get_conversations(name: str) → Dict[Tuple[int, ...], Optional[object]]

“Will be called by telegram.ext.Dispatcher when a telegram.ext.ConversationHandler is added if telegram.ext.ConversationHandler.persistent is True. It should return the conversations for the handler with name or an empty dict

Parameters:name (str) – The handlers name.
Returns:The restored conversations for the handler.
Return type:dict
get_user_data() → DefaultDict[int, Dict[Any, Any]]

“Will be called by telegram.ext.Dispatcher upon creation with a persistence object. It should return the user_data if stored, or an empty defaultdict(dict).

Returns:The restored user data.
Return type:defaultdict
insert_bot(obj: object) → object

Replaces all instances of REPLACED_BOT that occur within the passed object with bot. Currently, this handles objects of type list, tuple, set, frozenset, dict, defaultdict and objects that have a __dict__ or __slot__ attribute.

Parameters:obj (object) – The object
Returns:Copy of the object with Bot instances inserted.
Return type:obj
classmethod replace_bot(obj: object) → object

Replaces all instances of telegram.Bot that occur within the passed object with REPLACED_BOT. Currently, this handles objects of type list, tuple, set, frozenset, dict, defaultdict and objects that have a __dict__ or __slot__ attribute.

Parameters:obj (object) – The object
Returns:Copy of the object with Bot instances replaced.
Return type:obj
set_bot(bot: telegram.bot.Bot) → None

Set the Bot to be used by this persistence instance.

Parameters:bot (telegram.Bot) – The bot.
update_bot_data(data: Dict[KT, VT]) → None

Will be called by the telegram.ext.Dispatcher after a handler has handled an update.

Parameters:data (dict) – The telegram.ext.dispatcher.bot_data .
update_chat_data(chat_id: int, data: Dict[KT, VT]) → None

Will be called by the telegram.ext.Dispatcher after a handler has handled an update.

Parameters:
  • chat_id (int) – The chat the data might have been changed for.
  • data (dict) – The telegram.ext.dispatcher.chat_data [chat_id].
update_conversation(name: str, key: Tuple[int, ...], new_state: Optional[object]) → None

Will be called when a telegram.ext.ConversationHandler.update_state is called. This allows the storage of the new state in the persistence.

Parameters:
  • name (str) – The handler’s name.
  • key (tuple) – The key the state is changed for.
  • new_state (tuple | any) – The new state for the given key.
update_user_data(user_id: int, data: Dict[KT, VT]) → None

Will be called by the telegram.ext.Dispatcher after a handler has handled an update.

Parameters:
  • user_id (int) – The user the data might have been changed for.
  • data (dict) – The telegram.ext.dispatcher.user_data [user_id].