是否可以在 5 秒后删除某个频道中的消息?

时间:2021-06-17 17:42:33

标签: javascript discord.js

有没有可能 如果有人发消息 在某个频道 然后他在 5 秒后删除消息 但机器人不会删除机器人消息

下面是我的消息事件 但它不会删除任何消息 我不知道我现在必须做什么

client.on("message", async message => {

    if (message.author.bot) return;

    if (message.channel.type === "dm") return;


    var swearWords = JSON.parse(fs.readFileSync("./data/swearWords.json"));

    var msg = message.content.toLowerCase();

    var embed1 = new discord.MessageEmbed()
        .setColor('#0d0041')
        .setDescription(`${message.author} Dat woord hoort hier niet thuis`)

    for (let i = 0; i < swearWords["vloekwoorden"].length; i++) {

        if (msg.includes(swearWords["vloekwoorden"][i])) {


            message.delete();

            return message.channel.send(embed1).then(msg => msg.delete({ timeout: 5000 }));
        }

    }

    var channel = message.channel.id == "841337468585377882"

    var prefix = botConfig.prefix;

    var messageArray = message.content.split(" ");

    var command = messageArray[0];

    if (!message.content.startsWith(prefix)) return;

    // Command handler
    var arguments = messageArray.slice(1);

    var commands = client.commands.get(command.slice(prefix.length));

    if (commands) commands.run(client, message, arguments);

    if (channel) (msg => msg.delete({ timeout: 5000 }));

});

1 个答案:

答案 0 :(得分:0)

问题是您将 msgmessage 混合在一起,最后您只返回一个箭头函数 (msg => msg.delete({ timeout: 5000 }))。

此外,您可以简单地使用 fs.readFileSync 来读取和解析 JSON 文件,而不是使用 JSON.parse 读取 JSON 文件然后使用 require 解析它。

我对您的代码进行了一些更改,使其更具可读性。

client.on('message', async (message) => {
  let { prefix } = botConfig;
  let CHANNEL_ID = '841337468585377882';
  // you don't need to different checks :)
  if (message.author.bot || message.channel.type === 'dm') return;

  // you can simply require the JSON file, it'll also parse it for you
  let swearWords = require('./data/swearWords.json');
  let embed = new Discord.MessageEmbed()
    .setColor('#0d0041')
    .setDescription(`${message.author} Dat woord hoort hier niet thuis`);

  // a for of loop is so much nicer
  for (let word of swearWords) {
    if (message.content.toLowerCase().includes(word)) {
      message.delete();

      return message.channel
        .send(embed)
        .then((msg) => msg.delete({ timeout: 5000 }));
    }
  }

  if (!message.content.startsWith(prefix)) return;

  let args = message.content.slice(prefix.length).split(/ +/);
  let command = args.shift().toLowerCase();
  let commandToRun = client.commands.get(command);

  if (commandToRun) commandToRun.run(client, message, args);

  // don't return an arrow function, delete the original message
  if (message.channel.id === CHANNEL_ID)
    return message.delete({ timeout: 5000 });
});