From be06db71d78f83b1ad6813374a3f9e57cd296039 Mon Sep 17 00:00:00 2001 From: alt-glitch Date: Sat, 11 Apr 2026 07:44:55 +0530 Subject: [PATCH] fix(matrix): ignore m.notice messages to prevent bot-to-bot loops The old nio code only handled RoomMessageText (m.text). The mautrix rewrite dispatched both m.text and m.notice, which would cause infinite loops between bots since m.notice is the conventional msgtype for bot responses in the Matrix ecosystem. --- gateway/platforms/matrix.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/gateway/platforms/matrix.py b/gateway/platforms/matrix.py index 7e0569abf..4a1cd2e9e 100644 --- a/gateway/platforms/matrix.py +++ b/gateway/platforms/matrix.py @@ -909,11 +909,16 @@ class MatrixAdapter(BasePlatformAdapter): if relates_to.get("rel_type") == "m.replace": return + # Ignore m.notice to prevent bot-to-bot loops (m.notice is the + # conventional msgtype for bot responses in the Matrix ecosystem). + if msgtype == "m.notice": + return + # Dispatch by msgtype. media_msgtypes = ("m.image", "m.audio", "m.video", "m.file") if msgtype in media_msgtypes: await self._handle_media_message(room_id, sender, event_id, event_ts, source_content, relates_to, msgtype) - elif msgtype in ("m.text", "m.notice"): + elif msgtype == "m.text": await self._handle_text_message(room_id, sender, event_id, event_ts, source_content, relates_to) async def _resolve_message_context(