web-dev-qa-db-fra.com

Plusieurs gestionnaires de requêtes de rappel?

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?

7
George knife

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()
8
ip0000h

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$'))
0
Yuri P.D.