[英]In discord.py, How do I use add_roles to add multiple roles to one person?
我正在编写一个机器人,该机器人将赋予一个人2个角色,一个被称为“扮演”,另一个则取决于他们当前的游戏。 现在,我不知道一次添加多个角色。 在这种情况下,我以Minecraft为例。 以下是相关代码:
totestafter = str(memberafter.game)
print(totestafter)
totestbefore = str(memberbefore.game)
print(totestbefore)
playing = discord.utils.get(memberafter.server.roles, name="Playing")
if "Minecraft" in totestafter:
print('if2 success')
mcrole = discord.utils.get(memberafter.server.roles, name="Minecraft")
addroles = [mcrole, playing]
await client.add_roles(memberafter, addroles)
elif "Minecraft" in totestbefore:
mcrole = discord.utils.get(memberafter.server.roles, name="Minecraft")
await client.remove_roles(memberafter, mcrole)
await client.remove_roles(memberafter, playing)
print("Removal Success")
这是我的错误: AttributeError: 'list' object as no attribute 'id'
我知道它是用于列表的,应该是一个参数,但是我还很新,无法弄清楚。
以下是add_role()
文档的摘录:
这个功能是协程 。 为指定的
Member
提供多个Role
。 您必须具有适当的权限才能使用此功能。 之后,直到收到相应的WebSocket
事件,才直接修改Member
对象。 参数:
member
(Member
)–要赋予角色的成员。*roles
–赋予成员的Role
的参数列表
文档本身有点误导,因为它提到了list
一词。 实际上, *
表示此参数将采用所有剩余的参数并将它们存储在列表中。
因此,您的add_roles
命令需要更改为:
await client.add_roles(memberafter, mcrole, playing)
或者,如果您想将角色保留在列表中,只需添加一个星号( *
):
addroles = [mcrole, playing]
await client.add_roles(memberafter, *addroles)
旁注,就像add_roles()
, remove_roles()
工作原理几乎相同,它删除角色而不是添加它们。
这意味着您也可以在一个命令中删除多个角色:
await client.remove_roles(memberafter, mcrole, playing)
您的完整代码段应如下所示:
playing = discord.utils.get(memberafter.server.roles, name="Playing")
mcrole = discord.utils.get(memberafter.server.roles, name="Minecraft")
if "Minecraft" in totestafter:
await client.add_roles(memberafter, mcrole, playing)
elif "Minecraft" in totestbefore:
await client.remove_roles(memberafter, mcrole, playing)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.