|
|
@@ -0,0 +1,25 @@
|
|
|
+---
|
|
|
+# chattolib-uuqm
|
|
|
+title: 'Fix Bot._on_timeline_upsert: RoomTimelineRoomEvent has room_id not room'
|
|
|
+status: in-progress
|
|
|
+type: bug
|
|
|
+created_at: 2026-08-31T13:12:27Z
|
|
|
+updated_at: 2026-08-31T13:12:27Z
|
|
|
+---
|
|
|
+
|
|
|
+The _on_timeline_upsert handler in bot.py calls sub.HasField('room') for room-lifecycle events (room_created, user_joined_room, etc.), but the RoomTimelineRoomEvent protobuf only has a room_id string field, not a nested room message. This raises a protobuf error that crashes the server task, causing a crash-restart loop when combined with retained room timeline replay.
|
|
|
+
|
|
|
+Fix: change sub.HasField('room') to sub.HasField('room_id') and build the Room from the ID string instead of a nested message.
|
|
|
+
|
|
|
+Discovered during robochatto 0.5 upgrade testing (2026-08-31). Local venv patch applied at robochatto/.venv/lib/python3.14/site-packages/chattolib/bot.py line ~603. The patch:
|
|
|
+
|
|
|
+ room = None
|
|
|
+ sub = getattr(event, case, None)
|
|
|
+ if sub is not None:
|
|
|
+ if sub.HasField("room_id") and sub.room_id:
|
|
|
+ room = Room.parse({"id": sub.room_id})
|
|
|
+ await self._dispatch(BotRoomEvent(bot=self, kind="room", room=room, detail=case))
|
|
|
+
|
|
|
+Replaces the old:
|
|
|
+ if sub is not None and sub.HasField("room"):
|
|
|
+ room = Room.parse(_pb_to_dict(sub.room))
|