From 9d3a3a8dcd7c8e096dc0209c89e10e5cb8face05 Mon Sep 17 00:00:00 2001 From: krau <71133316+krau@users.noreply.github.com> Date: Mon, 9 Jun 2025 16:54:51 +0800 Subject: [PATCH] feat: update fetch message to support user client --- bot/handle_link.go | 19 ++++++++++++++++--- bot/utils.go | 8 +++++++- userclient/userclient.go | 1 + 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/bot/handle_link.go b/bot/handle_link.go index a148d96..b777016 100644 --- a/bot/handle_link.go +++ b/bot/handle_link.go @@ -70,7 +70,7 @@ func parseLink(ctx *ext.Context, link string) (*parseResult, error) { if chatID == 0 || messageID == 0 { return nil, fmt.Errorf("链接中缺少 Chat ID 或 Message ID: %s", link) } - msg, err := tryFetchMessage(ctx, chatID, messageID) + msg, _, err := tryFetchMessage(ctx, chatID, messageID) if err != nil { return nil, fmt.Errorf("获取消息失败: %s", err) } @@ -153,8 +153,21 @@ func tryGetMediaGroup(chatID int64, messageID int, mediaGroupID int64) ([]*tg.Me return nil, false, errors.New("userclient is not available, cannot fetch media group") } -func tryFetchMessage(ctx *ext.Context, chatID int64, messageID int) (*tg.Message, error) { - return GetTGMessage(ctx, chatID, messageID) +func tryFetchMessage(ctx *ext.Context, chatID int64, messageID int) (*tg.Message, bool, error) { + msg, err := GetTGMessage(ctx, chatID, messageID) + if err == nil { + return msg, false, nil + } + if userclient.UC != nil && (strings.Contains(err.Error(), "peer not found") || strings.Contains(err.Error(), "unexpected message type")) { + common.Log.Warnf("无法获取消息 %d:%d, 尝试使用 userbot: %s", chatID, messageID, err) + uctx := userclient.GetCtx() + msg, err := GetTGMessage(uctx, chatID, messageID) + if err == nil { + return msg, true, nil + } + return nil, true, fmt.Errorf("获取消息失败: %w", err) + } + return nil, false, fmt.Errorf("获取消息失败: %s", err) } func handleLinkMessage(ctx *ext.Context, update *ext.Update) error { diff --git a/bot/utils.go b/bot/utils.go index f915054..3ed3649 100644 --- a/bot/utils.go +++ b/bot/utils.go @@ -314,7 +314,6 @@ func GetMediaGroup(ctx *ext.Context, chatID int64, messageID int, groupID int64) } var groupMessages []*tg.Message for _, msg := range messages { - common.Log.Debugf("Checking message %d in group %d", msg.ID, groupID) gID, isGroup := msg.GetGroupedID() if isGroup && gID == groupID { groupMessages = append(groupMessages, msg) @@ -421,6 +420,13 @@ func genFileNameFromMessageText(message tg.Message, file *types.File) string { if len(tags) > 0 { return fmt.Sprintf("%s_%s", strings.Join(tags, "_"), strconv.Itoa(message.GetID())) } + // 删除换行和特殊字符 + text = strings.Map(func(r rune) rune { + if r == '\n' || r == '\r' || r == '\t' || r == ' ' { + return '_' + } + return r + }, text) runes := []rune(text) return string(runes[:min(128, len(runes))]) } diff --git a/userclient/userclient.go b/userclient/userclient.go index 4c79bdd..b3b9e25 100644 --- a/userclient/userclient.go +++ b/userclient/userclient.go @@ -18,6 +18,7 @@ var ectx *ext.Context func GetCtx() *ext.Context { if ectx != nil { + // UC.RefreshContext(ectx) return ectx } ectx = UC.CreateContext()