diff options
author | 2021-04-12 21:41:56 +0100 | |
---|---|---|
committer | 2021-04-12 21:41:56 +0100 | |
commit | d4a6d91fbb8a0543ca0da53d75dd208478a89edb (patch) | |
tree | 22954312dbb4cc66abafc64de70e1661a433fff9 /bot/exts/evergreen/timed.py | |
parent | Request the pfp as the right size from discord (diff) | |
parent | Merge pull request #678 from python-discord/remove-inappropriate-riddle (diff) |
Merge branch 'main' into Enforce-image-processing-concurrency
Diffstat (limited to 'bot/exts/evergreen/timed.py')
-rw-r--r-- | bot/exts/evergreen/timed.py | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/bot/exts/evergreen/timed.py b/bot/exts/evergreen/timed.py new file mode 100644 index 00000000..635ccb32 --- /dev/null +++ b/bot/exts/evergreen/timed.py @@ -0,0 +1,44 @@ +from copy import copy +from time import perf_counter + +from discord import Message +from discord.ext import commands + + +class TimedCommands(commands.Cog): + """Time the command execution of a command.""" + + @staticmethod + async def create_execution_context(ctx: commands.Context, command: str) -> commands.Context: + """Get a new execution context for a command.""" + msg: Message = copy(ctx.message) + msg.content = f"{ctx.prefix}{command}" + + return await ctx.bot.get_context(msg) + + @commands.command(name="timed", aliases=["time", "t"]) + async def timed(self, ctx: commands.Context, *, command: str) -> None: + """Time the command execution of a command.""" + new_ctx = await self.create_execution_context(ctx, command) + + if not new_ctx.command: + help_command = f"{ctx.prefix}help" + error = f"The command you are trying to time doesn't exist. Use `{help_command}` for a list of commands." + + await ctx.send(error) + return + + if new_ctx.command.qualified_name == "timed": + await ctx.send("You are not allowed to time the execution of the `timed` command.") + return + + t_start = perf_counter() + await new_ctx.command.invoke(new_ctx) + t_end = perf_counter() + + await ctx.send(f"Command execution for `{new_ctx.command}` finished in {(t_end - t_start):.4f} seconds.") + + +def setup(bot: commands.Bot) -> None: + """Cog load.""" + bot.add_cog(TimedCommands(bot)) |