diff --git a/commands/gestion/buttonsrole.js b/commands/gestion/buttonsrole.js index 6b8f8f9..b3e0c17 100644 --- a/commands/gestion/buttonsrole.js +++ b/commands/gestion/buttonsrole.js @@ -37,7 +37,7 @@ module.exports = { const filter = i => i.user.id === message.author.id; const filter2 = m => m.author.id === message.author.id; - const collector = channel.createMessageComponentCollector({ filter: filter, time: 60000 * 2 }); + const collector = message.channel.createMessageComponentCollector({ filter: filter, time: 60000 * 4 }); collector.on('collect', async i => { if (i.customId === 'add_role') { diff --git a/commands/gestion/rolereact.js b/commands/gestion/rolereact.js new file mode 100644 index 0000000..fa9c40e --- /dev/null +++ b/commands/gestion/rolereact.js @@ -0,0 +1,62 @@ +const sqlite3 = require('sqlite3').verbose(); +const db = new sqlite3.Database('myDatabase.db'); + +module.exports = { + name: 'rolereact', + description: 'Associate an emoji with a role and add the reaction to a message', + emote: '馃幁', + utilisation: '+rolereact @role/id ', + category: 'gestion', + async execute(message, args, client) { + if (args.length < 3) { + return message.reply('Veuillez fournir un r么le, un message ID et un emoji.'); + } + + const role = message.mentions.roles.first() || message.guild.roles.cache.get(args[0]); + if (!role) { + return message.reply('R么le invalide. Veuillez entrer un ID de r么le valide ou mentionner un r么le existant.'); + } + + const emoji = args[1]; + const messageId = args[2]; + if (!/^\d+$/.test(messageId)) { + return message.reply('Veuillez fournir un ID de message valide.'); + } + +let data = await new Promise((resolve, reject) => { + db.get('SELECT value FROM gestion WHERE id = ?', [client.user.id], (err, row) => { + if (err) { + console.error(err.message); + reject(err); + } + resolve(row ? JSON.parse(row.value) : {}); + }); +}); + +if (!data[message.guild.id]) { + data[message.guild.id] = {}; +} +if (!data[message.guild.id].rolereact) { + data[message.guild.id].rolereact = {}; +} +if (!data[message.guild.id].rolereact[messageId]) { + data[message.guild.id].rolereact[messageId] = []; +} +data[message.guild.id].rolereact[messageId].push({ emoji, roleId: role.id }); + +db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [client.user.id, JSON.stringify(data)], async (err) => { + if (err) { + console.error(err.message); + return message.reply('Une erreur s\'est produite lors de la mise 脿 jour de la base de donn茅es.'); + } + try { + const messageToReact = await message.channel.messages.fetch(messageId); + message.reply(`L'emoji ${emoji} a 茅t茅 associ茅 au r么le ${role.name} pour le message ${messageToReact.url}.`); + await messageToReact.react(emoji); + } catch (error) { + message.reply('Une erreur est survenue lors de l\'ajout de la r茅action au message.'); + } +}); + + }, +}; \ No newline at end of file diff --git a/commands/utils/encode.js b/commands/utils/encode.js new file mode 100644 index 0000000..62f870f --- /dev/null +++ b/commands/utils/encode.js @@ -0,0 +1,67 @@ +module.exports = { + name: 'encode', + description: 'Encoder ou d茅coder un language chiffr茅', + utilisation: ' ', + emote: "馃攼", + category: "utils", + async execute(message, args) { + if (args.length < 3) { + return message.reply('Usage: `encode `'); + } + + const subcommand = args[0]; + const action = args[1]; + const text = args.slice(2).join(' '); + + if (subcommand !== 'base64' && subcommand !== 'binaire') { + return message.reply('Invalid subcommand. Use `base64` or `binaire`.'); + } + + if (action !== 'encode' && action !== 'decode') { + return message.reply('Invalid action. Use `encode` or `decode`.'); + } + + if (subcommand === 'base64') { + let result; + if (action === 'encode') { + result = btoa(text); + } else { + result = atob(text); + } + return message.channel.send(`**Resultat:** \`${result}\``); + } + + if (subcommand === 'binaire') { + let result; + if (action === 'encode') { + result = texteVersBinaire(text); + } else { + result = binaireVersTexte(text); + } + return message.channel.send(`**Resultat:** \`${result}\``); + } + }, +}; + +function texteVersBinaire(texte) { + let binaire = ''; + for (let i = 0; i < texte.length; i++) { + let charCode = texte.charCodeAt(i).toString(2); + charCode = '0'.repeat(8 - charCode.length) + charCode; + binaire += charCode + ' '; + } + return binaire.trim(); +} + +function binaireVersTexte(binaire) { + let texte = ''; + const octets = binaire.split(' '); + + for (let i = 0; i < octets.length; i++) { + const decimal = parseInt(octets[i], 2); + const caractere = String.fromCharCode(decimal); + texte += caractere; + } + + return texte; +} \ No newline at end of file diff --git a/events/auto/addreact.js b/events/auto/addreact.js new file mode 100644 index 0000000..d57d902 --- /dev/null +++ b/events/auto/addreact.js @@ -0,0 +1,37 @@ +const sqlite3 = require('sqlite3').verbose(); +const db = new sqlite3.Database('myDatabase.db'); +const { Events } = require("discord.js"); +module.exports = { + name: Events.MessageReactionAdd, + async execute(reaction, user, client) { + if (user.bot) return; + const messageId = reaction.message.id; + const emoji = reaction.emoji.toString(); + let data = await new Promise((resolve, reject) => { + db.get('SELECT value FROM gestion WHERE id = ?', [client.user.id], (err, row) => { + if (err) { + console.error(err.message); + reject(err); + } + resolve(row ? JSON.parse(row.value) : {}); + }); + }); + + const roleDataArray = data[reaction.message.guild.id]?.rolereact?.[messageId]; + if (!Array.isArray(roleDataArray)) { + console.error('Expected an array of role data objects, but received something else.'); + return; + } + + const roleData = roleDataArray.find(r => r.emoji === emoji); + if (!roleData) return; + + const role = reaction.message.guild.roles.cache.get(roleData.roleId); + if (!role) return; + + const member = reaction.message.guild.members.cache.get(user.id); + if (!member) return; + await member.roles.add(role); + + }, +}; diff --git a/events/auto/removereact.js b/events/auto/removereact.js new file mode 100644 index 0000000..e69de29