mute: sync from Telegram -> Matrix

Signed-off-by: Sumner Evans <sumner.evans@automattic.com>
This commit is contained in:
Sumner Evans
2024-10-01 15:47:00 -06:00
parent 6f4e32fad0
commit 52fab81e55
3 changed files with 38 additions and 0 deletions
+3
View File
@@ -178,6 +178,9 @@ func NewTelegramClient(ctx context.Context, tc *TelegramConnector, login *bridge
dispatcher.OnReadChannelInbox(func(ctx context.Context, e tg.Entities, update *tg.UpdateReadChannelInbox) error {
return client.onOwnReadReceipt(client.makePortalKeyFromID(ids.PeerTypeChannel, update.ChannelID), update.MaxID)
})
dispatcher.OnNotifySettings(func(ctx context.Context, e tg.Entities, update *tg.UpdateNotifySettings) error {
return client.onNotifySettings(ctx, update)
})
client.ScopedStore = tc.Store.GetScopedStore(telegramUserID)
+10
View File
@@ -4,9 +4,11 @@ import (
"context"
"fmt"
"math"
"time"
"github.com/gotd/td/tg"
"github.com/rs/zerolog"
"go.mau.fi/util/ptr"
"maunium.net/go/mautrix/bridgev2"
"maunium.net/go/mautrix/bridgev2/database"
"maunium.net/go/mautrix/bridgev2/networkid"
@@ -98,7 +100,15 @@ func (t *TelegramClient) handleDialogs(ctx context.Context, dialogs tg.ModifiedM
}
}
var userLocalInfo bridgev2.UserLocalPortalInfo
if mu, ok := dialog.NotifySettings.GetMuteUntil(); ok {
userLocalInfo.MutedUntil = ptr.Ptr(time.Unix(int64(mu), 0))
} else {
userLocalInfo.MutedUntil = &bridgev2.Unmuted
}
t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatResync{
ChatInfo: &bridgev2.ChatInfo{Name: &portal.Name, UserLocal: &userLocalInfo},
EventMeta: simplevent.EventMeta{
Type: bridgev2.RemoteEventChatResync,
LogContext: func(c zerolog.Context) zerolog.Context {
+25
View File
@@ -11,6 +11,7 @@ import (
"github.com/gotd/td/tg"
"github.com/gotd/td/tgerr"
"github.com/rs/zerolog"
"go.mau.fi/util/ptr"
"maunium.net/go/mautrix/bridge/status"
"maunium.net/go/mautrix/bridgev2"
"maunium.net/go/mautrix/bridgev2/database"
@@ -717,3 +718,27 @@ func (t *TelegramClient) transferEmojisToMatrix(ctx context.Context, customEmoji
}
return
}
func (t *TelegramClient) onNotifySettings(ctx context.Context, update *tg.UpdateNotifySettings) error {
if update.Peer.TypeID() != tg.NotifyPeerTypeID {
return fmt.Errorf("unsupported peer type %s", update.Peer.TypeName())
}
var mutedUntil *time.Time
if mu, ok := update.NotifySettings.GetMuteUntil(); ok {
mutedUntil = ptr.Ptr(time.Unix(int64(mu), 0))
} else {
mutedUntil = &bridgev2.Unmuted
}
t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatResync{
ChatInfo: &bridgev2.ChatInfo{UserLocal: &bridgev2.UserLocalPortalInfo{
MutedUntil: mutedUntil,
}},
EventMeta: simplevent.EventMeta{
Type: bridgev2.RemoteEventChatResync,
PortalKey: t.makePortalKeyFromPeer(update.Peer.(*tg.NotifyPeer).Peer),
},
})
return nil
}