Check if User has a certain role

后端 未结 2 616
灰色年华
灰色年华 2021-01-25 13:14

I have code in which you can type -giverole e.g. -giverole @Soup Board of Executives.
What I need now is a method tha

相关标签:
2条回答
  • 2021-01-25 14:04

    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
    
    0 讨论(0)
  • 2021-01-25 14:17

    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}.")
    
    0 讨论(0)
提交回复
热议问题