diff options
| -rw-r--r-- | .github/CODEOWNERS | 13 | ||||
| -rw-r--r-- | .github/review-policy.yml | 3 | ||||
| -rw-r--r-- | bot/exts/help_channels/_cog.py | 44 | 
3 files changed, 39 insertions, 21 deletions
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 642676078..73e303325 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,6 +1,3 @@ -# Request Dennis for any PR -* @Den4200 -  # Extensions  **/bot/exts/backend/sync/**             @MarkKoz  **/bot/exts/filters/*token_remover.py   @MarkKoz @@ -9,8 +6,8 @@ bot/exts/info/codeblock/**              @MarkKoz  bot/exts/utils/extensions.py            @MarkKoz  bot/exts/utils/snekbox.py               @MarkKoz @Akarys42  bot/exts/help_channels/**               @MarkKoz @Akarys42 -bot/exts/moderation/**                  @Akarys42 @mbaruh -bot/exts/info/**                        @Akarys42 @mbaruh +bot/exts/moderation/**                  @Akarys42 @mbaruh @Den4200 +bot/exts/info/**                        @Akarys42 @mbaruh @Den4200  bot/exts/filters/**                     @mbaruh  # Utils @@ -26,9 +23,9 @@ tests/bot/exts/test_cogs.py             @MarkKoz  tests/**                                @Akarys42  # CI & Docker -.github/workflows/**                    @MarkKoz @Akarys42 @SebastiaanZ -Dockerfile                              @MarkKoz @Akarys42 -docker-compose.yml                      @MarkKoz @Akarys42 +.github/workflows/**                    @MarkKoz @Akarys42 @SebastiaanZ @Den4200 +Dockerfile                              @MarkKoz @Akarys42 @Den4200 +docker-compose.yml                      @MarkKoz @Akarys42 @Den4200  # Tools  Pipfile*                                @Akarys42 diff --git a/.github/review-policy.yml b/.github/review-policy.yml new file mode 100644 index 000000000..421b30f8a --- /dev/null +++ b/.github/review-policy.yml @@ -0,0 +1,3 @@ +remote: python-discord/.github +path: review-policies/core-developers.yml +ref: main diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index e22d4663e..983c5d183 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -145,22 +145,17 @@ class HelpChannels(commands.Cog):          Make the current in-use help channel dormant.          Make the channel dormant if the user passes the `dormant_check`, -        delete the message that invoked this, -        and reset the send permissions cooldown for the user who started the session. +        delete the message that invoked this.          """          log.trace("close command invoked; checking if the channel is in-use.") -        if ctx.channel.category == self.in_use_category: -            if await self.dormant_check(ctx): -                await _cooldown.remove_cooldown_role(ctx.author) -                # Ignore missing task when cooldown has passed but the channel still isn't dormant. -                if ctx.author.id in self.scheduler: -                    self.scheduler.cancel(ctx.author.id) - -                await self.move_to_dormant(ctx.channel, "command") -                self.scheduler.cancel(ctx.channel.id) -        else: +        if ctx.channel.category != self.in_use_category:              log.debug(f"{ctx.author} invoked command 'dormant' outside an in-use help channel") +            return + +        if await self.dormant_check(ctx): +            await self.move_to_dormant(ctx.channel, "command") +            self.scheduler.cancel(ctx.channel.id)      async def get_available_candidate(self) -> discord.TextChannel:          """ @@ -368,12 +363,13 @@ class HelpChannels(commands.Cog):          """          log.info(f"Moving #{channel} ({channel.id}) to the Dormant category.") -        await _caches.claimants.delete(channel.id)          await self.move_to_bottom_position(              channel=channel,              category_id=constants.Categories.help_dormant,          ) +        await self.unclaim_channel(channel) +          self.bot.stats.incr(f"help.dormant_calls.{caller}")          in_use_time = await _channel.get_in_use_time(channel.id) @@ -397,6 +393,28 @@ class HelpChannels(commands.Cog):          self.channel_queue.put_nowait(channel)          self.report_stats() +    async def unclaim_channel(self, channel: discord.TextChannel) -> None: +        """ +        Mark the channel as unclaimed and remove the cooldown role from the claimant if needed. + +        The role is only removed if they have no claimed channels left once the current one is unclaimed. +        This method also handles canceling the automatic removal of the cooldown role. +        """ +        claimant_id = await _caches.claimants.pop(channel.id) + +        # Ignore missing task when cooldown has passed but the channel still isn't dormant. +        if claimant_id in self.scheduler: +            self.scheduler.cancel(claimant_id) + +        claimant = self.bot.get_guild(constants.Guild.id).get_member(claimant_id) +        if claimant is None: +            log.info(f"{claimant_id} left the guild during their help session; the cooldown role won't be removed") +            return + +        # Remove the cooldown role if the claimant has no other channels left +        if not any(claimant.id == user_id for _, user_id in await _caches.claimants.items()): +            await _cooldown.remove_cooldown_role(claimant) +      async def move_to_in_use(self, channel: discord.TextChannel) -> None:          """Make a channel in-use and schedule it to be made dormant."""          log.info(f"Moving #{channel} ({channel.id}) to the In Use category.")  |