From a1805da88e4ff2fdd8579e27f2d3d6da5e960b38 Mon Sep 17 00:00:00 2001 From: Esenjin_Asakha Date: Sun, 25 Feb 2024 19:01:39 +0000 Subject: [PATCH] Premier jet Premier jet de la base du fonctionnement du bot. --- index.js | 136 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 index.js diff --git a/index.js b/index.js new file mode 100644 index 0000000..03d8d4f --- /dev/null +++ b/index.js @@ -0,0 +1,136 @@ +const Discord = require('discord.js'); +const sqlite3 = require('sqlite3').verbose(); +const client = new Discord.Client(); + +const db = new sqlite3.Database('./userdata.db'); + +// Messages de bienvenue avec leurs probabilités, les rôles associés et les images +const welcomeMessages = [ + { message: "{mention} vient d'être invoqué sur **Camélia Studio** ! Souhaitons-lui la bienvenue ! Il s'agit d'un personnage de rareté **B**. Dommage, nous aurons plus de chance la prochaine fois...", role: "Rang B", probability: 80, image: "https://concepts.esenjin.xyz/cyla/v2/file/11C108.png" }, + { message: "{mention} vient d'être invoqué sur **Camélia Studio** ! Souhaitons-lui la bienvenue ! Il s'agit d'un personnage de rareté **A**. C'est plutôt une bonne pioche !", role: "Rang A", probability: 15, image: "https://concepts.esenjin.xyz/cyla/v2/file/732316.png" }, + { message: "{mention} vient d'être invoqué sur **Camélia Studio** ! Souhaitons-lui la bienvenue ! Il s'agit d'un personnage de rareté **S**. On a vraiment de la chance aujourd'hui !!", role: "Rang S", probability: 4, image: "https://concepts.esenjin.xyz/cyla/v2/file/D6E3E1.png" }, + { message: "{mention} vient d'être invoqué sur **Camélia Studio** ! Souhaitons-lui la bienvenue ! Il s'agit d'un personnage de rareté **S+**. Incroyable ! On vient de tomber sur la perle rare !", role: "Rang S+", probability: 1, image: "https://concepts.esenjin.xyz/cyla/v2/file/6B6CE3.png" } +]; + +let welcomeChannel; // Canal où publier les messages de bienvenue +let farewellChannel; // Canal où publier les messages d'adieu + +// Création de la table dans la base de données +db.serialize(() => { + db.run(`CREATE TABLE IF NOT EXISTS userdata ( + userid TEXT PRIMARY KEY, + message TEXT, + role TEXT, + image TEXT + )`); +}); + +// Fonction pour choisir un message de bienvenue selon les probabilités +function chooseWelcomeMessage() { + const random = Math.random() * 100; // Random entre 0 et 100 + let cumulativeProbability = 0; + for (const { message, role, image } of welcomeMessages) { + cumulativeProbability += probability; + if (random < cumulativeProbability) { + return { message, role, image }; + } + } +} + +// Commande "/gachaoptions" +client.on('message', message => { + if (message.member.hasPermission('ADMINISTRATOR') && message.content.startsWith('/gachaoptions')) { + const args = message.content.split(' '); + if (args.length === 1) { + // Afficher les options actuelles + message.channel.send(`Options actuelles : + - Canal de bienvenue : ${welcomeChannel ? welcomeChannel : "non défini"} + - Canal d'adieu : ${farewellChannel ? farewellChannel : "non défini"} + `); + } else if (args.length === 3 && args[1] === 'bienvenue') { + // Définir le canal de bienvenue + const channelID = args[2].replace(/<#|>/g, ''); + welcomeChannel = message.guild.channels.cache.get(channelID); + message.channel.send(`Canal de bienvenue défini sur : ${welcomeChannel}`); + } else if (args.length === 3 && args[1] === 'adieu') { + // Définir le canal d'adieu + const channelID = args[2].replace(/<#|>/g, ''); + farewellChannel = message.guild.channels.cache.get(channelID); + message.channel.send(`Canal d'adieu défini sur : ${farewellChannel}`); + } else { + message.channel.send("Utilisation : `/gachaoptions bienvenue ` pour définir le canal de bienvenue ou `/gachaoptions adieu ` pour définir le canal d'adieu."); + } + } +}); + +client.on('guildMemberAdd', member => { + // Vérifier si l'utilisateur est déjà dans la base de données + db.get(`SELECT * FROM userdata WHERE userid = ?`, member.id, (err, row) => { + if (err) { + console.error(err); + return; + } + if (row) { + // Utiliser les données stockées + const { message, role, image } = row; + // Envoi du message de bienvenue dans le canal approprié + const welcomeMessage = message.replace("{mention}", member.user); + const embed = new Discord.MessageEmbed() + .setColor('#0099ff') + .setDescription(welcomeMessage) + .setImage(image); + if (welcomeChannel) { + welcomeChannel.send(embed); + } + // Attribution automatique du rôle + const guildRole = member.guild.roles.cache.find(guildRole => guildRole.name === role); + if (guildRole) { + member.roles.add(guildRole); + } + } else { + // Choix du message de bienvenue, du rôle associé et de l'image + const { message, role, image } = chooseWelcomeMessage(); + // Envoi du message de bienvenue dans le canal approprié + const welcomeMessage = message.replace("{mention}", member.user); + const embed = new Discord.MessageEmbed() + .setColor('#0099ff') + .setDescription(welcomeMessage) + .setImage(image); + if (welcomeChannel) { + welcomeChannel.send(embed); + } + // Attribution automatique du rôle + const guildRole = member.guild.roles.cache.find(guildRole => guildRole.name === role); + if (guildRole) { + member.roles.add(guildRole); + } + // Stocker les données de bienvenue dans la base de données + db.run(`INSERT INTO userdata (userid, message, role, image) VALUES (?, ?, ?, ?)`, [member.id, message, role, image], err => { + if (err) { + console.error(err); + } + }); + } + }); +}); + +client.on('guildMemberRemove', member => { + // Message d'adieu + const farewellMessage = `Oh non ! ${member.user} n'est plus utile dans la méta actuelle et quitte notre équipe. Espérons qu'une prochaine mise à jour lui soit favorable !`; + const embed = new Discord.MessageEmbed() + .setColor('#0099ff') + .setDescription(farewellMessage) + .setImage("https://concepts.esenjin.xyz/cyla/v2/file/EDF7B4.gif"); + if (farewellChannel) { + farewellChannel.send(embed); + } + // Supprimer les données de bienvenue de la base de données + db.run(`DELETE FROM userdata WHERE userid = ?`, member.id, err => { + if (err) { + console.error(err); + } + }); +}); + +// Connexion du bot à Discord +client.login('TOKEN_DU_BOT');