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
+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) {