在discord.py中,如何使用add_roles给一个人添加多个角色?
In discord.py, How do I use add_roles to add multiple roles to one person?
我正在编写一个机器人,它会给一个人 2 个角色,一个叫做 'Playing',另一个取决于他们当前的游戏。现在,我想不出一次添加多个角色。在这种情况下,我以 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()
文档的节选:
This function is a coroutine. Gives the specified Member
a number of
Role
's. You must have the proper permissions to use this function. The
Member
object is not directly modified afterwards until the
corresponding WebSocket
event is received. Parameters:
member
(Member
) – The member to give roles to.
*roles
– An argument list of Role
s to give the member
文档本身有点误导,因为它提到了 list
这个词。事实上,*
意味着这个参数将取 all of the leftover arguments 并将它们存储到列表中。
因此,您的 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)
我正在编写一个机器人,它会给一个人 2 个角色,一个叫做 'Playing',另一个取决于他们当前的游戏。现在,我想不出一次添加多个角色。在这种情况下,我以 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()
文档的节选:
This function is a coroutine. Gives the specified
Member
a number ofRole
's. You must have the proper permissions to use this function. TheMember
object is not directly modified afterwards until the correspondingWebSocket
event is received. Parameters:
member
(Member
) – The member to give roles to.*roles
– An argument list ofRole
s to give the member
文档本身有点误导,因为它提到了 list
这个词。事实上,*
意味着这个参数将取 all of the leftover arguments 并将它们存储到列表中。
因此,您的 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)