我正在尝试获取服务器上所有用户的数量,尽管机器人会响应其他人的消息,但它只能看到自己。
client = discord.Client()
@client.event
async def on_message(message):
msg=message.content
if message.author == client.user:
return
if msg.startswith("count"):
await message.channel.send(client.users)
代码输出一个包含一个用户的列表(机器人本身)
答案 0 :(得分:2)
您需要启用 Intent,它们丢失了。
确保在 Discord Developer Portal 中为您的应用程序启用它们(设置 -> Bot)。
要将它们实现到您的代码中,您可以使用以下内容:
intents = discord.Intents.all() # Imports all the Intents
client = commands.Bot(command_prefix="YourPrefix", intents=intents)
或者在您的情况下:
intents = discord.Intents.all() # Imports all the Intents
client = discord.Client(intents=intents)
您可以在文档 here 中阅读更多内容。
答案 1 :(得分:0)
您遇到的问题是因为从 1.5 版(不是我最初认为的 1.6 版,感谢 Łukasz Kwieciński)discord.py 需要您指定您的机器人需要的意图,以便从 discord 的 API 接收此类信息。< /p>
如果您更改此代码,您的代码将起作用:
intents = discord.Intents.default()
intents.members = True
client = discord.Client(intents=intents)
要使其正常工作,您需要转到机器人的 page 并启用成员意图。
对于我在您的代码中看到的内容,您似乎正在尝试发出命令,我强烈建议您开始使用命令扩展名。您的代码如下所示:
from discord.ext import commands
intents = discord.Intents.default()
intents.members = True
bot = commands.Bot(command_prefix='.', intents=intents)
@bot.command()
async def count(ctx):
await ctx.send(bot.users)
bot.run(TOKEN)
生成的代码更加紧凑、可读和可维护。 您可以查看其他示例 here