mirror of
https://github.com/arthur-pbty/LazyBot.git
synced 2026-06-13 08:09:11 +02:00
add some utilities commands
This commit is contained in:
@@ -0,0 +1,143 @@
|
||||
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.")]
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user