public async Task <IActionResult> AddGroupMessageHandlerAsync([Required] int robotQQ, CancellationToken token) { IMiraiHttpSession session = await _robotManager.RetriveSessionAsync(robotQQ, token); session.AddPlugin(new GroupMessageHandler()); return((JsonResult)ResponseModel.CreateSuccess()); }
public static async Task Main() { // 一套能用的框架, 必须要注册至少一个 Invoker, Parser, Client 和 Handler // Invoker 负责消息调度 // Parser 负责解析消息到具体接口以便调度器调用相关 Handler 下的处理方法 // Client 负责收发原始数据 IServiceProvider services = new ServiceCollection().AddMiraiBaseFramework() // 表示使用基于基础框架的构建器 .AddHandler <MiraiPlugin>() // 虽然可以把 HttpApiPlugin 作为泛型参数塞入, 但不建议这么做 .Services .AddDefaultMiraiHttpFramework() // 表示使用 mirai-api-http 实现的构建器 .ResolveParser <DynamicPlugin>() // 只提前解析 DynamicPlugin 将要用到的消息解析器 .AddInvoker <MiraiHttpMessageHandlerInvoker>() // 使用默认的调度器 .AddHandler <HttpApiPlugin>() // 可以如此添加更多消息处理器 .AddClient <MiraiHttpSession>() // 使用默认的客户端 .Services // 由于 MiraiHttpSession 使用 IOptions<MiraiHttpSessionOptions>, 其作为 Singleton 被注册 // 配置此项将配置基于此 IServiceProvider 全局的连接配置 // 如果你想一个作用域一个配置的话 // 自行做一个实现类, 继承MiraiHttpSession, 构造参数中使用 IOptionsSnapshot<MiraiHttpSessionOptions> // 并将其传递给父类的构造参数 // 然后在每一个作用域中!先!配置好 IOptionsSnapshot<MiraiHttpSessionOptions>, 再尝试获取 IMiraiHttpSession .Configure <MiraiHttpSessionOptions>(options => { options.Host = "域名/IP"; options.Port = 12345; // 端口 options.AuthKey = "00000000000000000000000000000000"; // 凭据 }) .AddLogging() .BuildServiceProvider(); IServiceScope scope = services.CreateScope(); await using var x = (IAsyncDisposable)scope; //await using AsyncServiceScope scope = services.CreateAsyncScope(); // 自 .NET 6.0 起才可以如此操作代替上边两句 services = scope.ServiceProvider; IMiraiHttpSession session = services.GetRequiredService <IMiraiHttpSession>(); // 大部分服务都基于接口注册, 请使用接口作为类型解析 DynamicPlugin plugin = new DynamicPlugin(); PluginResistration resistration = session.AddPlugin(plugin); // 实时添加 await session.ConnectAsync(0); // 填入期望连接到的机器人QQ号 while (true) { if (Console.ReadLine() == "exit") { resistration.Dispose(); // 实时移除 break; } } }