discord - DiscordAPIError:未知消息 - 如何在尝试删除消息之前检查消息是否已删除
问题描述
在如下假设的情况下,机器人可以发送一个嵌入然后在 3 秒内删除该消息。
message.reply({ embeds: [embed] })
.then((msg) => {
setTimeout(() => msg.delete(), 3000)
})
当用户在机器人之前删除消息时,机器人崩溃并且我收到此错误:
C:\Users\\Documents\GitHub\omex\node_modules\discord.js\src\rest\RequestHandler.js:298
throw new DiscordAPIError(data, res.status, request);
^
DiscordAPIError: Unknown Message
at RequestHandler.execute (C:\Users\\Documents\GitHub\\node_modules\discord.js\src\rest\RequestHandler.js:298:13)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async RequestHandler.push (C:\Users\\Documents\GitHub\\node_modules\discord.js\src\rest\RequestHandler.js:50:14)
at async MessageManager.delete (C:\Users\\Documents\GitHub\\node_modules\discord.js\src\managers\MessageManager.js:205:5)
at async Message.delete (C:\Users\\Documents\GitHub\\node_modules\discord.js\src\structures\Message.js:709:5) {
method: 'delete',
path: '/channels/877943546932494377/messages/888575942379847681',
code: 10008,
httpStatus: 404,
requestData: { json: undefined, files: [] }
}
那么有没有办法在尝试删除之前检测消息是否被删除?
解决方案
通过TayDex构建此答案,您应该在超时结束后进行检查。原因是一旦计时器启动,消息可能会在倒计时的 3 秒内被删除。Message#deleted
此外,您可以添加catch()
回调以Message#delete()
进行错误处理和防止崩溃。
message.reply({ embeds: [embed] })
.then(msg => {
setTimeout(() => {
if (!msg.deleted) {
msg.delete()
.catch(err => {
console.log('An error occurred but the bot is still running')
console.error(err)
})
}
}, 3000)
})
推荐阅读
- veins - 我可以使用相扑或静脉来发送真实数据吗?
- c++ - "while (a%5)" 和 "while (5)" 怎么不是语法错误?
- android - 在 Android Studio 中构建失败。消息:资源名称不应为空,但 strings.xml 存在
- c++ - 从 C++ 中的偏移量覆盖二进制文件的字节
- javascript - 如何通过 leaflet.pm 使 GeoJSON 数据不可编辑
- scala - Scala 宏注解没有得到扩展(宏天堂)
- python - 修改数组不会影响其在外循环中的长度
- d3.js - 显示 div 并隐藏其他的 - d3.js
- json - 我想通过 Firebase 更新一个 webview 视频
- javascript - AngularJS 在 ng-repeat 时创建空对象