diff --git a/commands/gestion/ban.js b/commands/gestion/ban.js new file mode 100644 index 0000000..f8dce25 --- /dev/null +++ b/commands/gestion/ban.js @@ -0,0 +1,87 @@ +const { ButtonStyle, ButtonBuilder, ActionRowBuilder, PermissionFlagsBits, EmbedBuilder } = require('discord.js'); +const embedColor = require('../../fonctions/embedColor.js'); + +module.exports = { + aliases: ['ban'], + description: 'permet de ban un membre', + emote: '⏱️', + utilisation: '<@membre|membreId> ', + permission: 0, + + async execute(message, args, client) { + if (!interaction.guild.channels.cache.permissionsFor(interaction.user).has(PermissionFlagsBits.BanMembers) && !client.config.owners.includes(interaction.user.id)) { + return message.reply({ + embeds: [ + new EmbedBuilder() + .setTitle('Erreur') + .setDescription('❌ Vous n\'avez pas les permissions pour bannir.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }) + ], allowedMentions: { repliedUser: false } + }); + } + const member = message.mentions.members.first()?.id || args[0]; + if (member.length < 1 && !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 } + }); + } + const motif = args[1] + if (motif.length < 2) { + return message.reply({ + embeds: [ + new EmbedBuilder() + .setTitle('Erreur') + .setDescription('❌ Veuillez indiquer un motif.') + .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.ban({ reason: 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 banni !') + .setDescription('Vous avez banni: <@' + member + '>\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 = sentMessage.createMessageComponentCollector({ filter, time: 30000 }) + collector.on('collect', async (interaction) => { + const embedBanni = new EmbedBuilder() + .setTitle('Bannissement !') + .setDescription('Vous avez été banni du serveur ' + interaction.guild.name + ', avec comme motif: `' + motif + '`') + .setColor("Red") + .setTimestamp() + member.send({ embeds: [embedBanni] }) + interaction.reply({ content: '> **Le membre a été prevenu.**', ephemeral: true, allowedMentions: { repliedUser: false } }); + }); + + collector.on('end', () => { + reponse.edit({ components: [], allowedMentions: { repliedUser: false } }); + }); + } +}; \ No newline at end of file diff --git a/commands/gestion/kick.js b/commands/gestion/kick.js new file mode 100644 index 0000000..feae65d --- /dev/null +++ b/commands/gestion/kick.js @@ -0,0 +1,87 @@ +const { ButtonStyle, ButtonBuilder, ActionRowBuilder, PermissionFlagsBits, EmbedBuilder } = require('discord.js'); +const embedColor = require('../../fonctions/embedColor.js'); + +module.exports = { + aliases: ['kick'], + description: 'permet d\'expulser un membre', + emote: '⏱️', + utilisation: '<@membre|membreId> ', + permission: 0, + + async execute(message, args, client) { + if (!interaction.guild.channels.cache.permissionsFor(interaction.user).has(PermissionFlagsBits.KickMembers) && !client.config.owners.includes(interaction.user.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 } + }); + } + const member = message.mentions.members.first()?.id || args[0]; + if (member.length < 1 && !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 } + }); + } + const motif = args[1] + if (motif.length < 2) { + return message.reply({ + embeds: [ + new EmbedBuilder() + .setTitle('Erreur') + .setDescription('❌ Veuillez indiquer un motif.') + .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.kick({ reason: 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 expulser !') + .setDescription('Vous avez expulser: <@' + member + '>\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 = sentMessage.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 } }); + }); + } +}; \ No newline at end of file diff --git a/commands/gestion/mute.js b/commands/gestion/mute.js new file mode 100644 index 0000000..572fe2b --- /dev/null +++ b/commands/gestion/mute.js @@ -0,0 +1,117 @@ +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|membreId> ', + permission: 0, + + async execute(message, args, client) { + if (!interaction.guild.channels.cache.permissionsFor(interaction.user).has(PermissionFlagsBits.KickMembers) && !client.config.owners.includes(interaction.user.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 } + }); + } + + const member = message.mentions.members.first()?.id || args[0]; + if (member.length < 1 && !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 expulser !') + .setDescription('Vous avez expulser: <@' + member + '>\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 = sentMessage.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 } }); + }); + } +}; \ No newline at end of file