diff options
author | Parker <contact@pkrm.dev> | 2024-07-10 16:31:29 -0500 |
---|---|---|
committer | Parker <contact@pkrm.dev> | 2024-07-10 16:31:29 -0500 |
commit | 8ffb0703477b1e3ea49f9e354cc1753b95fc0e75 (patch) | |
tree | 11bcbecde4f03ca33d3a144ad87e7dfb97600f64 /code/tree.py | |
parent | b31573a1ef5c791fd5aad97019b02afc4a92fb67 (diff) |
Properly subclass `CommandTree` for errors
Diffstat (limited to 'code/tree.py')
-rw-r--r-- | code/tree.py | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/code/tree.py b/code/tree.py new file mode 100644 index 0000000..0ac8fe8 --- /dev/null +++ b/code/tree.py @@ -0,0 +1,82 @@ +import discord +from discord import app_commands +from discord.ext.commands.errors import * +import datetime + +from cogs.music import CheckPlayerError +from config import BOT_COLOR +from custom_source import LoadError + + +class Tree(app_commands.CommandTree): + async def on_error( + self, interaction: discord.Interaction, error: app_commands.AppCommandError + ): + music_commands = [ + "play", + "clear", + "np", + "pause", + "queue", + "remove", + "resume", + "shuffle", + "skip", + "stop", + ] + + if isinstance(error, CommandNotFound): + return + + # Custom Error class for the `create_player` function + # Issues that arise may be user not in vc, user not in correct vc, missing perms, etc. + elif isinstance(error, CheckPlayerError): + embed = discord.Embed( + title=error.info["title"], + description=error.info["description"], + color=BOT_COLOR, + ) + embed.set_footer( + text=datetime.datetime.now(datetime.timezone.utc).strftime( + "%Y-%m-%d %H:%M:%S" + ) + + " UTC" + ) + await interaction.response.send_message(embed=embed, ephemeral=True) + + # If a player cannot be created for any of the music commands + # Player creation is a command check for every music command + elif ( + isinstance(error, app_commands.CheckFailure) + and interaction.command.name in music_commands + ): + embed = discord.Embed( + title="Player Creation Error", + description="An error occured when creating a player. Please try again.", + color=BOT_COLOR, + ) + embed.set_footer( + text=datetime.datetime.now(datetime.timezone.utc).strftime( + "%Y-%m-%d %H:%M:%S" + ) + + " UTC" + ) + await interaction.response.send_message(embed=embed, ephemeral=True) + + # If a Spotify song is linked but cannot be found on a provider (e.g. YouTube) + elif isinstance(error, LoadError): + embed = discord.Embed( + title="Nothing Found", + description="Spotify does not allow direct play, meaning songs have to be found on a supported provider. In this case, the song couldn't be found. Please try again with a different song, or try searching for just the name and artist manually rather than sending a link.", + color=BOT_COLOR, + ) + embed.set_footer( + text=datetime.datetime.now(datetime.timezone.utc).strftime( + "%Y-%m-%d %H:%M:%S" + ) + + " UTC" + ) + await interaction.response.send_message(embed=embed, ephemeral=True) + + else: + raise error |