get_member 总是 returns None (discord.py)

get_member always returns None (discord.py)

我正在尝试让我的机器人从用户 ID 作为 int 到 'fetch' 成员对象。我在开发门户中打开了所有特权网关意图。即使当我拉出我的实际成员对象时,使用 message.author,并将我的 id 放入其中仍然 returns none.

我的代码:

import discord
from discord.ext import commands
    
    
intents = discord.Intents().all()
intents.members = True
client = commands.Bot(command_prefix='c!', intents=intents)

## Skip some lines

   if message.content.startswith('c! null'):
      user = message.author
      copy=message.content
      testid=int(copy[8:])
      testid2= user.id
      print(testid)
      testing=message.guild.get_member(testid)
      testing2=message.guild.get_member(int(testid2))
      testing3= bot.get_user(testid)
      testing4=message.guild.fetch_member(int(testid2))
      guild=message.guild
      print(user)
      print(testing)
      print(testing2)
      print(testing3)
      print(guild)
      print(testing4)

我的输出:

93107305319538088
FakeUser#6969
None
None
None
MockServer
<coroutine object Guild.fetch_member at 0x7fc884680e40>


coroutine 'Guild.fetch_member' was never awaited
  await coro(*args, **kwargs)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback

I have all Privileged Gateway Intents turned on in Dev portal.

不幸的是,这没有任何作用,因为您的机器人也需要在其内部启用这些意图。

您必须在机器人中启用意图。当您使用 discord.Intents.default() 时,您将在机器人中禁用它们 - 因此,您将无法获得它们。

您需要启用您正在使用的特定意图。

intents = discord.Intents.default()
intents.members = True
#intents.presences = True
#intents.message_content = True

请注意,这仍然会失败。 get_member 如果成员不在机器人的缓存中,有时会失败,尽管这不太可能。

所以是的,你可以使用 fetch,但它是一个 API 调用,所以你需要 testing4 = await message.guild.fetch_member(int(testid2)).

而不是 testing4=message.guild.fetch_member(int(testid2))