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