diff --git a/onebot/http.go b/onebot/http.go index 7c6897e..f86a9d4 100644 --- a/onebot/http.go +++ b/onebot/http.go @@ -86,21 +86,15 @@ func SendHttpReq(msg map[string]interface{}) { return } - fmt.Printf("发送数据: %s\n", string(jsonData)) m := new(WechatMessage) - err = json.Unmarshal(jsonData, m) + jsonReq, err := HandleMsg(jsonData, m) if err != nil { - log.Printf("解析消息失败: %v\n", err) + log.Printf("JSON 序列化失败: %v\n", err) return } - myWechatId = m.SelfID - if m.GroupId != "" { - userID2NicknameMap.Store(m.GroupId+"_"+m.UserID, m.Sender.Nickname) - } - - // 4. 创建 POST 请求 - req, err := http.NewRequest("POST", config.SendURL, bytes.NewBuffer(jsonData)) + fmt.Printf("发送数据: %s\n", string(jsonReq)) + req, err := http.NewRequest("POST", config.SendURL, bytes.NewBuffer(jsonReq)) if err != nil { log.Printf("创建请求失败: %v\n", err) return diff --git a/onebot/utils.go b/onebot/utils.go index 05e7277..ad57122 100644 --- a/onebot/utils.go +++ b/onebot/utils.go @@ -5,8 +5,10 @@ import ( "crypto/md5" "encoding/base64" "encoding/hex" + "encoding/json" "fmt" "io" + log "log" "math/rand" "os" "os/exec" @@ -105,11 +107,16 @@ func SaveAudioFile(silkBytes []byte) (path string, err error) { return "", err } + exePath, err := os.Executable() + if err != nil { + return "", err + } + r := rand.New(rand.NewSource(time.Now().UnixNano())) randomNumber := r.Intn(1000) timestamp := time.Now().Unix() fileName := fmt.Sprintf("%d_%d.mp3", randomNumber, timestamp) - targetPath := "./audio/" + fileName + targetPath := filepath.Dir(exePath) + "/audio/" + fileName err = os.WriteFile(targetPath, mp3Bytes, 0644) if err != nil { return "", err @@ -147,3 +154,28 @@ func SilkToMp3(silkBytes []byte) ([]byte, error) { return out.Bytes(), nil } + +func HandleMsg(jsonData []byte, m *WechatMessage) ([]byte, error) { + err := json.Unmarshal(jsonData, m) + if err != nil { + log.Printf("解析消息失败: %v\n", err) + return nil, err + } + myWechatId = m.SelfID + if m.GroupId != "" { + userID2NicknameMap.Store(m.GroupId+"_"+m.UserID, m.Sender.Nickname) + } + + for _, msg := range m.Message { + if msg.Type == "record" { + path, err := SaveAudioFile(msg.Data.Media) + if err != nil { + log.Printf("保存音频失败: %v\n", err) + return nil, err + } + msg.Data.URL = path + msg.Data.Media = nil + } + } + return json.Marshal(m) +} diff --git a/onebot/websocket.go b/onebot/websocket.go index aa7ff9c..5a9918b 100644 --- a/onebot/websocket.go +++ b/onebot/websocket.go @@ -96,36 +96,14 @@ func SendWebSocketMsg(msg map[string]interface{}) { return } - fmt.Printf("发送数据: %s\n", string(jsonData)) m := new(WechatMessage) - err = json.Unmarshal(jsonData, m) - if err != nil { - log.Printf("解析消息失败: %v\n", err) - return - } - myWechatId = m.SelfID - if m.GroupId != "" { - userID2NicknameMap.Store(m.GroupId+"_"+m.UserID, m.Sender.Nickname) - } - - for _, msg := range m.Message { - if msg.Type == "record" { - path, err := SaveAudioFile(msg.Data.Media) - if err != nil { - log.Printf("保存音频失败: %v\n", err) - return - } - msg.Data.URL = path - msg.Data.Media = nil - } - } - - jsonReq, err := json.Marshal(m) + jsonReq, err := HandleMsg(jsonData, m) if err != nil { log.Printf("JSON 序列化失败: %v\n", err) return } + fmt.Printf("发送数据: %s\n", string(jsonReq)) err = conn.WriteMessage(websocket.TextMessage, jsonReq) if err != nil { log.Printf("发送消息失败: %v\n", err)