Discord.py 尝试删除用户的所有角色

Dou*_*ble 1 python discord.py

我有一个问题,我试图删除用户拥有的某种静音角色的所有角色,但它给了我这个错误discord.ext.commands.errors.CommandInvokeError: Command raised an exception: NotFound: 404 Not Found (error code: 10011): Unknown Role

这是我的代码

@client.command(aliases=['m'])
@commands.has_permissions(kick_members = True)
async def mute(ctx,member : discord.Member):
    muteRole = ctx.guild.get_role(728203394673672333)
    for i in member.roles:
        await member.remove_roles(i)
    await member.add_roles(muteRole)
    await ctx.channel.purge(limit = 1)
    await ctx.send(str(member)+' has been muted!')
Run Code Online (Sandbox Code Playgroud)

我知道这种问题已经在这里被问过:How to remove all Roles at Once (Discord.py 1.4.1)。但没有得到答复,对我没有任何帮助

小智 6

问题是所有用户都有一个“隐形角色” @everyone。如果你尝试的话你会看到它出现

for i in member.roles:
    print(i)
Run Code Online (Sandbox Code Playgroud)

remove_roles是一个高级函数,它将尝试删除@everyone,这会导致您的错误。

要清除用户当前的所有角色,您可以执行以下操作:

@client.command(aliases=['m'])
@commands.has_permissions(kick_members = True)
async def mute(ctx, member : discord.Member):
    muteRole = ctx.guild.get_role(775449115022589982)
    await member.edit(roles=[muteRole]) # Replaces all current roles with roles in list
    await ctx.channel.purge(limit = 1)
    await ctx.send(str(member)+' has been muted!')
Run Code Online (Sandbox Code Playgroud)

await member.edit(roles=[])将所有当前角色替换为您在列表中拥有的角色。将列表留空以删除用户的所有角色。

不和谐.成员.编辑

虽然如果你想用 a 来做for loop,你可以使用try

@client.command(aliases=['m'])
@commands.has_permissions(kick_members = True)
async def mute(ctx, member : discord.Member):
    muteRole = ctx.guild.get_role(775449115022589982)
    for i in member.roles:
        try:
            await member.remove_roles(i)
        except:
            print(f"Can't remove the role {i}")
    await member.add_roles(muteRole)
    await ctx.channel.purge(limit = 1)
    await ctx.send(str(member)+' has been muted!')
Run Code Online (Sandbox Code Playgroud)