【问题标题】:discord.py remove every role from list of rolsdiscord.py 从角色列表中删除每个角色
【发布时间】:2021-11-06 20:33:55
【问题描述】:

我正在构建一个可以删除许多角色的机器人。到目前为止,我可以获得想要从成员中删除的所有角色的列表。但我不想一次删除所有角色,因为列表的长度可以在 2 到 50 之间。我知道我可以删除多个角色

member.remove_roles (Role1, Role2, Role3 ...)

但我不知道列表中有多少角色,所以我真的不知道如何优雅地删除所有角色。也许你们中的一个可以帮助我?

【问题讨论】:

标签: python discord.py


【解决方案1】:

您可以使用 member.edit 并传入成员应具有的角色列表。如果您想删除角色,您可以获取当前角色并减去您要删除的角色

# list_of_roles = [role1, role2]
await member.edit(roles=set(member.roles)-set(list_of_roles))

我们将列表转换为集合,因为您不能减去列表,但您可以减去集合

我刚刚检查了 member.remove_roles 和 it also uses member.edit 的代码,所以这只是删除角色的更快方法

【讨论】:

    【解决方案2】:

    您可以使用 for 循环,如下所示:

    for role in role_list:
        if role in member.roles:
            await member.remove_roles(role)
    

    【讨论】:

    • 是的,我知道,但问题是,我的速率受到限制
    • 然后使用冷却时间。 Here 是一个 stackoverflow 问题
    • 嗯好吧,编辑角色的速率限制似乎是每 24 小时 1000 个。如果您立即触发负载,您可以使用此解决方案来解决问题,但我看到您已经为您的问题找到了更好的解决方案,很高兴您解决了它!
    【解决方案3】:

    Dominik 的帮助下,我想出了一个看起来像这样的解决方案

                for member in guild.members:
                    print(member)
                    roles2 = member.roles
                    c = 0
                    for r in roles2:
                        print(r)
                        if r.id in roles:
                            roles2.pop(c)
                        c += 1
                    print(roles2)
                    await member.edit(roles = roles2)
    

    此代码从 Id 位于另一个名为角色的列表中的角色中删除每个角色

    【讨论】:

      猜你喜欢
      • 2021-07-31
      • 1970-01-01
      • 2020-08-03
      • 2021-10-10
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-09
      相关资源
      最近更新 更多