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

如何将机器人发送的消息存为变量后续删除,解决delete不是函数报错

错误根因

message.channel.send() 是异步API,执行后返回的是 Promise<Message> 类型对象,而非直接的已发送消息实例。你直接对 Promise 对象调用不存在的 delete() 方法,就会触发该类型错误。

解决方案

方案1:async/await 写法(推荐)

首先给你当前的消息事件外层回调函数加上 async 修饰,再用 await 等待消息发送完成,拿到实例后再执行删除操作:

// 示例:消息事件回调加async修饰
client.on('messageCreate', async message => {
  // 其他逻辑...
  const qsend = await message.channel.send("Choose a page to go to.");
  // 此处插入你监听用户回复的逻辑
  // 接收到用户有效回复后执行删除
  qsend.delete();
})

方案2:.then() 链式回调写法

如果你不想修改外层函数的 async 声明,也可以通过 Promise 的 then 回调拿到已发送的消息实例存储,后续再调用删除:

let sentPrompt;
message.channel.send("Choose a page to go to.")
  .then(sentMsg => {
    sentPrompt = sentMsg;
  })
// 接收到用户回复后执行删除
if (sentPrompt) sentPrompt.delete();

额外注意

  • delete() 本身也是异步方法,如果需要等待删除完成再执行后续逻辑,可以给它也加上 await 修饰
  • 需确保机器人拥有对应频道的「删除消息」权限,否则就算语法正确也会抛出权限错误
  • 删除操作要放在用户回复的监听逻辑内部,不要紧跟在 send 之后执行,避免提示刚发送就被删除,用户无法看到内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 13:45:04