const { ButtonStyle, ButtonBuilder, ActionRowBuilder, PermissionFlagsBits, EmbedBuilder, } = require("discord.js"); const embedColor = require("../../fonctions/embedColor.js"); module.exports = { aliases: ["timeout"], description: "permet de mute un membre", emote: "⏱️", utilisation: "<@membre> ", permission: 0, async execute(message, args, client) { const authorPerms = message.channel.permissionsFor(message.author); if ( (!authorPerms || !authorPerms.has(PermissionFlagsBits.MuteMembers)) && !client.config.owners.includes(message.author.id) ) { return message.reply({ embeds: [ new EmbedBuilder() .setTitle("Erreur") .setDescription("❌ Vous n'avez pas les permissions pour expulser.") .setColor(await embedColor(message.author.id, message.guild.id)) .setTimestamp() .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL(), }), ], allowedMentions: { repliedUser: false }, }); } if (!args[0] || !args[1] || !args[2]) { return message.reply({ embeds: [ new EmbedBuilder() .setTitle("Erreur") .setDescription( "❌ Veuillez respecter ce format : <@membre|membreId> .", ) .setColor(await embedColor(message.author.id, message.guild.id)) .setTimestamp() .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL(), }), ], allowedMentions: { repliedUser: false }, }); } let member = message.mentions.members.first(); //|| message.guild.members.get(args[0]) if (!member) { return message.reply({ embeds: [ new EmbedBuilder() .setTitle("Erreur") .setDescription("❌ Veuillez spécifier un membre du serveur.") .setColor(await embedColor(message.author.id, message.guild.id)) .setTimestamp() .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL(), }), ], allowedMentions: { repliedUser: false }, }); } let time = args[1]; if (time.length <= 3 || !time.includes("min")) { return message.reply({ embeds: [ new EmbedBuilder() .setTitle("Erreur") .setDescription("❌ Veuillez indiquer une durée valide <`x`min>.") .setColor(await embedColor(message.author.id, message.guild.id)) .setTimestamp() .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL(), }), ], allowedMentions: { repliedUser: false }, }); } time = time.replace("min", ""); const motif = args[2]; if (motif.length <= 2) { return message.reply({ embeds: [ new EmbedBuilder() .setTitle("Erreur") .setDescription( "❌ Veuillez indiquer un motif (minimum 3caractère).", ) .setColor(await embedColor(message.author.id, message.guild.id)) .setTimestamp() .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL(), }), ], allowedMentions: { repliedUser: false }, }); } let reponse; member.timeout(time * 60 * 1000, motif).then(async () => { const btn = new ButtonBuilder() .setCustomId("mp") .setLabel("Prevenir le membre en MP") .setStyle(ButtonStyle.Primary); const row = new ActionRowBuilder().addComponents(btn); const embed = new EmbedBuilder() .setTitle("Membre mute !") .setDescription( "Vous avez mute: <@" + member + ">\nTemps: `" + time + "`min\nMotif: `" + motif + "`", ) .setColor(await embedColor(message.author.id, message.guild.id)) .setTimestamp() .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL(), }); reponse = message.reply({ embeds: [embed], components: [row], allowedMentions: { repliedUser: false }, }); }); const filter = (i) => i.customId === "mp" && i.user.id === message.author.id; const collector = reponse.createMessageComponentCollector({ filter, time: 30000, }); collector.on("collect", async (interaction) => { const embedkick = new EmbedBuilder() .setTitle("Expulsion !") .setDescription( "Vous avez été expulser du serveur " + interaction.guild.name + ", avec comme motif: `" + motif + "`", ) .setColor("Red") .setTimestamp(); member.send({ embeds: [embedkick] }); interaction.reply({ content: "> **Le membre a été prevenu.**", ephemeral: true, allowedMentions: { repliedUser: false }, }); }); collector.on("end", () => { reponse.edit({ components: [], allowedMentions: { repliedUser: false } }); }); }, };