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:
@@ -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=[]
|
||||||
|
|||||||
Reference in New Issue
Block a user