我做了一个删除所有角色命令,但当我使用它时,机器人说我无权删除角色当它执行时我该怎么办
@bot.command()
@commands.has_permissions(manage_roles=True)
async def strip(ctx, member: discord.Member):
try:
await member.edit(roles=[])
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.")
问题是当您使用
member.edit
然后将角色列表设置为空时,您的命令会尝试从包括 @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.")
在第二种方法中,如果您在机器人上尝试,它将不起作用,因为机器人分配了您无法删除的角色。 然后你应该做的是像这样定义该角色:
guild=ctx.guild
role = guild.get_role(ROLE_ID)
然后将角色粘贴到列表中的
everyone
之后或之前:
await member.edit(roles=[everyone,role]
请注意,因为如果您这样保留它,它会将机器人角色分配给您使用该命令的任何成员,因此仅在测试时执行此操作,而不是从列表中删除
role
!如果您需要其他任何东西,您可以在我的描述中找到我的不和谐用户!