简体   繁体   中英

Check if User has a certain role

I have code in which you can type -giverole <user> <rolename> eg -giverole @Soup Board of Executives .
What I need now is a method that checks to see if the user typing the command has a certain role.

I have code that can give a role to someone:

@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 + " .")

It should do await client.say() if the user has the right rank. If they don't, then it raises an error message.

You can use discord.Member.roles to do something like

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}.")

You can use the commands.has_role check to determine whether or not the person invoking the command has a particular 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}.")

When someone without the role tries to invoke it, a commands.CheckFailure error will be raised . You can then handle that error if you want the bot to say something:

@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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM