【问题标题】:discord.py trying to remove all roles from a userdiscord.py 试图删除用户的所有角色
【发布时间】:2021-04-01 14:39:47
【问题描述】:

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

我知道这种问题已经在这里问过:How to remove all roles at once (Discord.py 1.4.1)。 但它没有得到回答,根本没有帮助我

【问题讨论】:

  • 正如它所说的“未知角色”,我认为问题出在muteRole = ctx.guild.get_role(728203394673672333)。我建议您尝试使用其名称获取角色,例如muteRole = discord.utils.get(member.guild.roles, name='rolename')
  • muttRole 变量对它用于添加而不是删除的循环没有影响,它在我添加 for i in member.roles: await member.remove_roles(i) 循环之前也有效
  • 根据here。您可以使用await member.remove_roles(member.roles) 删除用户的所有角色。也许你可以试试看。

标签: python discord.py


【解决方案1】:

问题是所有用户都有一个“隐形角色”@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

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

【讨论】:

  • 这行得通,但现在它给了我discord.ext.commands.errors.CommandInvokeError: Command raised an exception: Forbidden: 403 Forbidden (error code: 50013): Missing Permissions 错误,尽管我是服务器所有者并且拥有一个实际上具有所有权限的角色
  • @Double 缺少的权限是机器人的,如果您检查服务器设置和角色,请确保机器人位于顶部。它只能更改该角色列表中低于自身的角色。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-31
  • 2020-08-03
  • 2021-10-19
  • 2021-07-16
相关资源
最近更新 更多