aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar MarkKoz <[email protected]>2020-02-28 07:43:40 -0800
committerGravatar MarkKoz <[email protected]>2020-03-22 15:54:40 -0700
commitf7e29ba78ec3f25965ae9fb70729cc3eb895e808 (patch)
tree55e4b036b2816740cf16284387b63f605f774168
parentHelpChannels: log previous position when getting alphabetical position (diff)
HelpChannels: add a minimum interval between helper notifications
* Add configurable constant for minimum interval * Move helper notifications to a separate function
-rw-r--r--bot/cogs/help_channels.py37
-rw-r--r--bot/constants.py1
-rw-r--r--config-default.yml3
3 files changed, 32 insertions, 9 deletions
diff --git a/bot/cogs/help_channels.py b/bot/cogs/help_channels.py
index 85015b5e9..809551131 100644
--- a/bot/cogs/help_channels.py
+++ b/bot/cogs/help_channels.py
@@ -100,6 +100,7 @@ class HelpChannels(Scheduler, commands.Cog):
self.name_queue: t.Deque[str] = None
self.elements = self.get_names()
+ self.last_notification: t.Optional[datetime] = None
self.ready = asyncio.Event()
self.on_message_lock = asyncio.Lock()
@@ -192,15 +193,7 @@ class HelpChannels(Scheduler, commands.Cog):
if not channel:
log.info("Couldn't create a candidate channel; waiting to get one from the queue.")
-
- if constants.HelpChannels.notify_helpers:
- helpers_channel = self.bot.get_channel(constants.Channels.helpers)
- await helpers_channel.send(
- f"<@&{constants.Roles.helpers}> a help channel is in needed but none are "
- f"available. Consider freeing up some in-use channels manually by using "
- f"the `!dormant` command within the channels."
- )
-
+ await self.notify_helpers()
channel = await self.channel_queue.get()
return channel
@@ -446,6 +439,32 @@ class HelpChannels(Scheduler, commands.Cog):
data = ChannelTimeout(channel, timeout)
self.schedule_task(self.bot.loop, channel.id, data)
+ async def notify_helpers(self) -> None:
+ """
+ Notify helpers in the #helpers channel about a lack of available help channels.
+
+ The notification can be disabled with `constants.HelpChannels.notify_helpers`. The
+ minimum interval between notifications can be configured with
+ `constants.HelpChannels.notify_minutes`.
+ """
+ if not constants.HelpChannels.notify_helpers:
+ return
+
+ if self.last_notification:
+ elapsed = (datetime.utcnow() - self.last_notification).seconds
+ minimum_interval = constants.HelpChannels.notify_minutes * 60
+ should_send = elapsed >= minimum_interval
+ else:
+ should_send = True
+
+ if should_send:
+ helpers_channel = self.bot.get_channel(constants.Channels.helpers)
+ await helpers_channel.send(
+ f"<@&{constants.Roles.helpers}> a help channel is in needed but none are "
+ f"available. Consider freeing up some in-use channels manually by using "
+ f"the `!dormant` command within the channels."
+ )
+
@commands.Cog.listener()
async def on_message(self, message: discord.Message) -> None:
"""Move an available channel to the In Use category and replace it with a dormant one."""
diff --git a/bot/constants.py b/bot/constants.py
index 56ab7f84c..00694e1d7 100644
--- a/bot/constants.py
+++ b/bot/constants.py
@@ -543,6 +543,7 @@ class HelpChannels(metaclass=YAMLGetter):
max_total_channels: int
name_prefix: str
notify_helpers: bool
+ notify_minutes: int
class Mention(metaclass=YAMLGetter):
diff --git a/config-default.yml b/config-default.yml
index 0c4e226aa..764cf5a3e 100644
--- a/config-default.yml
+++ b/config-default.yml
@@ -535,6 +535,9 @@ help_channels:
# Notify helpers if more channels are needed but none are available
notify_helpers: true
+ # Minimum interval between helper notifications
+ notify_minutes: 15
+
redirect_output:
delete_invocation: true
delete_delay: 15