我想在我的机器人中使用ConversationHandler。至少,它需要三个参数:
class telegram.ext.ConversationHandler(entry_points, states, fallbacks)
AFAIK,入口点是会话处理程序的触发器,然后每个状态可以执行自己的处理程序,并且based on fallbacks definition,如果来自状态的所有处理程序返回false
,则触发回退。
好吧,处理程序返回一些东西。但是处理程序是一个对象,一个类的实例。
基于this example,以new_alarm_handler
为例。
states
中的值作为arg传递)。但作为一个列表,它可能不止一个,因此可能有多个返回状态。它是如何管理的?ConversationHandler将对话的当前state
存储在dict中,称为conversations
,密钥是一个名为conversation_key
的实体。它是一个元组,由聊天ID,用户ID和消息ID组成(其中一些可能缺失,这由per_chat
,per_user
和per_message
bool属性定义)。
在这里qazxsw poi可以通过qazxsw poi方法获得qazxsw poi(进一步解释):
conversations
无法手动访问会话状态。
当用户向机器人发送消息时,state
从Telegram接收check_update
对象并将其传递给https://github.com/python-telegram-bot/python-telegram-bot/blob/2cde878d1e5e0bb552aaf41d5ab5df695ec4addb/telegram/ext/conversationhandler.py#L248。 Updater
有一个注册的Update
对象列表,他们的Dispatcher
方法按照添加的顺序调用。如果不应该处理更新,Dispatcher
要么返回Handler
,要么返回check_update
,或者返回一些然后传递给check_update
方法的对象。
False
继承自None
本身,它有其他handle_update
对象作为其ConversationHandler
字典中的值。它还覆盖了Handler
和Handler
。它的states
得到它当前的对话check_update
(见上面的链接)并调用handle_update
的所有处理程序的check_update
方法。如果所有这些都返回state
,它对check_update
列表中的处理程序也是如此。如果所有他们的支票也返回state
它什么都不做。
如果其中一个处理程序应该处理该事件,则其False
返回的对象将传递给fallbacks
的False
方法。它调用了被激活的check_update
的ConversationHadler
方法,该方法又调用了在其创建时定义的回调函数。它的结果将成为handle_update
dict中这次谈话的新Handler
。
根据ConversationHandler文档字符串:
handle_update