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

discord.js中通过消息ID添加反应失败,报错react不是函数

Discord.js 添加表情报错修复

我已经查阅过Stack Overflow上的相关问题,但现有解决方案均不适用。当前代码如下:

client.channels.fetch(`1025902604728934442`)
    .then(channel => {
        channel.messages.fetch(1027438839435907142).react("👍");
    })

运行后出现以下错误:

(node:2760) 未处理的Promise拒绝警告:TypeError: channel.messages.fetch(...).react 不是一个函数
    在 /index.js:76:53
(node:2760) 未处理的Promise拒绝警告:未处理的Promise拒绝。该错误要么是因为在没有catch块的异步函数内部抛出,要么是因为拒绝了一个未被.catch()处理的Promise。要在未处理的Promise拒绝时终止Node.js进程,请使用CLI标志 `--unhandled-rejections=strict`。(拒绝ID: 1)
(node:2760) [DEP0018] 弃用警告:未处理的Promise拒绝已被弃用。未来,未处理的Promise拒绝将终止Node.js进程并返回非零退出码。

问题原因

  • channel.messages.fetch() 是异步操作,返回的是Promise对象,不是Message实例,直接链式调用.react()自然会报错“不是函数”。
  • 原代码没有添加错误捕获逻辑,导致出现未处理的Promise拒绝警告。

修正代码

链式then写法

client.channels.fetch(`1025902604728934442`)
  .then(channel => {
    // 先等待消息获取完成
    return channel.messages.fetch(1027438839435907142);
  })
  .then(message => {
    // 获取到消息实例后再添加表情
    message.react("👍");
  })
  .catch(error => {
    // 捕获并打印所有可能的错误
    console.error("操作出错:", error);
  });

Async/Await写法(更易读)

async function addMessageReaction() {
  try {
    const channel = await client.channels.fetch(`1025902604728934442`);
    const message = await channel.messages.fetch(1027438839435907142);
    await message.react("👍");
  } catch (error) {
    console.error("操作出错:", error);
  }
}

// 调用函数
addMessageReaction();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:25:31