gpt4 book ai didi

python - 如何在 python-telegram-api 的 ConversationHandler 中管理当前状态

转载 作者:太空宇宙 更新时间:2023-11-03 21:36:51 27 4
gpt4 key购买 nike

我想使用ConversationHandler在我的机器人中。至少,它需要三个参数:

class telegram.ext.ConversationHandler(entry_points, states, fallbacks)

据我所知,入口点是对话处理程序的触发器,然后每个状态都可以执行自己的处理程序,并且 based on fallbacks definition ,如果某个状态的所有处理程序都返回 false,则触发回退。

好的,因此,处理程序会返回一些内容。但处理程序是一个对象,一个类的实例。

基于this example ,寻找 new_alarm_handler 的示例。

所以我的疑问

  1. 处理程序如何返回值? (他们似乎返回了回调函数结果)。

  2. 对话的当前状态在哪里?它似乎无法访问,但却是最后执行的处理程序的最后结果。是吗?如果不是,那么我必须做什么才能改变对话中的当前状态?

  3. 因此,当达到某个状态时,将执行其处理程序列表(作为 arg 传递的字典 states 中的值)。但作为一个列表,它可能不止一个,因此可能有多个返回状态。如何管理?

最佳答案

ConversationHandler 存储当前 state字典中的对话,名为 conversations ,键是一个名为 conversation_key 的实体。它是一个元组,由聊天 ID、用户 ID 和消息 ID 组成(其中一些可能会丢失,这是由 per_chatper_userper_message bool 属性定义的)。

这里conversations访问得到statecheck_update方法(进一步解释):
https://github.com/python-telegram-bot/python-telegram-bot/blob/2cde878d1e5e0bb552aaf41d5ab5df695ec4addb/telegram/ext/conversationhandler.py#L248
对话的状态不适合手动访问。

当用户向机器人发送消息时,Updater收到Update来自 Telegram 的对象并将其传递到其 DispatcherDispatcher有已注册的列表Handler物体,他们的check_update方法按照添加顺序进行调用。 check_update要么返回 FalseNone如果不应处理更新,或者它返回一些对象,然后将其传递给 handle_update方法。

ConversationHandler继承自Handler它本身和它有其他Handler对象作为其 states 中的值字典。它还具有 check_updatehandle_update被覆盖。它的check_update获取当前对话 state (参见上面的链接)并调用 check_update所有处理程序的方法 state 。如果全部返回False它对 fallbacks 中的处理程序执行相同的操作列表。如果他们的所有检查也返回 False它什么也不做。

如果其中一个处理程序应处理该事件,则该对象的 check_update返回值传递给ConversationHadlerhandle_update方法。它调用被解雇的 Handlerhandle_update方法,该方法又调用在其创建时定义的回调函数。其结果设置为新的 state这段对话在 conversations字典。

根据 ConversationHandler 文档字符串:

To change the state of conversation, the callback function of a handler must return the new state after responding to the user. If it does not return anything (returning ``None`` by default), the state will not change.

关于python - 如何在 python-telegram-api 的 ConversationHandler 中管理当前状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53194950/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com