1
0
mirror of https://github.com/Mrs4s/go-cqhttp.git synced 2025-05-07 04:23:49 +08:00

feat: resolving flash image url

This commit is contained in:
Mrs4s 2021-10-30 18:23:08 +08:00
parent 82bb37c7e6
commit 0ad74c6f2c
No known key found for this signature in database
GPG Key ID: 3186E98FA19CE3A7
3 changed files with 18 additions and 10 deletions

View File

@ -1123,7 +1123,7 @@ func (bot *CQBot) CQGetImage(file string) global.MSG {
f, _ := os.OpenFile(local, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0o0644)
_, _ = f.ReadFrom(body)
_ = body.Close()
f.Close()
_ = f.Close()
} else {
log.Warnf("下载图片 %v 时出现错误: %v", msg["url"], err)
return Failed(100, "DOWNLOAD_IMAGE_ERROR", err.Error())
@ -1189,7 +1189,7 @@ func (bot *CQBot) CQGetForwardMessage(resID string) global.MSG {
}
r := make([]global.MSG, 0, len(m.Nodes))
for _, n := range m.Nodes {
bot.checkMedia(n.Message)
bot.checkMedia(n.Message, 0)
r = append(r, global.MSG{
"sender": global.MSG{
"user_id": n.SenderId,
@ -1273,7 +1273,7 @@ func (bot *CQBot) CQGetGroupMessageHistory(groupID int64, seq int64) global.MSG
}
ms := make([]global.MSG, 0, len(msg))
for _, m := range msg {
bot.checkMedia(m.Elements)
bot.checkMedia(m.Elements, groupID)
id := bot.InsertGroupMessage(m)
t := bot.formatGroupMessage(m)
t["message_id"] = id

View File

@ -150,7 +150,7 @@ func (bot *CQBot) UploadLocalVideo(target int64, v *LocalVideoElement) (*message
if err != nil {
return nil, err
}
defer video.Close()
defer func() { _ = video.Close() }()
hash, _ := utils.ComputeMd5AndLength(io.MultiReader(video, v.thumb))
cacheFile := path.Join(global.CachePath, hex.EncodeToString(hash)+".cache")
_, _ = video.Seek(0, io.SeekStart)
@ -220,7 +220,7 @@ func (bot *CQBot) SendGroupMessage(groupID int64, m *message.SendingMessage) int
return -1
}
m.Elements = newElem
bot.checkMedia(newElem)
bot.checkMedia(newElem, groupID)
ret := bot.Client.SendGroupMessage(groupID, m, base.ForceFragmented)
if ret == nil || ret.Id == -1 {
log.Warnf("群消息发送失败: 账号可能被风控.")
@ -255,7 +255,7 @@ func (bot *CQBot) SendPrivateMessage(target int64, groupID int64, m *message.Sen
return -1
}
m.Elements = newElem
bot.checkMedia(newElem)
bot.checkMedia(newElem, bot.Client.Uin)
// 单向好友是否存在
unidirectionalFriendExists := func() bool {

View File

@ -31,7 +31,7 @@ func ToFormattedMessage(e []message.IMessageElement, groupID int64, isRaw ...boo
}
func (bot *CQBot) privateMessageEvent(c *client.QQClient, m *message.PrivateMessage) {
bot.checkMedia(m.Elements)
bot.checkMedia(m.Elements, m.Sender.Uin)
cqm := ToStringMessage(m.Elements, 0, true)
id := bot.InsertPrivateMessage(m)
log.Infof("收到好友 %v(%v) 的消息: %v (%v)", m.Sender.DisplayName(), m.Sender.Uin, cqm, id)
@ -63,7 +63,7 @@ func (bot *CQBot) privateMessageEvent(c *client.QQClient, m *message.PrivateMess
}
func (bot *CQBot) groupMessageEvent(c *client.QQClient, m *message.GroupMessage) {
bot.checkMedia(m.Elements)
bot.checkMedia(m.Elements, m.GroupCode)
for _, elem := range m.Elements {
if file, ok := elem.(*message.GroupFileElement); ok {
log.Infof("群 %v(%v) 内 %v(%v) 上传了文件: %v", m.GroupName, m.GroupCode, m.Sender.DisplayName(), m.Sender.Uin, file.Name)
@ -98,7 +98,7 @@ func (bot *CQBot) groupMessageEvent(c *client.QQClient, m *message.GroupMessage)
func (bot *CQBot) tempMessageEvent(c *client.QQClient, e *client.TempMessageEvent) {
m := e.Message
bot.checkMedia(m.Elements)
bot.checkMedia(m.Elements, m.Sender.Uin)
cqm := ToStringMessage(m.Elements, 0, true)
bot.tempSessionCache.Store(m.Sender.Uin, e.Session)
id := m.Id
@ -542,11 +542,19 @@ func (bot *CQBot) groupDecrease(groupCode, userUin int64, operator *client.Group
}
}
func (bot *CQBot) checkMedia(e []message.IMessageElement) {
func (bot *CQBot) checkMedia(e []message.IMessageElement, sourceId int64) {
// TODO(wdvxdr): remove these old cache file in v1.0.0
for _, elem := range e {
switch i := elem.(type) {
case *message.GroupImageElement:
if i.Flash && sourceId != 0 {
u, err := bot.Client.GetGroupImageDownloadUrl(i.FileId, sourceId, i.Md5)
if err != nil {
log.Warnf("获取闪照地址时出现错误: %v", err)
} else {
i.Url = u
}
}
data := binary.NewWriterF(func(w *binary.Writer) {
w.Write(i.Md5)
w.WriteUInt32(uint32(i.Size))