示例

插件通过构造函数接收 PluginInterop;消息、资源和历史记录均由宿主提供。下面是最小命令插件:

[PluginTag("greeting", "问候", "使用 /hello 获取问候")]
public sealed class GreetingPlugin : Plugin
{
    public GreetingPlugin(PluginInterop interop) : base(interop)
    {
    }

    public override Task OnMessageAsync(
        bool isMentioned,
        Command? command,
        IReadOnlyList<TypedMessage> messageChain,
        MessageContext context)
    {
        if (command?.Name == "hello")
        {
            _ = Channel.SendMessage(context.Session, "你好。");
        }
        return Task.CompletedTask;
    }
}

Channel.SendMessage 使用当前会话发送消息。若只处理 @ 机器人的指令,请先检查 isMentioned;普通插件仍会收到已监听群的所有消息。

事件

函数 描述
OnMessageAsync 函数 当收到新消息时,此函数会被调用
OnLoaded 函数 当插件全部被加载完后会执行的函数,可以放一些互操作性的初始化代码。

消息处理链

插件通过异步回调获得处理后的消息链和轻量的消息上下文(平台无关):

public override Task OnMessageAsync(
    bool isMentioned,
    Command? command,
    IReadOnlyList<TypedMessage> messageChain,
    MessageContext context)
{
    // messageChain 中的 Reply、Forward、图片、文件等均为 merrybot:// 本地引用。
    // context 提供会话定位(Session)与发送者/机器人身份(SenderId/SelfId)。
    return Task.CompletedTask;
}

使用 Interop.MessageService 可按本地引用读取 Reply、Forward 或媒体资源;宿主会复用正在进行的请求并负责持久化。详情见消息与 NapCat。