diff --git a/cogs/robocronp.py b/cogs/robocronp.py index b0ba7c9..2b6125f 100644 --- a/cogs/robocronp.py +++ b/cogs/robocronp.py @@ -15,6 +15,7 @@ class Robocronp(Cog): self.bot = bot bot.loop.create_task(self.minutely()) bot.loop.create_task(self.hourly()) + bot.loop.create_task(self.daily()) async def send_data(self): data_files = [discord.File(fpath) for fpath in self.bot.wanted_jsons] @@ -148,6 +149,26 @@ class Robocronp(Cog): # Your stuff that should run an hour after boot # and after that every hour goes here + async def daily(self): + await self.bot.wait_until_ready() + log_channel = self.bot.get_channel(config.botlog_channel) + while not self.bot.is_closed(): + # Your stuff that should run at boot + # and after that every day goes here + try: + # Reset verification and algorithm + # If you're not using verification cog + # remove or comment thsee lines + verif_channel = self.bot.get_channel(config.welcome_channel) + await self.bot.do_resetalgo(verif_channel, "daily robocronp") + except: + # Don't kill cronjobs if something goes wrong. + await log_channel.send("Cron-daily has errored: ```" + f"{traceback.format_exc()}```") + await asyncio.sleep(86400) + # Your stuff that should run a day after boot + # and after that every day goes here + def setup(bot): bot.add_cog(Robocronp(bot)) diff --git a/cogs/verification.py b/cogs/verification.py index 49132c4..e8883f1 100644 --- a/cogs/verification.py +++ b/cogs/verification.py @@ -118,34 +118,21 @@ class Verification(Cog): self.hash_choice = random.choice(tuple(hashlib.algorithms_guaranteed - self.blacklisted_hashes)) - @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 + # Export reset channel functions + self.bot.do_reset = self.do_reset + self.bot.do_resetalgo = self.do_resetalgo - if ctx.message.channel.id == config.welcome_channel: - # randomize hash_choice on reset - # TODO: do reset on start - # TODO: Reset algo every 24 hours - # TODO: Move to its own function - self.hash_choice = \ - random.choice(tuple(hashlib.algorithms_guaranteed - - self.blacklisted_hashes)) + async def do_reset(self, channel, author, limit: int = 100): + await channel.purge(limit=limit) - await ctx.channel.purge(limit=limit) - - await ctx.send(welcome_header) + await channel.send(welcome_header) rules = ['**{}**. {}'.format(i, cleandoc(r)) for i, r in enumerate(welcome_rules, 1)] rule_choice = random.randint(2, len(rules)) rules[rule_choice - 1] += \ '\n' + hidden_term_line.format(self.hash_choice.upper()) - msg = f"šŸ—‘ **Reset**: {ctx.author.mention} cleared {limit} messages "\ - f" in {ctx.channel.mention}" + msg = f"šŸ—‘ **Reset**: {author} cleared {limit} messages "\ + f" in {channel.mention}" msg += f"\nšŸ’¬ __Current challenge location__: under rule {rule_choice}" log_channel = self.bot.get_channel(config.log_channel) await log_channel.send(msg) @@ -166,13 +153,49 @@ class Verification(Cog): messages += [current_message] for item in messages: - await ctx.send(item) + await channel.send(item) await asyncio.sleep(1) for x in welcome_footer: - await ctx.send(cleandoc(x)) + await channel.send(cleandoc(x)) await asyncio.sleep(1) + async def do_resetalgo(self, channel, author, limit: int = 100): + # randomize hash_choice on reset + self.hash_choice = \ + random.choice(tuple(hashlib.algorithms_guaranteed - + self.blacklisted_hashes - + {self.hash_choice})) + + msg = f"šŸ“˜ **Resetted Algorithm**: {author} resetted "\ + f" algorithm in {channel.mention}" + msg += f"\nšŸ’¬ __Current algorithm__: {self.hash_choice.upper()}" + log_channel = self.bot.get_channel(config.log_channel) + await log_channel.send(msg) + + await self.do_reset(channel, author) + + @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) + + @commands.check(check_if_staff) + @commands.command() + async def resetalgo(self, ctx, limit: int = 100, force: bool = False): + """Resets the verification algorithm and does what reset does. 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 + + self.do_resetalgo(ctx.channel, ctx.author.mention, limit) + async def process_message(self, message): """Big code that makes me want to shoot myself Not really a rewrite but more of a port