aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Steele <[email protected]>2020-12-09 19:58:25 -0500
committerGravatar Steele <[email protected]>2020-12-09 19:58:25 -0500
commite0335bbb3fe1c35259647be2e23fb09fb2b09284 (patch)
tree59df937a721c76570ba7d4b9cde3e055e93afe7a
parentUpdate CODEOWNERS for @Den4200 (diff)
Create Verify cog for new `!verify` command.
`!verify` command allows moderators to apply the Developer role to a user. `!verify` is therefore removed as an alias for `!accept`.
-rw-r--r--bot/exts/moderation/verification.py2
-rw-r--r--bot/exts/moderation/verify.py45
2 files changed, 46 insertions, 1 deletions
diff --git a/bot/exts/moderation/verification.py b/bot/exts/moderation/verification.py
index c599156d0..b1c94185a 100644
--- a/bot/exts/moderation/verification.py
+++ b/bot/exts/moderation/verification.py
@@ -756,7 +756,7 @@ class Verification(Cog):
log.trace(f"Bumping verification stats in category: {category}")
self.bot.stats.incr(f"verification.{category}")
- @command(name='accept', aliases=('verify', 'verified', 'accepted'), hidden=True)
+ @command(name='accept', aliases=('verified', 'accepted'), hidden=True)
@has_no_roles(constants.Roles.verified)
@in_whitelist(channels=(constants.Channels.verification,))
async def accept_command(self, ctx: Context, *_) -> None: # We don't actually care about the args
diff --git a/bot/exts/moderation/verify.py b/bot/exts/moderation/verify.py
new file mode 100644
index 000000000..09f50efde
--- /dev/null
+++ b/bot/exts/moderation/verify.py
@@ -0,0 +1,45 @@
+import logging
+
+from discord import Member, Role
+from discord.ext.commands import Cog, Context, command, has_any_role
+
+from bot.bot import Bot
+from bot.constants import Emojis, Guild, MODERATION_ROLES, Roles
+
+log = logging.getLogger(__name__)
+
+
+class Verify(Cog):
+ """Command for applying verification roles."""
+
+ def __init__(self, bot: Bot) -> None:
+ self.bot = bot
+ self.developer_role: Role = None
+
+ @Cog.listener()
+ async def on_ready(self) -> None:
+ """Sets `self.developer_role` to the Role object once the bot is online."""
+ await self.bot.wait_until_guild_available()
+ self.developer_role = self.bot.get_guild(Guild.id).get_role(Roles.verified)
+
+ @command(name='verify')
+ @has_any_role(*MODERATION_ROLES)
+ async def apply_developer_role(self, ctx: Context, user: Member) -> None:
+ """Command for moderators to apply the Developer role to any user."""
+ log.trace(f'verify command called by {ctx.author} for {user.id}.')
+ if self.developer_role is None:
+ await self.on_ready()
+
+ if self.developer_role in user.roles:
+ log.trace(f'{user.id} is already a developer, aborting.')
+ await ctx.send(f'{Emojis.cross_mark} {user} is already a developer.')
+ return
+
+ await user.add_roles(self.developer_role)
+ log.trace(f'Developer role successfully applied to {user.id}')
+ await ctx.send(f'{Emojis.check_mark} Developer role role applied to {user}.')
+
+
+def setup(bot: Bot) -> None:
+ """Load the Verify cog."""
+ bot.add_cog(Verify(bot))