如何在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
相关产品推荐
相关产品推荐

