基于 .NET 8 的高性能机器人框架,内置 OneBot、官方机器人接口实现。
本项目提供了一个现代化、高效率的 .NET 机器人开发解决方案,以构建功能丰富的聊天机器人或进行快速原型开发。
更多 Wiki 文档请前往:https://deepwiki.com/Milkitic/MilkiBotFramework
本项目源自旧项目 daylily v2 的彻底改造。其基本的系统逻辑不变,但提升了代码可维护度、工程合理度、拓展性、性能、稳定性,以及最重要的,将框架本身独立,并与 Bot 逻辑不相干。 现旧项目已基于本框架重构,可作为示例仓库,更多请见:daylily 项目主页
- 🔌 插件化架构: 开发者只需关注插件逻辑,支持消息、事件、服务处理,同时也兼容传统的
EventHandler
方式。 - 🚀 开箱即用: 最少三行代码即可完成基础 Bot 的运行与部署。
- 🌐 跨平台API设计: 编写的通用插件可轻松迁移至不同平台 (例如:OneBot -> Discord)。
- 🛠️ 统一管理: 框架层面提供数据库 (EF Core, Migration目前仅支持ExecutingAssembly)、资源及配置的统一管理。
- 💬 强大命令系统: 自动解析用户输入,智能映射到插件方法的参数。
- 🔧 高度可扩展: 支持插件间与框架功能的依赖注入;核心中间件可继承修改,满足定制需求。
- 🎨 内置图形绘制: 集成基于 XAML 的 UI 框架级无头图形绘制功能,保持高效开发的同时,高效渲染并生成图片 (无需原始绘图操作、无需Chromium)。
- 🌐 Web API集成: 插件支持单点 ASP.NET Core Web API,可在插件中创建 Controller 并注入框架模块。
- 🔔 完善的内部事件: 关键模型支持属性更新通知,便于开发 GUI 插件或进行精细化控制。
前置条件:
- 安装 .NET 8 SDK
- 准备一个 OneBot 实现(如 NapCatQQ),并配置为 WebSocket 连接,例如监听
ws://127.0.0.1:6700
。
步骤:
-
新建 .NET 控制台项目:
dotnet new console --name MyBotApp cd MyBotApp
-
添加 MilkiBotFramework NuGet 包:
dotnet add package MilkiBotFramework
-
在
Program.cs
文件中编写如下代码:using MilkiBotFramework; using MilkiBotFramework.Messaging; using MilkiBotFramework.Platforms.GoCqHttp; using MilkiBotFramework.Plugining; using MilkiBotFramework.Plugining.Attributes; // 启动 Bot return await new BotBuilder() .UseGoCqHttp(GoCqConnection.WebSocket("ws://127.0.0.1:6700")) // 配置连接 OneApi .Build() .RunAsync(); // 定义一个简单的插件 [PluginIdentifier(guid: "e4c18c40-afe0-447b-b7eb-b84f842520b4", name: "HelloWorld Demo")] public class HelloWorld : BasicPlugin { [CommandHandler] // 响应 /echo 命令 public IResponse Echo([Argument] string content) => Reply(content); // 回复接收到的内容 }
-
运行项目
dotnet run
-
验证: 当控制台输出类似以下日志时,表示 Bot 已成功初始化:
11:06:13.92+08 info: MilkiBotFramework.Platforms.GoCqHttp.Connecting.GoCqClient[0] Connected to websocket server. ...... 11:06:14.26+08 info: MilkiBotFramework.Plugining.PluginManager[0] Add plugin "HelloWorld Demo" (Scoped BasicPlugin) 11:06:14.28+08 info: MilkiBotFramework.Plugining.PluginManager[0] Plugin initialization done in 0.360s!
此时,向 Bot 私聊发送
/echo helloworld
,若 Bot 回复helloworld
,则表示 Hello World 功能已成功实现。
框架本身设计文档待完善
TODO:
- 新增命令选择器的重写支持,为将来采用LLM function calling作尽早支持。
- 支持单实例多Platform,以进行多平台互联。
WIP:
- 内置QQ官方API
FINISHED:
- 基本框架功能
- 命令解析,自动识别负数,自动合并多个argument
- 简易session实现 (Reply并out一个IAsyncMessage)
- 事件插件
- 在尽可能保持轻量的前提下,实现基于asp.net core+kestrel的统一单点webserver,支持自定义添加对应的Contoller。
- 将现有static HttpHelper纳入生命周期管理内
- 为了支持插件的管理,需要在context内注入相关信息
- 插件应实现对于即将发送的消息过滤与控制(允许强制发送)
- 联系人相关功能完善(包括go-cq实现)
- 插件命令的权限(考虑其他插件要正确读取声明的权限)
- 插件的配置设置、数据库读写、资源分配的管理
- 完善内部事件
- 支持reverse-ws
- 部分绘制图像共享功能 (包含Maui/WPF绘制框架)
- 将WPF相关功能迁移至Avalonia
详细开发计划和讨论,请关注项目的 GitHub Issues 和 Wiki。
本项目欢迎社区的贡献,尤其在各种平台适配方面,社区的参与将极大地提升开发效率。
在提交 Pull Request 前,请注意以下基本要求:
- 编译通过: 提交的代码必须能够成功编译。
- 代码清晰度: 请确保代码本身足够清晰,遵循项目现有的代码样式(如变量命名原则、大括号换行等),并使用代码格式化工具进行整理。
- Git提交记录: 尽可能使 Git 提交记录清晰、简洁,避免包含无关内容的大面积更改,以便于代码审查。
- 重大更新的讨论: 如果计划进行较大的更新或重构,请事先通过 Discussions 或 Issue 进行讨论,以避免不必要的重复工作。
本项目依赖以下优秀的开源库:
- dnlib (MIT) - .NET 程序集分析
- Avalonia (MIT) - 强大的跨平台UI库
- Fleck (MIT) - WebSocket服务器
- SixLabors.ImageSharp (Apache-2.0) - 托管的2D绘图库
- Websocket.Client (MIT) - WebSocket客户端
- YamlDotNet (MIT) - YAML库
- Microsoft.EntityFrameworkCore (MIT) 现代化ORM
- Microsoft.AspNetCore (MIT) 现代化跨平台Web框架
- Microsoft.Extensions.DependencyInjection (MIT) DI框架及实现
- Microsoft.Extensions.Logging (MIT) 日志框架
- wpf (MIT) Windows窗体UI框架
本项目采用 GPL-3.0 License 开源。