From c502c87e159cdd0903f7899a5533c8f619d42818 Mon Sep 17 00:00:00 2001 From: lixiangwuxian Date: Mon, 16 Jun 2025 11:48:13 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E4=BB=A5=E6=94=AF=E6=8C=81=E5=8D=95=E4=B8=80?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E6=B6=88=E6=81=AF=EF=BC=8C=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E5=87=BD=E6=95=B0=E4=BB=A5=E9=80=82=E5=BA=94?= =?UTF-8?q?=E6=96=B0=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/upstream_message.go | 2 +- qq_message/cq_message.go | 66 ++++++++++++++++++++------------------- 2 files changed, 35 insertions(+), 33 deletions(-) diff --git a/model/upstream_message.go b/model/upstream_message.go index c137ee1..e173d2c 100644 --- a/model/upstream_message.go +++ b/model/upstream_message.go @@ -71,7 +71,7 @@ type EventMessage struct { SubType string `json:"sub_type"` MessageID int32 `json:"message_id"` UserID int64 `json:"user_id"` - Message []any `json:"message"` + Message any `json:"message"` RawMessage string `json:"raw_message"` Font int32 `json:"font"` Sender Sender `json:"sender"` diff --git a/qq_message/cq_message.go b/qq_message/cq_message.go index dab7bca..8e4da82 100644 --- a/qq_message/cq_message.go +++ b/qq_message/cq_message.go @@ -47,38 +47,40 @@ func CreateMessage(messageType string) (QQMessage, error) { return factory(), nil } +// [map[data:map[chainCount: id:267 raw:map[chainCount: doubleHit: faceBubbleCount: faceIndex:267 faceText:/头秃 faceType:2 imageType: msgType: oldVersionStr: packId: pokeFlag: pokeStrength: pokeType: randomType: resultId: sourceType: spokeSummary: stickerId: stickerType: surpriseId: vaspokeId: vaspokeMinver: vaspokeName:] resultId:] type:face]] + // ParseStructMessages 解析消息数组 -func ParseStructMessages(jsonData []any) []QQMessage { - log.Println("解析消息数组:", jsonData) +func ParseStructMessages(msgData any) []QQMessage { + log.Println("解析消息数组:", msgData) + switch msgData.(type) { + case []map[string]any: + msgArray := msgData.([]map[string]any) + messages := make([]QQMessage, 0, len(msgArray)) + for _, raw := range msgArray { + msg, err := CreateMessage(raw["type"].(string)) + if err != nil { + log.Println("创建消息失败:", err) + continue + } + dataByte, _ := json.Marshal(raw["data"]) + // 使用类型断言获取具体类型的Data字段 + if v, ok := msg.(interface{ SetData(json.RawMessage) error }); ok { + if err := v.SetData(dataByte); 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) + } + log.Println("解析出的QQ消息数组:", messages) + return messages + case string: + return []QQMessage{NewTextMessage().ParseMessage(msgData.(string))} + } 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 - // } - - // // 使用类型断言获取具体类型的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) - // } - - // return messages }