From c07ce758323fd41ab8cc63faa631106e5631f64e Mon Sep 17 00:00:00 2001 From: Nemo Date: Sat, 13 Nov 2021 22:57:33 +0100 Subject: [PATCH] rename de role en setrole --- commands/setrole.js | 125 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 commands/setrole.js diff --git a/commands/setrole.js b/commands/setrole.js new file mode 100644 index 0000000..512a830 --- /dev/null +++ b/commands/setrole.js @@ -0,0 +1,125 @@ +const { SlashCommandBuilder } = require('@discordjs/builders'); +const { MessageActionRow, MessageButton, MessageSelectMenu, Collection, MessageEmbed } = require('discord.js'); +var selectRole = null; +const commandUser = new Collection(); + +module.exports = { + data: new SlashCommandBuilder() + .setName('setrole') + .setDescription('Gère les rôles de votre profil'), + async execute(interaction) { + + if (commandUser.has(interaction.user.id)) { + interaction.reply({ content: 'Vous êtes déjà en train d\'utiliser cette commande', ephemeral: true }); + return; + } + + const selectMenu = new MessageSelectMenu() + .setCustomId('select') + .setPlaceholder('Nothing selected'); + const btnAdd = new MessageButton() + .setCustomId('btnAdd') + .setLabel('Ajouter') + .setStyle('SUCCESS'); + const btnDel = new MessageButton() + .setCustomId('btnDel') + .setLabel('Supprimer') + .setStyle('DANGER'); + + const roles = await interaction.guild.roles.fetch(); + + var botRoles = interaction.guild.me.roles.cache; + + var maxPos = 0; + botRoles.forEach(role => { + if (role.rawPosition > maxPos) maxPos = role.rawPosition; + }); + + roles.forEach(element => { + if (element.managed != true && element.rawPosition < maxPos) { + selectMenu.addOptions([ + { + label: element.name, + description: element.reason, + value: element.id + } + ]); + } + }); + + const row1 = new MessageActionRow().addComponents(selectMenu); + const row2 = new MessageActionRow().addComponents(btnAdd, btnDel); + const messageContent = 'Edition de rôles - Utilisable pendant 3 minutes\n\nVoici la liste des rôles que vous pouvez vous ajouter ou supprimer'; + + await interaction.reply({ content: messageContent, components: [row1, row2], ephemeral: true, fetchReply: true }) + .then((message) => { + const filter = (btnInt) => btnInt.customId === 'select' || btnInt.customId === 'btnAdd' || btnInt.customId === 'btnDel'; + + const collector = interaction.channel.createMessageComponentCollector({ + filter: filter, + time: 5 * 1000, + }); + + commandUser.set(interaction.user.id, interaction); + var msg = undefined; + + collector.on('collect', async i => { + i.deferUpdate(); + + if (i.user.id === interaction.user.id) { + if (i.customId === 'select') { + selectRole = roles.get(i.values[0]); + return; + } + + if (i.customId === 'btnAdd') { + //i.member.roles.add(roles.get(selectRole)); + if (selectRole != null) { + if (interaction.member.roles.cache.has(selectRole.id)) { + interaction.editReply(messageContent + ' - *Le rôle "' + selectRole.name + '" vous est déjà attribué*'); + + } else { + interaction.member.roles.add(selectRole); + interaction.editReply(messageContent + ' - *Le rôle "' + selectRole.name + '" a été ajouté*'); + selectRole = null; + } + } else { + interaction.editReply(messageContent + ' - *Veuillez sélectionner un rôle pour l\'ajouter*'); + } + return; + } + + if (i.customId === 'btnDel') { + if (selectRole != null) { + if (!interaction.member.roles.cache.has(selectRole.id)) { + interaction.editReply(messageContent + ' - *Le rôle "' + selectRole.name + '" ne vous est pas attribué*'); + } else { + interaction.member.roles.remove(selectRole); + interaction.editReply(messageContent + ' - *Le rôle "' + selectRole.name + '" a été enlevé*'); + selectRole = null; + } + } else { + interaction.editReply(messageContent + ' - *Veuillez sélectionner un rôle pour le supprimer*'); + } + return; + } + } + }); + + collector.on('end', () => { + commandUser.delete(interaction.user.id); + interaction.editReply({content: 'Le délai de 3 minutes est passé. Pour modifier à nouveau les rôles, merci de relancer la commande.', components: [], ephemeral: true}); + }); + }) + + } +}; + +async function Reply(str, i, msg) { + if (msg === undefined) { + return await i.channel.send({ content: str, ephemeral: true, fetchReply: true }); + } else { + msg.edit(str); + return msg; + } +} \ No newline at end of file