import { GuildMember, MessageEmbed } from "discord.js"; import { SlashCommand } from "../../Structures/Classes/SlashCommand"; export default new SlashCommand({ name: "purge", description: "Purge/Delete messages in the channel", category: "Moderation", permissions: { me: ["MANAGE_MESSAGES"], user: ["MANAGE_MESSAGES"], }, options: [ { name: "amount", description: "Amount of messages to purge.", type: "INTEGER", maxValue: 100, minValue: 1, required: true, }, { name: "member", description: "Purge this members messages.", type: "USER", required: false, }, { name: "word", description: "Purge the messages that has this word.", type: "STRING", required: false, }, { name: "reason", description: "Reason for purging these messages.", type: "STRING", required: false, }, ], async run({ client, interaction }) { const amount = interaction.options.getInteger("amount"); const member = interaction.options.getMember("member") as GuildMember; const word = interaction.options.getString("word"); const reason = interaction.options.getString("reason") || "No reason provided"; const messages = await interaction.channel.messages.fetch({ limit: amount, }); if (member) { const memberMessages = messages.filter((m) => m.author.id === member.id); const purged = await interaction.channel.bulkDelete(memberMessages, true); const embed = new MessageEmbed() .setDescription( `\`\`\`Purged: purged ${purged.size} message${ purged.size > 1 ? "s" : "" } from ${member.user.tag}\`\`\`` ) .addField("Reason", `\`\`\`${reason}\`\`\``) .setColor("GREEN"); interaction.reply({ embeds: [embed] }); } else if (word) { const filteredWord = messages.filter((m) => m.content.toLowerCase().includes(word) ); const purged = await interaction.channel.bulkDelete(filteredWord, true); const embed = new MessageEmbed() .setDescription( `\`\`\`Purged: purged ${purged.size} message${ purged.size > 1 ? "s" : "" } that contains ${word.toLowerCase()}\`\`\`` ) .addField("Reason", `\`\`\`${reason}\`\`\``) .setColor("GREEN"); interaction.reply({ embeds: [embed] }); } else if (member && word) { const memberMessages = messages.filter((m) => m.author.id === member.id && m.content.toLowerCase().includes(word)); const purged = await interaction.channel.bulkDelete(memberMessages, true); const embed = new MessageEmbed() .setDescription( `\`\`\`Purged: purged ${purged.size} message${ purged.size > 1 ? "s" : "" } that contains ${word.toLowerCase()} from ${member.user.tag}\`\`\`` ) .addField("Reason", `\`\`\`${reason}\`\`\``) .setColor("GREEN"); interaction.reply({ embeds: [embed] }); } else { const purged = await interaction.channel.bulkDelete(messages, true); const embed = new MessageEmbed() .setDescription( `\`\`\`Purged: purged ${purged.size} message${ purged.size > 1 ? "s" : "" } in the channel\`\`\`` ) .addField("Reason", `\`\`\`${reason}\`\`\``) .setColor("GREEN"); interaction.reply({ embeds: [embed] }); } }, });