fix: 修改消息结构以支持单一类型消息,更新解析函数以适应新结构

This commit is contained in:
lixiangwuxian 2025-06-16 11:48:13 +08:00
parent 9a4be54662
commit c502c87e15
2 changed files with 35 additions and 33 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 []any `json:"message"` 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,38 +47,40 @@ func CreateMessage(messageType string) (QQMessage, error) {
return factory(), nil return factory(), nil
} }
// [map[data:map[chainCount:<nil> id:267 raw:map[chainCount:<nil> doubleHit:<nil> faceBubbleCount:<nil> faceIndex:267 faceText:/头秃 faceType:2 imageType:<nil> msgType:<nil> oldVersionStr:<nil> packId:<nil> pokeFlag:<nil> pokeStrength:<nil> pokeType:<nil> randomType:<nil> resultId:<nil> sourceType:<nil> spokeSummary:<nil> stickerId:<nil> stickerType:<nil> surpriseId:<nil> vaspokeId:<nil> vaspokeMinver:<nil> vaspokeName:<nil>] resultId:<nil>] type:face]]
// ParseStructMessages 解析消息数组 // ParseStructMessages 解析消息数组
func ParseStructMessages(jsonData []any) []QQMessage { func ParseStructMessages(msgData any) []QQMessage {
log.Println("解析消息数组:", jsonData) log.Println("解析消息数组:", msgData)
return nil switch msgData.(type) {
// var rawMessages []RawMessage case []map[string]any:
// if err := json.Unmarshal(jsonData, &rawMessages); err != nil { msgArray := msgData.([]map[string]any)
// log.Println("解析 JSON 数组失败:", err, string(jsonData)) messages := make([]QQMessage, 0, len(msgArray))
// return nil for _, raw := range msgArray {
// } msg, err := CreateMessage(raw["type"].(string))
if err != nil {
// messages := make([]QQMessage, 0, len(rawMessages)) log.Println("创建消息失败:", err)
// for _, raw := range rawMessages { continue
// msg, err := CreateMessage(raw.Type) }
// if err != nil { dataByte, _ := json.Marshal(raw["data"])
// log.Println("创建消息失败:", err) // 使用类型断言获取具体类型的Data字段
// continue if v, ok := msg.(interface{ SetData(json.RawMessage) error }); ok {
// } if err := v.SetData(dataByte); err != nil {
// return nil, fmt.Errorf("解析消息数据失败: %v", err)
// // 使用类型断言获取具体类型的Data字段 log.Println("解析消息数据失败:", err)
// if v, ok := msg.(interface{ SetData(json.RawMessage) error }); ok { continue
// if err := v.SetData(raw.Data); err != nil { }
// // return nil, fmt.Errorf("解析消息数据失败: %v", err) } else {
// log.Println("解析消息数据失败:", err) log.Printf("消息类型 %s 未实现 SetData 方法\n", raw["type"])
// continue continue
// } }
// } else {
// log.Printf("消息类型 %s 未实现 SetData 方法\n", raw.Type) messages = append(messages, msg)
// continue }
// } log.Println("解析出的QQ消息数组:", messages)
return messages
// messages = append(messages, msg) case string:
// } return []QQMessage{NewTextMessage().ParseMessage(msgData.(string))}
}
// return messages return nil
} }