48 lines
1.4 KiB
Go
48 lines
1.4 KiB
Go
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/utils"
|
||
"gitee.ltd/lxh/wechat-robot/internal/wechat"
|
||
"gitee.ltd/wechat-client/xybot"
|
||
"github.com/gofiber/fiber/v2/log"
|
||
"net/url"
|
||
"slices"
|
||
)
|
||
|
||
// handlerEmoticon
|
||
// @description: 处理表情包
|
||
func handlerEmoticon(msg *model.Message, client *xybot.Client) {
|
||
var err error
|
||
|
||
var emoticon wechat.EmoticonMessage
|
||
if err = xml.Unmarshal([]byte(msg.Content), &emoticon); err != nil {
|
||
log.Errorf("%v解析消息失败: %v", msg.Type, err.Error())
|
||
return
|
||
}
|
||
// 如果表情包是以域名开头,直接下载,否则不管
|
||
u, _ := url.Parse(emoticon.Emoji.Cdnurl)
|
||
// 判断是不是表情包域名
|
||
emoticonHostArray := []string{"vweixinf.tc.qq.com", "wxapp.tc.qq.com"}
|
||
if slices.Contains(emoticonHostArray, u.Host) {
|
||
var bs []byte
|
||
if bs, err = utils.DownloadFile(emoticon.Emoji.Cdnurl); err != nil {
|
||
log.Errorf("下载表情包失败: %v", err.Error())
|
||
return
|
||
}
|
||
// 下载完成,保存到OSS
|
||
msg.FileUrl, err = minio.SaveBytes(bs, emoticon.Emoji.Md5)
|
||
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
|
||
}
|
||
}
|
||
}
|