aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar wookie184 <[email protected]>2021-08-01 19:58:46 +0100
committerGravatar wookie184 <[email protected]>2021-08-01 19:58:46 +0100
commit587e52e1bd05eaf66035b6089cb37149399c8851 (patch)
tree7eada554654a81303c1a33e6b22af964e49376fc
parentMerge pull request #1704 from python-discord/whitelist-pydis-partners (diff)
Add commands to turn automatic review posting on or off
Diffstat (limited to '')
-rw-r--r--bot/exts/recruitment/talentpool/_cog.py59
1 files changed, 55 insertions, 4 deletions
diff --git a/bot/exts/recruitment/talentpool/_cog.py b/bot/exts/recruitment/talentpool/_cog.py
index 03326cab2..5d90701bf 100644
--- a/bot/exts/recruitment/talentpool/_cog.py
+++ b/bot/exts/recruitment/talentpool/_cog.py
@@ -5,12 +5,13 @@ from io import StringIO
from typing import Union
import discord
+from async_rediscache import RedisCache
from discord import Color, Embed, Member, PartialMessage, RawReactionActionEvent, User
from discord.ext.commands import Cog, Context, group, has_any_role
from bot.api import ResponseCodeError
from bot.bot import Bot
-from bot.constants import Channels, Emojis, Guild, MODERATION_ROLES, STAFF_ROLES, Webhooks
+from bot.constants import Channels, Emojis, Guild, MODERATION_ROLES, Roles, STAFF_ROLES, Webhooks
from bot.converters import FetchedMember
from bot.exts.moderation.watchchannels._watchchannel import WatchChannel
from bot.exts.recruitment.talentpool._review import Reviewer
@@ -25,6 +26,8 @@ log = logging.getLogger(__name__)
class TalentPool(WatchChannel, Cog, name="Talentpool"):
"""Relays messages of helper candidates to a watch channel to observe them."""
+ talentpool_settings = RedisCache()
+
def __init__(self, bot: Bot) -> None:
super().__init__(
bot,
@@ -37,7 +40,18 @@ class TalentPool(WatchChannel, Cog, name="Talentpool"):
)
self.reviewer = Reviewer(self.__class__.__name__, bot, self)
- self.bot.loop.create_task(self.reviewer.reschedule_reviews())
+ self.bot.loop.create_task(self.schedule_autoreviews())
+
+ async def schedule_autoreviews(self) -> None:
+ """Reschedule reviews for active nominations if autoreview is enabled."""
+ if await self.autoreview_enabled():
+ await self.reviewer.reschedule_reviews()
+ else:
+ self.log.trace('Not scheduling reviews as autoreview is disabled.')
+
+ async def autoreview_enabled(self) -> bool:
+ """Return whether automatic posting of nomination reviews is enabled."""
+ return await self.talentpool_settings.get('autoreview_enabled', True)
@group(name='talentpool', aliases=('tp', 'talent', 'nomination', 'n'), invoke_without_command=True)
@has_any_role(*MODERATION_ROLES)
@@ -45,6 +59,42 @@ class TalentPool(WatchChannel, Cog, name="Talentpool"):
"""Highlights the activity of helper nominees by relaying their messages to the talent pool channel."""
await ctx.send_help(ctx.command)
+ @nomination_group.group(name='autoreview', invoke_without_command=True)
+ @has_any_role(*MODERATION_ROLES)
+ async def nomination_autoreview_group(self, ctx: Context) -> None:
+ """Commands for enabling or disabling autoreview."""
+ await ctx.send_help(ctx.command)
+
+ @nomination_autoreview_group.command(name='on')
+ @has_any_role(Roles.admins)
+ async def autoreview_on(self, ctx: Context) -> None:
+ """
+ Turn on automatic posting of reviews.
+
+ This will post reviews up to one day overdue, older nominations can be
+ manually reviewed with `!tp post_review <user_id>`.
+ """
+ await self.talentpool_settings.set('autoreview_enabled', True)
+ await self.reviewer.reschedule_reviews()
+ await ctx.send(':white_check_mark: Autoreview turned on')
+
+ @nomination_autoreview_group.command(name='off')
+ @has_any_role(Roles.admins)
+ async def autoreview_off(self, ctx: Context) -> None:
+ """Turn off automatic posting of reviews."""
+ await self.talentpool_settings.set('autoreview_enabled', False)
+ self.reviewer.cancel_all()
+ await ctx.send(':white_check_mark: Autoreview turned off')
+
+ @has_any_role(*MODERATION_ROLES)
+ @nomination_autoreview_group.command(name='status')
+ async def autoreview_status(self, ctx: Context) -> None:
+ """Show whether automatic posting of reviews is enabled or disabled."""
+ if await self.autoreview_enabled():
+ await ctx.send('Autoreview is currently enabled')
+ else:
+ await ctx.send('Autoreview is currently disabled')
+
@nomination_group.command(name='watched', aliases=('all', 'list'), root_aliases=("nominees",))
@has_any_role(*MODERATION_ROLES)
async def watched_command(
@@ -190,7 +240,7 @@ class TalentPool(WatchChannel, Cog, name="Talentpool"):
self.watched_users[user.id] = response_data
- if user.id not in self.reviewer:
+ if await self.autoreview_enabled() and user.id not in self.reviewer:
self.reviewer.schedule_review(user.id)
history = await self.bot.api_client.get(
@@ -403,7 +453,8 @@ class TalentPool(WatchChannel, Cog, name="Talentpool"):
)
self._remove_user(user_id)
- self.reviewer.cancel(user_id)
+ if await self.autoreview_enabled():
+ self.reviewer.cancel(user_id)
return True