我对ConversationHandler有一个问题,这可能是因为我不太了解如何使用它。我在 PTB 中使用父级和子级 ConversationHandler,如下所示:
...
child_conv_handler = ConversationHandler(
entry_points=[CommandHandler("start_child", start_child_func)],
states={
CHILD_STATE: [
CommandHandler("search", search),
CommandHandler("add", add),
CommandHandler("exit", exit),
],
},
fallbacks=[MessageHandler(filters.TEXT, fallback_message),],
)
parent_conv_handler = ConversationHandler(
entry_points=[CommandHandler("start_parent", start_parent_func)],
states={
PARENT_STATE: [
CommandHandler("stats", stats),
child_conv_handler,
],
},
fallbacks=[CommandHandler("stop", stop)],
)
application.add_handler(parent_conv_handler)
application.run_polling(allowed_updates=Update.ALL_TYPES)
我采取以下行动:
(注意!)
CommandHandler("stats", stats)
(统计回调函数完成其工作!)。看起来所有更新都首先由 PARENT_STATE 的处理程序检查。这意味着 BOT 同时处于两种状态 PARENT_STATE 和 CHILD_STATE。 由于某种原因 PARENT_STATE 具有优先权。但我需要 CHILD_STATE 具有优先级并首先检查。
是的,我可以将本示例中的children_conv_handler放在列表中的第一个位置并获得我想要的结果(触发
MessageHandler(filters.TEXT, fallback_message)
),但是如果我需要两个child_conv_handler1和child_conv_handler2怎么办?在这种情况下我不知道该怎么办。 如何使 CHILD_STATE 成为主要状态,或者如何在 child_conv_handler 启动时将parent_conv_handler 置于某种类型的“死胡同状态”?
将使用 check_update() 方法返回 True 的 first 处理程序。
切换
PARENT_STATE
中处理程序的顺序应该可以解决您的问题。
免责声明:我目前是
python-telegram-bot
的维护者