handlematrix: implement group chat deletes (#126)

This commit is contained in:
Conan
2025-11-20 01:22:02 +08:00
committed by GitHub
parent ca46d36998
commit b3f9bfb5b3
4 changed files with 73 additions and 20 deletions
+44 -13
View File
@@ -805,22 +805,53 @@ func (t *TelegramClient) HandleMatrixDeleteChat(ctx context.Context, chat *bridg
if err != nil {
return err
}
if chat.Portal.RoomType == database.RoomTypeDM {
if chat.Content.DeleteForEveryone {
_, err := t.client.API().MessagesDeleteHistory(ctx, &tg.MessagesDeleteHistoryRequest{
Peer: &tg.InputPeerUser{UserID: id},
Revoke: true,
MaxID: 0,
})
if err != nil {
return err
}
}
_, err = t.client.API().MessagesDeleteChat(ctx, id)
switch peerType {
case ids.PeerTypeUser:
accessHash, err := t.ScopedStore.GetAccessHash(ctx, peerType, id)
if err != nil {
return err
}
} else {
_, err = t.client.API().MessagesDeleteHistory(ctx, &tg.MessagesDeleteHistoryRequest{
Peer: &tg.InputPeerUser{UserID: id, AccessHash: accessHash},
JustClear: !chat.Content.DeleteForEveryone,
Revoke: chat.Content.DeleteForEveryone,
MaxID: 0,
})
if err != nil {
return err
}
case ids.PeerTypeChat:
if chat.Content.DeleteForEveryone {
result, err := t.client.API().MessagesDeleteChat(ctx, id)
if err != nil {
return err
}
if !result {
return fmt.Errorf("failed to delete chat %d", id)
}
return nil
} else {
return fmt.Errorf("deleting chat only supported for group creators")
}
case ids.PeerTypeChannel:
accessHash, err := t.ScopedStore.GetAccessHash(ctx, peerType, id)
if err != nil {
return err
}
channel := &tg.InputChannel{
ChannelID: id,
AccessHash: accessHash,
}
if chat.Content.DeleteForEveryone {
_, err := t.client.API().ChannelsDeleteChannel(ctx, channel)
if err != nil {
return err
}
return nil
} else {
return fmt.Errorf("deleting chat only supported for channel creators")
}
default:
return fmt.Errorf("deleting chat not supported for peer type %s", peerType)
}
return nil