Как вывести ошибку Forbidden discord.py

Здраствуйте!
Не знаю как вывести ошибку discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions. Различные методы пробовал, через cog_command_error() и isinstance(error, Forbidden) и isinstanse(error, BotMissingPermissions), но ничего не вышло.
Я делаю это для того, что бы бот отсылал сообщение если у него нет доступа до той или иной команды.

Вот мой код:

async def cog_command_error(self, ctx: Context, error):
    if isinstance(error, commands.BotMissingPermissions):
        user = ctx.guild.get_member(ctx.author.id)
        await user.send('У бота нет доступа до этой команды. Дайте эму доступ `Банить учасников`')

    if isinstance(error, commands.MissingPermissions):
        kick_emb = discord.Embed(title = 'Ошибка!', color =0xff060e)
        kick_emb.add_field(
            name = 'Причина ошибки:',
            value = 'У вас нету нужных прав для управления этой командой!',
            inline = False
        )
        await ctx.send(embed = kick_emb)
        
    if isinstance(error, commands.errors.MemberNotFound):
        kick_emb = discord.Embed(title = 'Ошибка!', color = 0xff060e)
        kick_emb.add_field(
            name = 'Причина ошибки:',
            value = 'Не указано имя пользователя',
            inline = False
        )
        kick_emb.add_field(
            name = 'Пример использования команды:',
            value = '{}ban @user reason', inline = False
        )
        await ctx.send(embed = kick_emb)
        
    if isinstance(error, commands.errors.MissingRequiredArgument):
        kick_emb = discord.Embed(title = 'Ошибка!', color =0xff060e)
        kick_emb.add_field(
            name = 'Причина ошибки:',
            value = 'Не указана причина',
            inline = False
        )
        kick_emb.add_field(
            name = 'Пример использования команды:',
            value = '{}ban @user reason',
            inline = False
        )
        await ctx.send(embed = kick_emb)

Traceback:

File "f:\discord bot\cogs\utils\clear.py", line 23, in _clear
    await ctx.channel.purge(limit = self.quantity + 1)
  File "C:\Users\123\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\channel.py", line 383, in purge
    await strategy(to_delete)
  File "C:\Users\123\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\channel.py", line 301, in delete_messages
    await self._state.http.delete_messages(self.id, message_ids)
  File "C:\Users\123\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\http.py", line 248, in request
    raise Forbidden(r, data)
discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions

Как можно решить мою проблему?


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

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

Попробуйте сделать отправление сообщений об ошибках через ивент on_command_error.

from discord.ext import commands


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

    @commands.Cog.listener()
    async def on_command_error(self, ctx: commands.Context, error):
       if isinstance(error, commands.BotMissingPermissions):
          user = ctx.guild.get_member(ctx.author.id)
          await user.send('У бота нет доступа до этой команды. Дайте эму доступ `Банить учасников`')
→ Ссылка
Автор решения: UserGames

Попробуйте использовать декоратор @{тут название функции}.error.

@kick.error
async def kick_error(self, ctx, error):
    if isinstance(error, commands.BotMissingPermissions):
        # Тут код, если у бота нет прав
→ Ссылка
Автор решения: xZartsust
@commands.bot_has_permissions(ban_members = True, manage_messages = True)

Добавляете этот рядок где указываете права бота с которыми он сможет использовать ету команду, после этого в ошибках прописываете следующе:

if isinstance(error, BotMissingPermissions):
    ...

И все.

→ Ссылка