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

如何使用discord.js获取客户端发送的上一条消息?

解决方案

原代码存在两个关键问题:

  1. message.channel.send()是异步操作,你直接调用channelName.messages.fetch()时,消息可能还没发送完成,导致获取不到目标消息。
  2. 你在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:40:42