discord.py remove_roles 不起作用
Posted
技术标签:
【中文标题】discord.py remove_roles 不起作用【英文标题】:discord.py remove_roles isn't working 【发布时间】:2018-10-04 18:59:35 【问题描述】:我有一个用于 Fortnite KD 排名自动权限的机器人。它的工作原理是;
如果用户有 1+ KD 机器人将分配用户“青铜”perm。
如果用户有 1.5+ KD 机器人将分配用户“Gümüş”perm。
如果用户有 2+ KD 机器人将分配用户“Altın”perm。
它就像一个魅力。但。 Bot 在下一个 perm 排名时必须删除旧角色。所以我的意思是,如果用户对“Altın”烫发进行排名。旧烫发“Gümüş”必须删除,但remove.roles
不起作用。
下面是这些行的一堆代码:
for list in LISTE:
roles = discord.utils.get(message.server.roles, name=list)
await client.remove_roles(message.author, role)
await client.add_roles(message.author, role)
elif ratio >= BRONZE_B and ratio <= BRONZE_E:
role = discord.utils.get(message.server.roles, name=LISTE[2])
embed=discord.Embed(color=0xcd8032)
embed.add_field(name="Oyuncu", value=username, inline=True)
embed.add_field(name="KD", value=str(ratio), inline=True)
embed.add_field(name="Lig", value=LISTE[2], inline=True)
await client.send_message(message.channel, embed = embed)
embed2=discord.Embed(color=0x727272)
embed2.add_field(name="Sonraki Lig", value=LISTE[3], inline=True)
embed2.add_field(name="Hedef KD", value=str(SILVER_B), inline=True)
embed2.set_footer(text="Lig verileriniz Fortnite KD değerlerinize göre güncellendi.")
await client.send_message(message.channel, embed = embed2)
for list in LISTE:
roles = discord.utils.get(message.server.roles, name=list)
await client.remove_roles(message.author, role)
await client.add_roles(message.author, role)
elif ratio >= SILVER_B and ratio <= SILVER_E:
role = discord.utils.get(message.server.roles, name=LISTE[3])
embed=discord.Embed(color=0x727272)
embed.add_field(name="Oyuncu", value=username, inline=True)
embed.add_field(name="KD", value=str(ratio), inline=True)
embed.add_field(name="Lig", value=LISTE[3], inline=True)
await client.send_message(message.channel, embed = embed)
embed2=discord.Embed(color=0xcfb223)
embed2.add_field(name="Sonraki Lig", value=LISTE[4], inline=True)
embed2.add_field(name="Hedef KD", value=str(GOLD_B), inline=True)
embed2.set_footer(text="Lig verileriniz Fortnite KD değerlerinize göre güncellendi.")
await client.send_message(message.channel, embed = embed2)
如果我使用 replace_roles
而不是 remove_roles
它似乎可以工作,但这次它会删除所有角色并将其替换为更高级别的权限。
我的意思是,当我使用 replace_roles
时,如果主持人使用我的机器人命令 /derece
检查他的等级,机器人会承担他的所有角色并给予他更高的 KD 等级权限。
我希望它像这样工作;
如果用户有 1+ KD 机器人将分配用户“青铜”perm。
如果用户排名高达 1.5+ KD,则删除
Bronz
烫发并给予Silver
烫发如果用户排名达到 2+ KD,则删除
Silver
perm 并给出Gold
perm
谢谢。
【问题讨论】:
【参考方案1】:同时执行 remove_roles 和 add_roles 不起作用。相反,您需要使用 replace_roles。要让 replace_roles 像这样工作,您首先需要从用户那里获取所有角色,然后遍历该列表并删除您不想要的角色并添加您想要的角色,然后使用该列表调用 replace_roles。这样它就不会删除您未指定的旧角色。
【讨论】:
此处的文档:discordpy.readthedocs.io/en/latest/…。关于remove_roles
和add_roles
不能一起工作,是不是因为它们都依赖于接收Websocket 事件?【参考方案2】:
就像其他用户提到的那样,replace_roles
的工作原理是删除所有角色,然后添加您想要的角色。
我的解决方法是简单地将较高角色添加到用户,同时保留较低角色。您可以在服务器设置中更改角色的顺序/权限,以便更高的角色优先,因此每个用户都有正确的角色颜色。
【讨论】:
以上是关于discord.py remove_roles 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Discord Bot 不播放声音 - Discord.py
关闭 Discord 机器人连接而不终止命令行 (discord.py)
discord.py和discord.py的区别[voice]