matrix: add support for changing disappearing message timer

This commit is contained in:
Tulir Asokan
2025-08-26 18:17:50 +03:00
parent 8341492c9f
commit 4f12f5103a
3 changed files with 72 additions and 16 deletions
+36 -2
View File
@@ -20,7 +20,9 @@ import (
"context" "context"
"crypto/sha256" "crypto/sha256"
"encoding/hex" "encoding/hex"
"time"
"go.mau.fi/util/jsontime"
"go.mau.fi/util/ptr" "go.mau.fi/util/ptr"
"go.mau.fi/util/variationselector" "go.mau.fi/util/variationselector"
"maunium.net/go/mautrix/bridgev2" "maunium.net/go/mautrix/bridgev2"
@@ -34,7 +36,7 @@ func (tg *TelegramConnector) GetCapabilities() *bridgev2.NetworkGeneralCapabilit
} }
func (tg *TelegramConnector) GetBridgeInfoVersion() (info, capabilities int) { func (tg *TelegramConnector) GetBridgeInfoVersion() (info, capabilities int) {
return 1, 2 return 1, 3
} }
// TODO get these from getConfig instead of hardcoding? // TODO get these from getConfig instead of hardcoding?
@@ -156,8 +158,35 @@ func hashEmojiList(emojis []string) string {
return hex.EncodeToString(hasher.Sum(nil))[:8] 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 { 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{ feat := &event.RoomFeatures{
Formatting: formattingCaps, Formatting: formattingCaps,
File: fileCaps, File: fileCaps,
@@ -170,6 +199,11 @@ func (t *TelegramClient) GetCapabilities(ctx context.Context, portal *bridgev2.P
ReactionCount: 1, ReactionCount: 1,
ReadReceipts: true, ReadReceipts: true,
TypingNotifications: true, TypingNotifications: true,
DisappearingTimer: &event.DisappearingTimerCapability{
Types: []event.DisappearingType{event.DisappearingTypeAfterRead},
Timers: telegramTimers,
},
} }
// TODO non-admins can only edit messages within 48 hours // TODO non-admins can only edit messages within 48 hours
+15 -14
View File
@@ -110,20 +110,21 @@ type TelegramClient struct {
} }
var ( var (
_ bridgev2.NetworkAPI = (*TelegramClient)(nil) _ bridgev2.NetworkAPI = (*TelegramClient)(nil)
_ bridgev2.EditHandlingNetworkAPI = (*TelegramClient)(nil) _ bridgev2.EditHandlingNetworkAPI = (*TelegramClient)(nil)
_ bridgev2.ReactionHandlingNetworkAPI = (*TelegramClient)(nil) _ bridgev2.ReactionHandlingNetworkAPI = (*TelegramClient)(nil)
_ bridgev2.RedactionHandlingNetworkAPI = (*TelegramClient)(nil) _ bridgev2.RedactionHandlingNetworkAPI = (*TelegramClient)(nil)
_ bridgev2.ReadReceiptHandlingNetworkAPI = (*TelegramClient)(nil) _ bridgev2.ReadReceiptHandlingNetworkAPI = (*TelegramClient)(nil)
_ bridgev2.TypingHandlingNetworkAPI = (*TelegramClient)(nil) _ bridgev2.TypingHandlingNetworkAPI = (*TelegramClient)(nil)
_ bridgev2.BackfillingNetworkAPI = (*TelegramClient)(nil) _ bridgev2.BackfillingNetworkAPI = (*TelegramClient)(nil)
_ bridgev2.BackfillingNetworkAPIWithLimits = (*TelegramClient)(nil) _ bridgev2.BackfillingNetworkAPIWithLimits = (*TelegramClient)(nil)
_ bridgev2.IdentifierResolvingNetworkAPI = (*TelegramClient)(nil) _ bridgev2.IdentifierResolvingNetworkAPI = (*TelegramClient)(nil)
_ bridgev2.ContactListingNetworkAPI = (*TelegramClient)(nil) _ bridgev2.ContactListingNetworkAPI = (*TelegramClient)(nil)
_ bridgev2.UserSearchingNetworkAPI = (*TelegramClient)(nil) _ bridgev2.UserSearchingNetworkAPI = (*TelegramClient)(nil)
_ bridgev2.GroupCreatingNetworkAPI = (*TelegramClient)(nil) _ bridgev2.GroupCreatingNetworkAPI = (*TelegramClient)(nil)
_ bridgev2.MuteHandlingNetworkAPI = (*TelegramClient)(nil) _ bridgev2.MuteHandlingNetworkAPI = (*TelegramClient)(nil)
_ bridgev2.TagHandlingNetworkAPI = (*TelegramClient)(nil) _ bridgev2.TagHandlingNetworkAPI = (*TelegramClient)(nil)
_ bridgev2.DisappearTimerChangingNetworkAPI = (*TelegramClient)(nil)
) )
type UpdateDispatcher struct { type UpdateDispatcher struct {
+21
View File
@@ -716,3 +716,24 @@ func (t *TelegramClient) HandleMatrixTyping(ctx context.Context, msg *bridgev2.M
}) })
return err 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
}