fix: use room_messages API for /messages endpoint (nio rooms have no timeline attr)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
25
bot.py
25
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)
|
||||
|
||||
Reference in New Issue
Block a user