Skip to content

QQBotController ​

控制器模式的基类,所有 Bot 命令控制器必须继承此类。

命名空间: Luolan.QQBot.Controllers

属性 ​

属性类型说明
ClientQQBotClient当前机器人客户端
MessageMessage触发当前命令的消息对象
UserUser?发送消息的用户(Message.Author)
RawContentstring去除命令名后的原始文本
RawArgumentsstring[]解析后的参数数组

方法 ​

方法说明
ReplyAsync(string content, int msgSeq = 0)发送一条额外回复(不阻止 return)

构造函数注入 ​

控制器由 ControllerManager 通过 ActivatorUtilities 从 DI 容器创建,支持构造函数注入:

csharp
public class HelloController : QQBotController
{
    private readonly ILogger<HelloController> _logger;

    public HelloController(ILogger<HelloController> logger)
        => _logger = logger;

    [Command("hello")]
    public string Hello(string name)
    {
        _logger.LogInformation("hello: {Name}", name);
        return $"Hello, {name}!";
    }
}

使用 AddQQBot / AddQQBotWithHttpClientFactory 注册服务后,UseControllers() 会自动复用该容器;没有 DI 容器时回退到无参构造函数。

继承与定义 ​

csharp
public class MyController : QQBotController
{
    [Command("ping")]
    public string Ping() => "pong!";
}

CommandAttribute ​

标记命令方法。

命名空间: Luolan.QQBot.Controllers

构造函数: CommandAttribute(string name, params string[] aliases)

csharp
// 单命令
[Command("hello")]
public string Hello() => "Hello!";

// 多别名
[Command("help", "h", "?")]
public string Help() => "帮助信息...";

ImageResult ​

图片返回结果。字符串可隐式转换为 ImageResult。

命名空间: Luolan.QQBot.Controllers

csharp
[Command("image")]
public ImageResult ShowImage(string url)
    => new ImageResult(url);

// 隐式转换
[Command("logo")]
public ImageResult Logo()
{
    ImageResult result = "https://example.com/logo.png";
    return result;
}

支持的返回类型 ​

返回类型说明
string文本消息(默认)
ImageResult图片消息
MessageMarkdownMarkdown 消息
Task<string>异步文本
Task<ImageResult>异步图片
Task<MessageMarkdown>异步 Markdown

支持的参数类型 ​

类型示例输入
stringhello
int42
long9999999999
double3.14
decimal99.99
booltrue / 1 / yes / on
Guid550e8400-...
enumInformation
T? (可空)空 或 值
string[] (params)剩余全部参数

ControllerManager ​

内部管理命令注册和分发的类。

csharp
// 通过扩展方法使用
bot.UseControllers();    // 扫描入口程序集
bot.UseControllers(asm); // 扫描指定程序集

UseControllers 做了:

  1. 扫描程序集中所有 QQBotController 子类
  2. 发现所有 [Command] 方法并注册
  3. 订阅消息事件(群 @ / 群全量 / C2C / 频道 @ / 频道全量 / 频道私信)
  4. 从 DI 容器构造控制器(支持构造函数注入)
  5. 自动解析命令、转换参数、发送回复

基于 MIT 协议发布