-
Notifications
You must be signed in to change notification settings - Fork 0
Adapter Manager
MarkChai edited this page Jul 16, 2026
·
1 revision
adapter-manager 是框架的核心中间件。它将底层适配器的原始数据转换为标准化的 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
}在非消息上下文(如定时任务),可以通过 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)
}
}