我是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)
答案 0 :(得分:7)
该线程可能稍晚一些,但是上面的答案是有效的答案。但是您也可以使用on_raw_reaction_add
,即使邮件不在Bot的缓存中也可以调用它。
在消息中添加了响应时调用。与on_reaction_add()不同,无论内部消息缓存的状态如何,都将调用此函数。
示例:
@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(...)
下,以检查这是否是问题。
如果前面提到的任何一个都没有解决您的问题,请发布一个最小的,完整的,可验证的示例(从上到下的一个短的可运行代码,表明您的问题)。