aboutsummaryrefslogtreecommitdiff
path: root/code/tree.py
diff options
context:
space:
mode:
authorParker <contact@pkrm.dev>2024-07-10 16:31:29 -0500
committerParker <contact@pkrm.dev>2024-07-10 16:31:29 -0500
commit8ffb0703477b1e3ea49f9e354cc1753b95fc0e75 (patch)
tree11bcbecde4f03ca33d3a144ad87e7dfb97600f64 /code/tree.py
parentb31573a1ef5c791fd5aad97019b02afc4a92fb67 (diff)
Properly subclass `CommandTree` for errors
Diffstat (limited to 'code/tree.py')
-rw-r--r--code/tree.py82
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