Clean up verification a bit, modularize it, reset on start and daily
This commit is contained in:
parent
81f8fd875f
commit
4cf7a6575c
2 changed files with 67 additions and 23 deletions
|
@ -15,6 +15,7 @@ class Robocronp(Cog):
|
||||||
self.bot = bot
|
self.bot = bot
|
||||||
bot.loop.create_task(self.minutely())
|
bot.loop.create_task(self.minutely())
|
||||||
bot.loop.create_task(self.hourly())
|
bot.loop.create_task(self.hourly())
|
||||||
|
bot.loop.create_task(self.daily())
|
||||||
|
|
||||||
async def send_data(self):
|
async def send_data(self):
|
||||||
data_files = [discord.File(fpath) for fpath in self.bot.wanted_jsons]
|
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
|
# Your stuff that should run an hour after boot
|
||||||
# and after that every hour goes here
|
# 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):
|
def setup(bot):
|
||||||
bot.add_cog(Robocronp(bot))
|
bot.add_cog(Robocronp(bot))
|
||||||
|
|
|
@ -118,34 +118,21 @@ class Verification(Cog):
|
||||||
self.hash_choice = random.choice(tuple(hashlib.algorithms_guaranteed -
|
self.hash_choice = random.choice(tuple(hashlib.algorithms_guaranteed -
|
||||||
self.blacklisted_hashes))
|
self.blacklisted_hashes))
|
||||||
|
|
||||||
@commands.check(check_if_staff)
|
# Export reset channel functions
|
||||||
@commands.command()
|
self.bot.do_reset = self.do_reset
|
||||||
async def reset(self, ctx, limit: int = 100, force: bool = False):
|
self.bot.do_resetalgo = self.do_resetalgo
|
||||||
"""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
|
|
||||||
|
|
||||||
if ctx.message.channel.id == config.welcome_channel:
|
async def do_reset(self, channel, author, limit: int = 100):
|
||||||
# randomize hash_choice on reset
|
await channel.purge(limit=limit)
|
||||||
# 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))
|
|
||||||
|
|
||||||
await ctx.channel.purge(limit=limit)
|
await channel.send(welcome_header)
|
||||||
|
|
||||||
await ctx.send(welcome_header)
|
|
||||||
rules = ['**{}**. {}'.format(i, cleandoc(r)) for i, r in
|
rules = ['**{}**. {}'.format(i, cleandoc(r)) for i, r in
|
||||||
enumerate(welcome_rules, 1)]
|
enumerate(welcome_rules, 1)]
|
||||||
rule_choice = random.randint(2, len(rules))
|
rule_choice = random.randint(2, len(rules))
|
||||||
rules[rule_choice - 1] += \
|
rules[rule_choice - 1] += \
|
||||||
'\n' + hidden_term_line.format(self.hash_choice.upper())
|
'\n' + hidden_term_line.format(self.hash_choice.upper())
|
||||||
msg = f"🗑 **Reset**: {ctx.author.mention} cleared {limit} messages "\
|
msg = f"🗑 **Reset**: {author} cleared {limit} messages "\
|
||||||
f" in {ctx.channel.mention}"
|
f" in {channel.mention}"
|
||||||
msg += f"\n💬 __Current challenge location__: under rule {rule_choice}"
|
msg += f"\n💬 __Current challenge location__: under rule {rule_choice}"
|
||||||
log_channel = self.bot.get_channel(config.log_channel)
|
log_channel = self.bot.get_channel(config.log_channel)
|
||||||
await log_channel.send(msg)
|
await log_channel.send(msg)
|
||||||
|
@ -166,13 +153,49 @@ class Verification(Cog):
|
||||||
messages += [current_message]
|
messages += [current_message]
|
||||||
|
|
||||||
for item in messages:
|
for item in messages:
|
||||||
await ctx.send(item)
|
await channel.send(item)
|
||||||
await asyncio.sleep(1)
|
await asyncio.sleep(1)
|
||||||
|
|
||||||
for x in welcome_footer:
|
for x in welcome_footer:
|
||||||
await ctx.send(cleandoc(x))
|
await channel.send(cleandoc(x))
|
||||||
await asyncio.sleep(1)
|
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):
|
async def process_message(self, message):
|
||||||
"""Big code that makes me want to shoot myself
|
"""Big code that makes me want to shoot myself
|
||||||
Not really a rewrite but more of a port
|
Not really a rewrite but more of a port
|
||||||
|
|
Loading…
Reference in a new issue