backfill: fix dialog fetch, HasMore, and skip forbidden channels
Signed-off-by: Sumner Evans <sumner.evans@automattic.com>
This commit is contained in:
@@ -93,11 +93,18 @@ func (t *TelegramClient) takeoutDialogs(ctx context.Context, takeoutID int64) er
|
|||||||
}
|
}
|
||||||
for {
|
for {
|
||||||
log.Info().Stringer("cursor", req.OffsetPeer).Msg("Fetching dialogs")
|
log.Info().Stringer("cursor", req.OffsetPeer).Msg("Fetching dialogs")
|
||||||
dialogs, err := APICallWithUpdates(ctx, t, func() (*tg.MessagesDialogs, error) {
|
dialogs, err := APICallWithUpdates(ctx, t, func() (tg.ModifiedMessagesDialogs, error) {
|
||||||
var dialogs tg.MessagesDialogs
|
var dialogs tg.MessagesDialogsBox
|
||||||
return &dialogs, t.client.Invoke(ctx,
|
err := t.client.Invoke(ctx,
|
||||||
&tg.InvokeWithTakeoutRequest{TakeoutID: takeoutID, Query: &req},
|
&tg.InvokeWithTakeoutRequest{TakeoutID: takeoutID, Query: &req},
|
||||||
&dialogs)
|
&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 {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to get dialogs: %w", err)
|
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{
|
return &bridgev2.FetchMessagesResponse{
|
||||||
Messages: backfillMessages,
|
Messages: backfillMessages,
|
||||||
Cursor: cursor,
|
Cursor: cursor,
|
||||||
HasMore: len(messages) == fetchParams.Count,
|
HasMore: len(backfillMessages) > 0,
|
||||||
Forward: fetchParams.Forward,
|
Forward: fetchParams.Forward,
|
||||||
MarkRead: markRead,
|
MarkRead: markRead,
|
||||||
}, nil
|
}, nil
|
||||||
|
|||||||
@@ -133,7 +133,11 @@ func (t *TelegramClient) handleDialogs(ctx context.Context, dialogs tg.ModifiedM
|
|||||||
chatInfo.Members.PowerLevels = t.getGroupChatPowerLevels(chats[peer.ChatID])
|
chatInfo.Members.PowerLevels = t.getGroupChatPowerLevels(chats[peer.ChatID])
|
||||||
chatInfo.Name = &chats[peer.ChatID].(*tg.Chat).Title
|
chatInfo.Name = &chats[peer.ChatID].(*tg.Chat).Title
|
||||||
case *tg.PeerChannel:
|
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.Name = &channel.Title
|
||||||
chatInfo.Members.PowerLevels = t.getGroupChatPowerLevels(channel)
|
chatInfo.Members.PowerLevels = t.getGroupChatPowerLevels(channel)
|
||||||
if !portal.Metadata.(*PortalMetadata).IsSuperGroup {
|
if !portal.Metadata.(*PortalMetadata).IsSuperGroup {
|
||||||
|
|||||||
Reference in New Issue
Block a user