如何删除message.channel.send发送的消息及awaitMessages收集的用户消息
解决方案
以下是适配需求的完整修改后代码,基于你提供的原有逻辑调整:
message.channel.send(`你确认提交 strike 表单后,愿意随时接受日志审核人员的问询?如确认请输入 ***yes***。`).then(async (m) => { // 功能1:提示消息发送15秒后自动删除 setTimeout(() => { // 容错处理:避免消息已提前删除时报错 if (!m.deleted) m.delete().catch(err => console.log('提示消息删除失败:', err)) }, 15000) message.channel.awaitMessages(response => response.content === 'yes', { max: 1, time: 10000, errors: ['time'], }).then(async (collected) => { // 功能2:删除用户发送的yes回复 const userReply = collected.first() if (userReply && !userReply.deleted) { userReply.delete().catch(err => console.log('用户回复删除失败:', err)) } // 此处保留你原有的后续业务逻辑 }).catch(err => { // 超时未收到yes回复的错误处理,可自行扩展 console.log('超时未收到用户确认回复') }) })
改动说明
- 提示消息自动删除:拿到发送后返回的消息实例
m后,通过setTimeout设置15秒延迟执行删除操作,新增了状态判断和异常捕获逻辑,避免消息提前被删除、机器人无删除权限等场景下代码报错。如果你使用的是Discord.js v12及更早版本,也可以直接用m.delete({ timeout: 15000 })的简写实现延迟删除,无需手动包裹setTimeout。 - 用户回复自动删除:
awaitMessages返回的collected是收集到的消息集合,调用first()方法即可获取用户发送的yes消息,直接执行删除操作即可,同样增加了容错处理。
内容的提问来源于stack exchange,提问作者mrzeny
相关产品推荐
相关产品推荐

