Проверьте, есть ли у пользователя определенная роль - PullRequest
0 голосов
/ 23 января 2019

У меня есть код, в котором вы можете ввести -giverole <user> <rolename>, например. -giverole @Soup Board of Executives.
Теперь мне нужен метод, который проверяет, играет ли пользователь, набравший команду, определенную роль.

У меня есть код, который может дать кому-то роль:

@client.command(pass_context=True)
async def giverole(ctx, member: discord.Member, *, role: discord.Role):
    await client.add_roles(member, role)
    await client.say("The role '" + str(role) + "' has been given to " + member.mention + " .")

Это должно сделать await client.say(), если пользователь имеет правильный ранг. Если они этого не делают, то возникает сообщение об ошибке.

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Вы можете использовать проверку commands.has_role, чтобы определить, имеет ли лицо, вызывающее команду, определенную роль:

@client.command(pass_context=True)
@has_role("Role Name")
async def giverole(ctx, member: discord.Member, *, role: discord.Role):
    await client.add_roles(member, role)
    await client.say(f"The role '{role}' has been given to {member.mention}.")

Когда кто-то без роли пытается вызвать ее, commands.CheckFailure ошибка будет повышена .Затем вы можете обработать эту ошибку , если хотите, чтобы бот что-то сказал:

@giverole.error
async def giverole_error(error, ctx):
    if isinstance(error, CheckFailure):
        await client.send_message(ctx.message.channel, "You are lacking a required role")
    else:
        raise error
0 голосов
/ 23 января 2019

Вы можете использовать discord.Member.roles , чтобы сделать что-то вроде

from discord.utils import get

@client.command(pass_context=True)
async def giverole(ctx, member: discord.Member, *, role: discord.Role):
  check_role = get(ctx.message.server.roles, name='Board of Executives')
  if check_role not in member.roles:
    await client.say(f"You don't have the role '{str(role)}'")
  else:
    await client.add_roles(member, role)
    await client.say(f"The role '{str(role)}' has been given to {member.mention}.")
...