From 9a8f356348c1fdda1b2058fcdc8720c2c29d8810 Mon Sep 17 00:00:00 2001 From: Sumner Evans Date: Tue, 8 Oct 2024 12:22:04 -0600 Subject: [PATCH] backfill: fix dialog fetch, HasMore, and skip forbidden channels Signed-off-by: Sumner Evans --- pkg/connector/backfill.go | 15 +++++++++++---- pkg/connector/sync.go | 6 +++++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/pkg/connector/backfill.go b/pkg/connector/backfill.go index dbfeaefd..c7d9192b 100644 --- a/pkg/connector/backfill.go +++ b/pkg/connector/backfill.go @@ -93,11 +93,18 @@ func (t *TelegramClient) takeoutDialogs(ctx context.Context, takeoutID int64) er } for { log.Info().Stringer("cursor", req.OffsetPeer).Msg("Fetching dialogs") - dialogs, err := APICallWithUpdates(ctx, t, func() (*tg.MessagesDialogs, error) { - var dialogs tg.MessagesDialogs - return &dialogs, t.client.Invoke(ctx, + dialogs, err := APICallWithUpdates(ctx, t, func() (tg.ModifiedMessagesDialogs, error) { + var dialogs tg.MessagesDialogsBox + err := t.client.Invoke(ctx, &tg.InvokeWithTakeoutRequest{TakeoutID: takeoutID, Query: &req}, &dialogs) + if err != nil { + return nil, err + } else if modified, ok := dialogs.Dialogs.AsModified(); !ok { + return nil, fmt.Errorf("unexpected response type: %T", dialogs.Dialogs) + } else { + return modified, nil + } }) if err != nil { return fmt.Errorf("failed to get dialogs: %w", err) @@ -302,7 +309,7 @@ func (t *TelegramClient) FetchMessages(ctx context.Context, fetchParams bridgev2 return &bridgev2.FetchMessagesResponse{ Messages: backfillMessages, Cursor: cursor, - HasMore: len(messages) == fetchParams.Count, + HasMore: len(backfillMessages) > 0, Forward: fetchParams.Forward, MarkRead: markRead, }, nil diff --git a/pkg/connector/sync.go b/pkg/connector/sync.go index 6da11417..13afe2b9 100644 --- a/pkg/connector/sync.go +++ b/pkg/connector/sync.go @@ -133,7 +133,11 @@ func (t *TelegramClient) handleDialogs(ctx context.Context, dialogs tg.ModifiedM chatInfo.Members.PowerLevels = t.getGroupChatPowerLevels(chats[peer.ChatID]) chatInfo.Name = &chats[peer.ChatID].(*tg.Chat).Title case *tg.PeerChannel: - channel := chats[peer.ChannelID].(*tg.Channel) + channel, ok := chats[peer.ChannelID].(*tg.Channel) + if !ok { + log.Error().Type("channel", chats[peer.ChannelID]).Msg("Failed to cast chat to channel") + continue + } chatInfo.Name = &channel.Title chatInfo.Members.PowerLevels = t.getGroupChatPowerLevels(channel) if !portal.Metadata.(*PortalMetadata).IsSuperGroup {