Как сделать так чтобы при ошибке в дискорде печаталось: вы не имеете доступ к этой команде
Я хочу чтобы когда человек при отправке команды, бот выдавал сообщение: "вы не имеете доступ к этой команде" вот код:
@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 шт):
Если вам принципиально важно оставить проверку роли через @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
. . .