Discord.py-在Cog中提取成员

时间:2020-05-17 11:14:20

标签: python class bots discord discord.py

我在获取cog中的服务器成员时遇到问题。 (fetch_members())

import discord
from discord.ext import commands

class Guild(commands.Cog):
    def __init__(self, client):
        self.client = client

    @commands.Cog.listener()
    async def on_ready(self):
        print(discord.Guild.fetch_members(self))

def setup(client):
    client.add_cog(Guild(client))

此客户端本身就是漫游器。我想获取服务器上的成员列表,但出现错误

AttributeError: 'Guild' object has no attribute '_state'

我不知道如何以及在何处获得此状态及其状态。在文档中找不到。我对python非常陌生,对它的类也不了解。

即使我尝试像文档中那样在主要bot文件中执行此操作,它仍然无法正常工作,所以我想起来这必须在cog文件中。

也许您知道另一种方法。欢迎任何帮助!

1 个答案:

答案 0 :(得分:0)

根据document,您应该直接将此方法用于公会实例。我这样重写您的代码:

class Guild(commands.Cog):
    def __init__(self, client):
        self.client = client

    @commands.Cog.listener()
    async def on_ready(self):
        for guild in self.client.guilds:
            print(f'In {guild.name}')
            async for member in guild.fetch_members(limit=5):
                print(member.name)

def setup(client):
    client.add_cog(Guild(client))

由于您的机器人可能会加入许多行会,因此client.guilds是一个列表,您需要使用for循环进行迭代。 discord.Guild是一个类,client.guilds中的对象是此类的实例,大多数行为只能在该实例上使用。