Как сделать так чтобы при ошибке в дискорде печаталось: вы не имеете доступ к этой команде

Я хочу чтобы когда человек при отправке команды, бот выдавал сообщение: "вы не имеете доступ к этой команде" вот код:

@bot.command(name="удалить-товар")
@commands.has_role(549530893891403799)
async def remove_shop(ctx, role: disnake.Role):
    if ctx.guild.get_role(role.id) is None:
        await ctx.send("Данной роли не существует")
    else:
        cursor.execute("DELETE FROM shop WHERE role_id = ? AND guild_id = ?", (role.id, ctx.guild.id,))
        db.commit()

        await ctx.message.add_reaction('✅')

я уже добавил ограничение по айди

вот вся команда, мб я её неправильно сделал. эта часть команды заставляет не работать саму команду. а команда сверху вопроса с добавлением role = disnake.utils.get(ctx.guild.roles, id=879690987318964244) показывает сообщение только в терминале

@bot.command(name="наградить")
@commands.is_owner()
async def award(ctx, member: disnake.Member, amount: int):
    role = disnake.utils.get(ctx.guild.roles, id=879690987318964244)
    if role not in ctx.author.roles:
        await ctx.message.add_reaction('❌')
        await ctx.send('У вас должна быть соответствующая роль для использования этой команды')
    return
    if amount < 101:
        await ctx.message.add_reaction('❌')
        await ctx.send(embed=disnake.Embed(
            description=f"И нафига так мало?", color=disnake.Color.red()))
    else:
        cursor.execute("UPDATE users SET cash = cash + ? WHERE id = ? AND guild_id = ?", (amount, member.id, ctx.guild.id,))
        db.commit()
        await ctx.message.add_reaction('✅')
        await ctx.send(embed=disnake.Embed(
            description=f"{member.name} получил {amount}₽ от {ctx.author}", color=disnake.Color.red()
            ))

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

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

Если вам принципиально важно оставить проверку роли через @commands.has_role(), то ошибку, вызванную при несоответствии роли можно будет перехватить в обработчике on_command_error(ctx, exception)

То есть, проверяя конкретную ошибку:

@bot.event
async def on_command_error(ctx, error):
    if isinstance(error, commands.MissingRole):
        await ctx.send('У вас должна быть соответствующая роль для использования этой команды')
    else:
        # выведет полный текст ошибки со стеком вызовов
        raise error

Либо, чтобы не создавать отдельный обработчик, можно просто вручную проверять наличие роли в коде команды:

@bot.command()
async def test(ctx):
    role = discord.utils.get(ctx.guild.roles, id=783724505008570389)
    if role not in ctx.author.roles:
        await ctx.send('У вас должна быть соответствующая роль для использования этой команды')
        return

    . . .
→ Ссылка