如何使用discord.js获取客户端发送的上一条消息?
解决方案
原代码存在两个关键问题:
message.channel.send()是异步操作,你直接调用channelName.messages.fetch()时,消息可能还没发送完成,导致获取不到目标消息。- 你在
message.channel发送了消息,却去spam频道查找,频道不匹配,自然拿不到正确内容。
直接利用send()方法返回的Promise就能拿到刚发送的客户端消息,无需额外fetch,修改后的代码如下:
client.on("messageCreate", (message) => { if (!message.content.startsWith(prefix) || message.author.bot) return; const args = message.content.slice(prefix.length).split(/ +/); const command = args.shift().toLowerCase(); if (command === 'set-reminder') { // 直接通过send的返回值获取刚发送的消息 message.channel.send("Command Works") .then(sentMessage => { // sentMessage就是客户端刚发送的那条消息 console.log(sentMessage.content); // 如果需要引用这条消息,可以直接用messageReference // 示例:message.reply({ content: "引用这条消息", messageReference: { messageId: sentMessage.id } }) }) .catch(err => console.error("发送消息失败:", err)); } });
额外说明:
- 如果确实需要从频道历史中获取消息,要确保操作在消息发送完成后执行,同时目标频道必须和发送频道一致。
- 使用
messageReference字段是discord.js中引用指定消息的标准方式,能实现官方的消息引用效果。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

