【问题标题】:replace_roles discord.py really confusing?replace_roles discord.py 真的很混乱吗?
【发布时间】:2019-02-01 13:24:20
【问题描述】:
我不完全明白如何在 discord.py 中使用replace roles。我在互联网上到处搜索,但我似乎仍然无法弄清楚如何实现它。
我正在努力让用户可以自行分配角色,但一次只能有 1 个角色。例如,如果他们有 role "1" 并输入命令以获取 role "2",我希望机器人替换 role "1" 具有 role "2",因此它们应该只有 role "2"。
我确保机器人角色在层次结构中高于我为人们分配的角色,并且机器人具有管理角色权限。我没有使用重写,我使用的是 python 3.6。
【问题讨论】:
标签:
python
replace
bots
roles
discord.py
【解决方案1】:
您只需将Member 和Roles 传递给它,它就会用您传递的角色替换该成员的所有当前角色。
@bot.command(pass_context=True)
async def giverole(ctx, role: discord.Role):
await bot.replace_roles(ctx.message.author, role)
您可以使用 !giverole @RoleName 之类的名称来调用它。如果调用者的最高角色高于机器人的最高角色,这可能会导致discord.Forbidden 错误。
【解决方案2】:
Discord.py 有一个有用的函数 discord.utils.get(),它接受某种列表和您正在寻找的参数。例如,
targetrole = discord.utils.get(myserver.roles, name="MyTargetRole")
请注意,如果您通过 PM 更改用户的角色,则该消息不会向您提供服务器。您可以从 client.servers 以相同的方式获取服务器
另请注意,通过 PM 将 message.author 传递给 replace_roles 将导致错误,因为该用户实例没有服务器。相反,从 server.members 中获取用户。您可以匹配 message.author 提供的名称。
第三,注意replace_roles 是一个异步函数。您可能想在它之前添加“等待”,否则您可能看不到任何结果。