您如何在@client.event 上发送私人消息on_ready 又名。 Discord.py

How do you send a private message on_ready aka on a @client.event. Discord.py

我进行了多次尝试。

# One of the attempts
 ch = client.get_user(USERID)
 await ch.send("IDK")

#Another
 client = discord.Client()

 @client.event
 async def on_ready():
  user = "@name"
  user = discord.Member

  await user.send(user, "here")

#Another
 client = discord.Client()

 @client.event
 async def on_ready():
  user = discord.utils.get(client.get_all_members(), id='USERID')

  if user is not None:
    await client.send(user, "A message for you")
  else:
    await client.send(user, "A message for you")

#Another
 @client.event
 async def on_ready():
    ch = client.get_all_members()
    await ch.send("Hello")

# Another
    ch = client.start_private_message(USERID)
    await ch.send("IDK")

如您所见,我弄乱了变量,因为我注意到您可以像这样通过频道发送消息

channel = client.get_channel(CHANNELID)
await channel.send("Something)

但这不适用于 get_user。在此先感谢也抱歉我的 post/code 有多糟糕。

请允许我告知您您提供的代码片段有什么问题。

await client.send(user, "A message for you") 是较旧的语法,自 v1.0 migration.

以来就没有使用过

client.get_all_members() 不应在这种情况下使用,因为您只会获得机器人与其共享服务器的所有成员,而不是单个用户。

据我所知,

client.start_private_message(USERID) 不存在,因此我们可以假设这行不通。

我的建议是使用我将详细介绍的两种方法之一。

第一种方法是使用 client.fetch_user(),它将请求发送到 Discord API 而不是其内部缓存(如第二种方法)。使用此方法您将面临的唯一问题是,如果您在短时间内检索到太多用户,这将使您的速率受到限制。除此之外,我推荐这个方法。

第二种方法是通过client.get_guild() and getting your user through there via guild.get_member()获取服务器。但是,此方法将要求用户位于其缓存中,因此我认为这不应该是您的首选方法。

请在下面的代码中查看这两种方法。

@client.event
async def on_ready():
    # Method 1: Using fetch
    user = await client.fetch_user(USER_ID)
    await user.send("A message!")

    # Method 2: Using 'get'
    guild = client.get_guild(GUILD_ID)
    user = guild.get_member(USER_ID)
    await user.send("A message!")

其他链接: