Est-il possible avec l'encapsuleur python-telegram-bot d'utiliser plus d'un gestionnaire de requêtes de rappel?
J'aimerais avoir plusieurs gestionnaires uniques, mais pour autant que je sache, il ne peut en exister qu'un. Cela signifie que je devrais baser les claviers en ligne que je montre sur le texte du message initial.
Y a-t-il quelque chose qui me manque?
Vous pouvez utiliser le wrapper ConversationHandler pour cela. Vérifiez le code ci-dessous:
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()
Vous pouvez utiliser CallbackQueryHandler pattern argument. Modèle regex pour tester telegram.CallbackQuery.data.
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$'))