Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python discord.py guild.members只返回4个成员,而不是所有成员_Python_Python 3.x_Discord_Discord.py_Discord.py Rewrite - Fatal编程技术网

Python discord.py guild.members只返回4个成员,而不是所有成员

Python discord.py guild.members只返回4个成员,而不是所有成员,python,python-3.x,discord,discord.py,discord.py-rewrite,Python,Python 3.x,Discord,Discord.py,Discord.py Rewrite,我正在尝试创建一个discord selfbot,当键入>>>成员时,它可以在控制台中打印所有成员的名称。然后,它应该删除>>>成员消息并在控制台中打印名称。我知道这是违反TOS的 这是我的密码: import discord from discord.ext import commands intents = discord.Intents().all() bot = commands.Bot(">>>", self_bot=True, intents=

我正在尝试创建一个discord selfbot,当键入>>>成员时,它可以在控制台中打印所有成员的名称。然后,它应该删除>>>成员消息并在控制台中打印名称。我知道这是违反TOS的

这是我的密码:

import discord
from discord.ext import commands

intents = discord.Intents().all()
bot = commands.Bot(">>>", self_bot=True, intents=intents)

@bot.command()
async def Members(ctx):
    await ctx.message.delete()
    members = ctx.guild.members
    for member in members:
        print(member.name)

bot.run("shit I leaked my token", bot=False)

它成功地删除了消息,但只向控制台打印了四个成员的名称。我不知道这里出了什么问题。我的意图似乎配置正确。我做错了什么?每个服务器返回的成员似乎是随机的。他们可能是机器人、在线或离线的人。我在网上看到的最近的一个问题是guild.members只返回消息的作者(这可以通过故意修复)。非常感谢您的帮助。非常感谢。

截至2020年10月27日,Discord通过添加意向更新了他们的网关。正如在文章中看到的,最有可能影响代码的部分在这里引用:

对于没有帮会成员意图的机器人-------- 如果你不需要在公会成员加入、离开或更新时做任何事情,你不需要成员的意图。您无法获取完整的成员列表来填充缓存,但在大多数情况下,构建持久缓存不需要完整的成员列表

您需要在开发人员门户中启用服务器成员意图,以便让bot能够看到整个缓存的成员列表

注意:如果您的机器人在少于100个协会中,您完全可以启用此特权意图,但一旦您超过100个协会,您将需要验证您的机器人(它将在机器人标记旁边有一个视觉验证复选标记)并获取数据白名单,链接

或者 您可以使用
fetch\u members
遍历公会成员:

ctx.guild.fetch_成员中成员的异步(限制=1000): 打印(成员名称)
您可以尝试使用
members=wait guild.fetch\u members(limit=150).flatte()手动获取它。