
Flandre
.NET 6 实现的跨平台,低耦合的聊天机器人框架
一次编写,多处运行
· 使用文档 ·
本项目的名称来源于东方 Project 中的角色芙兰朵露 · 斯卡雷特 (Flandre Scarlet) (番茄炒蛋)
项目仍在早期开发阶段,功能尚未完善,且处于快速迭代过程中,可能带来 API 的非兼容性变更。如果您对项目的开发感兴趣,诚挚欢迎您的改进建议或 PR 贡献。
using Flandre.Core; using Flandre.Adapters.Konata; using Konata.Core.Common; var app = new FlandreApp(); var config = new KonataAdapterConfig(); config.Bots.Add(new KonataBotConfig { KeyStore = new BotKeyStore("<QQ 号>", "<密码>") }); app .UseKonataAdapter(config) .Use(new ExamplePlugin()) .Start(); class ExamplePlugin : Plugin { public override void OnMessageReceived(MessageContext ctx) => ctx.Bot.SendMessage(ctx.Message); }
class ExamplePlugin2 : Plugin { [Command("example <foo> [bar]")] public MessageContent OnExample(MessageContext ctx, ParsedArgs args) { var foo = args.GetArgument<string>("foo"); var bar = args.GetArgument<string>("bar"); if (string.IsNullOrWhiteSpace(bar)) bar = "(empty)"; var mb = new MessageBuilder(); mb.Text($"Foo: {foo}, ") .Text($"Bar: {bar}"); return mb; } }
string
,其中 foo
为必选参数,bar
为可选参数。如果调用指令时未提供可选参数,参数将被初始化为类型默认值;如果为提供必选参数,bot 将向其发送一条提示信息并停止执行指令。example qwq ovo
(随便什么),bot 会将参数的值发送回来。string
。如要添加参数,可以在参数名称后添加 :
号和类型名称。类型名称支持 C# 中绝大多数的基本类型,如 int
, double
, long
, bool
等等,在解析过程中会自动进行类型检查和转换。[Command("example <foo:double> <bar:bool>")] public MessageContent? OnExample(MessageContext ctx, ParsedArgs args) { var foo = args.GetArgument<double>("foo"); var bar = args.GetArgument<bool>("bar"); Logger.Info(foo.GetType().Name); // Double Logger.Info(bar.GetType().Name); // Boolean return null; }