/Flandre

:crystal_ball: 跨平台,现代化的聊天机器人框架,一套代码,多平台服务。

MIT LicenseMIT

Flandre

.NET 6 实现的跨平台,现代化聊天机器人框架
一套代码,多平台服务

License Stars Contributors Flandre.Framework Version Flandre.Core Version .NET Version Codecov

- 使用文档 -

本项目的名称来源于东方 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

NuGet NuGet Downloads

Flandre.Framework 是一个使用方便、功能全面的 Bot 开发框架,在核心包 Core 的基础上集成了插件、指令、中间件等系统,并提供依赖注入、日志管理等等实用功能。
Framework 基于 Microsoft.Extensions.Hosting ,这意味着可以复用大量社区已有的开源库。在 API 设计上,Framework 参考了 ASP.NET Core,如果你有相关经验,使用起来会更加得心应手。

对于一个全新的 Bot 项目,我们建议直接使用 Framework 开发。

Flandre.Core

NuGet NuGet Downloads

Flandre.Core 是整个框架的核心组件,包含了适配器、机器人等抽象层,提供直接操作 Bot 进行平台交互的功能。相比 FrameworkCore 作为一个轻量化的模块,能更容易地嵌入进已有项目中,成为功能的一部分。

不需要代入 .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

如果你想要贡献代码,欢迎与我们联系 ,并发起 PR

项目的主要分支:

  • dev 分支 - 默认开发分支,包含最新更改,但可能不稳定。
  • feat/* 分支 - 包含各种特性的单独开发分支,通常在完成后会向 dev 分支发起 PR
  • release 分支 - 包含上一个发布版本的源代码,dev 分支会在版本发布时合并过来

向仓库贡献代码时,请确保目标是 dev 分支。

❤️ 致谢

项目编写过程中参考了许多开源项目,没有它们就没有 Flandre 的诞生:

(按字母排序)

另外,感谢 JetBrains 对本项目的支持,以及免费授权的产品开源使用许可!

JetBrains Logo (Main) logo.

💬 交流

GitHub 是我们的主要活动场地。您也可以加入我们的 QQ 群进行项目相关的交流:

QQ

本群只交流程序开发,拒绝任何形式的伸手党或商业行为。

📄 开源

本项目以 MIT 许可证 开源 (′▽`)╭(′▽`)╯