如何在其中使用CllbackQueryHandler构建会话处理程序

时间:2019-03-22 17:47:29

标签: python-telegram-bot

注意:我使用的是python-telegram-bot软件包的第12版。

我想构建一个对话处理程序:当用户选择\ charts命令时,机器人会向他们显示一系列内联选项,并根据他们的选择向他们返回图表。

@{HOMEDIRS}=/home/ /media/aUser/Linux/

但是,如果我未设置charts_handler = ConversationHandler( entry_points=[CommandHandler('chart', chart_start)], states={ ChartChoices.choosing_user: [CallbackQueryHandler( individual_chart, pass_user_data=True) ], }, fallbacks=[done_handler], ) ,则会导致此错误:

per_message=False

如果我确实设置了If 'per_message=False', 'CallbackQueryHandler' will not be tracked for every message. ,则会导致错误:

per_message=True

因此,似乎使用CallBackQueryHandler构建对话处理程序的唯一方法(或者换句话说,在聊天期间显示嵌入式键盘)是将所有处理程序都设置为CallbackQueryHandler。这是对的吗?

1 个答案:

答案 0 :(得分:1)

首先,这不是错误,它是一个警告,您可以放心忽略:If 'per_message=False', 'CallbackQueryHandler' will not be tracked for every message.

第二,描述的用例不需要ConversationHandler。用户交互示例: User: /charts Bot: Here is the list of available charts: Bar chart 1 /chart_1 Bar chart 2 /chart_2 Pie chart /chart_3

您可以使用简单的MessageHandlerFilters

来实现这种流程

Docs: MessageHandler

Docs: Filters

即,您可以使用regex filter

ConversationHandler在您需要与用户进行多步迭代(例如,逐步填写长表格)时非常有用。如果您可以通过其他方式(例如生成的命令,内联按钮,消息文本)识别用户请求,则更喜欢这样做。