需要开发插件时,阅读此文档来了解当前dorobot有哪些组件和功能模块可用,快速理解整个项目,以便进行插件开发
name → Plugin 实例)。注册时检测重名,冲突则失败。session_id → Session 实例)。False 就中断传递。# 1. 实例化插件,传入静态参数
app = Plugin(name="my_plugin", layer=1, scope="group")
# 2. 注册到插件管理器
app.register() # 重名时注册失败
MessageRouter.handle_message(bot_id, message)
→ 设置 context.bot_id、context.session_id
→ session_manager.get_or_create_session(session_id)
→ session.handle_message(message)
→ 按 Layer 0→1→2→3 顺序
→ 每层获取 active_plugins
→ 插件返回 False 则中断传递
| Layer ID | 类型 | 说明 |
|---|---|---|
| 0 | TYPE_META | 系统保留 |
| 1 | TYPE_SHARED | 共享层,多个插件可同时处理 |
| 2 | TYPE_EXCLUSIVE | 独占层,同一时刻只有一个插件能处理 |
| 3 | TYPE_SHARED | 共享层 |
目标:把 Session A 的某个插件 P(scope=group),挂载到私聊 Session B 的 Layer 1 上。
前提条件:
scope=group 的插件可以发起挂载挂载方式:
挂载范围:
激活状态:
共存规则:
解除挂载:
unmount_from_session(session_id) 解除指定挂载unmount_from_all() 一键取消所有挂载