Проверка наличия у message.author определенной роли

#python #discord.py

Вопрос:

Я пытаюсь создать команду, которую могут использовать только люди с определенной ролью. В настоящее время я использую:

 if discord.utils.get(message.author.roles, name="Admin").name == "Admin":
    #do stuff here
 

это работает, но если у пользователя нет этой роли, а

Ошибка атрибута: объект «Нетип» не имеет атрибута «имя»

возникает ошибка. Есть ли здесь какой-нибудь туземец discord.py функция, которую можно было бы использовать?

Я не горю желанием пытаться уловить проблему с исключениями

has_roles() кажется, больше не существует

Комментарии:

1. » has_roles() кажется, больше не существует » — Вы уверены в этом? Что вы пробовали?

2. Ну, я запустил поиск по api discordpy.readthedocs.io/en/stable/api.html и нет, это не показалось @Dominik

3. Просто чтобы убедиться: он все еще существует в документах

Ответ №1:

loa_in_ предоставил хороший метод, но вы также можете проверить его по-другому.

Взгляните на следующий код:

 @client.command()
async def test(ctx):
    role = discord.utils.get(ctx.guild.roles, name="Admin") # Get the role
    if role in ctx.author.roles: # Check if the author has the role
        await ctx.send("You can do this")
    else:
        await ctx.send("You do not have the `Admin` role.")
 
  • Вы также можете вставить id вместо имени, поэтому вам не придется менять код каждый раз, когда меняется имя роли.

Ответ №2:

Сообщение об ошибке очень полезно здесь. Видимо get , иногда возвращается None .

 role = discord.utils.get(message.author.roles, name="Admin")
if role is not None and role.name == "Admin":
    #do stuff here