为 Hyperai Application 提供 Units 服务, 将处理对象细化到消息.
QQ/TG 机器人开发在这入门
本项目的文档 »
加入群聊
·
报告问题
·
提供建议
安装包
dotnet add package Hyperai.Units
在一个已有的 IHyperaiApplicationBuilder
对象中添加服务
var builder = MagicalBox.Take<IHyperaiApplicationBuilder>();
// => new HyperaiApplicationBuilder()
builder.Services.AddUnits();
var app = builder.Build();
var service = app.Provider.GetRequiredService<IUnitService>();
service.SearchForUnits();
app.Run();
在任意地方创建一个类, 名字任意
public class Asshole
{
[Receive(MessageEventType.Group)]
[Extract("!fuck {who}")]
[CheckTicket("ability.to.fuck")]
public async Task Fuck(Member sender, Group group, long who)
{
FuckRecord record = null;
using(sender.For<FuckRecord>(() => new FuckRecord(0), out record))
{
await group.SendAsync($"[hyper.at({sender.Identity})] fucked [hyper.at({who})] the {++record.Count}th time.").MakeMessageChain());
}
}
}
如你所见 ExtractAttribute
可以在消息中解析出特定文本, UnitService 会把该文本转换为所需要的值类型或 MessageChain
.
你看到了 CheckTicketAttribute
, 但是这并不是本项目提供的功能. 但你可以使用 FilterByAttribute
来实现它.
是的, 所需的参数用形参来注入.
形参中可以有 UnitBase.Context
中的成员(使用类型来匹配), 也可以是 ExtractAttribute
中大括号内的参数(使用名字来识别).