fix: 修改 ParseStructMessages 函数中的类型断言,将原有的 any 类型替换为具体的 map[string]any,以确保消息解析的准确性

This commit is contained in:
lixiangwuxian 2025-06-16 13:58:11 +08:00
parent 6c6eeba3e1
commit bf1b0f391f

View File

@ -54,16 +54,17 @@ func CreateMessage(messageType string) (QQMessage, error) {
func ParseStructMessages(msgData any) []QQMessage { func ParseStructMessages(msgData any) []QQMessage {
log.Println("解析消息数组:", msgData) log.Println("解析消息数组:", msgData)
switch msgData := msgData.(type) { switch msgData := msgData.(type) {
case []map[any]any: case []interface{}:
msgArray := msgData msgArray := msgData
messages := make([]QQMessage, 0, len(msgArray)) messages := make([]QQMessage, 0, len(msgArray))
for _, raw := range msgArray { for _, raw := range msgArray {
msg, err := CreateMessage(raw["type"].(string)) rawMap := raw.(map[string]any)
msg, err := CreateMessage(rawMap["type"].(string))
if err != nil { if err != nil {
log.Println("创建消息失败:", err) log.Println("创建消息失败:", err)
continue continue
} }
dataByte, _ := json.Marshal(raw["data"]) dataByte, _ := json.Marshal(rawMap["data"])
// 使用类型断言获取具体类型的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(dataByte); err != nil { if err := v.SetData(dataByte); err != nil {
@ -72,7 +73,7 @@ func ParseStructMessages(msgData any) []QQMessage {
continue continue
} }
} else { } else {
log.Printf("消息类型 %s 未实现 SetData 方法\n", raw["type"]) log.Printf("消息类型 %s 未实现 SetData 方法\n", rawMap["type"])
continue continue
} }