python - 如何根据用户选择调用 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 添加新状态,但它不起作用,因为在 .
解决方案
推荐阅读
- python - 训练文本语料库太大而无法加载到内存中
- c - 使用 realloc 动态增长结构数组会导致堆损坏
- php - Zend db - 更新不起作用
- openlayers - openlayers 4中map.beforeRender的等价物是什么?
- laravel - Laravel 查询生成器 - 如何按关系字段过滤
- javascript - jqueryui Accordion 动态内容行为
- javascript - API GET 按钮点击?
- ajax - 如何更改 django-autocomplete-light 默认加载的 obj 数量?
- html - 如何在悬停效果上更改 div 元素内部的背景颜色?
- apache-camel - Apache-Camel 多个 pollenrich() 和移动参数错误