.NET 6 实现的跨平台,现代化聊天机器人框架
一套代码,多平台服务
- 使用文档 -
本项目的名称来源于东方 Project 中的角色芙兰朵露 · 斯卡雷特 (Flandre Scarlet) (番茄炒蛋)
Flandre
为跨平台而生,对聊天平台的结构进行抽象化,采用适配器模式进行兼容,使得开发者可以通过一套统一接口控制不同平台的机器人,同时提供了良好的开发体验。
目前已经实现的适配器:
平台 | 介绍 |
---|---|
OneBot | OneBot v11 协议封装,主要对 go-cqhttp 提供支持。支持 QQ 协议,同时基于 go-cqhttp 对 QQ 频道也进行了一定的支持。 |
Konata | QQ 协议适配,基于 Konata.Core |
Discord | Discord 适配,基于 Discord.Net (Work in Progress) |
Telegram | 计划中... |
Flandre 提供两种开发方式,分别是完整的开发框架 Framework
,以及易于嵌入已有程序的 Core
。
详细区别
Flandre.Framework
是一个使用方便、功能全面的 Bot 开发框架,在核心包 Core
的基础上集成了插件、指令、中间件等系统,并提供依赖注入、日志管理等等实用功能。
Framework 基于 Microsoft.Extensions.Hosting
,这意味着可以复用大量社区已有的开源库。在 API 设计上,Framework 参考了 ASP.NET Core,如果你有相关经验,使用起来会更加得心应手。
对于一个全新的 Bot 项目,我们建议直接使用 Framework 开发。
Flandre.Core
是整个框架的核心组件,包含了适配器、机器人等抽象层,提供直接操作 Bot
进行平台交互的功能。相比 Framework
,Core
作为一个轻量化的模块,能更容易地嵌入进已有项目中,成为功能的一部分。
不需要代入 .NET Framework / Core 命名方式的意义。在 Flandre 中,两者只意味着开发方式的不同,且都处于积极维护中。
下文将主要介绍 Flandre.Framework
的各类特性。如果你需要关于 Flandre.Core
的详细说明,请参照这里的文档。(还没写x)
Flandre.Framework 实现了一套开箱即用的指令解析系统,而无需开发者自己造轮子。开发者可以方便地定义一条指令:
[Command]
public MessageContent Add(double a, double b)
{
var result = a + b;
return $"{a} + {b} = {result}";
}
- 用户发送
add 1.14514 1.91981
- 机器人返回
1.14514 + 1.91981 = 3.06495
我们提供了一个模板项目,可以帮助你快速上手。(仓库在这里)
首先安装模板包:
$ dotnet new install Flandre.Templates
# 如果曾经安装过,可以使用以下命令更新至最新版本
$ dotnet new update
创建一个名为 MyFirstFlandreApp
的新项目:
$ dotnet new flandre -o MyFirstFlandreApp
使用你喜欢的 IDE 打开项目,在 Program.cs
中添加想要的适配器,开始对 Flandre 的探索。
需要一个示例?Sakuya 是我们提供的一个示例项目,可以前往查看。
如果你在开发的过程中发现了 Bug,或有建议,欢迎提交 Issue。
项目的主要分支:
dev
分支 - 默认开发分支,包含最新更改,但可能不稳定。feat/*
分支 - 包含各种特性的单独开发分支,通常在完成后会向dev
分支发起 PRrelease
分支 - 包含上一个发布版本的源代码,dev
分支会在版本发布时合并过来
向仓库贡献代码时,请确保目标是 dev
分支。
项目编写过程中参考了许多开源项目,没有它们就没有 Flandre 的诞生:
(按字母排序)
另外,感谢 JetBrains 对本项目的支持,以及免费授权的产品开源使用许可!
GitHub 是我们的主要活动场地。您也可以加入我们的 QQ 群进行项目相关的交流:
本群只交流程序开发,拒绝任何形式的伸手党或商业行为。
本项目以 MIT 许可证 开源 (′▽`)╭(′▽`)╯