From b1f3c4c1db36c5d317e9728a18ad31e5cdfc7c7d Mon Sep 17 00:00:00 2001 From: Conan Date: Tue, 7 Oct 2025 21:26:10 +0800 Subject: [PATCH] handlematrix: Implement DeleteChatHandlingNetworkAPI (#122) --- pkg/connector/capabilities.go | 10 ++++++++-- pkg/connector/client.go | 27 +++++++++++++++++++++++++++ pkg/connector/handlematrix.go | 1 + 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/pkg/connector/capabilities.go b/pkg/connector/capabilities.go index 7a2a7c58..e8c9a2d5 100644 --- a/pkg/connector/capabilities.go +++ b/pkg/connector/capabilities.go @@ -26,6 +26,7 @@ import ( "go.mau.fi/util/ptr" "go.mau.fi/util/variationselector" "maunium.net/go/mautrix/bridgev2" + "maunium.net/go/mautrix/bridgev2/database" "maunium.net/go/mautrix/event" ) @@ -57,7 +58,7 @@ func (tg *TelegramConnector) GetCapabilities() *bridgev2.NetworkGeneralCapabilit } func (tg *TelegramConnector) GetBridgeInfoVersion() (info, capabilities int) { - return 1, 5 + return 1, 6 } // TODO get these from getConfig instead of hardcoding? @@ -207,7 +208,7 @@ func makeTimerList() []jsontime.Milliseconds { var telegramTimers = makeTimerList() func (t *TelegramClient) GetCapabilities(ctx context.Context, portal *bridgev2.Portal) *event.RoomFeatures { - baseID := "fi.mau.telegram.capabilities.2025_09_16" + baseID := "fi.mau.telegram.capabilities.2025_09_27" feat := &event.RoomFeatures{ Formatting: formattingCaps, File: fileCaps, @@ -250,6 +251,11 @@ func (t *TelegramClient) GetCapabilities(ctx context.Context, portal *bridgev2.P feat.File = premiumFileCaps feat.ReactionCount = 3 } + if portal.RoomType == database.RoomTypeDM { + baseID += "+dm" + feat.DeleteChat = true + feat.DeleteChatForEveryone = true + } feat.ID = baseID return feat } diff --git a/pkg/connector/client.go b/pkg/connector/client.go index 3ad406af..f7b8030f 100644 --- a/pkg/connector/client.go +++ b/pkg/connector/client.go @@ -741,3 +741,30 @@ func (t *TelegramClient) senderForUserID(userID int64) bridgev2.EventSender { Sender: ids.MakeUserID(userID), } } + +func (t *TelegramClient) HandleMatrixDeleteChat(ctx context.Context, chat *bridgev2.MatrixDeleteChat) error { + peerType, id, err := ids.ParsePortalID(chat.Portal.ID) + if err != nil { + return err + } + switch peerType { + case ids.PeerTypeUser: + 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) + if err != nil { + return err + } + default: + return fmt.Errorf("deleting chat not supported for peer type %s", peerType) + } + return nil +} diff --git a/pkg/connector/handlematrix.go b/pkg/connector/handlematrix.go index ec75f663..d87e3a36 100644 --- a/pkg/connector/handlematrix.go +++ b/pkg/connector/handlematrix.go @@ -67,6 +67,7 @@ var ( _ bridgev2.MuteHandlingNetworkAPI = (*TelegramClient)(nil) _ bridgev2.TagHandlingNetworkAPI = (*TelegramClient)(nil) _ bridgev2.ChatViewingNetworkAPI = (*TelegramClient)(nil) + _ bridgev2.DeleteChatHandlingNetworkAPI = (*TelegramClient)(nil) ) func getMediaFilename(content *event.MessageEventContent) (filename string) {