我有一个问题,我试图删除用户拥有的某种静音角色的所有角色,但它给了我这个错误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)