简体   繁体   English

清除命令不重复批量删除

[英]Purge command not repeating bulk delete

I've got a purge command on my Discord.js v12.2.0 bot and it doesn't work as I would've hoped.我的 Discord.js v12.2.0 机器人上有一个清除命令,但它没有像我希望的那样工作。 I wanted to be able to purge up to 1,000 messages by repeating bulk delete, but unfortunately it doesn't actually repeat bulk delete and it only bulk deletes once.我希望能够通过重复批量删除来清除多达 1,000 条消息,但不幸的是它实际上并没有重复批量删除,它只批量删除一次。 Any help would be super appreciated.任何帮助将不胜感激。

Here's my code:这是我的代码:

module.exports = {
    name: 'purge',
    description: "Purge messages.",
    usage: '[amount]',
    aliases: ['prune'],
    execute(client, Discord, message, args, prefix, wrongchannelpublic, wrongchannelstaff, talkingserverbump, disabledcommand, nopermission, noarguments, colour, footer1, footer2) {
        if (!message.member.roles.cache.some(role => role.id === '703316042965057546')) { return message.delete({ timeout: 100 }), message.channel.send(nopermission).then(sentMessage => sentMessage.delete({ timeout: 7000})) }
        if (!args[0] || isNaN(args[0])) { return message.delete({ timeout: 100 }), message.channel.send(noarguments).then(sentMessage => sentMessage.delete({ timeout: 7000})) }
        if (args[0] < 1 || args[0] > 1000) { return message.delete({ timeout: 100 }), message.channel.send(`Please provide a number between 1 and 100, ${message.author}!`).then(sentMessage => sentMessage.delete({ timeout: 7000})) }
        message.delete({ timeout: 100 })
        .then(() => {
            let remainder = args[0] % 100;
            let numOfTimes = (args[0]-remainder)/100;
            try {
                for (let i = 0; i < numOfTimes; i++) {
                    message.channel.bulkDelete(100);
                }
                if (remainder > 0) { message.channel.bulkDelete(remainder); }
            } catch (err) {
                const purgeerror = new Discord.MessageEmbed()
                  .setDescription(`**Execution error**\nThe \`purge\` command ran by ${message.author} in ${message.channel} failed to execute.\nError: \`${err}\``)
                  .setColor('#ff0000')
                  .setTimestamp();
                message.channel.send(`<:cross:740242485728772137> Error: \`${err}\``);
                client.channels.cache.get('740251593382821920').send(purgeerror);
                console.log(`The purge command ran by ${message.author.tag} in #${message.channel.name} failed to execute. Error: ${err}`);
            }
        if (args[0] === "1") {
            setTimeout(()=>{ message.channel.send(`<:tick:740242485908996128> Purged ${args[0]} message.`).then(sentMessage => sentMessage.delete({ timeout: 4000})) }, 1000)
        } else {
            setTimeout(()=>{ message.channel.send(`<:tick:740242485908996128> Purged ${args[0]} messages.`).then(sentMessage => sentMessage.delete({ timeout: 4000})) }, 1000)
        }
        })
    }
}

Use await so it will wait one or two seconds between each bulkDelete (at this time, all the bulkDelete are sent but they delete the same messages):使用await以便在每个bulkDelete之间等待一两秒(此时,所有的bulkDelete都已发送,但它们删除了相同的消息):

const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

module.exports = {
    name: 'purge',
    description: "Purge messages.",
    usage: '[amount]',
    aliases: ['prune'],
    execute(client, Discord, message, args, prefix, wrongchannelpublic, wrongchannelstaff, talkingserverbump, disabledcommand, nopermission, noarguments, colour, footer1, footer2) {
        if (!message.member.roles.cache.some(role => role.id === '703316042965057546')) { return message.delete({ timeout: 100 }), message.channel.send(nopermission).then(sentMessage => sentMessage.delete({ timeout: 7000})) }
        if (!args[0] || isNaN(args[0])) { return message.delete({ timeout: 100 }), message.channel.send(noarguments).then(sentMessage => sentMessage.delete({ timeout: 7000})) }
        if (args[0] < 1 || args[0] > 1000) { return message.delete({ timeout: 100 }), message.channel.send(`Please provide a number between 1 and 100, ${message.author}!`).then(sentMessage => sentMessage.delete({ timeout: 7000})) }
        message.delete({ timeout: 100 })
        .then(async () => {
            let remainder = args[0] % 100;
            let numOfTimes = (args[0]-remainder)/100;
            try {
                for (let i = 0; i < numOfTimes; i++) {
                    await message.channel.bulkDelete(100);
                    await delay(1000); // wait one second
                }
                if (remainder > 0) { message.channel.bulkDelete(remainder); }
            } catch (err) {
                const purgeerror = new Discord.MessageEmbed()
                  .setDescription(`**Execution error**\nThe \`purge\` command ran by ${message.author} in ${message.channel} failed to execute.\nError: \`${err}\``)
                  .setColor('#ff0000')
                  .setTimestamp();
                message.channel.send(`<:cross:740242485728772137> Error: \`${err}\``);
                client.channels.cache.get('740251593382821920').send(purgeerror);
                console.log(`The purge command ran by ${message.author.tag} in #${message.channel.name} failed to execute. Error: ${err}`);
            }
        if (args[0] === "1") {
            setTimeout(()=>{ message.channel.send(`<:tick:740242485908996128> Purged ${args[0]} message.`).then(sentMessage => sentMessage.delete({ timeout: 4000})) }, 1000)
        } else {
            setTimeout(()=>{ message.channel.send(`<:tick:740242485908996128> Purged ${args[0]} messages.`).then(sentMessage => sentMessage.delete({ timeout: 4000})) }, 1000)
        }
        })
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM