client: handle message deletions TG <-> Matrix
Signed-off-by: Sumner Evans <sumner.evans@automattic.com>
This commit is contained in:
@@ -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 (
|
||||
|
||||
@@ -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
@@ -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))
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user