discord - 如何删除 discord.js v12 中的消息
问题描述
我制作了一个机器人,当我更新到 discord.js v12 时,我将代码更改为 v12,但我收到此错误,这是我尝试卸载然后安装 discord.js 的代码
const Discord = require("discord.js");
const bot = new Discord.Client();
module.exports.run = async (bot, message, args) => {
message.delete();
let totalSeconds = (bot.uptime / 1000);
totalSeconds %= 86400;
let hours = Math.floor(totalSeconds / 3600);
totalSeconds %= 3600;
let minutes = Math.floor(totalSeconds / 60);
let uptimeEmbed = new Discord.MessageEmbed()
.setDescription(`${bot.user.username} Bot Uptime`)
.setColor("#e56b00")
.addField("Hours", hours)
.addField("Minutes", minutes)
.setTimestamp()
.setFooter(`Lavet`)
message.channel.send(uptimeEmbed).then(message.delete({ timeout: 5000 })).catch(console.error)
}
module.exports.help = {
name: "uptime" //NAVNET ER LIG MED KOMMANDOEN
}
这是我尝试时遇到的错误
C:\Users\lauri\Desktop\QuebecCity\node_modules\discord.js\src\rest\RequestHandler.js:154
throw new DiscordAPIError(request.path, data, request.method, res.status);
^
DiscordAPIError: Unknown Message
at RequestHandler.execute (C:\Users\lauri\Desktop\QuebecCity\node_modules\discord.js\src\rest\RequestHandler.js:154:13)
at processTicksAndRejections (node:internal/process/task_queues:93:5)
at async RequestHandler.push (C:\Users\lauri\Desktop\QuebecCity\node_modules\discord.js\src\rest\RequestHandler.js:39:14)
at async MessageManager.delete (C:\Users\lauri\Desktop\QuebecCity\node_modules\discord.js\src\managers\MessageManager.js:126:5) {
method: 'delete',
path: '/channels/791725159362330635/messages/798219060780466196',
code: 10008,
httpStatus: 404
}
解决方案
在您的代码中,您尝试两次删除相同的消息。
首先,在message.delete();
,然后在
message.channel.send(uptimeEmbed).then(message.delete({ timeout: 5000 })).catch(console.error)
对于上下文,Discord API 中的错误代码 10008 表示找不到消息,这在当前情况下是有意义的。
为了解决这个问题,假设第二个 message.delete 试图删除机器人发送的 uptimeEmbed 消息,你可以这样做:
module.exports.run = async (bot, message, args) => {
let channel = message.channel;
message.delete();
let totalSeconds = (bot.uptime / 1000);
totalSeconds %= 86400;
let hours = Math.floor(totalSeconds / 3600);
totalSeconds %= 3600;
let minutes = Math.floor(totalSeconds / 60);
let uptimeEmbed = new Discord.MessageEmbed()
.setDescription(`${bot.user.username} Bot Uptime`)
.setColor("#e56b00")
.addField("Hours", hours)
.addField("Minutes", minutes)
.setTimestamp()
.setFooter(`Lavet`)
channel.send(uptimeEmbed).then(msg => msg.delete({ timeout: 5000 })).catch(console.error);
}
这不是尝试两次删除相同的消息,而是将通道存储在一个变量中,将消息发送到通道,然后删除它自己的消息。
推荐阅读
- mysql - 当一个字段是 Id 数组时连接两个表
- android-studio - 使 pycharm 键盘映射与 Android Studio 相同
- javascript - 为 Leaflet 弹出窗口中的按钮添加 onclick 事件
- eclipse - Eclipse:从 Eclipse 启动时,服务未向尤里卡服务器注册
- java - 参考xText中Java项目的源码
- c# - 在 C# 中解析 Json 格式数据时出错
- reactjs - 如果可能的话,为什么 setTest 只适用于回调深度解释?
- python - Windows 10 上的 pyscaffold:未生成 Sphinx 模块文档
- java - 将大于号和小于号的文本传递到后端
- html - 如何从一个div中减去多个形状