首页 > 解决方案 > 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!')

我知道这种问题已经在这里问过:如何一次删除所有角色(Discord.py 1.4.1)。但它没有回答,根本没有帮助我

标签: pythondiscord.py

解决方案


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

for i in member.roles:
    print(i)

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!')

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

discord.Member.edit

虽然如果你想用 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!')

推荐阅读