mirror of
https://github.com/krau/SaveAny-Bot.git
synced 2026-06-05 07:30:32 +08:00
feat: update fetch message to support user client
This commit is contained in:
@@ -70,7 +70,7 @@ func parseLink(ctx *ext.Context, link string) (*parseResult, error) {
|
|||||||
if chatID == 0 || messageID == 0 {
|
if chatID == 0 || messageID == 0 {
|
||||||
return nil, fmt.Errorf("链接中缺少 Chat ID 或 Message ID: %s", link)
|
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 {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("获取消息失败: %s", err)
|
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")
|
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) {
|
func tryFetchMessage(ctx *ext.Context, chatID int64, messageID int) (*tg.Message, bool, error) {
|
||||||
return GetTGMessage(ctx, chatID, messageID)
|
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 {
|
func handleLinkMessage(ctx *ext.Context, update *ext.Update) error {
|
||||||
|
|||||||
@@ -314,7 +314,6 @@ func GetMediaGroup(ctx *ext.Context, chatID int64, messageID int, groupID int64)
|
|||||||
}
|
}
|
||||||
var groupMessages []*tg.Message
|
var groupMessages []*tg.Message
|
||||||
for _, msg := range messages {
|
for _, msg := range messages {
|
||||||
common.Log.Debugf("Checking message %d in group %d", msg.ID, groupID)
|
|
||||||
gID, isGroup := msg.GetGroupedID()
|
gID, isGroup := msg.GetGroupedID()
|
||||||
if isGroup && gID == groupID {
|
if isGroup && gID == groupID {
|
||||||
groupMessages = append(groupMessages, msg)
|
groupMessages = append(groupMessages, msg)
|
||||||
@@ -421,6 +420,13 @@ func genFileNameFromMessageText(message tg.Message, file *types.File) string {
|
|||||||
if len(tags) > 0 {
|
if len(tags) > 0 {
|
||||||
return fmt.Sprintf("%s_%s", strings.Join(tags, "_"), strconv.Itoa(message.GetID()))
|
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)
|
runes := []rune(text)
|
||||||
return string(runes[:min(128, len(runes))])
|
return string(runes[:min(128, len(runes))])
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ var ectx *ext.Context
|
|||||||
|
|
||||||
func GetCtx() *ext.Context {
|
func GetCtx() *ext.Context {
|
||||||
if ectx != nil {
|
if ectx != nil {
|
||||||
|
// UC.RefreshContext(ectx)
|
||||||
return ectx
|
return ectx
|
||||||
}
|
}
|
||||||
ectx = UC.CreateContext()
|
ectx = UC.CreateContext()
|
||||||
|
|||||||
Reference in New Issue
Block a user