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"` SubType string `json:"sub_type"`
MessageID int32 `json:"message_id"` MessageID int32 `json:"message_id"`
UserID int64 `json:"user_id"` UserID int64 `json:"user_id"`
Message string `json:"message"` //just ignore it Message []any `json:"message"`
RawMessage string `json:"raw_message"` RawMessage string `json:"raw_message"`
Font int32 `json:"font"` Font int32 `json:"font"`
Sender Sender `json:"sender"` Sender Sender `json:"sender"`

View File

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