架构说明
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/* |
插件示例 |
数据流
- NapCat 通过 WebSocket 推送 OneBot 事件。
OneBotGateway 解析事件并交给 EventPipeline。
PluginRuntime 按插件顺序分发 BotEvent。
- 插件通过
Context.Actions 调用 NapCat HTTP API 发送消息。
SnapshotService 聚合群/好友/插件状态,供 WPF 3 秒轮询。
- 旧版兼容模式下,
LegacyBridge 把事件转发给外部 32 位运行时,旧插件动作仍走 NapCat HTTP。
线程模型
- WPF UI 线程只做界面更新;HTTP/插件事件在后台线程。
- 插件事件按单插件顺序执行,单插件超时默认 5 秒。
- 出站过滤器/转换器全局注册,执行时按插件启用状态过滤。
安全边界
- 本地 API 只监听
127.0.0.1。
- NapCat 地址/Token 保存在
runtime/appsettings.json,不要提交到仓库。
- 插件在独立加载上下文中运行,卸载后可替换 DLL。