From 52fab81e55d6dde47f65d937a805b331d49dd22e Mon Sep 17 00:00:00 2001 From: Sumner Evans Date: Tue, 1 Oct 2024 15:47:00 -0600 Subject: [PATCH] mute: sync from Telegram -> Matrix Signed-off-by: Sumner Evans --- pkg/connector/client.go | 3 +++ pkg/connector/sync.go | 10 ++++++++++ pkg/connector/telegram.go | 25 +++++++++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/pkg/connector/client.go b/pkg/connector/client.go index 956dded5..b33a48f6 100644 --- a/pkg/connector/client.go +++ b/pkg/connector/client.go @@ -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) diff --git a/pkg/connector/sync.go b/pkg/connector/sync.go index f4506acd..7b14face 100644 --- a/pkg/connector/sync.go +++ b/pkg/connector/sync.go @@ -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 { diff --git a/pkg/connector/telegram.go b/pkg/connector/telegram.go index 8c7816be..65a9ab42 100644 --- a/pkg/connector/telegram.go +++ b/pkg/connector/telegram.go @@ -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 +}