Skip to content

Framework 核心对象 ​

99% 的插件只用 ctx 就够、这页可以先不关掉收藏;除非你要直接摸底层容器——服务注册表、加载器、事件循环——才需要往下看。

Framework(framework/core/)是整个平台的运行容器,插件里通过 ctx._framework 拿到它的引用。绝大多数插件只需要 ctx,本页供需要访问 底层能力(服务注册表、加载器、事件循环等)的高级场景参考。

主要属性 ​

属性类型说明
fw.configdict加载并合并 core_plugins.yaml 后的全局配置
fw.config_pathstr实际使用的配置文件绝对路径
fw.servicesServiceRegistry服务注册表,详见 ServiceRegistry
fw.dbDatabase数据库实例,详见 数据库
fw.event_busEventBus事件总线(subscribe/aemit/emit)
fw.routerMessageRouter消息路由器
fw.plugin_loaderPluginLoader插件加载器(加载/卸载/重载/发现)
fw.terminalTerminalInput内置终端交互
fw.stats_writerAsyncStatsWriter统计批量写库器
fw.loopasyncio.AbstractEventLoop主事件循环(启动后可用)

服务别名属性 ​

为兼容旧代码,常用服务也提供了属性快捷方式(等价于 fw.services.get(...)):

属性等价
fw.api_callerfw.services.get("api_caller")
fw.protocol_adapter当前主接入端(services["protocol_adapter"],须实现 get_connected_bots)
fw.ws_server兼容别名:优先 protocol_adapter.ws_server,否则 fw.services.get("ws_server")
fw.schedulerfw.services.get("scheduler")
fw.web_serverfw.services.get("web_server")

会话管理器、Web 服务等统一从 fw.services.get("session_manager")、 fw.services.get("web_server") 获取。

生命周期 ​

python
fw = Framework(config_path)   # 初始化:配置、日志、数据库、事件总线、加载器
await fw.start()              # 加载官方插件 → 用户插件 → 注册 → 心跳/看门狗
await fw.stop()               # 反序停止:WebSocket、调度器、Web、数据库

start() 的精确顺序见 架构详解 - 启动时序。

典型用法 ​

在主事件循环上调度协程 ​

python
async def background():
    ...
fw.loop.create_task(background())

直接访问数据库(不推荐,优先 ctx.db_*) ​

python
fw.db.query_one("SELECT COUNT(*) AS c FROM commands")

操作插件加载器 ​

python
fw.plugin_loader.unload_plugin("my_plugin")
ok = fw.plugin_loader.load_plugin("my_plugin")
if ok:
    fw.plugin_loader.register_commands("my_plugin")

插件模块的加载/命名/热重载机制见 插件加载与模块机制。

跨插件事件 ​

python
await fw.event_bus.aemit("my_custom_event", {"k": "v"})

注意事项 ​

WARNING

  • 插件初始化(模块顶层、register)阶段,部分服务可能尚未就绪, 请延迟到 handler 内或监听 system.plugin.loaded 后再取;
  • 不要在插件里缓存 fw.services.get(...) 的结果作为模块级常量, 服务可能因重载而替换,用时再取或判空;
  • 直接操作 plugin_loader/db 属于高级用法,注意异常处理与状态一致性。

想在这些能力之外插入自己的行为?见 扩展点(Hook 系统):在启动/关闭、Web 请求、事件分发、命令执行、协议动作、出站文本等几乎每个运行环节挂接逻辑。

基于 MIT + Apache 2.0 双协议发布