melobot.session¶
会话层部件¶
- class melobot.session.Session[源代码]¶
基类:
object会话
- 变量:
store (SessionStore) -- 当前会话上下文的会话存储
rule (Rule) -- 当前会话上下文的会话规则
- release(*events: Event) None[源代码]¶
释放对会话中事件的控制。允许它们参与“传播评估”。
事件是否可以向更低优先级传播,需要在同级的所有处理流完成后进行评估。同级所有处理流完成后, 如果事件为“不可传播”状态(event.spread = False),则不会向更低优先级传播。
而会话必须存在于一个正在运行的处理流程中。对于会话中的事件,存在两种情况:
1. 事件在会话挂起后,实际上就不再被需要(会话期待一个新的事件来继续处理流程)。 那么挂起后,事件就应该允许参与传播评估。 2. 事件在会话挂起后,仍然可能被需要(会话在下一阶段,仍然需要这个事件的信息)。 那么挂起后,事件还不应该参与传播评估。
melobot 将第一种情景视为默认情况(即使用
enter_session()时,auto_release=True), 此时每次挂起后,自动调用此方法释放对于事件的控制,允许它们参与传播评估。值得注意的是,此方法意为“释放”, 传播评估**需要在当前事件的处理流程结束之后才会进行**。如果设置了 auto_release=False,则在挂起后保留对于事件的控制,需要手动调用此方法。 而设置了 keep=True 时,无论 auto_release 如何设置,都需要手动调用此方法。
总结:一般情况下无需使用此方法。但如果启用了会话,且需要更精准地控制事件的传播时机,可以考虑使用此方法。
- 参数:
events (Event) -- 事件对象。如果不提供,则释放会话历史中所有未释放的事件
- 返回类型:
None
- class melobot.session.Rule[源代码]¶
-
会话规则
对于更复杂的情况,可以继承此类,在子类中结合状态信息实现更动态的会话判断
- async compare(e1: EventT, e2: EventT) bool[源代码]¶
会话判断的方法
抽象方法,和
compare_with()二选一实现- 参数:
e1 (EventT) -- 某一已存在的会话中的事件
e2 (EventT) -- 待判断的事件
- 返回:
为 True 则在一个会话中,反之亦然
- 返回类型:
- async compare_with(info: CompareInfo[EventT]) bool[源代码]¶
会话判断的方法
抽象方法,和
compare()二选一实现- 参数:
info (CompareInfo[EventT]) -- 用于会话判断的信息
- 返回:
为 True 则在一个会话中,反之亦然
- 返回类型:
- class melobot.session.CompareInfo[源代码]¶
基类:
Generic[EventT]用于会话判断的信息
- old_event: EventT¶
- new_event: EventT¶
- melobot.session.enter_session(rule: Rule, wait: bool = True, nowait_cb: SyncOrAsyncCallable[(), None] | None = None, keep: bool = False, auto_release: bool = True) _AsyncGeneratorContextManager[Session][源代码]¶
上下文管理器,提供一个会话上下文,在此上下文中可使用会话的高级特性
- 参数:
rule (Rule) -- 会话规则
wait (bool) -- 当出现会话冲突时,是否需要等待
nowait_cb (SyncOrAsyncCallable[(), None] | None) -- 指定了 wait=False 后,会话冲突时执行的回调
keep (bool) -- 会话在退出会话上下文后是否继续保持
auto_release (bool) -- 当前会话挂起后,事件是否自动释放。其他有关细节参考
Session.release()
- Yield:
会话对象
- 返回类型:
_AsyncGeneratorContextManager[Session]
会话状态¶
- async melobot.session.suspend(timeout: float | None = None, auto_stop: bool = False) bool[源代码]¶
挂起当前会话
- melobot.session.get_session_store() SessionStore[源代码]¶
获取当前上下文中的会话存储
- 返回:
会话存储
- 返回类型:
依赖注入项¶
上下文动态变量¶
- melobot.session.s_store¶
当前上下文中的会话存储,类型为
SessionStore