fix: allow self-promotion to first admin in room

Users can now add themselves as the first admin without existing
admin permission. This enables /start in DMs to work correctly.
This commit is contained in:
shokollm
2026-04-04 15:34:58 +00:00
parent d75f897043
commit 8ac8cd21ec

View File

@@ -35,11 +35,15 @@ class BountyService:
def add_admin( def add_admin(
self, room_id: int, admin_user_id: int, requesting_user_id: int self, room_id: int, admin_user_id: int, requesting_user_id: int
) -> None: ) -> None:
"""Add an admin to a room. Requires admin permission.""" """Add an admin to a room. Requires admin permission, or self-promotion if first admin."""
room_data = self._storage.load(room_id)
has_no_admins = room_data is None or not room_data.admin_user_ids
is_self_promotion = requesting_user_id == admin_user_id
if not self.is_admin(room_id, requesting_user_id): if not self.is_admin(room_id, requesting_user_id):
if not (has_no_admins and is_self_promotion):
raise PermissionError("Only admins can add admins.") raise PermissionError("Only admins can add admins.")
room_data = self._storage.load(room_id)
if room_data is None: if room_data is None:
room_data = RoomData( room_data = RoomData(
room_id=room_id, bounties=[], next_id=1, admin_user_ids=[] room_id=room_id, bounties=[], next_id=1, admin_user_ids=[]