所以我遇到了一个问题,我向列表(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)