李寻欢 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

65 lines
1.8 KiB
Go
Raw 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/types"
"gitee.ltd/lxh/wechat-robot/internal/wechat"
"gitee.ltd/wechat-client/xybot"
"github.com/gofiber/fiber/v2/log"
)
// handlerMedia
// @description: 处理媒体消息
// @param msg *model.Message 消息记录
// @param client *xybot.Client 机器人客户端
func handlerMedia(msg *model.Message, client *xybot.Client) {
var err error
// 解析消息xml文件
// 解析为结构体
var media wechat.MediaMessage
if err = xml.Unmarshal([]byte(msg.Content), &media); err != nil {
log.Errorf("%v解析消息失败: %v", msg.Type, err.Error())
return
}
var md5Str, bs64Str string
switch msg.Type {
case types.MsgTypeImage:
fileUrl := ""
md5Str = media.Img.Md5
if media.Img.CdnBigImgUrl != "" {
fileUrl = media.Img.CdnBigImgUrl
} else if media.Img.CdnMidImgUrl != "" {
fileUrl = media.Img.CdnMidImgUrl
} else if media.Img.CdnThumbUrl != "" {
fileUrl = media.Img.CdnThumbUrl
} else {
return
}
if bs64Str, err = client.Tool.CdnDownloadImg(media.Img.AesKey, fileUrl); err != nil {
log.Errorf("图片文件下载失败: %s", err.Error())
return
}
case types.MsgTypeVideo:
if bs64Str, err = client.Tool.DownloadVideo(msg.ClientMsgId); err != nil {
log.Errorf("视频文件下载失败: %s", err.Error())
return
}
}
// 下载完成保存到OSS
msg.FileUrl, err = minio.SaveBase64(bs64Str, md5Str)
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
}
}