如何删除 discord.js v12 中的消息

时间:2021-01-11 16:26:30

标签: discord discord.js

我制作了一个机器人,当我更新到 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
}

1 个答案:

答案 0 :(得分:1)

在您的代码中,您尝试删除同一条消息两次。

首先在 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);
}

这不是尝试两次删除同一条消息,而是将通道存储在一个变量中,将消息发送到通道,然后删除它自己的消息。