diff --git a/model/upstream_message.go b/model/upstream_message.go index bb84087..c137ee1 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 string `json:"message"` //just ignore it + 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 91a3ba6..dab7bca 100644 --- a/qq_message/cq_message.go +++ b/qq_message/cq_message.go @@ -47,36 +47,38 @@ func CreateMessage(messageType string) (QQMessage, error) { return factory(), nil } -// ParseCQMessages 解析消息数组 -func ParseCQMessages(jsonData []byte) []QQMessage { - var rawMessages []RawMessage - if err := json.Unmarshal(jsonData, &rawMessages); err != nil { - log.Println("解析 JSON 数组失败:", err, string(jsonData)) - return nil - } +// ParseStructMessages 解析消息数组 +func ParseStructMessages(jsonData []any) []QQMessage { + log.Println("解析消息数组:", jsonData) + 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 - } + // 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 - } + // // 使用类型断言获取具体类型的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) - } + // messages = append(messages, msg) + // } - return messages + // return messages } diff --git a/ws_client/client.go b/ws_client/client.go index 7518a3d..8a44a0b 100644 --- a/ws_client/client.go +++ b/ws_client/client.go @@ -76,7 +76,7 @@ func (c *WebSocketClient) receiveMessages() { UserId: event.UserID, OriginMsgId: event.MessageID, RawMsg: event.RawMessage, - StructuredMsg: qq_message.ParseCQMessages([]byte(event.RawMessage)), + StructuredMsg: qq_message.ParseStructMessages(event.Message), UserNickName: event.Sender.Nickname, }