如何在其中构建带有 CallbackQueryHandler 的对话处理程序
How build a conversation handler with CllbackQueryHandler in it
注意:我使用 python-telegram-bot 包的第 12 版。
我想构建一个对话处理程序:当用户选择 \charts 命令时,机器人会向他们显示一个内联的选项列表,并根据他们的选择,return 给他们一个图表。
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
,则会导致错误:
If 'per_message=True', all entry points and state handlers
must be 'CallbackQueryHandler', since no other handlers have a message context.
因此,似乎使用 CallBackQueryHandler 构建对话处理程序(或者换句话说,在聊天期间显示内联键盘)的唯一方法是将所有处理程序设置为 CallbackQueryHandler。这是正确的吗?
首先,这不是错误,这是一个您可以安全忽略的警告: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
这种流程你可以用简单的 MessageHandler
和 Filters
来实现
也就是说你可以使用 regex filter.
ConversationHandler
在您需要与用户进行多步迭代时很有用(例如逐步填写长表格)。如果您可以通过其他方式识别用户请求,例如生成的命令、内联按钮、消息文本 — 更喜欢这样做。
注意:我使用 python-telegram-bot 包的第 12 版。
我想构建一个对话处理程序:当用户选择 \charts 命令时,机器人会向他们显示一个内联的选项列表,并根据他们的选择,return 给他们一个图表。
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
,则会导致错误:
If 'per_message=True', all entry points and state handlers
must be 'CallbackQueryHandler', since no other handlers have a message context.
因此,似乎使用 CallBackQueryHandler 构建对话处理程序(或者换句话说,在聊天期间显示内联键盘)的唯一方法是将所有处理程序设置为 CallbackQueryHandler。这是正确的吗?
首先,这不是错误,这是一个您可以安全忽略的警告: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
这种流程你可以用简单的 MessageHandler
和 Filters
也就是说你可以使用 regex filter.
ConversationHandler
在您需要与用户进行多步迭代时很有用(例如逐步填写长表格)。如果您可以通过其他方式识别用户请求,例如生成的命令、内联按钮、消息文本 — 更喜欢这样做。