diff --git a/pkg/connector/capabilities.go b/pkg/connector/capabilities.go index fb0817e6..fd0ed654 100644 --- a/pkg/connector/capabilities.go +++ b/pkg/connector/capabilities.go @@ -20,7 +20,9 @@ import ( "context" "crypto/sha256" "encoding/hex" + "time" + "go.mau.fi/util/jsontime" "go.mau.fi/util/ptr" "go.mau.fi/util/variationselector" "maunium.net/go/mautrix/bridgev2" @@ -34,7 +36,7 @@ func (tg *TelegramConnector) GetCapabilities() *bridgev2.NetworkGeneralCapabilit } func (tg *TelegramConnector) GetBridgeInfoVersion() (info, capabilities int) { - return 1, 2 + return 1, 3 } // TODO get these from getConfig instead of hardcoding? @@ -156,8 +158,35 @@ func hashEmojiList(emojis []string) string { return hex.EncodeToString(hasher.Sum(nil))[:8] } +func makeTimerList() []jsontime.Milliseconds { + const day = 24 * time.Hour + const week = 7 * day + const month = 30 * day + const year = 365 * day + return []jsontime.Milliseconds{ + jsontime.MS(1 * day), + jsontime.MS(2 * day), + jsontime.MS(3 * day), + jsontime.MS(4 * day), + jsontime.MS(5 * day), + jsontime.MS(6 * day), + jsontime.MS(1 * week), + jsontime.MS(2 * week), + jsontime.MS(3 * week), + jsontime.MS(1 * month), + jsontime.MS(2 * month), + jsontime.MS(3 * month), + jsontime.MS(4 * month), + jsontime.MS(5 * month), + jsontime.MS(6 * month), + jsontime.MS(1 * year), + } +} + +var telegramTimers = makeTimerList() + func (t *TelegramClient) GetCapabilities(ctx context.Context, portal *bridgev2.Portal) *event.RoomFeatures { - baseID := "fi.mau.telegram.capabilities.2025_02_04" + baseID := "fi.mau.telegram.capabilities.2025_08_26" feat := &event.RoomFeatures{ Formatting: formattingCaps, File: fileCaps, @@ -170,6 +199,11 @@ func (t *TelegramClient) GetCapabilities(ctx context.Context, portal *bridgev2.P ReactionCount: 1, ReadReceipts: true, TypingNotifications: true, + + DisappearingTimer: &event.DisappearingTimerCapability{ + Types: []event.DisappearingType{event.DisappearingTypeAfterRead}, + Timers: telegramTimers, + }, } // TODO non-admins can only edit messages within 48 hours diff --git a/pkg/connector/client.go b/pkg/connector/client.go index 1e4192df..9f85d1be 100644 --- a/pkg/connector/client.go +++ b/pkg/connector/client.go @@ -110,20 +110,21 @@ type TelegramClient struct { } var ( - _ bridgev2.NetworkAPI = (*TelegramClient)(nil) - _ bridgev2.EditHandlingNetworkAPI = (*TelegramClient)(nil) - _ bridgev2.ReactionHandlingNetworkAPI = (*TelegramClient)(nil) - _ bridgev2.RedactionHandlingNetworkAPI = (*TelegramClient)(nil) - _ bridgev2.ReadReceiptHandlingNetworkAPI = (*TelegramClient)(nil) - _ bridgev2.TypingHandlingNetworkAPI = (*TelegramClient)(nil) - _ bridgev2.BackfillingNetworkAPI = (*TelegramClient)(nil) - _ bridgev2.BackfillingNetworkAPIWithLimits = (*TelegramClient)(nil) - _ bridgev2.IdentifierResolvingNetworkAPI = (*TelegramClient)(nil) - _ bridgev2.ContactListingNetworkAPI = (*TelegramClient)(nil) - _ bridgev2.UserSearchingNetworkAPI = (*TelegramClient)(nil) - _ bridgev2.GroupCreatingNetworkAPI = (*TelegramClient)(nil) - _ bridgev2.MuteHandlingNetworkAPI = (*TelegramClient)(nil) - _ bridgev2.TagHandlingNetworkAPI = (*TelegramClient)(nil) + _ bridgev2.NetworkAPI = (*TelegramClient)(nil) + _ bridgev2.EditHandlingNetworkAPI = (*TelegramClient)(nil) + _ bridgev2.ReactionHandlingNetworkAPI = (*TelegramClient)(nil) + _ bridgev2.RedactionHandlingNetworkAPI = (*TelegramClient)(nil) + _ bridgev2.ReadReceiptHandlingNetworkAPI = (*TelegramClient)(nil) + _ bridgev2.TypingHandlingNetworkAPI = (*TelegramClient)(nil) + _ bridgev2.BackfillingNetworkAPI = (*TelegramClient)(nil) + _ bridgev2.BackfillingNetworkAPIWithLimits = (*TelegramClient)(nil) + _ bridgev2.IdentifierResolvingNetworkAPI = (*TelegramClient)(nil) + _ bridgev2.ContactListingNetworkAPI = (*TelegramClient)(nil) + _ bridgev2.UserSearchingNetworkAPI = (*TelegramClient)(nil) + _ bridgev2.GroupCreatingNetworkAPI = (*TelegramClient)(nil) + _ bridgev2.MuteHandlingNetworkAPI = (*TelegramClient)(nil) + _ bridgev2.TagHandlingNetworkAPI = (*TelegramClient)(nil) + _ bridgev2.DisappearTimerChangingNetworkAPI = (*TelegramClient)(nil) ) type UpdateDispatcher struct { diff --git a/pkg/connector/matrix.go b/pkg/connector/matrix.go index 52426646..0c9372cb 100644 --- a/pkg/connector/matrix.go +++ b/pkg/connector/matrix.go @@ -716,3 +716,24 @@ func (t *TelegramClient) HandleMatrixTyping(ctx context.Context, msg *bridgev2.M }) return err } + +func (t *TelegramClient) HandleMatrixDisappearingTimer(ctx context.Context, msg *bridgev2.MatrixDisappearingTimer) (bool, error) { + inputPeer, err := t.inputPeerForPortalID(ctx, msg.Portal.ID) + if err != nil { + return false, err + } + _, err = t.client.API().MessagesSetHistoryTTL(ctx, &tg.MessagesSetHistoryTTLRequest{ + Peer: inputPeer, + Period: int(msg.Content.Timer.Seconds()), + }) + if err == nil { + msg.Portal.Disappear = database.DisappearingSetting{ + Type: event.DisappearingTypeAfterRead, + Timer: msg.Content.Timer.Duration, + } + if msg.Portal.Disappear.Timer == 0 { + msg.Portal.Disappear.Type = event.DisappearingTypeNone + } + } + return err == nil, err +}