From bd6d40cad0f07d704c2feeeac593dbe9d5ad599b Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Mon, 30 Mar 2026 17:58:35 +0300 Subject: [PATCH] handlematrix: also read edit responses properly --- pkg/connector/handlematrix.go | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/pkg/connector/handlematrix.go b/pkg/connector/handlematrix.go index 751f2435..97c2bd18 100644 --- a/pkg/connector/handlematrix.go +++ b/pkg/connector/handlematrix.go @@ -403,6 +403,7 @@ func (t *TelegramClient) HandleMatrixMessage(ctx context.Context, msg *bridgev2. tgMessageID = sentMessage.ID tgDate = sentMessage.Date hasher.Write([]byte(msg.Content.Body)) + hasher.Write(mediaHashID(ctx, sentMessage.Media)) case *tg.Updates: var realSentMessage *tg.Message for _, u := range sentMessage.Updates { @@ -533,15 +534,37 @@ func (t *TelegramClient) HandleMatrixEdit(ctx context.Context, msg *bridgev2.Mat switch sentMessage := updates.(type) { case *tg.UpdateShortSentMessage: hasher.Write([]byte(msg.Content.Body)) + hasher.Write(mediaHashID(ctx, sentMessage.Media)) case *tg.Updates: + var realSentMessage *tg.Message for _, u := range sentMessage.Updates { switch update := u.(type) { case *tg.UpdateNewMessage: - msg := update.Message.(*tg.Message) - hasher.Write([]byte(msg.Message)) - hasher.Write(mediaHashID(ctx, msg.Media)) + if realSentMessage != nil { + log.Warn(). + Int("prev_id", realSentMessage.ID). + Int("new_id", update.Message.GetID()). + Msg("Multiple messages in edit response") + } + realSentMessage = update.Message.(*tg.Message) + case *tg.UpdateNewChannelMessage: + if realSentMessage != nil { + log.Warn(). + Int("prev_id", realSentMessage.ID). + Int("new_id", update.Message.GetID()). + Msg("Multiple messages in edit response") + } + realSentMessage = update.Message.(*tg.Message) + default: + log.Warn().Type("update_type", update).Msg("Unexpected update type in edit message response") } } + if realSentMessage != nil { + hasher.Write([]byte(realSentMessage.Message)) + hasher.Write(mediaHashID(ctx, realSentMessage.Media)) + } else { + hasher.Write([]byte(msg.Content.Body)) + } default: return fmt.Errorf("unknown update from message response %T", updates) }