client: handle message deletions TG <-> Matrix

Signed-off-by: Sumner Evans <sumner.evans@automattic.com>
This commit is contained in:
Sumner Evans
2024-06-25 15:21:08 -06:00
parent 55a9375938
commit 3d8b9d6291
5 changed files with 56 additions and 11 deletions
+2 -2
View File
@@ -6,10 +6,10 @@ require (
github.com/gotd/td v0.102.0
github.com/rs/zerolog v1.33.0
github.com/stretchr/testify v1.9.0
go.mau.fi/util v0.5.0
go.mau.fi/util v0.5.1-0.20240625085258-678695edd51c
go.mau.fi/zerozap v0.1.1
go.uber.org/zap v1.27.0
maunium.net/go/mautrix v0.19.0-beta.1.0.20240624171009-09a8a5104a6c
maunium.net/go/mautrix v0.19.0-beta.1.0.20240625211524-f246e7041420
)
require (
+4 -4
View File
@@ -67,8 +67,8 @@ github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
github.com/yuin/goldmark v1.7.2 h1:NjGd7lO7zrUn/A7eKwn5PEOt4ONYGqpxSEeZuduvgxc=
github.com/yuin/goldmark v1.7.2/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=
go.mau.fi/util v0.5.0 h1:8yELAl+1CDRrwGe9NUmREgVclSs26Z68pTWePHVxuDo=
go.mau.fi/util v0.5.0/go.mod h1:DsJzUrJAG53lCZnnYvq9/mOyLuPScWwYhvETiTrpdP4=
go.mau.fi/util v0.5.1-0.20240625085258-678695edd51c h1:LAXHOnupWCFvTyx4ZAu5t+6n7zADldeRHIk1s+2luow=
go.mau.fi/util v0.5.1-0.20240625085258-678695edd51c/go.mod h1:DsJzUrJAG53lCZnnYvq9/mOyLuPScWwYhvETiTrpdP4=
go.mau.fi/zeroconfig v0.1.2 h1:DKOydWnhPMn65GbXZOafgkPm11BvFashZWLct0dGFto=
go.mau.fi/zeroconfig v0.1.2/go.mod h1:NcSJkf180JT+1IId76PcMuLTNa1CzsFFZ0nBygIQM70=
go.mau.fi/zerozap v0.1.1 h1:mxE/dW4wtkqBYOXOEEzXldk5qKB+ahsZXjoTGnvEhZQ=
@@ -108,8 +108,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.0-beta.1.0.20240624171009-09a8a5104a6c h1:jm1n2dI2mVDnmrxFgRA1a3MfYdkwBYgKseVKgJHv/a4=
maunium.net/go/mautrix v0.19.0-beta.1.0.20240624171009-09a8a5104a6c/go.mod h1:cxv1w6+syudmEpOewHYIQT9yO7TM5UOWmf6xEBVI4H4=
maunium.net/go/mautrix v0.19.0-beta.1.0.20240625211524-f246e7041420 h1:aMBQFbp5DFtLI8F23ab2HWhaYGSDmcYhd4sEYcWbHeY=
maunium.net/go/mautrix v0.19.0-beta.1.0.20240625211524-f246e7041420/go.mod h1:pFbqAannSyJnohVycF4NW3IngBLWUt/f9KYfJcwyQec=
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=
+38 -4
View File
@@ -32,7 +32,18 @@ type TelegramClient struct {
msgConv *msgconv.MessageConverter
}
var _ bridgev2.NetworkAPI = (*TelegramClient)(nil)
var (
_ bridgev2.NetworkAPI = (*TelegramClient)(nil)
_ bridgev2.EditHandlingNetworkAPI = (*TelegramClient)(nil)
_ bridgev2.ReactionHandlingNetworkAPI = (*TelegramClient)(nil)
_ bridgev2.RedactionHandlingNetworkAPI = (*TelegramClient)(nil)
_ bridgev2.ReadReceiptHandlingNetworkAPI = (*TelegramClient)(nil)
_ bridgev2.ReadReceiptHandlingNetworkAPI = (*TelegramClient)(nil)
_ bridgev2.TypingHandlingNetworkAPI = (*TelegramClient)(nil)
// _ bridgev2.IdentifierResolvingNetworkAPI = (*TelegramClient)(nil)
// _ bridgev2.GroupCreatingNetworkAPI = (*TelegramClient)(nil)
// _ bridgev2.ContactListingNetworkAPI = (*TelegramClient)(nil)
)
type UpdateDispatcher struct {
tg.UpdateDispatcher
@@ -40,9 +51,7 @@ type UpdateDispatcher struct {
}
func (u UpdateDispatcher) Handle(ctx context.Context, updates tg.UpdatesClass) error {
var (
e tg.Entities
)
var e tg.Entities
switch u := updates.(type) {
case *tg.Updates:
e.Users = u.MapUsers().NotEmptyToMap()
@@ -87,6 +96,7 @@ func NewTelegramClient(ctx context.Context, tc *TelegramConnector, login *bridge
dispatcher.OnNewMessage(client.onUpdateNewMessage)
dispatcher.OnNewChannelMessage(client.onUpdateNewChannelMessage)
dispatcher.OnUserName(client.onUserName)
dispatcher.OnDeleteMessages(client.onDeleteMessages)
store := tc.store.GetScopedStore(loginID)
@@ -286,6 +296,30 @@ func (t *TelegramClient) onUserName(ctx context.Context, e tg.Entities, update *
return nil
}
func (t *TelegramClient) onDeleteMessages(ctx context.Context, e tg.Entities, update *tg.UpdateDeleteMessages) error {
for _, messageID := range update.Messages {
parts, err := t.main.Bridge.DB.Message.GetAllPartsByID(ctx, ids.MakeMessageID(messageID))
if err != nil {
return err
}
if len(parts) == 0 {
return fmt.Errorf("no parts found for message %d", messageID)
}
t.main.Bridge.QueueRemoteEvent(t.userLogin, &bridgev2.SimpleRemoteEvent[any]{
Type: bridgev2.RemoteEventMessageRemove,
LogContext: func(c zerolog.Context) zerolog.Context {
return c.
Str("action", "delete message").
Int("message_id", messageID)
},
PortalKey: parts[0].Room,
CreatePortal: false,
TargetMessage: ids.MakeMessageID(messageID),
})
}
return nil
}
func (t *TelegramClient) onEntityUpdate(ctx context.Context, e tg.Entities) error {
for userID, user := range e.Users {
ghost, err := t.main.Bridge.GetGhostByID(ctx, ids.MakeUserID(userID))
+4
View File
@@ -25,6 +25,10 @@ func MakeMessageID(messageID int) networkid.MessageID {
return networkid.MessageID(strconv.Itoa(messageID))
}
func ParseMessageID(messageID networkid.MessageID) (int, error) {
return strconv.Atoi(string(messageID))
}
type PeerType string
const (
+8 -1
View File
@@ -164,7 +164,14 @@ func (t *TelegramClient) HandleMatrixEdit(ctx context.Context, msg *bridgev2.Mat
}
func (t *TelegramClient) HandleMatrixMessageRemove(ctx context.Context, msg *bridgev2.MatrixMessageRemove) error {
panic("unimplemented remove")
if dbMsg, err := t.main.Bridge.DB.Message.GetPartByMXID(ctx, msg.TargetMessage.MXID); err != nil {
return err
} else if messageID, err := ids.ParseMessageID(dbMsg.ID); err != nil {
return err
} else {
_, err = message.NewSender(t.client.API()).Self().Revoke().Messages(ctx, messageID)
return err
}
}
func (t *TelegramClient) PreHandleMatrixReaction(ctx context.Context, msg *bridgev2.MatrixReaction) (bridgev2.MatrixReactionPreResponse, error) {