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

如何在discord.js中让代码等待后删除机器人发送的消息?

解决Discord机器人消息5秒后自动删除的问题

嘿,这问题很常见,我来帮你搞定!你需要利用message.channel.send()返回的消息对象,结合延迟函数或者Discord.js内置的超时选项来实现5秒后删除。

核心思路

message.channel.send()实际上返回一个Promise,也就是说它是异步操作——你得等消息发送成功后,才能拿到对应的消息对象去执行删除操作。下面给你两种靠谱的实现方式:


方法1:使用原生setTimeout(兼容性好)

把发送消息的结果存到变量里,然后用setTimeout延迟5秒调用删除方法。注意如果你的代码不在异步函数中,要改用.then()的写法:

// 如果这段代码在异步函数内,可以用await
if (msg.includes('swear1') || msg.includes('swear2') || msg.includes('swear3') || msg.includes('swear4') || msg.includes('swear5') || msg.includes('swear6')) { 
  message.delete(); 
  message.author.send('**Please refrain yourself from swearing on this server, Thanks**' ); 
  
  // 存下发送的消息对象
  const naughtyMessage = await message.channel.send(sender + ' IS A NAUGHTY BOY');
  // 5秒后删除,加catch避免报错(比如权限不足或消息已被手动删除)
  setTimeout(() => {
    naughtyMessage.delete().catch(err => console.error('删除消息出错:', err));
  }, 5000); // 5000毫秒 = 5秒

  console.log(sender + ' Just Said ' + msg.toUpperCase()); 
} 

如果你的代码不在异步函数里,改成.then()链式调用:

message.channel.send(sender + ' IS A NAUGHTY BOY')
  .then(naughtyMessage => {
    setTimeout(() => {
      naughtyMessage.delete().catch(err => console.error('删除消息出错:', err));
    }, 5000);
  })
  .catch(err => console.error('发送消息出错:', err));

方法2:使用Discord.js内置的delete超时选项(更简洁)

Discord.js的Message.delete()方法支持传入timeout参数,直接指定延迟删除的毫秒数,代码更简洁:

if (msg.includes('swear1') || msg.includes('swear2') || msg.includes('swear3') || msg.includes('swear4') || msg.includes('swear5') || msg.includes('swear6')) { 
  message.delete(); 
  message.author.send('**Please refrain yourself from swearing on this server, Thanks**' ); 
  
  // 发送后直接链式调用delete,指定5秒超时
  message.channel.send(sender + ' IS A NAUGHTY BOY')
    .then(naughtyMsg => naughtyMsg.delete({ timeout: 5000 }))
    .catch(err => console.error('发送/删除消息出错:', err));

  console.log(sender + ' Just Said ' + msg.toUpperCase()); 
} 

小提醒

  • 一定要加.catch()处理错误,不然如果机器人没有删除消息的权限,或者消息被用户提前手动删除,会抛出错误导致代码崩溃。
  • 如果你的Discord.js版本比较旧,timeout参数可能不支持,这时候优先用方法1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:42:36