检查用户是否具有特定角色

时间:2019-01-23 09:55:14

标签: python python-3.x discord discord.py

我有一些代码,您可以在其中输入-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 :(得分:1)

您可以使用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}.")

答案 1 :(得分:1)

您可以使用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 error will be raised。然后,如果您想让漫游器说些什么,则可以handle that error

@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
相关问题