Skip to content

Adapter Manager

MarkChai edited this page Jul 16, 2026 · 1 revision

适配器管理器

adapter-manager 是框架的核心中间件。它将底层适配器的原始数据转换为标准化的 MessageEvent,让业务插件彻底告别繁琐的协议解析。

标准化事件结构 (MessageEvent)

当收到消息时,adapter-manager 会将原始数据封装为 MessageEvent 并发布到 adapter.message 频道。

type MessageEvent struct {
    Platform string // 适配器名称
    EventType string // 事件类型 (group_msg, private_msg)
    Scene string // 场景
    SceneID int64 // 群号或私聊对方 QQ
    UserID int64 // 发送者 QQ
    MessageID int32 // 消息 ID
    Nickname string // 发送者昵称

    // 🌟 三种维度的消息数据
    Segments  []MessageSegment // 结构化数据 (用于提取图片、@等)
    PlainText string           // 纯文本 (用于指令匹配,如 "/菜单")
    LLMText   string           // LLM 友好文本 (用于大模型识别)

    RawEvent any // 底层原始事件

    // 行为闭包 (直接调用即可完成回复/操作)
    Reply     func(msg []MessageSegment) error
    ReplyText func(msg string) error
    Delete    func() error
    BanSender func(duration int64) error
}

监听消息事件

在你的插件中,只需订阅 adapter.message 即可拿到强类型事件:

func (p *MyPlugin) Init(ctx *core.SystemContext) error {
    ctx.Events.Subscribe(“adapter.message”, func(payload any) {
        event, ok := payload.(*adapter_manager.MessageEvent)
        if !ok { return }
    
         // 1. 指令匹配
        if event.PlainText == "ping" {
            event.ReplyText("pong!")
        }

        // 2. 撤回违禁词
        if event.PlainText == "违禁词" {
            event.Delete()
            event.BanSender(60) // 禁言 60 秒
        }
    })
    return nil
}

主动调用 API

在非消息上下文(如定时任务),可以通过 GetManager 获取管理器实例进行主动操作:

manager := adapter_manager.GetManager(ctx)
if manager != nil {
    // 主动发群消息
    manager.SendGroupMessage(“adapter-onebot”, 123456789,
        []adapter_manager.MessageSegment{
        adapter_manager.Text(“早安!”),
    })

    // 获取群信息 (返回强类型结构体)
    info, err := manager.GetGroupInfo("adapter-onebot", 123456789, false)
    if err == nil {
        fmt.Println(info.GroupName)
    }
}

Clone this wiki locally