#discord.py-rewrite
#discord.py-переписать
Вопрос:
Я пытаюсь создать команду, которая работает только с определенной ролью. Я не уверен на 100%, как это сделать, и я не могу найти решение где-либо еще. Мой код останавливается, потому что я еще не очень хорошо знаком с кодированием, но вот оно:
@bot.command()
async def sign(ctx, member: discordMember):
if ctx.author.server_roles
Отсюда я полностью потерян и понятия не имею, что делать.
Ответ №1:
Самый эффективный способ сделать так, чтобы команда могла использоваться только с определенной ролью, — это .has_role()
декоратор. Вы можете поместить туда строку с именем роли (с учетом регистра) или идентификатором роли (рекомендуется), более подробную информацию можно найти в документации Вот пример:
@bot.command()
@commands.has_role("Administrator")
async def foo(ctx)
await ctx.send("bar")
Если вы хотите сделать так, чтобы пользователь мог использовать эту команду только тогда, когда у него есть какая-либо роль, тогда .has_any_role()
это был бы правильный путь, он также принимает строки или целые числа. Вы можете найти более подробную информацию об этом здесь. Вот краткий пример того, как это будет работать:
@bot.command()
@commands.has_any_role("Administrators", "Moderators", 492212595072434186)
async def foo(ctx):
await ctx.send("bar")
Счастливого кодирования!
Комментарии:
1. Спасибо за помощь! Еще одна вещь, как я могу создать сообщение об ошибке, если у них нет роли?
Ответ №2:
Обычно, когда кто-то пытается выполнить такую команду с .has_role
помощью декоратора, discord.ext.командует.Возникает пропущенная роль, поэтому обработка ее будет выглядеть примерно так :
@bot.command()
@commands.has_any_role("Administrators", "Moderators", 492212595072434186)
async def foo(ctx):
try:
await ctx.send("bar")
except commands.MissingRole:
await ctx.send("lol")
Конечно, если у вас много команд, я бы рекомендовал использовать глобальный обработчик ошибок.