如何从公会discord.py中的所有成员中删除多个角色

时间:2020-06-06 16:33:35

标签: python python-3.x discord.py discord.py-rewrite

我正在尝试拥有用户可以分配的自定义角色,以便可以访问特定的语音/文本通道,并且我希望能够通过一个命令从所有拥有该角色的人中删除所述角色(因此对于当我努力为上述角色添加更多功能时,我可以确保没有人真正干涉过)。

目前,到目前为止,我正在使用它,它的意思是从键入命令的人员中删除所有自我分配的角色,目前我仅适用于管理员,但它实际上没有用哈哈哈

@bot.command()
@commands.has_permissions(ban_members=True)
async def swipe(ctx):
    member = ctx.message.author
    role1 = get(member.guild.roles, name = "Minecraft")
    role2 = get(member.guild.roles, name = "CS:GO")
    role3 = get(member.guild.roles, name = "Valorant")
    role4 = get(member.guild.roles, name = "PUBG")
    role5 = get(member.guild.roles, name = "TF2")
    role6 = get(member.guild.roles, name = "COD")
    await member.remove_roles(role1, role2, role3, role4, role5, role6)
    await ctx.send(f'Removed **all** experimental roles.')

总而言之,我正在尝试创建一个命令,使管理员能够从服务器中每个说过的角色中删除某些角色(Minecraft,CS:GO,Valorant,PUBG,TF2,COD)单个命令(滑动)的角色。欢迎所有建议和想法!

提前谢谢!

1 个答案:

答案 0 :(得分:0)

假设从get()导入了discord.utils,这将从执行命令的用户中删除所有指定的角色:

@bot.command()
@commands.has_permissions(ban_members=True)
async def swipe(ctx):
    member = ctx.message.author
    role_names = ("Minecraft", "CS:GO", "Valorant", "PUBG", "TF2", "COD")
    roles = tuple(get(ctx.guild.roles, name=n) for n in role_names)
    await member.remove_roles(*roles)
    await ctx.send(f'Removed **all** experimental roles.')

这会从服务器上所有拥有该角色的成员中删除所有指定的角色:

@bot.command()
@commands.has_permissions(ban_members=True)
async def swipe(ctx):
    role_names = ("Minecraft", "CS:GO", "Valorant", "PUBG", "TF2", "COD")
    roles = tuple(get(ctx.guild.roles, name=n) for n in role_names)
    for m in ctx.guild.members:
        try:
            await member.remove_roles(*roles)
        except:
            print(f"Couldn't remove roles from {m}")
    await ctx.send(f'Removed **all** experimental roles.')

try / except对于那些无法从其中删除角色的用户而言。这最像是因为该漫游器没有足够的权限来执行此操作,或者其中一个角色高于该漫游器在角色层次结构中的最高角色。


参考: