Discord.py 删除所有角色命令

问题描述 投票:0回答:1

我做了一个删除所有角色命令,但当我使用它时,机器人说我无权删除角色当它执行时我该怎么办

@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.")
python discord discord.py command bots
1个回答
0
投票

问题是当您使用

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
!如果您需要其他任何东西,您可以在我的描述中找到我的不和谐用户!

© www.soinside.com 2019 - 2024. All rights reserved.