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

discord.py中on_reaction_remove()事件无法触发问题求助

常见原因及对应解决方案如下:

1. 事件触发受本地缓存限制

on_reaction_remove 仅对机器人启动后加载到本地内存缓存的消息生效,如果你操作的消息是机器人启动前就发送的,不在缓存范围内,事件不会触发。
推荐直接使用不依赖本地缓存的 on_raw_reaction_remove 事件替代,示例代码:

@client.event
async def on_raw_reaction_remove(payload):
    # payload内置所有核心参数:用户ID、消息ID、频道ID、反应内容
    print('removed')
    # 若需要完整对象可主动拉取:
    channel = await client.fetch_channel(payload.channel_id)
    message = await channel.fetch_message(payload.message_id)
    user = await client.fetch_user(payload.user_id)
    reaction = next(r for r in message.reactions if str(r.emoji) == str(payload.emoji))
    # 后续逻辑可直接复用原有on_reaction_remove的代码

2. 事件队列被阻塞

如果代码中存在其他异步事件(如on_message)漏加await关键字,或包含长时间运行的同步逻辑(如time.sleep、大量同步计算),会卡住事件队列导致后续事件无法触发。
排查点:

  • 所有异步方法调用前必须加await
  • 同步耗时逻辑请用asyncio.to_thread包裹异步执行

3. 权限配置遗漏

请再次确认两项配置:

  • 机器人在对应服务器拥有读取消息历史权限,无该权限无法接收反应删除事件推送
  • Discord开发者门户的三个特权网关意图(Presence Intent、Server Members Intent、Message Content Intent)全部开启,修改配置后必须重启机器人才能生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:15:01