python - discord.py 1.7.3 - 将消息发送到特定用户 ID ( on_ready )

所以我遇到了一个问题,我向列表(memberlist var)上的每个用户 id 发送一条 dm 消息(message var),当我尝试发送它时,我收到一条错误消息:AttributeError: 'NoneType' object has no attribute 'send'

代码:

client = discord.Client()
    @client.event
    async def on_ready():
        print(f"\n{Color.GREEN} > {Color.WHITE} Logged in as: {client.user.name}")
        # send message to each member in memberlist
        for member in memberslist:
            print(member)       
            str(member)     
            user = client.get_user(member)
            await user.send(message)
            print(f"\n{Color.GREEN} > {Color.WHITE} Message sent to {client.get_user(member).name}")
        print(f"\n{Color.GREEN} > {Color.WHITE} Done!\n")

回答1

https://discordpy.readthedocs.io/en/stable/api.html?highlight=client#discord.Client.get_user 方法仅查看成员缓存,并且在您的 get_user 调用时,您的机器人的成员缓存为空,因此返回 None 并导致您出现此错误。

您可以做的是使用 https://discordpy.readthedocs.io/en/stable/api.html?highlight=client#discord.Client.fetch_user 协程手动获取用户。

回答2

它看起来像这样,我已经测试了代码并且它可以工作。请注意,机器人需要与用户共享服务器才能向他们发送消息(加上用户 dms 需要接受来自服务器成员的消息)。

@client.event
async def on_ready():
  print('bot is ready')
  user = await client.fetch_user(userid)
  await user.send(message)

相似文章

html - CSS 响应式容器到文本

我在编程方面仍然相对缺乏经验,这就是我问这个问题的原因。我有一个带有backgroundimage的部分,其中包含文本;文本也占用了它需要的空间,但不幸的是backgroundimage与文本不匹配,...

随机推荐

最新文章