架构说明

NQBot.App (WPF)
   │  HTTP 127.0.0.1:3012
   ▼
NQBot.Host (ASP.NET Core)
   ├─ OneBotGateway ── HTTP/WebSocket ── NapCat
   ├─ PluginRuntime ── 独立 AssemblyLoadContext ── runtime/plugins/*.dll
   ├─ SnapshotService ── 群/好友/插件/日志快照
   └─ LegacyBridge ── 可选的 32 位旧版插件兼容运行时

项目

项目 职责
NQBot.Sdk 插件契约,第三方插件唯一依赖
NQBot.Core OneBot 网关、事件映射、插件运行时、调度、存储、权限、更新检测
NQBot.Host 组合根:配置、启动、本地 API、快照、旧版桥
NQBot.App WPF 外壳:登录、好友/群/插件/日志/设置页
plugins/* 内置插件
tests/* xUnit 单元测试
samples/* 插件示例

数据流

  1. NapCat 通过 WebSocket 推送 OneBot 事件。
  2. OneBotGateway 解析事件并交给 EventPipeline。
  3. PluginRuntime 按插件顺序分发 BotEvent。
  4. 插件通过 Context.Actions 调用 NapCat HTTP API 发送消息。
  5. SnapshotService 聚合群/好友/插件状态,供 WPF 3 秒轮询。
  6. 旧版兼容模式下,LegacyBridge 把事件转发给外部 32 位运行时,旧插件动作仍走 NapCat HTTP。

线程模型

  • WPF UI 线程只做界面更新;HTTP/插件事件在后台线程。
  • 插件事件按单插件顺序执行,单插件超时默认 5 秒。
  • 出站过滤器/转换器全局注册,执行时按插件启用状态过滤。

安全边界

  • 本地 API 只监听 127.0.0.1。
  • NapCat 地址/Token 保存在 runtime/appsettings.json,不要提交到仓库。
  • 插件在独立加载上下文中运行,卸载后可替换 DLL。