support audio

This commit is contained in:
yincong
2026-03-03 09:46:20 +08:00
parent b4a8be7d5f
commit 682c3fea63
3 changed files with 39 additions and 35 deletions
+4 -10
View File
@@ -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
+33 -1
View File
@@ -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)
}
+2 -24
View File
@@ -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)