Multiple callback request handlers?

Is it possible for the python-telegram-bot shell to use more than one callback request handler?

I would like to have several unique handlers, but as far as I can tell, there can only be one. This means that I will need to base the built-in keyboards, which I will show on the source text of the message.

Is there something I am missing?

+6
source share
2 answers

You can use the ConversationHandler shell for this. Check out the code below:

from telegram import InlineKeyboardButton, InlineKeyboardMarkup from telegram.ext import Updater, CommandHandler, CallbackQueryHandler, ConversationHandler TELEGRAM_HTTP_API_TOKEN = 'PASTE_TELEGRAM_HTTP_API_TOKEN' FIRST, SECOND = range(2) def start(bot, update): keyboard = [ [InlineKeyboardButton(u"Next", callback_data=str(FIRST))] ] reply_markup = InlineKeyboardMarkup(keyboard) update.message.reply_text( u"Start handler, Press next", reply_markup=reply_markup ) return FIRST def first(bot, update): query = update.callback_query keyboard = [ [InlineKeyboardButton(u"Next", callback_data=str(SECOND))] ] reply_markup = InlineKeyboardMarkup(keyboard) bot.edit_message_text( chat_id=query.message.chat_id, message_id=query.message.message_id, text=u"First CallbackQueryHandler, Press next" ) reply_markup = InlineKeyboardMarkup(keyboard) bot.edit_message_reply_markup( chat_id=query.message.chat_id, message_id=query.message.message_id, reply_markup=reply_markup ) return SECOND def second(bot, update): query = update.callback_query bot.edit_message_text( chat_id=query.message.chat_id, message_id=query.message.message_id, text=u"Second CallbackQueryHandler" ) return updater = Updater(TELEGRAM_HTTP_API_TOKEN) conv_handler = ConversationHandler( entry_points=[CommandHandler('start', start)], states={ FIRST: [CallbackQueryHandler(first)], SECOND: [CallbackQueryHandler(second)] }, fallbacks=[CommandHandler('start', start)] ) updater.dispatcher.add_handler(conv_handler) updater.start_polling() updater.idle() 
+6
source

You can use the CallbackQueryHandler pattern argument. Regex template for checking telegrams .CallbackQuery.data against.

 def motd(bot, update): motd_keyboard = [[InlineKeyboardButton('I agree', callback_data='motd_callback_button')]] motd_markup = InlineKeyboardMarkup(motd_keyboard) update.message.reply_text('Message of the day', reply_markup=motd_markup) def motd_callback_button(bot, update): pass def main(): dp = DjangoTelegramBot.dispatcher dp.add_handler(CallbackQueryHandler(motd_callback_button, pattern='^motd_callback_button$')) 
0
source

Source: https://habr.com/ru/post/1013237/


All Articles