从用户 discord.py 中删除每个角色

时间:2021-05-10 10:52:19

标签: python discord discord.py

我想在我的服务器上做一个禁令上诉系统。我想删除某人的每一个角色,并赋予他们 [Banned] 角色。我不能像为所有成员角色做的那样,因为有很多角色,甚至每天都会创建和删除一些自定义角色。

member_role = get(user.guild.roles, name="『✅』· ??????")
await user.remove_roles(member_role, reason=None, atomic=True)

我试过这个:discord.py trying to remove all roles from a user 但它没有用。也试过这个:

for role in user.roles:
    if role.name == '[Banned]':
        pass
    else:
        await user.remove_roles(role)

但无法让它工作。 (我没有python或discord.py的经验)

所以。如何从用户中删除每个角色,而不仅仅是 member_role

@bot.command()
@commands.has_permissions(ban_members=True)
async def ban(ctx, user: discord.Member, *, reason=None):
  await asyncio.sleep(1)
  banned_role = get(user.guild.roles, name="[Banned]")
  await user.add_roles(banned_role, reason=None, atomic=True)
  member_role = get(user.guild.roles, name="『✅』· ??????")
  await user.remove_roles(member_role, reason=None, atomic=True)
  banemb = discord.Embed(title="Ban", description=f"{user.mention} a fost banat/a. ", colour=discord.Colour.dark_red())
  banemb.add_field(name="Motiv:", value=reason, inline=False)
  await ctx.send(embed=banemb)

1 个答案:

答案 0 :(得分:1)

您无法通过这种方式获取角色列表。

要删除用户的所有角色,您必须对其应用 edit 并提供一个空的角色列表。

它还会更改代码的顺序,因为您首先必须删除角色,然后将角色重新分配给用户。

看看下面的代码:

@bot.command()
@commands.has_permissions(ban_members=True)
async def ban(ctx, user: discord.Member, *, reason=None):
    await asyncio.sleep(1)
    banned_role = discord.utils.get(user.guild.roles, name="[Banned]")
    await user.edit(roles=[]) # Remove all roles
    await user.add_roles(banned_role, reason=None) # Assign the new role
    banemb = discord.Embed(title="Ban", description=f"{user.mention} a fost banat/a. ",
                           colour=discord.Colour.dark_red())
    banemb.add_field(name="Motiv:", value=reason, inline=False)
    await ctx.send(embed=banemb)

我已经更改/删除了代码中的一些内容。当然,您必须根据自己的意愿再次添加它们。