我想在我的服务器上做一个禁令上诉系统。我想删除某人的每一个角色,并赋予他们 [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)
答案 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)
我已经更改/删除了代码中的一些内容。当然,您必须根据自己的意愿再次添加它们。