From cf610ef44d454f9f22ea6c94673a3d99e013d5f0 Mon Sep 17 00:00:00 2001 From: Conatum Date: Mon, 25 Oct 2021 14:37:38 +0300 Subject: [PATCH] fix (rent): Handle non-existent objects. Handle room channel being deleted before expiry. Handle room owner leaving the server before expiry. --- bot/modules/renting/commands.py | 9 +++++++++ bot/modules/renting/rooms.py | 10 +++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/bot/modules/renting/commands.py b/bot/modules/renting/commands.py index ccaaece2..b94c01f5 100644 --- a/bot/modules/renting/commands.py +++ b/bot/modules/renting/commands.py @@ -37,6 +37,15 @@ async def cmd_rent(ctx): # Fetch the members' room, if it exists room = Room.fetch(ctx.guild.id, ctx.author.id) + # Handle pre-deletion of the room + if room and not room.channel: + ctx.guild_settings.event_log.log( + title="Private study room not found!", + description="{}'s study room was deleted before it expired!".format(ctx.author.mention) + ) + room.delete() + room = None + if room: # Show room status, or add/remove remebers lower = ctx.args.lower() diff --git a/bot/modules/renting/rooms.py b/bot/modules/renting/rooms.py index a4c7ce47..c83adc29 100644 --- a/bot/modules/renting/rooms.py +++ b/bot/modules/renting/rooms.py @@ -112,7 +112,8 @@ class Room: @property def owner(self): """ - The Member owning the room, if we can find them + The Member owning the room. + May be `None` if the member is no longer in the guild, or is otherwise not visible. """ guild = client.get_guild(self.data.guildid) if guild: @@ -122,6 +123,7 @@ class Room: def channel(self): """ The Channel corresponding to this rented room. + May be `None` if the channel was already deleted. """ guild = client.get_guild(self.data.guildid) if guild: @@ -176,9 +178,6 @@ class Room: """ Expire the room. """ - owner = self.owner - guild_settings = GuildSettings(owner.guild.id) - if self.channel: # Delete the discord channel try: @@ -189,9 +188,10 @@ class Room: # Delete the room from data (cascades to member deletion) self.delete() + guild_settings = GuildSettings(self.data.guildid) guild_settings.event_log.log( title="Private study room expired!", - description="{}'s private study room expired.".format(owner.mention) + description="<@{}>'s private study room expired.".format(self.data.ownerid) ) async def add_members(self, *members):