簡體   English   中英

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

[英]Check if the command author has a specific role from a list of role IDs

目前,我只能以字符串變量的形式檢查命令作者的特定角色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與上面列表中的ID匹配的角色,則可以執行TODO。

您可以使用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獲得用戶當前具有的角色,這將返回一個角色列表 ,並將其存儲在rolesUserHas
但是,我們仍然無法比較兩個列表,因為其中一個是ID(數字)列表,另一個是角色列表(不是數字,也就是您不能將數字與非數字進行比較)

因此,我要做的就是將角色列表“轉換”為用戶擁有的角色ID列表,並將其存儲在rolesIDuserhas
(我是如何“轉換”的,只需創建一個新列表,然后將每個角色的所有ID添加到列表中)

所以,現在我們得到的標識(名單listOfAllowedRoles ,數字)來比較的ID(另一個列表rolesIDuserhas ,數字)。 但是我們要做的就是檢查用戶是否至少具有第一個列表中的任何角色
python中的any()函數正是我們想要的。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM