diff options
| author | 2020-08-06 23:48:06 +0200 | |
|---|---|---|
| committer | 2020-08-07 10:29:42 +0200 | |
| commit | 2d24e4730e0f9678c0d7833c2332c7f0821eb7e2 (patch) | |
| tree | 8d98cde87e2ac3745b09525f4a0e0f16b5f9f1d1 | |
| parent | Verification: add command interface for task management (diff) | |
Verification: persist task settings in Redis
If tasks are stopped manually, they will not automatically restart
on cog reload or bot restart.
Using `maybe_start_tasks` is necessary because we cannot interface
with Redis from a sync context.
We're using 1 and 0 because RedisCache does not currently permit
bool values due to a typestring conversion bug.
| -rw-r--r-- | bot/cogs/verification.py | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/bot/cogs/verification.py b/bot/cogs/verification.py index 152118d92..b4dc1f145 100644 --- a/bot/cogs/verification.py +++ b/bot/cogs/verification.py @@ -111,9 +111,7 @@ class Verification(Cog): def __init__(self, bot: Bot) -> None: """Start internal tasks.""" self.bot = bot - - self.update_unverified_members.start() - self.ping_unverified.start() + self.bot.loop.create_task(self.maybe_start_tasks()) def cog_unload(self) -> None: """ @@ -129,6 +127,20 @@ class Verification(Cog): """Get currently loaded ModLog cog instance.""" return self.bot.get_cog("ModLog") + async def maybe_start_tasks(self) -> None: + """ + Poll Redis to check whether internal tasks should start. + + Redis must be interfaced with from an async function. + """ + log.trace("Checking whether background tasks should begin") + setting: t.Optional[int] = await self.reminder_cache.get("tasks_running") # This can be None if never set + + if setting: + log.trace("Background tasks will be started") + self.update_unverified_members.start() + self.ping_unverified.start() + # region: automatically update unverified users async def _verify_kick(self, n_members: int) -> bool: @@ -492,6 +504,8 @@ class Verification(Cog): if not self.ping_unverified.is_running(): self.ping_unverified.start() + await self.reminder_cache.set("tasks_running", 1) + colour = discord.Colour.blurple() await ctx.send(embed=discord.Embed(title="Verification system", description="Done. :ok_hand:", colour=colour)) @@ -503,6 +517,8 @@ class Verification(Cog): self.update_unverified_members.cancel() self.ping_unverified.cancel() + await self.reminder_cache.set("tasks_running", 0) + colour = discord.Colour.blurple() await ctx.send(embed=discord.Embed(title="Verification system", description="Tasks canceled.", colour=colour)) |