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")
continue
}
fullChat, err := APICallWithUpdates(ctx, t, func() (*tg.MessagesChatFull, error) {
return t.client.API().MessagesGetFullChat(ctx, chat.GetID())
})
chatInfo, err = t.GetChatInfo(ctx, portal)
if err != nil {
return 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,
return fmt.Errorf("failed to get chat info for %s: %w", portalKey, err)
}
case *tg.PeerChannel:
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")
continue
}
fullChannel := channel.(*tg.Channel)
var avatar *bridgev2.Avatar
if photo, ok := fullChannel.GetPhoto().(*tg.ChatPhoto); ok {
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,
}
chatInfo, err = t.GetChatInfo(ctx, portal)
if err != nil {
return fmt.Errorf("failed to get chat info for %s: %w", portalKey, err)
}
}