From 8f63fbc52612b369e8adf852b0130911c7c92f43 Mon Sep 17 00:00:00 2001 From: Conatum Date: Thu, 17 Aug 2023 09:16:37 +0300 Subject: [PATCH] fix (rooms): Also add client to room. --- src/modules/rooms/cog.py | 43 +++++++++++++++++++++++++++++++--------- src/modules/rooms/lib.py | 31 ++++++++++++++++------------- 2 files changed, 51 insertions(+), 23 deletions(-) diff --git a/src/modules/rooms/cog.py b/src/modules/rooms/cog.py index 948b342d..c0b37e13 100644 --- a/src/modules/rooms/cog.py +++ b/src/modules/rooms/cog.py @@ -24,7 +24,7 @@ from .settings import RoomSettings from .settingui import RoomSettingUI from .room import Room from .roomui import RoomUI -from .lib import parse_members, owner_overwrite, member_overwrite +from .lib import parse_members, owner_overwrite, member_overwrite, bot_overwrite _p, _np = babel._p, babel._np @@ -223,7 +223,8 @@ class RoomCog(LionCog): # Build permission overwrites for owner and members, take into account visible setting overwrites = { owner: owner_overwrite, - guild.default_role: everyone_overwrite + guild.default_role: everyone_overwrite, + guild.me: bot_overwrite, } for member in members: overwrites[member] = member_overwrite @@ -484,13 +485,37 @@ class RoomCog(LionCog): await ctx.alion.data.update(coins=CoreData.Member.coins - required) # Create room with given starting balance and other parameters - room = await self.create_private_room( - ctx.guild, - ctx.author, - required - rent, - name or ctx.author.display_name, - members=provided - ) + try: + room = await self.create_private_room( + ctx.guild, + ctx.author, + required - rent, + name or ctx.author.display_name, + members=provided + ) + except discord.Forbidden: + await ctx.reply( + embed=error_embed( + t(_p( + 'cmd:room_rent|error:my_permissions', + "Could not create your private room! You were not charged.\n" + "I have insufficient permissions to create a private room channel." + )), + ) + ) + await ctx.alion.data.update(coins=CoreData.Member.coins + required) + except discord.HTTPException as e: + await ctx.reply( + embed=error_embed( + t(_p( + 'cmd:room_rent|error:unknown', + "Could not create your private room! You were not charged.\n" + "An unknown error occurred while creating your private room.\n" + "`{error}`" + )).format(error=e.text), + ) + ) + await ctx.alion.data.update(coins=CoreData.Member.coins + required) # Ack with confirmation message pointing to the room msg = t(_p( diff --git a/src/modules/rooms/lib.py b/src/modules/rooms/lib.py index 5bfda477..db0176c8 100644 --- a/src/modules/rooms/lib.py +++ b/src/modules/rooms/lib.py @@ -13,29 +13,32 @@ def parse_members(memberstr: str) -> list[int]: return memberids -owner_overwrite = discord.PermissionOverwrite( +member_overwrite = discord.PermissionOverwrite( view_channel=True, - manage_channels=True, - manage_webhooks=True, + send_messages=True, + read_message_history=True, attach_files=True, embed_links=True, add_reactions=True, - manage_messages=True, - create_public_threads=True, - create_private_threads=True, - manage_threads=True, connect=True, speak=True, stream=True, use_application_commands=True, use_embedded_activities=True, + external_emojis=True, +) +owner_overwrite = discord.PermissionOverwrite.from_pair(*member_overwrite.pair()) +owner_overwrite.update( + manage_channels=True, + manage_webhooks=True, + manage_messages=True, + create_public_threads=True, + create_private_threads=True, + manage_threads=True, move_members=True, - external_emojis=True ) -member_overwrite = discord.PermissionOverwrite( - view_channel=True, - send_messages=True, - connect=True, - speak=True, - stream=True +bot_overwrite = discord.PermissionOverwrite.from_pair(*owner_overwrite.pair()) +bot_overwrite.update( + **dict(owner_overwrite), + manage_permissions=True, )