From e658f3d2acb360c5c93cc1c2e1c3c85c1fc9fca0 Mon Sep 17 00:00:00 2001 From: Christian Gick Date: Tue, 24 Mar 2026 16:51:12 +0200 Subject: [PATCH] fix: use room_messages API for /messages endpoint (nio rooms have no timeline attr) Co-Authored-By: Claude Opus 4.6 (1M context) --- bot.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/bot.py b/bot.py index bd83990..52d69b4 100644 --- a/bot.py +++ b/bot.py @@ -4118,18 +4118,21 @@ class Bot: room = self.client.rooms.get(room_id) if not room: return web.json_response({'error': 'room not found (bot not joined?)'}, status=404) + # Use room_messages API to fetch and decrypt + resp = await self.client.room_messages(room_id, room.prev_batch or '', limit=limit) messages = [] - for event in room.timeline[-limit:]: - msg = { - 'sender': event.sender, - 'timestamp': getattr(event, 'server_timestamp', 0), - 'type': type(event).__name__, - } - if hasattr(event, 'body'): - msg['body'] = event.body - elif hasattr(event, 'source'): - msg['body'] = event.source.get('content', {}).get('body', '[encrypted/unknown]') - messages.append(msg) + if hasattr(resp, 'chunk'): + for event in reversed(resp.chunk): + msg = { + 'sender': event.sender, + 'timestamp': getattr(event, 'server_timestamp', 0), + 'type': type(event).__name__, + } + if hasattr(event, 'body'): + msg['body'] = event.body + elif hasattr(event, 'source'): + msg['body'] = event.source.get('content', {}).get('body', '[encrypted/unknown]') + messages.append(msg) return web.json_response({'messages': messages}) except Exception as e: logger.error("Messages error: %s", e)