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

如何在discord.js中通过消息ID为消息添加反应?

当然可以实现啦!你直接用messageID.react('👍')肯定不行,因为messageID只是一串标识字符,不是真正的Discord消息对象。不过咱们只需要两步就能搞定:先通过消息所在的频道拿到对应的消息实例,再调用它的react()方法就行~

具体实现方法(以discord.js v14+为例)

目前discord.js的最新稳定版是v14,我就以这个版本为例给你演示:

1. 基础场景:已知频道ID和消息ID

如果你已经知道目标消息所在的频道ID,就可以这样写:

// 假设你已经初始化好了Discord客户端client
const targetChannelId = "你的频道ID字符串";
const targetMessageId = "要添加反应的消息ID字符串";

// 用异步函数处理所有异步操作
async function addReactionToMessage() {
  try {
    // 第一步:获取目标频道
    const channel = await client.channels.fetch(targetChannelId);
    // 确认频道是文本类频道(避免拿到语音/论坛频道等)
    if (!channel.isTextBased()) {
      console.log("哎呀,这个频道不是文本频道,没法操作消息哦");
      return;
    }

    // 第二步:通过消息ID获取消息对象
    const targetMessage = await channel.messages.fetch(targetMessageId);

    // 第三步:添加反应
    await targetMessage.react("👍");
    console.log("反应添加成功啦!");
  } catch (err) {
    console.error("添加反应时出问题了:", err);
  }
}

// 调用这个函数执行操作
addReactionToMessage();

2. 命令交互场景:在指令里给消息加反应

如果是在机器人的Slash Command或者前缀指令里操作,你可以直接用交互上下文里的频道对象,不用单独查频道ID:

// 比如处理Slash Command的示例
async function handleAddReactionCommand(interaction) {
  try {
    // 假设用户在指令参数里提供了消息ID
    const messageId = interaction.options.getString("message_id");
    // 从当前交互的频道里获取消息
    const targetMessage = await interaction.channel.messages.fetch(messageId);
    
    await targetMessage.react("👍");
    await interaction.reply({ content: "已成功给目标消息添加👍反应!", ephemeral: true });
  } catch (err) {
    await interaction.reply({ content: "添加反应失败啦,请检查消息ID是否正确,或者机器人有没有对应权限", ephemeral: true });
  }
}
注意事项
  • 确保你的机器人在目标频道有添加反应的权限(至少需要Add Reactions权限,或者更高的Manage Messages权限)
  • 目标消息必须存在于你指定的频道里,不然messages.fetch()会抛出错误
  • 所有涉及到Discord API的操作都是异步的,一定要用async/await或者.then()来处理,不然会出现未处理的Promise错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:52:38