From 58ac0125b92cd110154e20405cc9a7353b9e9b69 Mon Sep 17 00:00:00 2001 From: VALOU3336 Date: Sat, 24 Feb 2024 21:15:00 +0100 Subject: [PATCH] add role vocal and mini update suggest --- commands/gestion/rvocal.js | 78 ++++++++++++++++++++++++++++++++ commands/gestion/suggest.js | 2 +- events/gestion/memberconnecte.js | 28 ++++++++++++ 3 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 commands/gestion/rvocal.js create mode 100644 events/gestion/memberconnecte.js diff --git a/commands/gestion/rvocal.js b/commands/gestion/rvocal.js new file mode 100644 index 0000000..d278944 --- /dev/null +++ b/commands/gestion/rvocal.js @@ -0,0 +1,78 @@ +const { ChannelType , EmbedBuilder } = require('discord.js'); +const db = require('quick.db'); +const GestionDb = new db.table('gestion'); + +module.exports = { + name: 'rvocal', + description: 'Enregistre les rôles associés à un salon vocal', + emote: '🔊', + utilisation: '+rvocal ', + category: 'gestion', + + async execute(message, args) { + const botId = message.client.user.id; + const guildId = message.guild.id; + let mentionedChannel = message.mentions.channels.first(); + if (!mentionedChannel) { + const channelId = args[0]; + mentionedChannel = message.guild.channels.cache.get(channelId); + if (!mentionedChannel || mentionedChannel.type !== ChannelType.GuildVoice) { + return message.channel.send("Veuillez mentionner un salon vocal valide ou fournir un ID de salon vocal valide."); + } + } + if (mentionedChannel === ChannelType.GuildText || mentionedChannel === ChannelType.DM) { + return message.channel.send("Veuillez mentionner un salon vocal valide ou fournir un ID de salon vocal valide."); + } + if (args.length === 1 ) { + const channelId = args[0]; + mentionedChannel = message.guild.channels.cache.get(channelId); + if (!mentionedChannel || mentionedChannel.type !== ChannelType.GuildVoice) { + return message.channel.send("Veuillez mentionner un salon vocal valide ou fournir un ID de salon vocal valide."); + } + + const roles = GestionDb.get(`${botId}.${guildId}.rolevocal.${mentionedChannel.id}`) || []; + + const embed = new EmbedBuilder() + .setTitle(`Rôles associés au salon vocal <#${mentionedChannel.id}>`) + .setDescription(roles.length > 0 ? roles.map(roleId => `<@&${roleId}>`).join(', ') : 'Aucun rôle associé.') + .setColor('#0099ff'); + + return message.channel.send({ embeds: [embed] }); + } + +// Si l'utilisateur fournit un salon vocal et des rôles +if (mentionedChannel && args.length > 1) { + const roles = []; + // Utilisez une boucle pour traiter tous les rôles mentionnés + for (let i = 1; i < args.length; i++) { + // Vérifiez si message.mentions.roles est défini + if (message.mentions.roles && message.mentions.roles.cache) { + const role = message.mentions.roles.cache.get(args[i]); + if (role) { + roles.push(role.id); + } else { + // Vérifiez si l'argument est un ID de rôle valide + const roleById = message.guild.roles.cache.get(args[i]); + if (roleById) { + roles.push(roleById.id); + } else { + return message.channel.send("Un ou plusieurs rôles mentionnés sont invalides."); + } + } + } else { + // Vérifiez si l'argument est un ID de rôle valide + const roleById = message.guild.roles.cache.get(args[i]); + if (roleById) { + roles.push(roleById.id); + } else { + return message.channel.send("Un ou plusieurs rôles mentionnés sont invalides."); + } + } + } + + // Enregistre les rôles dans la base de données + GestionDb.set(`${botId}.${guildId}.rolevocal.${mentionedChannel.id}`, roles); + message.channel.send(`Les rôles ont été enregistrés pour le salon vocal <#${mentionedChannel.id}>.`); +} + }, +}; \ No newline at end of file diff --git a/commands/gestion/suggest.js b/commands/gestion/suggest.js index 138a98f..f55b33b 100644 --- a/commands/gestion/suggest.js +++ b/commands/gestion/suggest.js @@ -4,7 +4,7 @@ const GestionDb = new db.table("gestion"); module.exports = { name: 'suggest', description: 'configure le salon de suggestion', - emote: '🛡️', + emote: '💡', utilisation: 'suggest #channel', category: 'gestion', async execute(message, args, client) { diff --git a/events/gestion/memberconnecte.js b/events/gestion/memberconnecte.js new file mode 100644 index 0000000..54c563f --- /dev/null +++ b/events/gestion/memberconnecte.js @@ -0,0 +1,28 @@ +const db = require('quick.db'); +const GestionDb = new db.table('gestion'); +const {Events} = require("discord.js") + +module.exports = { + name: Events.VoiceStateUpdate, + async execute(oldState, newState) { + if (!oldState.channelId && newState.channelId) { + const guildId = newState.guild.id; + const botId = newState.client.user.id; + const channelId = newState.channelId; + const roles = GestionDb.get(`${botId}.${guildId}.rolevocal.${channelId}`) || []; + if (roles.length > 0) { + const member = newState.member; + for (const roleId of roles) { + const role = newState.guild.roles.cache.get(roleId); + if (role) { + try { + await member.roles.add(role); + } catch (error) { + console.error(`Erreur lors de l'ajout du rôle ${roleId} à l'utilisateur ${member.id}:`, error); + } + } + } + } + } + }, +}; \ No newline at end of file