melobot.session¶
会话层部件¶
- class melobot.session.Session[源代码]¶
基类:
object
会话
- 变量:
store (SessionStore) -- 当前会话上下文的会话存储
rule (Rule) -- 当前会话上下文的会话规则
- set_completed(event: Event | None = None) None [源代码]¶
标志会话中的事件为完成状态
event 参数为空,自动标志会话历史中所有事件为完成状态
事件被标志为完成状态后,事件才可能向更低优先级传播。但具体是否可以, 还和其他处理流的操作有关
举例来说,假设一个事件触发了一批处理流,如果这批处理流都没有启用会话, 处理流结束后,将会自动标志事件“完成”。事件是否可以传播, 将在所有处理流完成后评估
但如果这批处理流中有启用会话的,由于会话是可以挂起的, 这意味着非常长的处理周期,因此需要会话来标志事件“完成”, 这样后续的传播评估才能在合适的时机进行
使用
enter_session()
进入会话时,设置 auto_complete=True, 会话将在每次挂起后,自动标志当前事件为完成状态,这样事件就不会被会话“囚禁”, 而迟迟无法传播到下一优先级。而设置为 False,则需要手动调用此方法来标志“完成”- 参数:
event (Event | None) -- 事件
- 返回类型:
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_complete: bool = True) _AsyncGeneratorContextManager[Session] [源代码]¶
上下文管理器,提供一个会话上下文,在此上下文中可使用会话的高级特性
- 参数:
rule (Rule) -- 会话规则
wait (bool) -- 当出现会话冲突时,是否需要等待
nowait_cb (SyncOrAsyncCallable[(), None] | None) -- 指定了 wait=False 后,会话冲突时执行的回调
keep (bool) -- 会话在退出会话上下文后是否继续保持
auto_complete (bool) -- 当前会话挂起后,事件是否自动标记为“完成”状态。其他有关细节参考
Session.set_completed()
- Yield:
会话对象
- 返回类型:
_AsyncGeneratorContextManager[Session]
会话状态¶
- melobot.session.get_session_store() SessionStore [源代码]¶
获取当前上下文中的会话存储
- 返回:
会话存储
- 返回类型:
上下文动态变量¶
- melobot.session.s_store¶
当前上下文中的会话存储,类型为
SessionStore