从角色ID列表中检查命令作者是否具有特定角色

时间:2019-08-14 21:20:21

标签: python bots discord

当前,我只能以字符串变量的形式检查命令作者的特定角色ID,但是如果列表中的任何ID与角色的ID相匹配,我就无法通过它来检查列表。分配给他们。我已经尝试了很多天了几天,但是它总是让每个ID都通过或者不让它通过。

这是用于检查单个变量的当前代码:

if (allowed_role_id in [roles.id for roles in ctx.message.author.roles]): 
    # TODO here
else:
    # Other TODO here

我希望它从这样的列表中进行检查:

listOfAllowedRoles = ['11111111111111111', '22222222222222222', '3333333333333333']

如果命令作者的角色与上面列表中的ID匹配,则执行TODO。

1 个答案:

答案 0 :(得分:0)

您可以使用any()检查一个列表是否至少包含另一个列表中的一个元素:

# Whatever role ID
listOfAllowedRoles = [213183812831, 1238183283183813 ]

# Wont work if message is not in a guild
rolesUserHas = message.author.roles

# Or some other better way to get the list of IDs of roles the user has.
rolesIDuserHas = []
for role in rolesUserHas:
  rolesIDuserHas.append(role.id)

if any(item in listOfAllowedRoles for item in rolesIDuserHas):
  # User has at least one of the roles
else:
  #user do not have any of the roles.

编辑

基本上,listOfAllowedRoles是您要检查的角色的列表,也就是用户需要的角色(至少是其ID)。

>

然后,首先,我们通过执行message.author.roles来获得用户当前拥有的角色,这将返回一个角色的 list ,并将其存储在rolesUserHas中。
但是,我们仍然无法比较两个列表,因为一个是ID(数字)列表,另一个是角色列表(不是数字,也就是您不能将一个数字与一个非数字进行比较)

所以我要做的是将角色列表“转换”为用户拥有的角色ID列表,并将其存储在rolesIDuserhas
中 (我是如何“转换”的,只需创建一个新列表,然后将每个角色的所有ID添加到列表中即可)

因此,现在我们获得了一个ID列表(listOfAllowedRoles,数字)与另一个ID(列表,rolesIDuserhas,数字)进行比较。但是我们要做的就是检查用户在第一个列表中是否至少具有任何个角色
python中的any()函数完全可以满足我们的要求。

因此,如果用户具有any(item in listOfAllowedRoles for item in rolesIDuserHas)列表中的至少一个角色,listOfAllowedRoles将返回true。