diff options
| author | 2020-12-09 19:58:25 -0500 | |
|---|---|---|
| committer | 2020-12-09 19:58:25 -0500 | |
| commit | e0335bbb3fe1c35259647be2e23fb09fb2b09284 (patch) | |
| tree | 59df937a721c76570ba7d4b9cde3e055e93afe7a | |
| parent | Update 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.py | 2 | ||||
| -rw-r--r-- | bot/exts/moderation/verify.py | 45 |
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)) |