on_reaction_add未运行

时间:2018-06-10 16:13:16

标签: python discord discord.py

我是discord.py的新手,并试图制作一个翻译机器人。当用户对某个标志作出反应时,机器人会对其进行翻译,但事件永远不会被调用,因此我还没有代码来翻译任何消息。我知道它没有被调用,因为程序没有在控制台上打印'x'

@client.event
async def on_reaction_add(reaction, user):
    channel = reaction.message.channel
    print('x')
    await client.send_message(channel, '{} has added {} to the the message {}'.format(user.name, reaction.emoji, reaction.message.content))

    await client.process_commands(reaction.message)

2 个答案:

答案 0 :(得分:7)

该线程可能稍晚一些,但是上面的答案是有效的答案。但是您也可以使用on_raw_reaction_add,即使邮件不在Bot的缓存中也可以调用它。

在消息中添加了响应时调用。与on_reaction_add()不同,无论内部消息缓存的状态如何,都将调用此函数。

Documentation Link

示例:

@commands.Cog.listener()
async def on_raw_reaction_add(self, payload):
    channel = await self.bot.fetch_channel(payload.channel_id)
    message = await channel.fetch_message(payload.message_id)
    user = await self.bot.fetch_user(payload.user_id)
    emoji = payload.emoji

    await channel.send("Hello")

答案 1 :(得分:3)

为什么没有注册/调用事件的原因没有多少。

其中一个在文档中说明:http://discordpy.readthedocs.io/en/async/api.html#discord.on_reaction_add。尝试立即向机器人在线后发送的消息添加反应。由于僵尸程序在线之前发送的消息不会被机器人识别(不在Client.messages)。

  

如果在Client.messages缓存中找不到该消息,那么这个   事件不会被调用。

另一个可能的原因是在客户端循环开始之前从未定义过此函数。验证缩进。和/或尝试将函数直接放在client = Bot(...)下,以检查这是否是问题。

如果前面提到的任何一个都没有解决您的问题,请发布一个最小的,完整的,可验证的示例(从上到下的一个短的可运行代码,表明您的问题)。