From 86eb6a7ad21e66661201305a024978738af08f4e Mon Sep 17 00:00:00 2001 From: Ave Ozkal Date: Wed, 8 Apr 2020 18:27:05 +0300 Subject: [PATCH] Rewrite the verification code to the one required by Ryujinx Guild --- robocop_ng/cogs/mod.py | 14 ++-- robocop_ng/cogs/ryujinx_verification.py | 94 +++++++++++++++++++++++++ robocop_ng/config_template.py | 4 ++ 3 files changed, 102 insertions(+), 10 deletions(-) create mode 100644 robocop_ng/cogs/ryujinx_verification.py diff --git a/robocop_ng/cogs/mod.py b/robocop_ng/cogs/mod.py index 57c9aa2..3c5f991 100644 --- a/robocop_ng/cogs/mod.py +++ b/robocop_ng/cogs/mod.py @@ -588,12 +588,6 @@ class Mod(Cog): if warn_count == 2: msg += " __The next warn will automatically kick.__" if warn_count == 3: - msg += ( - "\n\nYou were kicked because of this warning. " - "You can join again right away. " - "Two more warnings will result in an automatic ban." - ) - if warn_count == 4: msg += ( "\n\nYou were kicked because of this warning. " "This is your final warning. " @@ -601,8 +595,8 @@ class Mod(Cog): "**one more warn will result in a ban**." ) chan_msg += "**This resulted in an auto-kick.**\n" - if warn_count == 5: - msg += "\n\nYou were automatically banned due to five warnings." + if warn_count == 4: + msg += "\n\nYou were automatically banned due to four warnings." chan_msg += "**This resulted in an auto-ban.**\n" try: await target.send(msg) @@ -610,9 +604,9 @@ class Mod(Cog): # Prevents log issues in cases where user blocked bot # or has DMs disabled pass - if warn_count == 3 or warn_count == 4: + if warn_count == 3: await target.kick() - if warn_count >= 5: # just in case + if warn_count >= 4: # just in case await target.ban(reason="exceeded warn limit", delete_message_days=0) await ctx.send( f"{target.mention} warned. " f"User has {warn_count} warning(s)." diff --git a/robocop_ng/cogs/ryujinx_verification.py b/robocop_ng/cogs/ryujinx_verification.py new file mode 100644 index 0000000..d114d6d --- /dev/null +++ b/robocop_ng/cogs/ryujinx_verification.py @@ -0,0 +1,94 @@ +import discord +from discord.ext import commands +from discord.ext.commands import Cog +import config +import random +from helpers.checks import check_if_staff + + +class RyujinxVerification(Cog): + def __init__(self, bot): + self.bot = bot + + # Export reset channel functions + self.bot.do_reset = self.do_reset + self.bot.do_resetalgo = self.do_resetalgo + + @Cog.listener() + async def on_member_join(self, member): + await self.bot.wait_until_ready() + + if (member.guild.id not in config.guild_whitelist): + return + + join_channel = self.bot.get_channel(config.welcome_channel) + + if join_channel is not None: + await join_channel.send('Hello {0.mention}! Welcome to Ryujinx! Please read the <#411271165429022730>, and then type the verifying command here to gain access to the rest of the channels.\n\nIf you need help with basic common questions, visit the <#585288848704143371> channel after joining.\n\nIf you need help with Animal Crossing visit the <#692104087889641472> channel for common issues and solutions. If you need help that is not Animal Crossing related, please visit the <#410208610455519243> channel after verifying.'.format(member)) + + async def process_message(self, message): + """Process the verification process""" + if message.channel.id == config.welcome_channel: + # Assign common stuff into variables to make stuff less of a mess + mcl = message.content.lower() + + # Get the role we will give in case of success + success_role = message.guild.get_role(config.participant_role) + + if config.verification_string == mcl: + await message.author.add_roles(success_role) + await message.delete() + + @Cog.listener() + async def on_message(self, message): + if message.author.bot: + return + + try: + await self.process_message(message) + except discord.errors.Forbidden: + chan = self.bot.get_channel(message.channel) + await chan.send("💢 I don't have permission to do this.") + + @Cog.listener() + async def on_message_edit(self, before, after): + if after.author.bot: + return + + try: + await self.process_message(after) + except discord.errors.Forbidden: + chan = self.bot.get_channel(after.channel) + await chan.send("💢 I don't have permission to do this.") + + @Cog.listener() + async def on_member_join(self, member): + await self.bot.wait_until_ready() + + if (member.guild.id not in config.guild_whitelist): + return + + join_channel = self.bot.get_channel(config.welcome_channel) + + if join_channel is not None: + await join_channel.send(config.join_message.format(member)) + + @commands.check(check_if_staff) + @commands.command() + async def reset(self, ctx, limit: int = 100, force: bool = False): + """Wipes messages and pastes the welcome message again. Staff only.""" + if ctx.message.channel.id != config.welcome_channel and not force: + await ctx.send(f"This command is limited to" + f" <#{config.welcome_channel}>, unless forced.") + return + await self.do_reset(ctx.channel, ctx.author.mention, limit) + + async def do_reset(self, channel, author, limit: int = 100): + await channel.purge(limit=limit) + + async def do_resetalgo(self, channel, author, limit: int = 100): + # We only auto clear the channel daily + await self.do_reset(channel, author) + +def setup(bot): + bot.add_cog(RyujinxVerification(bot)) diff --git a/robocop_ng/config_template.py b/robocop_ng/config_template.py index e92a3b4..bc8a4ae 100644 --- a/robocop_ng/config_template.py +++ b/robocop_ng/config_template.py @@ -51,6 +51,10 @@ initial_cogs = [ # and sends pins above limit to a github gist +# The string that users need to say to get past verification +verification_string = "go read the rules, not the code" + + # Minimum account age required to join the guild # If user's account creation is shorter than the time delta given here # then user will be kicked and informed