aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/CODEOWNERS13
-rw-r--r--.github/review-policy.yml3
-rw-r--r--bot/exts/help_channels/_cog.py44
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.")