首页 > 解决方案 > 如何在 discord.py 中遍历所有成员及其角色

问题描述

    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

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

标签: pythondiscord.pydiscord.py-rewrite

解决方案


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

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

推荐阅读