From ffc8353309511580d8735446466a73c5c1966a22 Mon Sep 17 00:00:00 2001 From: Bibo-Joshi <22366557+Bibo-Joshi@users.noreply.github.com> Date: Fri, 29 Mar 2024 12:00:37 +0100 Subject: [PATCH] Updated Arbitrary callback_data (markdown) --- Arbitrary-callback_data.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Arbitrary-callback_data.md b/Arbitrary-callback_data.md index 5d698f4..348bd97 100644 --- a/Arbitrary-callback_data.md +++ b/Arbitrary-callback_data.md @@ -4,6 +4,9 @@ The Telegrams Bot API only accepts strings with length up to 64 bytes as `callba With PTB, you are able to pass *any* object as `callback_data`. This is achieved by storing the object in a cache and passing a unique identifier for that object to Telegram. When a `CallbackQuery` is received, the id in the `callback_data` is replaced with the stored object. To use this feature, set [`Application.arbitrary_callback_data`](https://docs.python-telegram-bot.org/telegram.ext.applicationbuilder.html#telegram.ext.ApplicationBuilder.arbitrary_callback_data) to `True`. The cache that holds the stored data has limited size (more details on memory usage below). If the cache is full and objects from a new `InlineKeyboardMarkup` need to be stored, it will discard the data for the least recently used keyboard. +> [!Note] +> You can of course also manually implement the idea of storing the object in a cache and passing a unique identifier for that object to Telegram, e.g. with the help of PTB [[storing data functionality|Storing-bot,-user-and-chat-related-data]]. PTBs built-in "Arbitrary `callback_data`" provides this mechanism in a way that requires minimal additional implementation effort on your end and that ties in well with the overall PTB framework. + This means two things for you: 1. If you don't use [persistence](../wiki/Making-your-bot-persistent), buttons won't work after restarting your bot, as the stored updates are lost. More precisely, the `callback_data` you will receive is an instance of `telegram.ext.InvalidCallbackData`. If you don't need persistence otherwise, you can set `store_callback_data` to `True` and all the others to `False`.