如何遍历discord.py中的所有成员及其角色

时间:2021-01-13 11:11:55

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

    async def interest(self):
        channel = self.client.get_channel(779743465252192297)
        em = discord.Embed(title ="Interest By time : ",color = discord.Colour.random())
        total = 0 
        for members in discord.Guild.members:
            try:
                em.add_field(name = "Member Name: ",value = members.name)
                for keys,values in role.items():
                    if keys in members.roles.name:
                        em.add_field(name=f"{keys} : " ,value = values)
                        total += values
                em.add_field(name = "Total : " ,value = total )
                em.set_footer(text = "Type `.role_shop` to See how you can spend Money",icon_url=channel.guild.owner.avatar_url)
                
                await members.send(embed = em)
            except:
                pass

这是我的代码,我想遍历所有成员,然后遍历他们的角色,并向 var total 中添加一个值。 这是我的角色字典:role = {"Coder":100,"Gamer":100,"Anime Weeb":100,"Superior Coder":150,"Mods":100,"Partners":50,"Owner":999999}

我收到的错误是: File "d:\bot1\fold\onevent.py", line 33, in interest for members in discord.Guild.members: TypeError: 'property' object is not iterable

请提供一种我可以执行任务的方法

1 个答案:

答案 0 :(得分:0)

您不能直接使用 discord.Guild.members。您需要一个 discord.Guild 对象的实例。您可以通过使用 client.get_guild(id) 来获得它。此外,member.roles 返回一个列表。所以你不能使用 member.roles.name。您也必须遍历角色,或者您可以在一行 for 循环中完成,但您必须稍微更改代码以获得更优化的代码。

async def interest(self):
    roles = {"Coder": 100, "Gamer": 100, "Anime Weeb": 100, "Superior Coder": 150, "Mods": 100, "Partners": 50,
            "Owner": 999999}
    channel = self.client.get_channel(779743465252192297)
    guild = self.client.get_guild(<guild id>)
    em = discord.Embed(title="Interest By time : ", color=discord.Colour.random())
    total = 0
    for members in guild.members:
        try:
            em.add_field(name="Member Name: ", value=members.name)
            for role in [role for role in members.roles if role.name in roles.keys()]:
                em.add_field(name=f"{role} : ", value=roles[role])
                total += roles[role]
            em.add_field(name="Total : ", value=total)
            em.set_footer(text="Type `.role_shop` to See how you can spend Money",
                          icon_url=channel.guild.owner.avatar_url)

            await members.send(embed=em)
        except:
            pass