From 8f9ef07d1c0fcf57137b71a94fed910563b43a1b Mon Sep 17 00:00:00 2001 From: krau <71133316+krau@users.noreply.github.com> Date: Sat, 2 Aug 2025 16:55:12 +0800 Subject: [PATCH] refactor: replace functions.GetMediaFileNameWithId with tgutil.GetMediaFileName for better media file name handling --- client/bot/handlers/save.go | 5 +---- common/utils/tgutil/media.go | 40 ++++++++++++++++++++++++++++++++++ common/utils/tgutil/message.go | 3 +-- 3 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 common/utils/tgutil/media.go diff --git a/client/bot/handlers/save.go b/client/bot/handlers/save.go index d528806..b0b8965 100644 --- a/client/bot/handlers/save.go +++ b/client/bot/handlers/save.go @@ -7,7 +7,6 @@ import ( "github.com/celestix/gotgproto/dispatcher" "github.com/celestix/gotgproto/ext" - "github.com/celestix/gotgproto/functions" "github.com/charmbracelet/log" "github.com/gotd/td/tg" "github.com/krau/SaveAny-Bot/client/bot/handlers/utils/mediautil" @@ -158,9 +157,8 @@ func handleBatchSave(ctx *ext.Context, update *ext.Update, args []string) error sb.Reset() sb.WriteString(msg.GetMessage()) sb.WriteString(" ") - fn, _ := functions.GetMediaFileNameWithId(media) + fn, _ := tgutil.GetMediaFileName(media) sb.WriteString(fn) - log.FromContext(ctx).Debugf("正在检查消息内容: %s", sb.String()) if !filter.MatchString(sb.String()) { continue } @@ -194,5 +192,4 @@ func handleBatchSave(ctx *ext.Context, update *ext.Update, args []string) error return dispatcher.EndGroups } return shortcut.CreateAndAddBatchTGFileTaskWithEdit(ctx, update.GetUserChat().GetID(), stor, "", files, replied.ID) - } diff --git a/common/utils/tgutil/media.go b/common/utils/tgutil/media.go new file mode 100644 index 0000000..33fb5ea --- /dev/null +++ b/common/utils/tgutil/media.go @@ -0,0 +1,40 @@ +package tgutil + +import ( + "fmt" + + "github.com/gabriel-vasile/mimetype" + "github.com/gotd/td/tg" +) + +func GetMediaFileName(media tg.MessageMediaClass) (string, error) { + switch v := media.(type) { + case *tg.MessageMediaPhoto: + f, ok := v.Photo.AsNotEmpty() + if !ok { + return "", fmt.Errorf("unknown type media: %T", media) + } + return fmt.Sprintf("%d.png", f.ID), nil + case *tg.MessageMediaDocument: + f, ok := v.Document.AsNotEmpty() + if !ok { + return "", fmt.Errorf("unknown type media: %T", media) + } + fileName := "" + for _, attribute := range f.Attributes { + if name, ok := attribute.(*tg.DocumentAttributeFilename); ok { + fileName = name.GetFileName() + break + } + } + if fileName == "" { + mmt := mimetype.Lookup(f.GetMimeType()) + if mmt != nil { + fileName = fmt.Sprintf("%d.%s", f.GetID(), mmt.Extension()) + } + } + return fileName, nil + default: + return "", fmt.Errorf("unsupported type media: %T", media) + } +} diff --git a/common/utils/tgutil/message.go b/common/utils/tgutil/message.go index d81a5fd..b4e234b 100644 --- a/common/utils/tgutil/message.go +++ b/common/utils/tgutil/message.go @@ -6,7 +6,6 @@ import ( "strings" "github.com/celestix/gotgproto/ext" - "github.com/celestix/gotgproto/functions" "github.com/duke-git/lancet/v2/maputil" "github.com/duke-git/lancet/v2/mathutil" @@ -86,7 +85,7 @@ func GenFileNameFromMessage(message tg.Message) string { }() if filename == "" { - mname, err := functions.GetMediaFileNameWithId(message.Media) + mname, err := GetMediaFileName(message.Media) if err != nil { filename = fmt.Sprintf("%d_%s", message.GetID(), xid.New().String()) } else {