选择消息类型
用 pkg/message 构造 Outgoing 消息。链式设置返回新值,不修改原来的消息。构造与 Build(scene) 校验都在本地进行,调用 Context.Reply 或 Client.SendReply 时才发出请求。
按内容选择构造器
| 内容 | 构造入口 | 场景 |
|---|---|---|
| 纯文本 | message.Text | 群聊、单聊、频道及频道私信 |
| Markdown | message.Markdown、MarkdownTemplate | 见注意事项 |
| 图文卡片 | message.Card | QQ 单聊和群聊 |
| ARK 模板 | message.Ark | 旧协议 |
| 普通富媒体 | message.Media(fileInfo) | QQ 单聊和群聊 |
| 输入状态 | message.Typing(seconds) | 仅单聊 |
先在本地校验
下面的函数在本地校验业务构造的消息。函数不创建客户端,也不发送消息。
go
package guide
import (
"encoding/json"
"github.com/ProgramCX/GoQQBot/pkg/message"
)
func BuildMessagePreview() (map[string]json.RawMessage, error) {
return message.Markdown("## 订单完成\n请查看详情。").Build(message.SceneGroup)
}扩展字段
用 New(kind).WithField(name, value) 添加新消息类型和字段。设置字段时,SDK 会将字段值编码成 JSON 并保存。后续修改原值不会影响消息。
用 errors.Is(err, message.ErrInvalidMessage) 判断本地消息错误。
注意事项
- 频道 Markdown 需要相应权限。旧 ARK 协议受模板和场景权限限制。
- 普通富媒体先在目标会话上传,再发送。输入状态的范围是 1 至 60 秒,由 SDK 校验。
- 本地校验通过后,QQ 仍会检查权限和配额。审核、客户端展示及文件有效期也由 QQ 决定。
- 已知非法字段组合会返回错误。
WithField无法覆盖msg_type、msg_id、event_id、msg_seq和is_wakeup。 - 零值
Outgoing无效。构造器会生成有效的消息结构。