From 3de542979c3088d307b67f870b90d18ebc4d9cd5 Mon Sep 17 00:00:00 2001 From: *x1 Date: Tue, 28 May 2024 17:25:36 +0200 Subject: [PATCH] Add systeme de niveau ( &bal == &lvl ) --- commands/casino/{coins.js => me.js} | 66 +++++++++++++++-------------- events/interactionCreate.js | 49 +++++++++++++++++++++ events/messageCreateLVL.js | 52 +++++++++++++++++++++++ fonctions/database.js | 2 + 4 files changed, 137 insertions(+), 32 deletions(-) rename commands/casino/{coins.js => me.js} (83%) create mode 100644 events/interactionCreate.js create mode 100644 events/messageCreateLVL.js diff --git a/commands/casino/coins.js b/commands/casino/me.js similarity index 83% rename from commands/casino/coins.js rename to commands/casino/me.js index 0648c84..c88da59 100644 --- a/commands/casino/coins.js +++ b/commands/casino/me.js @@ -1,33 +1,35 @@ -const { EmbedBuilder } = require('discord.js'); -const db = require('../../fonctions/database.js'); -const embedColor = require('../../fonctions/embedColor.js'); - -module.exports = { - aliases: ['coin', 'money', 'balance', 'bal', 'wallet', 'cash'], - description: 'Affiche le solde d\'un compte.', - emote: '💵', - utilisation: '[@membre]', - permission: 0, - - async execute(message, args, client) { - const member = message.mentions.members.first() || message.member; - const user = await new Promise((resolve, reject) => { - db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, member.id], (err, row) => { - if (err) reject(err); - resolve(row); - }); - }); - const pocket = user.pocket - const bank = user.bank - const reputation = user.reputation - - const embed = new EmbedBuilder() - .setAuthor({ name: `Détails du Compte de ${member.user.tag}`, iconURL: member.user.displayAvatarURL() }) - .setDescription(`> :moneybag: **Poche:** \`${pocket}\`\n> :bank: **Banque:** \`${bank}\`\n> :star2: **Réputation:** \`${reputation}\``) - .setColor(await embedColor(member.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - - message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); - }, +const { EmbedBuilder } = require('discord.js'); +const db = require('../../fonctions/database.js'); +const embedColor = require('../../fonctions/embedColor.js'); + +module.exports = { + aliases: ['coin', 'coins', 'money', 'balance', 'bal', 'wallet', 'cash', 'lvl', 'level', 'niv', 'niveau'], + description: 'Affiche le solde d\'un compte.', + emote: '💵', + utilisation: '[@membre]', + permission: 0, + + async execute(message, args, client) { + const member = message.mentions.members.first() || message.member; + const user = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, member.id], (err, row) => { + if (err) reject(err); + resolve(row); + }); + }); + const pocket = user.pocket + const bank = user.bank + const reputation = user.reputation + const niveau = user.lvl + const xp = user.xp + + const embed = new EmbedBuilder() + .setAuthor({ name: `Détails du Compte de ${member.user.tag}`, iconURL: member.user.displayAvatarURL() }) + .setDescription(`> :moneybag: **Poche:** \`${pocket}\`\n> :bank: **Banque:** \`${bank}\`\n> :star2: **Réputation:** \`${reputation}\`\n\n> :bar_chart: **Niveau:** \`${niveau}\`\n> :thought_balloon: **xp:** \`${xp}\``) + .setColor(await embedColor(member.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + }, }; \ No newline at end of file diff --git a/events/interactionCreate.js b/events/interactionCreate.js new file mode 100644 index 0000000..a6f438f --- /dev/null +++ b/events/interactionCreate.js @@ -0,0 +1,49 @@ +const { Events } = require('discord.js'); +const db = require('../fonctions/database.js'); + +module.exports = { + name: Events.InteractionCreate, + async execute(client, interaction) { + + if (!interaction.isButton()) return + + if (interaction.customId === "lvl_Recomp_Rep") { + const lvl = interaction.message.embeds[0].fields[0].value + const serv = interaction.message.embeds[0].fields[1].value + + const user = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [serv, member.id], (err, row) => { + if (err) reject(err); + resolve(row); + }); + }); + + db.run(`UPDATE users SET reputation = reputation + ? WHERE guildId = ? AND userId = ?`, [lvl, serv, message.author.id]); + + const embedClaim = new EmbedBuilder() + .setTitle('Recompense du niveau ' + lvl + ':') + .setDescription('La recompense du niveau ' + lvl + 'était de ' + lvl + 'reputation, ou bien de ' + lvl * 500 + 'coins\n\nVous avez choisi les reputations, vous avez donc `' + user.reputation + '` reputation !') + .setColor(await embedColor(message.author.id, serv)) + .setTimestamp() + .setFooter({ text: `La recompense à été reçu sur le serveur ${serv.name}` }) + + interaction.edit({ embeds: [embedClaim], components: [] }) + } + + if (interaction.customId === "lvl_Recomp_Coins") { + const lvl = interaction.message.embeds[0].fields[0].value + const serv = interaction.message.embeds[0].fields[1].value + + db.run(`UPDATE users SET pocket = pocket + ? WHERE guildId = ? AND userId = ?`, [lvl * 500, serv, message.author.id]); + + const embedClaim = new EmbedBuilder() + .setTitle('Recompense du niveau ' + lvl + ':') + .setDescription('La recompense du niveau ' + lvl + 'était de ' + lvl + 'reputation, ou bien de ' + lvl * 500 + 'coins\n\nVous avez choisi les coins, vous avez donc `' + lvl * 500 + '` coins en plus !') + .setColor(await embedColor(message.author.id, serv)) + .setTimestamp() + .setFooter({ text: `La recompense à été reçu sur le serveur ${serv.name}` }) + + interaction.edit({ embeds: [embedClaim], components: [] }) + } + } +} \ No newline at end of file diff --git a/events/messageCreateLVL.js b/events/messageCreateLVL.js new file mode 100644 index 0000000..42f7ec2 --- /dev/null +++ b/events/messageCreateLVL.js @@ -0,0 +1,52 @@ +const { Message, Events, ActionRowBuilder, ActionRow, ButtonBuilder, EmbedBuilder } = require("discord.js"); +const db = require('../fonctions/database.js'); + +module.exports = { + name: Events.MessageCreate, + async execute(message, client) { + if (message.author.bot) return; + + if (message.content.length < 50) { + db.run(`UPDATE users SET xp = xp + 1, WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id]); + } + if (message.content.length >= 50) { + db.run(`UPDATE users SET xp = xp + 3, WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id]); + } + + const user = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => { + if (err) reject(err); + resolve(row); + }); + }); + + if (user.xp >= 100 * user.lvl) { + db.run(`UPDATE users SET xp = 0, lvl = lvl + 1 WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id]); + + const embedlvl = new EmbedBuilder() + .setTitle('Nouveau niveau !') + .setDescription('Vous avez passé(e) un niveau sur ' + message.guild.name + ' !!\n\nVeuillez choisir une recompense :') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .addFields({ name: 'Le niveau passé :', value: `${user.lvl}`, inline: true }) + .addFields({ name: 'Serveur id :', value: `${message.guild.id}`, inline: true}) + .setFooter({ text: `Merci d'être actif/ve`, iconURL: message.author.displayAvatarURL() }) + + const btn1 = new ButtonBuilder() + .setCustomId('lvl_Recomp_Rep') + .setLabel(user.lvl + 'reputation') + .setStyle(ButtonStyle.Primary); + + const btn2 = new ButtonBuilder() + .setCustomId('lvl_Recomp_Coins') + .setLabel(user.lvl * 500 + 'coins') + .setStyle(ButtonStyle.Primary); + + const row = new ActionRowBuilder() + .addComponents(btn1) + .addComponents(btn2) + + message.author.send({ embeds: [embedlvl], components: [row] }) + } + } +}; \ No newline at end of file diff --git a/fonctions/database.js b/fonctions/database.js index 7a930aa..d224f3c 100644 --- a/fonctions/database.js +++ b/fonctions/database.js @@ -15,6 +15,8 @@ db.run(`CREATE TABLE IF NOT EXISTS users ( pocket INTEGER DEFAULT 0, bank INTEGER DEFAULT 0, reputation INTEGER DEFAULT 0, + lvl INTERGER DEFAULT 0, + xp INTERGER DEFAULT 0, buyer BOOLEAN DEFAULT FALSE, owner BOOLEAN DEFAULT FALSE, whitelist BOOLEAN DEFAULT FALSE,