sync: use GetChatInfo for handleDialogs (#120)

This commit is contained in:
Conan
2025-09-06 00:24:02 +08:00
committed by GitHub
parent 7a726e36a0
commit 170b263a6c
+5 -60
View File
@@ -149,34 +149,9 @@ func (t *TelegramClient) handleDialogs(ctx context.Context, dialogs tg.ModifiedM
Msg("Not syncing portal because chat type is unsupported") Msg("Not syncing portal because chat type is unsupported")
continue continue
} }
fullChat, err := APICallWithUpdates(ctx, t, func() (*tg.MessagesChatFull, error) { chatInfo, err = t.GetChatInfo(ctx, portal)
return t.client.API().MessagesGetFullChat(ctx, chat.GetID())
})
if err != nil { if err != nil {
return err return fmt.Errorf("failed to get chat info for %s: %w", portalKey, err)
}
chatFull, ok := fullChat.FullChat.(*tg.ChatFull)
var avatar *bridgev2.Avatar
if ok && chatFull.ChatPhoto != nil {
avatar, err = t.convertPhoto(ctx, ids.PeerTypeChat, chatFull.ID, chatFull.ChatPhoto)
if err != nil {
return err
}
}
chatInfo = &bridgev2.ChatInfo{
CanBackfill: true,
Name: &chat.(*tg.Chat).Title,
Members: &bridgev2.ChatMemberList{
PowerLevels: t.getGroupChatPowerLevels(ctx, chat),
MemberMap: map[networkid.UserID]bridgev2.ChatMember{
t.userID: {
EventSender: t.mySender(),
Membership: event.MembershipJoin,
},
},
},
Avatar: avatar,
} }
case *tg.PeerChannel: case *tg.PeerChannel:
channel := chats[peer.ChannelID] channel := chats[peer.ChannelID]
@@ -192,39 +167,9 @@ func (t *TelegramClient) handleDialogs(ctx context.Context, dialogs tg.ModifiedM
Msg("Not syncing portal because channel type is unsupported") Msg("Not syncing portal because channel type is unsupported")
continue continue
} }
fullChannel := channel.(*tg.Channel) chatInfo, err = t.GetChatInfo(ctx, portal)
var avatar *bridgev2.Avatar if err != nil {
if photo, ok := fullChannel.GetPhoto().(*tg.ChatPhoto); ok { return fmt.Errorf("failed to get chat info for %s: %w", portalKey, err)
avatar, err = t.convertChatPhoto(ctx, fullChannel.ID, fullChannel.AccessHash, photo)
if err != nil {
return err
}
}
chatInfo = &bridgev2.ChatInfo{
CanBackfill: true,
Name: &channel.(*tg.Channel).Title,
Members: &bridgev2.ChatMemberList{
PowerLevels: t.getGroupChatPowerLevels(ctx, channel),
MemberMap: map[networkid.UserID]bridgev2.ChatMember{
t.userID: {
EventSender: t.mySender(),
Membership: event.MembershipJoin,
},
},
},
Avatar: avatar,
ExtraUpdates: func(ctx context.Context, p *bridgev2.Portal) bool {
return p.Metadata.(*PortalMetadata).SetIsSuperGroup(channel.(*tg.Channel).GetMegagroup())
},
}
if !portal.Metadata.(*PortalMetadata).IsSuperGroup {
// Add the channel user
sender := ids.MakeChannelUserID(peer.ChannelID)
chatInfo.Members.MemberMap[sender] = bridgev2.ChatMember{
EventSender: bridgev2.EventSender{Sender: sender},
Membership: event.MembershipJoin,
PowerLevel: superadminPowerLevel,
}
} }
} }