From 0876fa33367e3950514af9fc11731077c54b7dea Mon Sep 17 00:00:00 2001 From: cosmo Date: Fri, 14 Jun 2024 21:20:55 +0800 Subject: [PATCH] beta430 --- handlers/message_parser.go | 62 ++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 32 deletions(-) diff --git a/handlers/message_parser.go b/handlers/message_parser.go index 5c1a7d1a..0f19180b 100644 --- a/handlers/message_parser.go +++ b/handlers/message_parser.go @@ -451,43 +451,41 @@ func parseMessageContent(paramsMessage callapi.ParamsContent, message callapi.Ac qqNumber, _ := segmentMap["data"].(map[string]interface{})["qq"].(string) segmentContent = "[CQ:at,qq=" + qqNumber + "]" case "markdown": - mdContent, ok := segmentMap["data"].(map[string]interface{})["data"] - if ok { - if mdContentMap, isMap := mdContent.(map[string]interface{}); isMap { - // mdContent是map[string]interface{},按map处理 - mdContentBytes, err := json.Marshal(mdContentMap) + mdContent := segmentMap["data"] + if mdContentMap, isMap := mdContent.(map[string]interface{}); isMap { + // mdContent是map[string]interface{},按map处理 + mdContentBytes, err := json.Marshal(mdContentMap) + if err != nil { + mylog.Printf("Error marshaling mdContentMap to JSON:%v", err) + } + encoded := base64.StdEncoding.EncodeToString(mdContentBytes) + segmentContent = "[CQ:markdown,data=base64://" + encoded + "]" + } else if mdContentStr, isString := mdContent.(string); isString { + // mdContent是string + if strings.HasPrefix(mdContentStr, "base64://") { + // 如果以base64://开头,直接使用 + segmentContent = "[CQ:markdown,data=" + mdContentStr + "]" + } else { + // 处理实体化后的JSON文本 + mdContentStr = strings.ReplaceAll(mdContentStr, "&", "&") + mdContentStr = strings.ReplaceAll(mdContentStr, "[", "[") + mdContentStr = strings.ReplaceAll(mdContentStr, "]", "]") + mdContentStr = strings.ReplaceAll(mdContentStr, ",", ",") + + // 将处理过的字符串视为JSON对象,进行序列化和编码 + var jsonMap map[string]interface{} + if err := json.Unmarshal([]byte(mdContentStr), &jsonMap); err != nil { + mylog.Printf("Error unmarshaling string to JSON:%v", err) + } + mdContentBytes, err := json.Marshal(jsonMap) if err != nil { - mylog.Printf("Error marshaling mdContentMap to JSON:%v", err) + mylog.Printf("Error marshaling jsonMap to JSON:%v", err) } encoded := base64.StdEncoding.EncodeToString(mdContentBytes) - segmentContent = "[CQ:markdown,data=" + encoded + "]" - } else if mdContentStr, isString := mdContent.(string); isString { - // mdContent是string - if strings.HasPrefix(mdContentStr, "base64://") { - // 如果以base64://开头,直接使用 - segmentContent = "[CQ:markdown,data=" + mdContentStr + "]" - } else { - // 处理实体化后的JSON文本 - mdContentStr = strings.ReplaceAll(mdContentStr, "&", "&") - mdContentStr = strings.ReplaceAll(mdContentStr, "[", "[") - mdContentStr = strings.ReplaceAll(mdContentStr, "]", "]") - mdContentStr = strings.ReplaceAll(mdContentStr, ",", ",") - - // 将处理过的字符串视为JSON对象,进行序列化和编码 - var jsonMap map[string]interface{} - if err := json.Unmarshal([]byte(mdContentStr), &jsonMap); err != nil { - mylog.Printf("Error unmarshaling string to JSON:%v", err) - } - mdContentBytes, err := json.Marshal(jsonMap) - if err != nil { - mylog.Printf("Error marshaling jsonMap to JSON:%v", err) - } - encoded := base64.StdEncoding.EncodeToString(mdContentBytes) - segmentContent = "[CQ:markdown,data=" + encoded + "]" - } + segmentContent = "[CQ:markdown,data=base64://" + encoded + "]" } } else { - mylog.Printf("Error marshaling markdown segment to interface,contain type but data is nil.") + mylog.Printf("Error marshaling markdown segment wrong type.") } }