李寻欢 33b53869bd
All checks were successful
BuildImage / build-image (push) Successful in 7m28s
:refactor: 更新依赖路径,将xybot模块更改为wechat-client/xybot
2025-04-30 15:40:19 +08:00

55 lines
1.5 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package message
import (
"encoding/xml"
"gitee.ltd/lxh/wechat-robot/internal/minio"
"gitee.ltd/lxh/wechat-robot/internal/model"
"gitee.ltd/lxh/wechat-robot/internal/wechat"
"gitee.ltd/wechat-client/xybot"
"github.com/gofiber/fiber/v2/log"
"strconv"
)
// handlerVoice
// @description: 处理语音消息
// @param msg
// @param client
func handlerVoice(msg *model.Message, client *xybot.Client) {
var err error
// 解析消息xml
var voice wechat.VoiceMessage
if err = xml.Unmarshal([]byte(msg.Content), &voice); err != nil {
log.Errorf("%v解析消息失败: %v", msg.Type, err.Error())
return
}
// 将音频长度转换成数字类型
length, _ := strconv.Atoi(voice.VoiceMsg.Length)
if length == 0 {
log.Debugf("音频长度为0无法下载")
return
}
// 取出关键数据,然后下载
var voiceSilkStr string
if voiceSilkStr, err = client.Tool.DownloadVoice(msg.ClientMsgId, voice.VoiceMsg.VoiceUrl, length); err != nil {
log.Errorf("下载语音失败: %v", err.Error())
return
}
// TODO 将这个base64转换成wav
// 保存文件到OSS后缀为.aud后续转换之后可以存wav之类的
msg.FileUrl, err = minio.SaveBase64(voiceSilkStr, "", "aud")
if err != nil {
log.Errorf("文件保存到Minio失败: %s", err.Error())
return
}
// 更新数据库
if err = model.GetDB().Model(&msg).Where("id = ?", msg.ID).Update("file_url", msg.FileUrl).Error; err != nil {
log.Errorf("更新数据库失败: %s", err.Error())
return
}
}