mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-29 14:06:36 +08:00
autoresearch iter 21: remove the telegram inbound media scratch dir after handling
downloadMedia created a fresh os.MkdirTemp for every private message carrying a photo or document, and no code path anywhere reads Attachment.Path, so each message permanently grew the disk while burning a Bot API download. The handler now removes the directory once onInbound returns. No mechanical proof is possible here: exercising downloadMedia needs a live telebot download. Verified by reading every consumer of InboundMessage .Attachments instead.
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
package telegram
|
||||
|
||||
import (
|
||||
"Wavelet/pkg/logger"
|
||||
"Wavelet/pkg/util"
|
||||
"Wavelet/plugins/domain/message_gateway/model"
|
||||
"Wavelet/plugins/domain/message_gateway/service"
|
||||
@@ -129,12 +130,23 @@ func (a *Adapter) handleTeleMessage(ctx context.Context, m *tele.Message) {
|
||||
msg.Text = m.Caption
|
||||
}
|
||||
if a.bot != nil {
|
||||
msg.Attachments = a.downloadMedia(m)
|
||||
dir, attachments := a.downloadMedia(m)
|
||||
if dir != "" {
|
||||
defer func() {
|
||||
if err := os.RemoveAll(dir); err != nil {
|
||||
logger.WarnF(ctx, "telegram: 清理临时媒体目录 %q 失败: %v", dir, err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
msg.Attachments = attachments
|
||||
}
|
||||
_ = a.onInbound(ctx, msg)
|
||||
}
|
||||
|
||||
func (a *Adapter) downloadMedia(m *tele.Message) []model.Attachment {
|
||||
// downloadMedia fetches message media into a scratch directory, returned so the
|
||||
// caller can remove it once the inbound handler no longer needs the paths.
|
||||
// An empty dir means nothing was downloaded.
|
||||
func (a *Adapter) downloadMedia(m *tele.Message) (string, []model.Attachment) {
|
||||
var files []*tele.File
|
||||
var names []string
|
||||
if m.Photo != nil {
|
||||
@@ -150,11 +162,11 @@ func (a *Adapter) downloadMedia(m *tele.Message) []model.Attachment {
|
||||
names = append(names, name)
|
||||
}
|
||||
if len(files) == 0 {
|
||||
return nil
|
||||
return "", nil
|
||||
}
|
||||
dir, err := os.MkdirTemp("", "wg-tg-*")
|
||||
if err != nil {
|
||||
return []model.Attachment{{Error: err.Error()}}
|
||||
return "", []model.Attachment{{Error: err.Error()}}
|
||||
}
|
||||
out := make([]model.Attachment, 0, len(files))
|
||||
for i, f := range files {
|
||||
@@ -165,5 +177,5 @@ func (a *Adapter) downloadMedia(m *tele.Message) []model.Attachment {
|
||||
}
|
||||
out = append(out, model.Attachment{Path: path, FileName: names[i]})
|
||||
}
|
||||
return out
|
||||
return dir, out
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user