fix: 修改消息结构以支持单一类型消息,更新解析函数以适应新结构
This commit is contained in:
parent
9a4be54662
commit
c502c87e15
@ -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"`
|
||||
|
@ -47,38 +47,40 @@ func CreateMessage(messageType string) (QQMessage, error) {
|
||||
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 解析消息数组
|
||||
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
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user