问题是,当您使用member.edit
,然后将角色列表设置为空时,您的命令会try 从包含@Everyone的成员中删除所有角色.
所以我有两个解决方案给你:
首先:
@bot.command()
@commands.has_permissions(manage_roles=True)
async def strip(ctx:commands.Context,member:discord.Member):
try:
for i in member.roles:
try:
await member.remove_roles(i)
except:
print(f"Can't remove the role {i}")
await ctx.send(f"Roles have been removed from {member.mention}")
except discord.Forbidden:
await ctx.send("You don't have permission")
except discord.HTTPException:
await ctx.send("Command failed")
第二个(与你的相似):
@bot.command()
@commands.has_permissions(manage_roles=True)
async def strip2(ctx:commands.Context, member: discord.Member):
everyone = ctx.guild.default_role
try:
await member.edit(roles=[everyone])
await ctx.send(f"All roles have been removed from {member.display_name}.")
except discord.Forbidden:
await ctx.send("I don't have permission to remove roles.")
except discord.HTTPException:
await ctx.send("Failed to remove roles.")
在第二种方法中,如果你在机器人上try 它,它不会起作用,因为机器人有分配给它们的角色,你不能移除它们.
然后,您应该这样定义该角色:
guild=ctx.guild
role = guild.get_role(ROLE_ID)
然后将角色粘贴到everyone
之后或之前的列表中:
await member.edit(roles=[everyone,role]
请注意,如果您这样离开它,它会将机器人角色分配给您在其上使用命令的任何成员,所以只有在测试时才这样做,而不是从列表中删除role
!如果你还需要什么,你可以在我的描述中找到我的discord用户!