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

如何实现机器人在用户对消息添加反应后自动向该用户发送消息

on_reaction_add 功能修复方案

现有代码问题汇总

  • 事件参数定义错误:discord.py 原生on_reaction_add事件接收两个参数,分别是触发的反应对象reaction、添加反应的用户对象user,你当前定义的单参数message不符合事件要求,无法正确获取触发信息
  • 错误手动触发事件:on_reaction_add是 Discord 事件触发的回调函数,不需要你在on_message中手动调用,手动传入的message参数完全不符合事件入参规范,会直接报错
  • emoji 匹配逻辑错误:自定义 emoji 的 ID 需要从reaction.emoji.id属性获取,不能直接把反应对象和 ID 字符串做对比
  • 缺少权限意图配置:要正常监听消息反应事件,需要在代码中开启reactions和message_content意图,同时在 Discord 开发者后台对应应用的「Bot」设置页打开对应意图开关

修正后代码示例

# 首先需要正确配置意图,实例化 client 的时候就要加
import discord
intents = discord.Intents.default()
intents.message_content = True
intents.reactions = True
client = discord.Client(intents=intents)

@client.listen()
async def on_message(message):
    """
    检测用户发送的'bhwagon'和'missed wagon'指令,24分钟后发送冷却结束通知
    :param message: 用户发送的消息对象
    :return: 给用户发送冷却结束的私信
    """
    if message.content.startswith("bhwagon") or message.content.startswith("missed wagon"):
        await cool_down_ended(message)
        # 这里删掉手动调用on_reaction_add的逻辑,这个事件会自动触发

@client.event
async def on_reaction_add(reaction, user):
    """
    检测用户给消息添加的反应,如果是指定表情就给添加反应的用户发私信
    :param reaction: 用户添加的反应对象
    :param user: 添加反应的用户对象
    :return: 无
    """
    # 排除机器人自己添加的反应,避免触发死循环
    if user.bot:
        return
    # 判断是否是目标自定义表情,对应你的表情ID 882814250710626405
    if hasattr(reaction.emoji, 'id') and reaction.emoji.id == 882814250710626405:
        await user.send("你想要发送的消息内容")

补充说明

  • 如果需要监听机器人启动之前发送的消息的反应,需要把on_reaction_add替换成on_raw_reaction_add事件,避免因消息不在机器人缓存中导致事件不触发
  • 给用户发私信的时候如果用户关闭了陌生人私信权限会报错,建议加异常捕获处理

内容的提问来源于stack exchange,提问作者yet-it-compiles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:00:00