Search code examples
pythonerror-handlingdiscorddiscord.py

(Discord PY) How do I handle slash command errors from different cog files?


You would typically handle the error of each slash command in the same file that its in, is there a way to essentially have all slash commands in one file and all of the error handling for each slash command in a different file?

This is what it typically looks like ->

class MyCog(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    @commands.command()
    async def echo(self, ctx, arg):
        await ctx.send(arg)

    @echo.error
    async def echo_error(self, ctx, error):
        await ctx.send("There was an error")
        if isinstance(error, command.MissingRequiredArgument):
            await ctx.send("MIssing Required Argument")
        else:
            raise error

I haven't tried anything yet because I'm fairly new to python, so I was just curious if this was even possible. Thanks!


Solution

  • Before your bot.run(), add these lines of code:

    import asyncio  #usually the imports are at the top of the file
    from cog_file import ErrorCog
    from slash_commands_file import SlashCog
    asyncio.run(bot.add_cog(ErrorCog(bot)))
    asyncio.run(bot.add_cog(SlashCog(bot)))
    

    where cog_file.py and slash_commands_file.py are in the same folder as the one running the bot.

    The cog_file.py is the same you have. For the slash_commands_file, you would have something like this:

    from discord.ext import commands
    from discord import app_commands
    
    class SlashCog(commands.Cog):
        def __init__(self, bot):
            self.bot = bot
    
    
        @app_commands.command(name='command-name') #here just as with normal @tree.command
        async def my_slash_command(self, interaction: discord.Interaction):
            pass   #in here same as always except bot is replaced with self.bot