You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发Discord表情响应机器人遭遇AttributeError错误的排查与解决

解决Discord机器人on_reaction_add事件的AttributeError问题

问题场景

我正在开发一款Discord机器人,想要实现“收到表情反应时执行特定操作”的功能,编写的代码如下:

@client.event
async def on_reaction_add(ctx, reaction, user: discord.User = message.author):
    global global_emoji
    if reaction.emoji == global_emoji:
        print('Reacted successfully')

但运行时触发了错误:

AttributeError: 'Member' object has no attribute 'emoji'

问题根源

Discord.py的on_reaction_add事件回调有固定的参数顺序,正确的参数应为reaction(反应对象)和user(触发反应的用户),不需要额外的ctx参数。

当你额外添加ctx后,函数会把事件触发时传入的第一个实际参数(也就是reaction对象)赋值给ctx变量,第二个实际参数(user对象)赋值给reaction变量。这就导致后续代码里的reaction其实是个Member对象,而Member类型根本没有emoji属性,自然会抛出错误。

解决方法

只需要移除多余的ctx参数即可,另外注意原代码里的message.author默认值也存在问题(事件回调中不存在message变量),如果需要默认用户逻辑可以根据实际场景调整,修正后的代码如下:

@client.event
async def on_reaction_add(reaction, user: discord.User):
    global global_emoji
    if reaction.emoji == global_emoji:
        print('Reacted successfully')

额外提示

如果需要在这个事件中获取反应对应的消息对象,可以通过reaction.message访问,比如要获取消息的作者可以用reaction.message.author。

内容的提问来源于stack exchange,提问作者Einaroks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:28:54