From ca4d566490c3c3d877cdbd1071de5f04e0e67814 Mon Sep 17 00:00:00 2001 From: Sumner Evans Date: Tue, 6 Aug 2024 12:35:38 -0600 Subject: [PATCH] chat metadata: bridge title/avatar edits TG -> Matrix Signed-off-by: Sumner Evans --- ROADMAP.md | 4 +-- go.mod | 2 +- go.sum | 4 +-- pkg/connector/telegram.go | 55 +++++++++++++++++++++++++++++++-------- 4 files changed, 49 insertions(+), 16 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 11ba93b3..f3dcbd72 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -44,8 +44,8 @@ * [ ] Supergroup/channel permissions (precise per-user permissions not supported in Matrix) * [ ] Membership actions (invite/kick/join/leave) * [ ] Chat metadata changes - * [ ] Title - * [ ] Avatar + * [x] Title + * [x] Avatar * [ ] † About text * [ ] † Public channel username * [x] Initial chat metadata (about text missing) diff --git a/go.mod b/go.mod index b0918308..ad3f55ab 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( go.uber.org/zap v1.27.0 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 golang.org/x/net v0.27.0 - maunium.net/go/mautrix v0.19.1-0.20240806155836-f6b0feab9566 + maunium.net/go/mautrix v0.19.1-0.20240806185340-213f9df4a467 ) require ( diff --git a/go.sum b/go.sum index ee2d430f..887477b3 100644 --- a/go.sum +++ b/go.sum @@ -112,8 +112,8 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= maunium.net/go/mauflag v1.0.0 h1:YiaRc0tEI3toYtJMRIfjP+jklH45uDHtT80nUamyD4M= maunium.net/go/mauflag v1.0.0/go.mod h1:nLivPOpTpHnpzEh8jEdSL9UqO9+/KBJFmNRlwKfkPeA= -maunium.net/go/mautrix v0.19.1-0.20240806155836-f6b0feab9566 h1:3cp7ffpnUyViQDaXoPvw0Pq+0ax4toN4J4OLPLJs59Q= -maunium.net/go/mautrix v0.19.1-0.20240806155836-f6b0feab9566/go.mod h1:ZWyxoQxRTBxzWIMs0kQCVogZIY0clTu33h102veCT/Q= +maunium.net/go/mautrix v0.19.1-0.20240806185340-213f9df4a467 h1:QptF4mA070qVG2isInl2HjtPOZ1TTqf0zM38uHPeWM8= +maunium.net/go/mautrix v0.19.1-0.20240806185340-213f9df4a467/go.mod h1:ZWyxoQxRTBxzWIMs0kQCVogZIY0clTu33h102veCT/Q= nhooyr.io/websocket v1.8.11 h1:f/qXNc2/3DpoSZkHt1DQu6rj4zGC8JmkkLkWss0MgN0= nhooyr.io/websocket v1.8.11/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= rsc.io/qr v0.2.0 h1:6vBLea5/NRMVTz8V66gipeLycZMl/+UlFmk8DvqQ6WY= diff --git a/pkg/connector/telegram.go b/pkg/connector/telegram.go index 92ae16a0..4a6e1e74 100644 --- a/pkg/connector/telegram.go +++ b/pkg/connector/telegram.go @@ -62,15 +62,48 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, update IGetMess ConvertMessageFunc: t.convertToMatrix, }) case *tg.MessageService: - // fmt.Printf("message service\n") - // fmt.Printf("%v\n", msg) - - // sender := t.getEventSender(msg) - // switch action := msg.Action.(type) { - // case *tg.MessageActionChatEditTitle: + sender := t.getEventSender(msg) + portalKey := ids.MakePortalKey(msg.PeerID) + switch action := msg.Action.(type) { + case *tg.MessageActionChatEditTitle: + t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatInfoChange{ + EventMeta: simplevent.EventMeta{ + Type: bridgev2.RemoteEventChatInfoChange, + PortalKey: portalKey, + Sender: sender, + Timestamp: time.Unix(int64(msg.Date), 0), + }, + ChatInfoChange: &bridgev2.ChatInfoChange{ + ChatInfo: &bridgev2.ChatInfo{Name: &action.Title}, + }, + }) + case *tg.MessageActionChatEditPhoto: + t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatInfoChange{ + EventMeta: simplevent.EventMeta{ + Type: bridgev2.RemoteEventChatInfoChange, + PortalKey: portalKey, + Sender: sender, + Timestamp: time.Unix(int64(msg.Date), 0), + }, + ChatInfoChange: &bridgev2.ChatInfoChange{ + ChatInfo: &bridgev2.ChatInfo{ + Avatar: t.avatarFromPhoto(action.Photo), + }, + }, + }) + case *tg.MessageActionChatDeletePhoto: + t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatInfoChange{ + EventMeta: simplevent.EventMeta{ + Type: bridgev2.RemoteEventChatInfoChange, + PortalKey: portalKey, + Sender: sender, + Timestamp: time.Unix(int64(msg.Date), 0), + }, + ChatInfoChange: &bridgev2.ChatInfoChange{ + ChatInfo: &bridgev2.ChatInfo{Avatar: &bridgev2.Avatar{Remove: true}}, + }, + }) // case *tg.MessageActionChatCreate: - // case *tg.MessageActionChatEditPhoto: - // case *tg.MessageActionChatDeletePhoto: // case *tg.MessageActionChatAddUser: // case *tg.MessageActionChatDeleteUser: // case *tg.MessageActionChatJoinedByLink: @@ -109,9 +142,9 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, update IGetMess // case *tg.MessageActionGiveawayResults: // case *tg.MessageActionBoostApply: // case *tg.MessageActionRequestedPeerSentMe: - // default: - // return fmt.Errorf("unknown action type %T", action) - // } + default: + return fmt.Errorf("unknown action type %T", action) + } default: return fmt.Errorf("unknown message type %T", msg)