mirror of
https://github.com/arthur-pbty/LazyBot.git
synced 2026-06-03 23:36:37 +02:00
144 lines
5.1 KiB
JavaScript
144 lines
5.1 KiB
JavaScript
const addCommand = require("../fonctions/addCommand");
|
|
const { EmbedBuilder, PermissionFlagsBits } = require("discord.js");
|
|
|
|
module.exports = addCommand({
|
|
name: "clear",
|
|
description: "Supprime un nombre de messages dans le salon.",
|
|
aliases: ["purge", "supprimer", "delete"],
|
|
permissions: [PermissionFlagsBits.ManageMessages],
|
|
botOwnerOnly: false,
|
|
dm: false,
|
|
scope: "global",
|
|
|
|
slashOptions: [
|
|
{
|
|
type: "INTEGER",
|
|
name: "nombre",
|
|
description: "Le nombre de messages à supprimer (1-100)",
|
|
required: true,
|
|
},
|
|
{
|
|
type: "USER",
|
|
name: "utilisateur",
|
|
description: "Supprimer uniquement les messages de cet utilisateur",
|
|
required: false,
|
|
},
|
|
],
|
|
|
|
executePrefix: async (client, message, args) => {
|
|
const amount = parseInt(args[0]);
|
|
if (!amount || amount < 1 || amount > 100) {
|
|
return message.reply({ embeds: [new EmbedBuilder().setColor(0xED4245).setDescription("❌ Veuillez spécifier un nombre entre 1 et 100.")] });
|
|
}
|
|
|
|
const targetUser = message.mentions.users.first();
|
|
|
|
// Supprimer le message de commande
|
|
await message.delete().catch(() => {});
|
|
|
|
await executeClear(message.channel, amount, targetUser, message.author);
|
|
},
|
|
|
|
executeSlash: async (client, interaction) => {
|
|
const amount = interaction.options.getInteger("nombre");
|
|
const targetUser = interaction.options.getUser("utilisateur");
|
|
|
|
await interaction.deferReply({ ephemeral: true });
|
|
await executeClearSlash(interaction, amount, targetUser);
|
|
},
|
|
});
|
|
|
|
async function executeClear(channel, amount, targetUser, moderator) {
|
|
try {
|
|
let messages = await channel.messages.fetch({ limit: 100 });
|
|
|
|
if (targetUser) {
|
|
messages = messages.filter(m => m.author.id === targetUser.id);
|
|
}
|
|
|
|
const twoWeeksAgo = Date.now() - 14 * 24 * 60 * 60 * 1000;
|
|
messages = messages.filter(m => m.createdTimestamp > twoWeeksAgo);
|
|
|
|
const messagesToDelete = [...messages.values()].slice(0, amount);
|
|
|
|
if (messagesToDelete.length === 0) {
|
|
const errorEmbed = new EmbedBuilder()
|
|
.setColor(0xED4245)
|
|
.setDescription("❌ Aucun message à supprimer.");
|
|
const errorMsg = await channel.send({ embeds: [errorEmbed] });
|
|
setTimeout(() => errorMsg.delete().catch(() => {}), 5000);
|
|
return;
|
|
}
|
|
|
|
const deleted = await channel.bulkDelete(messagesToDelete, true);
|
|
|
|
const embed = new EmbedBuilder()
|
|
.setColor(0x57F287)
|
|
.setDescription(`🗑️ **${deleted.size}** message(s) supprimé(s) par ${moderator}.`);
|
|
|
|
if (targetUser) {
|
|
embed.addFields({ name: "👤 Utilisateur ciblé", value: targetUser.tag, inline: true });
|
|
}
|
|
|
|
const confirmMsg = await channel.send({ embeds: [embed] });
|
|
setTimeout(() => confirmMsg.delete().catch(() => {}), 5000);
|
|
} catch (error) {
|
|
console.error(error);
|
|
const errorEmbed = new EmbedBuilder().setColor(0xED4245).setDescription("❌ Une erreur est survenue lors de la suppression.");
|
|
const errorMsg = await channel.send({ embeds: [errorEmbed] });
|
|
setTimeout(() => errorMsg.delete().catch(() => {}), 5000);
|
|
}
|
|
}
|
|
|
|
async function executeClearSlash(interaction, amount, targetUser) {
|
|
try {
|
|
let messages = await interaction.channel.messages.fetch({ limit: 100 });
|
|
|
|
if (targetUser) {
|
|
messages = messages.filter(m => m.author.id === targetUser.id);
|
|
}
|
|
|
|
const twoWeeksAgo = Date.now() - 14 * 24 * 60 * 60 * 1000;
|
|
messages = messages.filter(m => m.createdTimestamp > twoWeeksAgo);
|
|
|
|
const messagesToDelete = [...messages.values()].slice(0, amount);
|
|
|
|
if (messagesToDelete.length === 0) {
|
|
return interaction.editReply({
|
|
embeds: [new EmbedBuilder().setColor(0xED4245).setDescription("❌ Aucun message à supprimer (les messages de plus de 14 jours ne peuvent pas être supprimés en masse).")]
|
|
});
|
|
}
|
|
|
|
const deleted = await interaction.channel.bulkDelete(messagesToDelete, true);
|
|
|
|
const embed = new EmbedBuilder()
|
|
.setColor(0x57F287)
|
|
.setTitle("🗑️ Messages supprimés")
|
|
.setDescription(`**${deleted.size}** message(s) supprimé(s) avec succès.`)
|
|
.addFields(
|
|
{ name: "📺 Salon", value: `<#${interaction.channel.id}>`, inline: true },
|
|
{ name: "👮 Modérateur", value: interaction.user.tag, inline: true }
|
|
)
|
|
.setFooter({ text: `Supprimé par ${interaction.user.username}`, iconURL: interaction.user.displayAvatarURL({ dynamic: true }) })
|
|
.setTimestamp();
|
|
|
|
if (targetUser) {
|
|
embed.addFields({ name: "👤 Utilisateur ciblé", value: targetUser.tag, inline: true });
|
|
}
|
|
|
|
await interaction.editReply({ embeds: [embed] });
|
|
|
|
const confirmEmbed = new EmbedBuilder()
|
|
.setColor(0x57F287)
|
|
.setDescription(`🗑️ **${deleted.size}** message(s) supprimé(s) par ${interaction.user}.`);
|
|
|
|
const confirmMsg = await interaction.channel.send({ embeds: [confirmEmbed] });
|
|
setTimeout(() => confirmMsg.delete().catch(() => {}), 5000);
|
|
} catch (error) {
|
|
console.error(error);
|
|
await interaction.editReply({
|
|
embeds: [new EmbedBuilder().setColor(0xED4245).setDescription("❌ Une erreur est survenue lors de la suppression des messages.")]
|
|
});
|
|
}
|
|
}
|