test: 修改消息结构以支持多类型消息,更新相关解析函数以适应新结构

This commit is contained in:
lixiangwuxian 2025-06-16 11:29:19 +08:00
parent 7edc71bb3b
commit 9a4be54662
3 changed files with 32 additions and 30 deletions

View File

@ -71,7 +71,7 @@ type EventMessage struct {
SubType string `json:"sub_type"`
MessageID int32 `json:"message_id"`
UserID int64 `json:"user_id"`
Message string `json:"message"` //just ignore it
Message []any `json:"message"`
RawMessage string `json:"raw_message"`
Font int32 `json:"font"`
Sender Sender `json:"sender"`

View File

@ -47,36 +47,38 @@ func CreateMessage(messageType string) (QQMessage, error) {
return factory(), nil
}
// ParseCQMessages 解析消息数组
func ParseCQMessages(jsonData []byte) []QQMessage {
var rawMessages []RawMessage
if err := json.Unmarshal(jsonData, &rawMessages); err != nil {
log.Println("解析 JSON 数组失败:", err, string(jsonData))
return nil
}
// ParseStructMessages 解析消息数组
func ParseStructMessages(jsonData []any) []QQMessage {
log.Println("解析消息数组:", jsonData)
return nil
// var rawMessages []RawMessage
// if err := json.Unmarshal(jsonData, &rawMessages); err != nil {
// log.Println("解析 JSON 数组失败:", err, string(jsonData))
// return nil
// }
messages := make([]QQMessage, 0, len(rawMessages))
for _, raw := range rawMessages {
msg, err := CreateMessage(raw.Type)
if err != nil {
log.Println("创建消息失败:", err)
continue
}
// messages := make([]QQMessage, 0, len(rawMessages))
// for _, raw := range rawMessages {
// msg, err := CreateMessage(raw.Type)
// if err != nil {
// log.Println("创建消息失败:", err)
// continue
// }
// 使用类型断言获取具体类型的Data字段
if v, ok := msg.(interface{ SetData(json.RawMessage) error }); ok {
if err := v.SetData(raw.Data); err != nil {
// return nil, fmt.Errorf("解析消息数据失败: %v", err)
log.Println("解析消息数据失败:", err)
continue
}
} else {
log.Printf("消息类型 %s 未实现 SetData 方法\n", raw.Type)
continue
}
// // 使用类型断言获取具体类型的Data字段
// if v, ok := msg.(interface{ SetData(json.RawMessage) error }); ok {
// if err := v.SetData(raw.Data); err != nil {
// // return nil, fmt.Errorf("解析消息数据失败: %v", err)
// log.Println("解析消息数据失败:", err)
// continue
// }
// } else {
// log.Printf("消息类型 %s 未实现 SetData 方法\n", raw.Type)
// continue
// }
messages = append(messages, msg)
}
// messages = append(messages, msg)
// }
return messages
// return messages
}

View File

@ -76,7 +76,7 @@ func (c *WebSocketClient) receiveMessages() {
UserId: event.UserID,
OriginMsgId: event.MessageID,
RawMsg: event.RawMessage,
StructuredMsg: qq_message.ParseCQMessages([]byte(event.RawMessage)),
StructuredMsg: qq_message.ParseStructMessages(event.Message),
UserNickName: event.Sender.Nickname,
}