(LionModule): Improve startup handling.

Update `cmdClient` pointer for module launch updates.
Implement module launch wait logic in `pre_command`.
Add details to `SafeCancellation` calls in `pre_command`.
This commit is contained in:
2021-11-07 16:12:35 +02:00
parent 0fbf7c8903
commit 0b5be79b69
2 changed files with 20 additions and 7 deletions

View File

@@ -13,7 +13,7 @@ class LionCommand(Command):
"""
Subclass to allow easy attachment of custom hooks and structure to commands.
"""
...
allow_before_ready = False
class LionModule(Module):
@@ -72,25 +72,38 @@ class LionModule(Module):
"""
Lion pre-command hook.
"""
if not self.ready and not ctx.cmd.allow_before_ready:
try:
await ctx.embed_reply(
"I am currently restarting! Please try again in a couple of minutes."
)
except discord.HTTPException:
pass
raise SafeCancellation(details="Module '{}' is not ready.".format(self.name))
# Check that the channel and guild still exists
if not ctx.client.get_guild(ctx.guild.id) or not ctx.guild.get_channel(ctx.ch.id):
raise SafeCancellation(details='Command channel is no longer reachable.')
# Check global user blacklist
if ctx.author.id in ctx.client.objects['blacklisted_users']:
raise SafeCancellation
raise SafeCancellation(details='User is blacklisted.')
if ctx.guild:
# Check global guild blacklist
if ctx.guild.id in ctx.client.objects['blacklisted_guilds']:
raise SafeCancellation
raise SafeCancellation(details='Guild is blacklisted.')
# Check guild's own member blacklist
if ctx.author.id in ctx.client.objects['ignored_members'][ctx.guild.id]:
raise SafeCancellation
raise SafeCancellation(details='User is ignored in this guild.')
# Check channel permissions are sane
if not ctx.ch.permissions_for(ctx.guild.me).send_messages:
raise SafeCancellation
raise SafeCancellation(details='I cannot send messages in this channel.')
if not ctx.ch.permissions_for(ctx.guild.me).embed_links:
await ctx.reply("I need permission to send embeds in this channel before I can run any commands!")
raise SafeCancellation
raise SafeCancellation(details='I cannot send embeds in this channel.')
# Start typing
await ctx.ch.trigger_typing()