Skip to content

易于使用与快速开发,基于.net 6的高性能机器人框架(内置OneBot协议)

License

Notifications You must be signed in to change notification settings

Milkitic/MilkiBotFramework

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MilkiBotFramework

简称Milki。易于使用与快速开发,基于.net 6的高性能机器人框架(内置OneBot实现)

本项目源自旧项目 https://github.com/Milkitic/daylily/tree/archived/v2 的彻底改造。

其基本的系统逻辑不变,但是提升了代码可维护度、工程合理度、拓展性、性能、稳定性,以及最重要的,将框架本身独立,并与Bot逻辑不相干。

现旧项目已基于本框架重构,可作为示例仓库,更多请见项目主页

特色

  1. 插件式开发。对于Bot编写者,只需完成插件类的开发。包含消息、事件、服务处理。(当然,也支持比较原始的EventHandler方式)
  2. 开箱即用。在不进行自定义设置的情况下,支持三行代码完成运行部署。
  3. 支持多平台统一API。这代表着若你编写插件是通用的(例如:不包括特定的CQ码如戳一戳),你可以将Bot功能快速转移至其他平台(例如:OneBot -> Discord)
  4. 框架层面的数据库管理(目前Migration仅支持ExecutingAssembly)、资源管理以及配置管理,插件之间统一。
  5. 完善的命令支持。将用户输入自动转换为对应插件方法的参数。
  6. 编写插件时,支持插件之间与框架本身功能的依赖注入,插件开发有着很高自由度。
  7. 若内置的一些逻辑无法满足你的需求,你可以自己进行部分中间件的继承与修改。
  8. 内置UI框架级的图形绘制功能。无需用户进行原始的绘图操作,支持Xaml设计器。
  9. 插件支持使用单点的ASP.NET Core Web框架(默认支持WebApi)。这意味着在你的程序集内,新增对应的ControllerBase类即可。同时支持在你的Controller内依赖注入MilkiBotFramework的各种单点模块(不支持插件的注入,因为两者的Scope不一致)。
  10. 内部事件完善,且关键模型本身支持属性更新通知。这代表着你将更容易制作GUI相关插件。

示例

前置条件: 将go-cqhttp配置为websocket连接,地址设置为ws://127.0.0.1:6700,运行并确认正常工作。

新建dotnet项目

dotnet new console --name MyBotApp

在Program.cs内编写:

using MilkiBotFramework;
using MilkiBotFramework.Messaging;
using MilkiBotFramework.Platforms.GoCqHttp;
using MilkiBotFramework.Plugining;
using MilkiBotFramework.Plugining.Attributes;

return await new BotBuilder()
      .UseGoCqHttp(GoCqConnection.WebSocket("ws://127.0.0.1:6700"))
      .Build()
      .RunAsync();

[PluginIdentifier(guid: "e4c18c40-afe0-447b-b7eb-b84f842520b4", name: "HelloWorld Demo")]
public class HelloWorld : BasicPlugin
{
    [CommandHandler]
    public IResponse Echo([Argument] string content) => Reply(content);
}

运行项目 dotnet run

控制台相关输出

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已初始化完成。 下面私聊bot账号,输入/echo helloworld,若bot成功回复了helloworld,代表着你已成功完成了你的Hello World功能!

贡献

本项目十分欢迎contribute~因为对于各种平台适配需要大家的一起帮助才能更加的高效。

但是有以下几个很基本的点,在提交PR前请注意:

  1. 编译通过
  2. 代码本身足够的清晰,请使用现有的代码样式(变量命名基础原则、括号换行等),使用代码格式化工具完成过清理
  3. 尽可能的使git的提交记录足够清晰,避免无法区分更新内容的大面积更改
  4. 如果是较大的更新,请事先进行discussion,避免低效地重做等

框架本身设计文档待完善

TODO:

  • 支持多前端输入,并将结果返回到对应前端中。
  • 将WPF相关功能迁移至Avalonia
  • 内置QQ官方API

FINISHED:

  • 基本框架功能
  • 命令解析,自动识别负数,自动合并多个argument
  • 简易session实现 (Reply并out一个IAsyncMessage)
  • 事件插件
  • 在尽可能保持轻量的前提下,实现基于asp.net core+kestrel的统一单点webserver,支持自定义添加对应的Contoller。
  • 将现有static HttpHelper纳入生命周期管理内
  • 为了支持插件的管理,需要在context内注入相关信息
  • 插件应实现对于即将发送的消息过滤与控制(允许强制发送)
  • 联系人相关功能完善(包括go-cq实现)
  • 插件命令的权限(考虑其他插件要正确读取声明的权限)
  • 插件的配置设置、数据库读写、资源分配的管理
  • 完善内部事件
  • 支持reverse-ws
  • 部分绘制图像共享功能 (包含Maui/WPF绘制框架)

NOT DETERMINED:

  • 支持基于Github issue的更新

TBD:

是否支持同时多OneBot实例亦或是其他的客户端,以进行多平台互联? 目前该框架设计没有考虑这一点,考虑到其实用性,大概率会以大版本号更新实现。

类似nonebot内置自然语言处理器? 我认为没有必要内置,因为此类功能放入通用框架并不是足够的成熟稳定(存在各种概率因素)。可以继承ICommandLineAnalyzer,编写自己的命令分析器,将自然语言映射成对应命令。

第三方库

社区

官方

  • Microsoft.EntityFrameworkCore (MIT) 现代化ORM
  • Microsoft.AspNetCore (MIT) 现代化跨平台Web框架
  • Microsoft.Extensions.DependencyInjection (MIT) DI框架及实现
  • Microsoft.Extensions.Logging (MIT) 日志框架
  • wpf (MIT) Windows窗体UI框架

About

易于使用与快速开发,基于.net 6的高性能机器人框架(内置OneBot协议)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages