在消息discord.py上获取反应列表

时间:2020-07-18 06:41:39

标签: discord.py

我一直在尝试获取有关不和谐消息的反应列表,但我无法弄清楚自己在做什么错。这是我的代码。

async def reactionGetter(ctx):
    msg = await ctx.send('Message to put reactions on')
    await msg.add_reaction("✅")
    time.sleep(5)
    print(msg.reactions)

该代码成功添加了反应,但打印出一个空列表。我想念什么?

2 个答案:

答案 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)

参考: No reactions in Message.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)