You need to enable JavaScript to run this app. discord.js开发purge指令 如何插入message.delete实现消息自动删除
优惠活动
大模型
产品
解决方案
定价
更多

discord.js开发purge指令 如何插入message.delete实现消息自动删除

问题原因与解决方案

错误点说明

  • 第一种写法重复发消息的核心原因是你先后两次调用了message.channel.send(purgeEmbed):第一次在bulkDelete的then回调中,第二次在try块结束后的单独代码行,因此会出现两条重复embed,只有第二次发送的实例调用了删除方法,所以仅一条被删除。
  • 第二种写法失效有两个问题:一是then需要传入回调函数,你直接执行message.delete()属于同步立即调用,并没有拿到发送消息返回的实例;二是语法缺少闭合的括号和回调函数包裹,代码本身存在语法错误。

正确实现代码

写法1:async/await写法(更易读,推荐新手使用)

try {
  // 先执行批量删除
  await message.channel.bulkDelete(fetched);
  // 发送通知embed,拿到返回的消息实例
  const purgeMsg = await message.channel.send(purgeEmbed);
  // 2秒后删除该通知
  purgeMsg.delete({ timeout: 2000 });
} catch (err) {
  console.log(err);
  // 错误通知也可以按需加自动删除
  const errMsg = await message.channel.send(issuePurgeEmbed);
  errMsg.delete({ timeout: 3000 });
}

写法2:链式调用写法

try {
  await message.channel.bulkDelete(fetched)
    // send返回消息实例,传给下一个then
    .then(() => message.channel.send(purgeEmbed))
    // 用回调拿到消息实例后调用delete
    .then(purgeMsg => purgeMsg.delete({ timeout: 2000 }))
} catch (err) {
  console.log(err);
  message.channel.send(issuePurgeEmbed);
}

ms插件使用方案

先执行安装命令:
npm i ms

在代码顶部导入ms:

const ms = require('ms');

之后删除的超时参数可以直接用语义化的时间写法,不用手动换算毫秒:

purgeMsg.delete({ timeout: ms('2s') });
// 也支持其他单位,比如ms('1m')就是1分钟,ms('5s')就是5秒,可读性更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 17:51:04