我一直在尝试获取有关不和谐消息的反应列表,但我无法弄清楚自己在做什么错。这是我的代码。
async def reactionGetter(ctx):
msg = await ctx.send('Message to put reactions on')
await msg.add_reaction("✅")
time.sleep(5)
print(msg.reactions)
该代码成功添加了反应,但打印出一个空列表。我想念什么?
答案 0 :(得分:0)
这是因为msg = await ctx.send('Message to put reactions on')
是临时的,而不是漫游器的缓存消息中的消息。您只能得到缓存邮件的反应,因此,在您的情况下,msg.reactions
将返回一个空白列表。
另外,您使用的是time.sleep(5)
,这是错误的,它将使整个程序停止5秒钟。使用异步功能,您必须导入asyncio
并使用asyncio.sleep()
。
您必须将功能更改为:
from asyncio import sleep
async def reactionGetter(ctx):
msg = await ctx.send('Message to put reactions on')
await msg.add_reaction("✅")
await sleep(2)
cache_msg = discord.utils.get(bot.cached_messages, id=msg.id) #or client.messages depending on your variable
print(cache_msg.reactions)
答案 1 :(得分:0)
您可以使用TextChannel.fetch_message
,这将迫使您的机器人通过API调用从Discord获取消息信息,而不是依靠Discord通过websocket更新客户端。
async def reactionGetter(ctx):
msg = await ctx.send('Message to put reactions on')
await msg.add_reaction("✅")
msg = await msg.channel.fetch_message(msg.id) # Can be None if msg was deleted
print(msg.reactions)