如何从我的 discord py 服务器获取所有成员

How to get all members from my discord py server

我想获得我服务器的所有成员,但是当我用谷歌搜索时,我发现这个代码片段可以做到这一点:

for guild in client.guilds:                      
 for member in guild.members:                     
  print(member)

嗯,这段代码应该显示所有成员,问题是它只显示我的 bot 用户。但是当我这样说的时候:

@tasks.loop(seconds=10)
async def counter():                                                                           
for guild in client.guilds:                      
 for member in guild.members:                     
  print(guild.members)

它显示这个对象内部的信息 [ ] 我不会准确显示它,因为在这个对象内部它有关于我的帐户和不和谐服务器的信息,所以我如何更改此代码以便它显示我成员人数还是成员姓名?

打印guild.member returns一个discord.Member对象,里面有很多信息。以下是您想要选择的方式:

获取成员数量:

for guild in client.guilds:
    print(len(guild.members))

正在获取成员名称:

for guild in client.guilds:
    for member in guild.members:
        print(member.name)

另外我建议减少循环时间以避免速率限制。

正如我在问题中指出的那样,成员计数是如何在对象 [ ] 内的,我访问了该对象的 属性,然后我设法获得了所有成员,这是代码:

for guild in client.guilds:
 print(guild.member_count)

你的方法是正确的是:

for guild in client.guilds:
    print(guild.member_count)

但是正如您在文档中看到的那样here

Due to a Discord limitation, in order for this attribute to remain up-to-date and accurate, it requires Intents.members to be specified.

因此,您必须在代码中启用成员意图并在 developer portal

中启用特权意图
intents = discord.Intents.default()
intents.members = True

#or 
intents = discord.Intents.all()

client = commands.Bot(command_prefix='!', intents=intents)

会员意向用于以下用途:link

这对应于以下事件:

  • on_member_join()

  • on_member_remove()

  • on_member_update() (nickname, roles)

  • on_user_update()

This also corresponds to the following attributes and classes in terms of cache:

  • Client.get_all_members()

  • Guild.chunk()

  • Guild.fetch_members()

  • Guild.get_member()

  • Guild.members

  • Member.roles

  • Member.nick

  • Member.premium_since

  • User.name

  • User.avatar (User.avatar_url and User.avatar_url_as())

  • User.discriminator