From bfb1786a42bb21e3c24504378a7f646fddea2d7f Mon Sep 17 00:00:00 2001 From: Bohdan Horbeshko Date: Tue, 26 Aug 2025 13:10:20 -0400 Subject: [PATCH] Additional request for loading last messages --- telegram/utils.go | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/telegram/utils.go b/telegram/utils.go index b127ae8..d6f8a20 100644 --- a/telegram/utils.go +++ b/telegram/utils.go @@ -2412,12 +2412,28 @@ func (c *Client) GetMessagesBetween(chatID, fromMessageId, lastMessageId int64, Limit: reqLimit, }) if err == nil { - log.Debugf("pre-fetched %v messages, cutting", len(newMessages.Messages)) + fetchedMessages := newMessages.Messages + log.Debugf("pre-fetched %v messages, cutting", len(fetchedMessages)) + + // it's not quite good to yield just one last message with the complete flag, + // as clients won't fetch more, give it one more chance + if limit < -1 && len(fetchedMessages) == 1 { + additionalMessages, err := c.client.GetChatHistory(&client.GetChatHistoryRequest{ + ChatId: chatID, + FromMessageId: fetchedMessages[0].Id, + Limit: reqLimit-1, + }) + if err == nil { + log.Debugf("fetched %v more messages", len(additionalMessages.Messages)) + fetchedMessages = append(fetchedMessages, additionalMessages.Messages...) + } + } + if limit > 0 { complete = true fromPos := -1 if lastMessageId != 0 { - for i, message := range newMessages.Messages { + for i, message := range fetchedMessages { if message.Id < lastMessageId { complete = false break @@ -2427,32 +2443,33 @@ func (c *Client) GetMessagesBetween(chatID, fromMessageId, lastMessageId int64, } } } else { - if len(newMessages.Messages) > 0 { + if len(fetchedMessages) > 0 { lastMsg, lastMsgErr := c.GetPreviousMessage(chatID, 0) if lastMsgErr == nil && lastMsg != nil { - if lastMsg.Id != newMessages.Messages[0].Id { + if lastMsg.Id != fetchedMessages[0].Id { complete = false } } } } if fromPos > -1 { - messages = newMessages.Messages[fromPos:] + messages = fetchedMessages[fromPos:] } else { - messages = newMessages.Messages + messages = fetchedMessages } } else { complete = true - for _, message := range newMessages.Messages { + for _, message := range fetchedMessages { if message.Id <= fromMessageId { break } messages = append(messages, message) } } - } - if !reverse { - ReverseMessagesSlice(messages) + + if !reverse { + ReverseMessagesSlice(messages) + } } return }