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
相关产品推荐
相关产品推荐

