From 69f2eaf2e4fe218eef0a681df93b58804ab4791b Mon Sep 17 00:00:00 2001 From: Till-JS <101404291+Till-JS@users.noreply.github.com> Date: Sat, 14 Feb 2026 14:30:49 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(matrix-bot-common):=20ignore?= =?UTF-8?q?=20edit=20events=20to=20prevent=20bot=20duplicate=20responses?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a bot edits its message (like timer updates), other bots were responding to each edit as if it were a new message. This fix adds isEditEvent() check to ignore m.replace events. --- .../matrix-bot-common/src/base/base-matrix.service.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/matrix-bot-common/src/base/base-matrix.service.ts b/packages/matrix-bot-common/src/base/base-matrix.service.ts index 40e12806a..77a3bb3e4 100644 --- a/packages/matrix-bot-common/src/base/base-matrix.service.ts +++ b/packages/matrix-bot-common/src/base/base-matrix.service.ts @@ -170,6 +170,13 @@ export abstract class BaseMatrixService implements OnModuleInit, OnModuleDestroy return localpart.includes('-bot') || localpart.endsWith('bot'); } + /** + * Check if event is an edit (message replacement) + */ + protected isEditEvent(event: MatrixRoomEvent): boolean { + return event.content?.['m.relates_to']?.rel_type === 'm.replace'; + } + /** * Handle incoming room message */ @@ -180,6 +187,9 @@ export abstract class BaseMatrixService implements OnModuleInit, OnModuleDestroy // Ignore messages from other bots to prevent infinite loops if (this.isBot(event.sender)) return; + // Ignore edit events (message replacements) to prevent duplicate responses + if (this.isEditEvent(event)) return; + // Check room permissions if (this.allowedRooms.length > 0 && !this.allowedRooms.includes(roomId)) { return;