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

discord.js中使用msg.reply发消息后如何获取机器人回复的消息对象和ID

解决方案

你遇到的msg.reply()无法返回消息对象的问题,本质是discord.js版本差异导致的行为不一致,可根据你使用的版本选择对应方案:

  • discord.js v12及以上版本:Message.reply() 方法本身就和channel.send()一样返回Promise<Message>,你遇到返回undefined的情况大概率是版本依赖配置错误,或者TypeScript类型定义未对齐。
  • discord.js v11及更早版本:reply() 方法确实无返回值,需要通过事件监听的方式筛选目标消息。

方案1(推荐):升级到discord.js v12+版本

升级后直接沿用和channel.send一致的写法即可:

msg.reply("message").then(msgFromBot => {
    const replyMsgId = msgFromBot.id
    console.log("机器人回复消息ID:", replyMsgId)
})

异步场景下用async/await语法更简洁:

// 需在async函数内调用
const msgFromBot = await msg.reply("message")
const replyMsgId = msgFromBot.id

方案2:v11及以下低版本兼容方案

如果暂时无法升级版本,可以通过监听消息事件匹配筛选出机器人发送的回复:

const botId = client.user.id
// 被回复的原消息ID,用于匹配
const targetOriginalMsgId = msg.id

// 只监听一次消息创建事件,避免内存泄漏
client.once("message", sentMsg => {
    // 匹配规则:发送者是机器人、回复的目标消息为原消息
    if (sentMsg.author.id === botId && sentMsg.reference?.messageId === targetOriginalMsgId) {
        const replyMsgId = sentMsg.id
        console.log("机器人回复消息ID:", replyMsgId)
    }
})

// 发送回复
msg.reply("message")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:15:02