【问题标题】:Is there any way to delete more than 100 messages at once in Discord.js?有没有办法在 Discord.js 中一次删除 100 多条消息?
【发布时间】:2021-10-08 08:22:51
【问题描述】:

目前我正在制作一个 Discord Bot,但我遇到了麻烦,我不知道如何删除 discord.js 中的 100 多条消息,因为它限制为 100 条,我正在寻找可以帮助我解决问题的功能,我目前的编码:

const Discord = require("discord.js");
const { Client, MessageEmbed } = require("discord.js");

module.exports = {
  name: "purge",
  alias: [],
  devOnly: false,
  guildOnly: true,
  nsfwOnly: false,
  botPermissions: [
    "SEND_MESSAGES",
    "ATTACH_FILES",
    "VIEW_CHANNEL",
    "MANAGE_MESSAGES",
  ],
  userPermissions: ["SEND_MESSAGES", "MANAGE_MESSAGES"],
  category: "Moderation",
  usage: "clear (messages)",
  description: "Deletes the specified amount of messages",
  run: async (client, message, args) => {
    let prefix = await client.prefix(message);
    let member = message.mentions.members.first();

    if (!message.guild.me.permissions.has("MANAGE_MESSAGES"))
      return message.channel.send(
        new Discord.MessageEmbed()
          .setDescription(
            `<:no:860978971771928647> ***I don't have the necessary permissions to do that, please use the command \`${prefix}setup\` to check all it's working correctly.***`
          )
          .setColor(16711680)
      );

    if (!message.member.hasPermission("MANAGE_MESSAGES"))
      return message.channel.send(
        new Discord.MessageEmbed()
          .setDescription(
            "<:no:860978971771928647> ***You don't have the necessary permissions to do that.***"
          )
          .setColor(16711680)
      );

    if (member) {
      const userMessages = (await messages).filter(
        (m) => m.author.id === member.id
      )

      await message.channel.bulkDelete(userMessages)
      message.channel.send(new Discord.MessageEmbed()
        .setDescription(`<:si:860978510079852544> ***${member} messages has been cleared.***`)
        .setColor('GREEN')
      )
    } else {
      let mensajes = parseInt(args[0]);
      if (!mensajes)
        return message.channel.send(
          new Discord.MessageEmbed()
            .setDescription(
              "<:no:860978971771928647> ***Please provide a amount of messages to delete, it needs to be a number***"
            )
            .setColor(16711680)
        );
      if (mensajes < 1)
        return message.channel.send(
          new Discord.MessageEmbed()
            .setDescription(
              "<:no:860978971771928647> ***The arguments provided are not correctly, the amount of messages must be greater than 1***"
            )
            .setColor(16711680)
        );
      let embedlimitmessages = new Discord.MessageEmbed()
        .setDescription(
          "<:no:860978971771928647> ***You can't delete more than 100 messages**"
        )
        .setColor(16711680);
      if (mensajes > 100) return message.channel.send(embedlimitmessages);
      message.delete();
      message.channel.bulkDelete(mensajes);
      let embed = new Discord.MessageEmbed()
        .setDescription(
          `<:si:860978510079852544> ***I deleted ${mensajes} messages successfully!***`
        )
        .setColor("GREEN");
      message.channel.send(embed).then((m) => m.delete({ timeout: 10000 }));
    }
  },
};

我在其他论坛上阅读了如何做到这一点,我也在 Discord 帮助服务器中查找过,他们说有一段时间我可以这样做,以免滥用 API,我会很感激你们可以举个例子

【问题讨论】:

  • 不,不是。我试图用 bulkDelete() 删除 100 多条消息;我没有错误
  • 您是否曾尝试一次删除超过 100 条消息?如您所述,它应该抛出错误或以其他方式失败。
  • 更重要的是,我在上面链接中提供的问题在答案部分有一个解决方案,应该可以解决您的问题。
  • 是的,我尝试删除超过 100 条消息,但出现错误,另外,请阅读,因为这不是问题,我正在寻找一个函数来使用 bulkDelete 删除超过 100 条消息

标签: javascript node.js discord.js


【解决方案1】:

注意:您仍应保持最大数量

Discord.TextChannel.prototype._bulkDelete = async function(amount) {
    if(amount > MAX_HERE) return;
    for (let i = amount; i > 0; i-=100) {
        if (i > 100) { 
            this.bulkDelete(100);
        } else {
            this.bulkDelete(i)
        }
    }
}
//you can now call the function on a text channel and put more than 100 if your new cap is higher

此代码正在为所有 Discord 文本通道创建一个 _bulkDelete 方法。但是我没有对此进行测试,所以如果您遇到任何错误,请告诉我!

注意:将MAX_HERE 替换为您的新上限。您也可能会受到速率限制。也许您想添加一个“睡眠”功能以避免被速率限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 2021-03-13
    • 2023-03-15
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 2019-11-25
    相关资源
    最近更新 更多