首页 > 解决方案 > 如何根据用户选择调用 CallbackQueryHandler 中的函数?

问题描述

例子:

AGAIN = range(1)
TOKEN = 'token'


def start(update, context):
    keyboard = [
        [InlineKeyboardButton("again", callback_data='again')],
        [InlineKeyboardButton("stop", callback_data='stop')]
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)

    update.message.reply_text(
            text="Hi!\n-----\nThat's it, again?",
            reply_markup=reply_markup)
    return AGAIN


def again(update, context):
    query = update.callback_query
    query.answer()

    if query.data == 'again':
        start()

    elif query.data == 'stop':
        cancel()


def cancel(update, context):
    update.message.reply_text(
        'Thank You, if you want open the menu, just type /start')
    return ConversationHandler.END


def main():
    updater = Updater(token=TOKEN, use_context=True)
    dispatcher = updater.dispatcher

    conv_handler = ConversationHandler(
        entry_points=[CommandHandler('start', start)],
        states={
            AGAIN: [CallbackQueryHandler(again)]
        },
        fallbacks=[CommandHandler('cancel', cancel)],
    )

    dispatcher.add_handler(conv_handler)

    updater.start_polling()
    updater.idle()


if __name__ == '__main__':
    main()

后面的部分怎么做?如果用户选择“再次”--> 运行 start(),如果用户选择“停止”--> 运行 cancel()。我尝试使用 MessageHandler 或 CommandHandler 添加新状态,但它不起作用,因为在 .

标签: pythontelegram-botpython-telegram-bot

解决方案


推荐阅读