diff --git a/coolq/api.go b/coolq/api.go index adc4d74..4c3b16f 100644 --- a/coolq/api.go +++ b/coolq/api.go @@ -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 diff --git a/coolq/bot.go b/coolq/bot.go index ed5ecbd..63f0365 100644 --- a/coolq/bot.go +++ b/coolq/bot.go @@ -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 { diff --git a/coolq/event.go b/coolq/event.go index feac543..127514d 100644 --- a/coolq/event.go +++ b/coolq/event.go @@ -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))