discord.py Как обработать исключение когда у бота не хватает прав

Я хочу сделать команду clear, и если у бота не достаточно прав(manage_messages), то должно выводиться сообщение. Но у меня не получается обработать исключение. Вот код:

#CLEAR - only for premission MANAGE_MESSAGES
    @commands.command()
    @commands.has_permissions(manage_messages = True)
    async def clear(self, ctx, amount: int):
        await ctx.channel.purge(limit = amount+1)
        await ctx.send(embed = discord.Embed(description = f':white_check_mark: Удалено {amount} сообщений(я)', colour = discord.Colour.green()), delete_after = 5)
    @clear.error
    async def clear_error(self, ctx, error):
        if isinstance(error, commands.errors.MissingPermissions):
            await ctx.reply('У тебя нету права управлять сообщениями, чтобы использовать эту команду')
        if isinstance(error, commands.errors.MissingRequiredArgument):
            await ctx.reply('Хм... А что мне собственно говоря чистить?')
        if isinstance(error, commands.errors.BadArgument):
            await ctx.reply('Я не в этой системе счисления работаю, дай мне НОРМАЛЬНОЕ число.')
        if isinstance(error, commands.errors.Forbidden):
            await ctx.reply('К сожалению у меня не достаточно прав для этой команды(')

Вот сама ошибка:

Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Users\mp809\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\iterators.py", line 288, in next
    return self.messages.get_nowait()
  File "C:\Users\mp809\AppData\Local\Programs\Python\Python310\lib\asyncio\queues.py", line 182, in get_nowait
    raise QueueEmpty
asyncio.queues.QueueEmpty

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\mp809\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\channel.py", line 377, in purge
    msg = await iterator.next()
  File "C:\Users\mp809\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\iterators.py", line 290, in next
    raise NoMoreItems()
discord.errors.NoMoreItems

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\mp809\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "D:\code\bot\cogs\moderation.py", line 13, in clear
    await ctx.channel.purge(limit = amount+1)
  File "C:\Users\mp809\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\channel.py", line 383, in purge
    await strategy(to_delete)
  File "C:\Users\mp809\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\channel.py", line 301, in delete_messages
    await self._state.http.delete_messages(self.id, message_ids)
  File "C:\Users\mp809\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\http.py", line 248, in request
    raise Forbidden(r, data)
discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\mp809\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\bot.py", line 939, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\mp809\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\core.py", line 863, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:\Users\mp809\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\core.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: Forbidden: 403 Forbidden (error code: 50013): Missing Permissions

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\mp809\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\core.py", line 71, in wrapped
    ret = await coro(*args, **kwargs)
  File "D:\code\bot\cogs\moderation.py", line 23, in clear_error
    if isinstance(error, commands.errors.Forbidden):
AttributeError: module 'discord.ext.commands.errors' has no attribute 'Forbidden'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\mp809\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "C:\Users\mp809\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\bot.py", line 979, in on_message
    await self.process_commands(message)
  File "C:\Users\mp809\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\bot.py", line 976, in process_commands
    await self.invoke(ctx)
  File "C:\Users\mp809\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\bot.py", line 943, in invoke
    await ctx.command.dispatch_error(ctx, exc)
  File "C:\Users\mp809\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\core.py", line 422, in dispatch_error
    await injected(cog, ctx, error)
  File "C:\Users\mp809\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\core.py", line 77, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: module 'discord.ext.commands.errors' has no attribute 'Forbidden'

Ответы (1 шт):

Автор решения: Corrygan

У вас в ошибке и сказано, что не хватает прав.

discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions

Просто вместо ctx.reply используйте ctx.send

 @clear.error
    async def clear_error(self, ctx, error):
        if isinstance(error, commands.errors.MissingPermissions):
            await ctx.send('У тебя нету права управлять сообщениями, чтобы использовать эту команду')
        if isinstance(error, commands.errors.MissingRequiredArgument):
            await ctx.send('Хм... А что мне собственно говоря чистить?')
        if isinstance(error, commands.errors.BadArgument):
            await ctx.send('Я не в этой системе счисления работаю, дай мне НОРМАЛЬНОЕ число.')
        if isinstance(error, commands.errors.Forbidden):
            await ctx.send('К сожалению у меня не достаточно прав для этой команды(')
→ Ссылка