首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Purge命令不重复批量删除

Purge命令不重复批量删除
EN

Stack Overflow用户
提问于 2020-08-14 03:10:48
回答 1查看 146关注 0票数 0

我在我的Discord.js v12.2.0机器人上有一个清除命令,但它不能像我希望的那样工作。我希望能够通过重复批量删除来清除多达1,000条消息,但不幸的是,它实际上并没有重复批量删除,而且它只批量删除一次。任何帮助都将不胜感激。

下面是我的代码:

代码语言:javascript
复制
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)
        }
        })
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-14 03:17:19

使用await,以便在每个bulkDelete之间等待一到两秒钟(此时,所有bulkDelete都已发送,但它们删除相同的消息):

代码语言:javascript
复制
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)
        }
        })
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63401772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档