Recover persisted auto rooms during voice events

This commit is contained in:
2026-08-16 22:27:06 +02:00
parent 7d57b82b29
commit 3da5ee1dab
+33 -1
View File
@@ -127,7 +127,33 @@ def _room_key(guild_id: int, owner_id: int) -> tuple[int, int]:
def _get_room(guild_id: int, owner_id: int) -> Optional[dict]:
return _rooms.get(_room_key(guild_id, owner_id))
room = _rooms.get(_room_key(guild_id, owner_id))
if room:
return room
# Le cache peut être perdu après un redémarrage ou une reconnexion : la base
# reste la source de vérité pour éviter de créer une deuxième room au même membre.
with webapp.app_context():
record = AutoRoom.query.filter_by(guild_id=str(guild_id), owner_id=str(owner_id)).first()
if not record:
return None
try:
room = {
"guild_id": guild_id,
"voice_channel_id": int(record.voice_channel_id),
"control_message_id": int(record.control_message_id) if record.control_message_id else None,
"owner_id": owner_id,
"whitelist": set(json.loads(record.whitelist or "[]")),
"blacklist": set(json.loads(record.blacklist or "[]")),
"managed_member_ids": set(json.loads(record.managed_member_ids or "[]")),
"access_mode": record.access_mode or "open",
}
except (TypeError, ValueError):
return None
_rooms[_room_key(guild_id, owner_id)] = room
if room["control_message_id"]:
_control_message_ids[room["control_message_id"]] = (guild_id, owner_id)
return room
def _set_room(guild_id: int, owner_id: int, data: dict):
@@ -176,6 +202,12 @@ def _find_room_by_channel(guild_id: int, channel_id: int) -> Optional[tuple[int,
for (gid, oid), data in _rooms.items():
if gid == guild_id and data.get("voice_channel_id") == channel_id:
return (oid, data)
with webapp.app_context():
record = AutoRoom.query.filter_by(guild_id=str(guild_id), voice_channel_id=str(channel_id)).first()
if record:
room = _get_room(guild_id, int(record.owner_id))
if room:
return (int(record.owner_id), room)
return None