注意:我使用的是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。这是对的吗?
答案 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
您可以使用简单的MessageHandler
和Filters
即,您可以使用regex filter。
ConversationHandler
在您需要与用户进行多步迭代(例如,逐步填写长表格)时非常有用。如果您可以通过其他方式(例如生成的命令,内联按钮,消息文本)识别用户请求,则更喜欢这样做。