diff --git a/.flake8 b/.flake8 index 50c8d97..36c40f6 100644 --- a/.flake8 +++ b/.flake8 @@ -11,5 +11,6 @@ extend-ignore = D101, # Missing docstring in public class # Plugins we don't currently include: flake8-return + R502, # do not implicitly return None in function able to return non-None value. R503, # missing explicit return at the end of function ableto return non-None value. max-line-length=100 diff --git a/jarvis/client.py b/jarvis/client.py index 9f99005..4619f84 100644 --- a/jarvis/client.py +++ b/jarvis/client.py @@ -7,6 +7,7 @@ from datetime import datetime from aiohttp import ClientSession from dis_snek import Snake, listen from dis_snek.api.events.discord import MessageCreate, MessageDelete, MessageUpdate +from dis_snek.client.errors import CommandCheckFailure, CommandOnCooldown from dis_snek.client.utils.misc_utils import find_all from dis_snek.models.discord.channel import DMChannel from dis_snek.models.discord.embed import EmbedField @@ -95,14 +96,23 @@ class Jarvis(Snake): self, ctx: Context, error: Exception, *args: list, **kwargs: dict ) -> None: """Lepton on_command_error override.""" + if isinstance(error, CommandOnCooldown): + await ctx.send(str(error), ephemeral=True) + return + elif isinstance(error, CommandCheckFailure): + await ctx.send("I'm afraid I can't let you do that", ephemeral=True) + return guild = await self.fetch_guild(DEFAULT_GUILD) channel = await guild.fetch_channel(DEFAULT_ERROR_CHANNEL) error_time = datetime.utcnow().strftime("%d-%m-%Y %H:%M-%S.%f UTC") timestamp = int(datetime.now().timestamp()) timestamp = f"" - arg_str = ( - "\n".join(f" {k}: {v}" for k, v in ctx.kwargs.items()) if ctx.kwargs else " None" - ) + arg_str = "" + for k, v in ctx.kwargs.items(): + arg_str += f" {k}: " + if isinstance(v, str) and len(v) > 100: + v = v[97] + "..." + arg_str += f"{v}\n" callback_args = "\n".join(f" - {i}" for i in args) if args else " None" callback_kwargs = ( "\n".join(f" {k}: {v}" for k, v in kwargs.items()) if kwargs else " None" @@ -141,7 +151,14 @@ class Jarvis(Snake): modlog = await Setting.find_one(q(guild=ctx.guild.id, setting="modlog")) if modlog: channel = await ctx.guild.fetch_channel(modlog.value) - args = " ".join(f"{KEY_FMT}{k}:{VAL_FMT}{v}{RESET}" for k, v in ctx.kwargs.items()) + args = [] + for k, v in ctx.kwargs.items(): + if isinstance(v, str): + v = v.replace("`", "\\`") + if len(v) > 100: + v = v[:97] + "..." + args.append(f"{KEY_FMT}{k}:{VAL_FMT}{v}{RESET}") + args = " ".join(args) fields = [ EmbedField( name="Command",