matrix: add support for changing disappearing message timer
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
+15
-14
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user