diff --git a/a_test.txt b/a_test.txt new file mode 100644 index 0000000..ca694ec --- /dev/null +++ b/a_test.txt @@ -0,0 +1,22 @@ +&embed +&shop +&tshop +&adep +&arep +&awh +&blacklistAdd +&blacklistRemove +&servers +&sell +&drop +&box +&juge +&tcadenas +&tleave +&trep +&tdelete +&tdemote +&tpromote +&tedit +&tkick +&towner \ No newline at end of file diff --git a/commands/Alliance/Acreate.js b/commands/Alliance/Acreate.js new file mode 100644 index 0000000..b814f7f --- /dev/null +++ b/commands/Alliance/Acreate.js @@ -0,0 +1,158 @@ +const { EmbedBuilder } = require('discord.js'); +const embedColor = require('../../fonctions/embedColor.js'); +const db = require('../../fonctions/database.js'); + +let allianceName +let allianceDescription + +module.exports = { + aliases: ['acreate', 'alliancecreate'], + description: 'Crée une alliance.', + emote: '✒️', + utilisation: '', + permission: 0, + + async execute(message, args, client) { + const team = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM teams WHERE guildId = ? AND id = (SELECT teamId FROM users WHERE guildId = ? AND userId = ?)`, [message.guild.id, message.guild.id, message.author.id], (err, row) => { + if (err) reject(err); + resolve(row); + }); + }); + await new Promise((resolve, reject) => { + db.get(`SELECT * FROM users WHERE userId = ? AND guildId = ?`, [message.author.id, message.guild.id], (err, row) => { + if (err) { + reject(err); + } else { + if (row.teamRole !== 'owner') { + embedColor(message.author.id, message.guild.id).then(color => { + const embed = new EmbedBuilder() + .setTitle('🛡️ Création de alliance') + .setDescription(`Vous n'êtes pas proprietaire d'une team.`) + .setColor(color) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }) + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }) + }); + } else if (row.alliancesId) { + embedColor(message.author.id, message.guild.id).then(color => { + const embed = new EmbedBuilder() + .setTitle('🛡️ Création de alliance') + .setDescription(`Votre team a deja une alliance.`) + .setColor(color) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }) + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }) + }); + } else if (row.pocket < 3000) { + embedColor(message.author.id, message.guild.id).then(color => { + const embed = new EmbedBuilder() + .setTitle('🛡️ Création de alliance') + .setDescription(`Vous n'avez pas assez de fonds pour créer une alliance. Vous avez besoin de 3000coins.`) + .setColor(color) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }) + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }) + }); + } else { + db.run(`UPDATE users SET pocket = pocket - 3000 WHERE userId = ? AND guildId = ?`, [message.author.id, message.guild.id]); + resolve(); + } + } + }); + }); + + const embed = new EmbedBuilder() + .setTitle('🛡️ Création d\'alliance') + .setDescription(`Ecrivez le nom de votre alliance dans le chat.`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + const messageTeam = await message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + + const filter = m => m.author.id === message.author.id; + const collector = message.channel.createMessageCollector({ filter, time: 60000, max: 1 }); + collector.on('collect', async m => { + if (m.content.length > 25) { + m.reply('Le nom de l\'alliance ne doit pas dépasser 25 caractères.'); + return collector.stop(); + } else if (m.content.length < 3) { + m.reply('Le nom de l\'alliance doit contenir au moins 3 caractères.'); + return collector.stop(); + } else { + allianceName = m.content; + const embed = new EmbedBuilder() + .setTitle('🛡️ Création de l\'alliance') + .setDescription(`Ecrivez la description de votre alliance dans le chat.`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + messageTeam.edit({ embeds: [embed] }); + m.delete(); + + const collectorD = message.channel.createMessageCollector({ filter, time: 60000, max: 1 }); + collectorD.on('collect', async m => { + if (m.content.length > 250) { + m.reply('La description de l\'alliance ne doit pas dépasser 250 caractères.'); + return collectorD.stop(); + } else if (m.content.length < 5) { + m.reply('La description de l\'alliance doit contenir au moins 5 caractères.'); + return collectorD.stop(); + } else { + allianceDescription = m.content; + + let idBase = allianceName.toLowerCase().replace(/ /g, ''); + idBase = idBase.replace('0', ''); + idBase = idBase.replace('1', ''); + idBase = idBase.replace('2', ''); + idBase = idBase.replace('3', ''); + idBase = idBase.replace('4', ''); + idBase = idBase.replace('5', ''); + idBase = idBase.replace('6', ''); + idBase = idBase.replace('7', ''); + idBase = idBase.replace('8', ''); + idBase = idBase.replace('9', ''); + + let id = idBase; + let increment = 0; + let exists = true; + do { + await new Promise((resolve, reject) => { + db.get(`SELECT * FROM alliances WHERE id = ? AND guildId = ?`, [id, message.guild.id], (err, row) => { + if (err) { + reject(err); + } else { + exists = !!row; + if (exists) { + increment = increment + 1; + id = idBase + increment; + } else { + db.run(`INSERT INTO alliances (guildId, id, name, description, creator) VALUES (?, ?, ?, ?, ?)`, [message.guild.id, id, allianceName, allianceDescription, message.author.id]); + db.run(`UPDATE teams SET alliancesId = ? WHERE guildId = ? AND id = ?`, [id, message.guild.id, team.id]); + } + resolve(); + } + }); + }); + } while (exists); + + const embed = new EmbedBuilder() + .setTitle('🛡️ Création de l\'alliance') + .setDescription(`Votre alliance a été créée avec succès !\n\n**ID :** ${id}\n**Nom :** ${allianceName}\n**Description :** ${allianceDescription}\n\nVous pouvez maintenant inviter des owners de team dans votre alliance avec la commande \`&allianceinvite\`.\n\nPour quitter la alliance, utilisez la commande \`&allianceleave\` (vous deverez d'abord donner l\'alliance à quelqu'un d'autre).`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + messageTeam.edit({ embeds: [embed] }); + m.delete(); + } + }); + } + }); + } +}; \ No newline at end of file diff --git a/commands/Alliance/Adelete.js b/commands/Alliance/Adelete.js new file mode 100644 index 0000000..f8f1a10 --- /dev/null +++ b/commands/Alliance/Adelete.js @@ -0,0 +1,104 @@ +const { ButtonStyle, ButtonBuilder, ActionRowBuilder, EmbedBuilder } = require('discord.js'); +const db = require('../../fonctions/database.js'); +const embedColor = require('../../fonctions/embedColor.js'); + +module.exports = { + aliases: ['alliancedelete', 'adelete', 'aremove', 'allianceremove'], + description: 'Supprime votre alliance.', + emote: '🗑️', + util: '', + permission: 0, + + async execute(message, args, client) { + const team = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM teams WHERE guildId = ? AND id = (SELECT teamId FROM users WHERE guildId = ? AND userId = ?)`, [message.guild.id, message.guild.id, message.author.id], (err, row) => { + if (err) reject(err); + resolve(row); + }); + }); + const alliance = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM alliances WHERE guildId = ? AND id = (SELECT alliancesId FROM teams WHERE guildId = ? AND id = ?)`, [message.guild.id, message.guild.id, team.id], (err, row) => { + if (err) reject(err); + resolve(row); + }); + }); + if (!alliance) { + const embed = new EmbedBuilder() + .setTitle('🛡️ Suppression de l\'alliance') + .setDescription('Vous n\'êtes actuellement pas dans une alliance.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else { + + if (alliance.creator !== message.author.id) { + const embed = new EmbedBuilder() + .setTitle('Suppression Impossible') + .setDescription('❌ Vous n\'avez pas la permission de supprimer votre alliance.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + + const row = new ActionRowBuilder() + .addComponents( + new ButtonBuilder() + .setCustomId('confirm_delete') + .setLabel('Confirmer') + .setStyle(ButtonStyle.Danger), + new ButtonBuilder() + .setCustomId('cancel_delete') + .setLabel('Annuler') + .setStyle(ButtonStyle.Secondary) + ); + + const embed = new EmbedBuilder() + .setTitle('🛡️ Suppression de l\'alliance') + .setDescription(`Êtes-vous sûr de vouloir supprimer l'alliance ${alliance.name}? Cette action est irréversible.`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + message.reply({ embeds: [embed], components: [row], allowedMentions: { repliedUser: false } }).then(sentMessage => { + const filter = i => i.customId === 'confirm_delete' || i.customId === 'cancel_delete' && i.user.id === message.author.id; + + const collector = sentMessage.createMessageComponentCollector({ filter, time: 15000 }); + + collector.on('collect', async i => { + if (i.customId === 'confirm_delete') { + db.run(`DELETE FROM alliances WHERE guildId = ? AND id = ? AND creator = ?`, [message.guild.id, alliance.id, message.author.id], async (err) => { + if (err) { + return i.update({ content: 'Une erreur est survenue lors de la suppression de l\'alliance.', components: [] }); + } + + db.run(`UPDATE teams SET alliancesId = null WHERE guildId =? AND alliancesId =?`, [message.guild.id, alliance.id], async (err) => { + if (err) { + return i.update({ content: 'Une erreur est survenue lors de la mise à jour des teams membres.', components: [] }); + } + + const embed = new EmbedBuilder() + .setTitle('🛡️ Suppression de l\'alliance') + .setDescription(`L'alliance ${alliance.name} a été supprimée avec succès.`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return i.update({ embeds: [embed], components: [] }); + }); + }); + } else { + await i.update({ content: 'Suppression de l\'alliance annulée.', components: [] }); + } + }); + + collector.on('end', collected => { + if (collected.size === 0) sentMessage.edit({ content: 'Temps écoulé. Suppression de l\'équipe annulée.', components: [] }); + }); + }); + } + }, +}; \ No newline at end of file diff --git a/commands/Alliance/Adep.js b/commands/Alliance/Adep.js new file mode 100644 index 0000000..2174857 --- /dev/null +++ b/commands/Alliance/Adep.js @@ -0,0 +1,94 @@ +const { EmbedBuilder } = require('discord.js'); +const db = require('../../fonctions/database.js'); +const embedColor = require('../../fonctions/embedColor.js'); + +module.exports = { + aliases: ['adep', 'adepot', 'alliancedep', 'alliancedepot'], + description: 'Dépose de l\'argent dans la banque de votre alliance. (tout le monde peux en recupéré ⚠️)', + emote: '💰', + utilisation: '', + permission: 0, + + async execute(message, args, client) { + if (args.length == 0) { + const embed = new EmbedBuilder() + .setTitle('Dépôt Impossible') + .setDescription('❌ Vous devez spécifier un montant à déposer.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else if (args[0] !== 'all' && isNaN(args[0])) { + const embed = new EmbedBuilder() + .setTitle('Dépôt Impossible') + .setDescription('❌ Vous devez spécifier un montant valide à déposer.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else if (args[0] < 1) { + const embed = new EmbedBuilder() + .setTitle('Dépôt Impossible') + .setDescription('❌ Vous devez déposer au moins 1 coin.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + + const pocket = await new Promise((resolve, reject) => { + db.get(`SELECT pocket FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => { + if (err) reject(err); + resolve(row.pocket); + }); + }); + + let amout; + if (args[0] === 'all') { + amout = pocket; + } else if (args[0] > pocket) { + const embed = new EmbedBuilder() + .setTitle('Dépôt Impossible') + .setDescription('❌ Vous n\'avez pas assez d\'argent sur vous pour déposer cette somme.\n\n💰 Vous avez actuellement **' + pocket + 'coins** sur vous.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else { + amout = args[0]; + } + + const alliance = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM alliances WHERE guildId = ? AND id = (SELECT alliancesId FROM team WHERE guildId = ? AND id = (SELECT teamId FROM users WHERE guildId = ? AND userId = ?))`, [message.guild.id, message.guild.id, message.author.id], (err, row) => { + if (err) reject(err); + resolve(row); + }); + }); + if (!alliance) { + const embed = new EmbedBuilder() + .setTitle('Dépôt Impossible') + .setDescription('❌ Vous n\'êtes pas dans une alliances.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else { + db.run(`UPDATE users SET pocket = pocket - ? WHERE guildId = ? AND userId = ?`, [amout, message.guild.id, message.author.id]); + db.run(`UPDATE alliances SET bank = bank + ? WHERE guildId = ? AND id = ?`, [amout, message.guild.id, alliance.id]); + + const embed = new EmbedBuilder() + .setTitle('Dépôt Effectué') + .setDescription('💰 Vous avez déposé **' + amout + '** coins dans la banque de votre alliances.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + }, +}; \ No newline at end of file diff --git a/commands/Alliance/Arep.js b/commands/Alliance/Arep.js new file mode 100644 index 0000000..7bd156b --- /dev/null +++ b/commands/Alliance/Arep.js @@ -0,0 +1,77 @@ +const { EmbedBuilder } = require('discord.js'); +const db = require('../../fonctions/database.js'); +const embedColor = require('../../fonctions/embedColor.js'); + +module.exports = { + aliases: ['arep', 'areputation', 'alliancereputation', 'alliancerep'], + description: 'Ajoute une reputation a une alliance. (tout le monde peux en recupéré ⚠️)', + emote: '💰', + utilisation: '', + permission: 0, + + async execute(message, args, client) { + if (args.length == 0) { + const embed = new EmbedBuilder() + .setTitle('Ajout de reputation') + .setDescription('❌ Vous devez spécifier une alliance a rep.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else if (args[0] < 3) { + const embed = new EmbedBuilder() + .setTitle('Ajout de reputation') + .setDescription('❌ Vous devez mettre l\'id d\'une alliance.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + + const alliance = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM alliances WHERE guildId = ? AND id = ?`, [message.guild.id, args[0]], (err, row) => { + if (err) reject(err); + resolve(row); + }); + }); + 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.lastRep); + }); + }); + + if (!alliance) { + const embed = new EmbedBuilder() + .setTitle('Ajout de reputation') + .setDescription('❌ Alliance introuvable.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else if (user.lastArep > Date.now() - 1800000) { + const embed = new EmbedBuilder() + .setTitle('Ajout de reputation impossible') + .setDescription(`❌ Vous avez déjà ajouté une reputation récemment. Veuillez attendre \`${Math.floor((user.lastArep + 1800000 - Date.now()) / 60000)}\` minutes avant de pouvoir travailler à nouveau.`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else { + db.run(`UPDATE alliances SET reputation = reputation + 1 WHERE guildId = ? AND id = ?`, [message.guild.id, args[0]]); + + const embed = new EmbedBuilder() + .setTitle('Ajout de reputation effectué') + .setDescription('💰 Vous avez ajouter `1` reputation à l\`alliance `' + args[0] + '`.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + }, +}; \ No newline at end of file diff --git a/commands/Alliance/Awithdraw.js b/commands/Alliance/Awithdraw.js new file mode 100644 index 0000000..8bf33e3 --- /dev/null +++ b/commands/Alliance/Awithdraw.js @@ -0,0 +1,123 @@ +const { EmbedBuilder } = require('discord.js'); +const db = require('../../fonctions/database.js'); +const embedColor = require('../../fonctions/embedColor.js'); + +module.exports = { + aliases: ['awh', 'awith', 'alliancewh', 'alliancewith', 'awithdraw', 'alliancewithdraw'], + description: 'Récupere de l\'argent/des reputation dans la banque de votre alliance.', + emote: '💰', + utilisation: ' ', + permission: 0, + + async execute(message, args, client) { + if (args.length == 0) { + const embed = new EmbedBuilder() + .setTitle('Récuperation Impossible') + .setDescription('❌ Vous devez spécifier un type et un montant à récupérer (`awith coins 200`).') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else if (args[1] !== 'all' && isNaN(args[1])) { + const embed = new EmbedBuilder() + .setTitle('Récuperation Impossible') + .setDescription('❌ Vous devez spécifier un montant valide à récupérer.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else if (args[1] < 1) { + const embed = new EmbedBuilder() + .setTitle('Récuperation Impossible') + .setDescription('❌ Vous devez récupérer au moins 1 coin/rep.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + const alliance = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM alliances WHERE guildId = ? AND id = (SELECT alliancesId FROM team WHERE guildId = ? AND id = (SELECT teamId FROM users WHERE guildId = ? AND userId = ?))`, [message.guild.id, message.guild.id, message.author.id], (err, row) => { + if (err) reject(err); + resolve(row); + }); + }); + if (!alliance) { + const embed = new EmbedBuilder() + .setTitle('Récuperation Impossible') + .setDescription('❌ Vous n\'êtes pas dans une alliances.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else if (args[0] == 'rep' || args[0] == 'r' || args[0] == 'reputation') { + let amout; + if (args[1] === 'all') { + amout = alliance.bank; + } else if (args[1] > alliance.bank) { + const embed = new EmbedBuilder() + .setTitle('Récuperation Impossible') + .setDescription('❌ Il n\'y a pas suffisament de reputation dans l\'alliance pour en recupéré autant.\n\n💰 Il y a actuellement `' + alliance.reputation + '`rep') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else { + amout = args[1]; + } + + db.run(`UPDATE users SET reputation = reputation + ? WHERE guildId = ? AND userId = ?`, [amout, message.guild.id, message.author.id]); + db.run(`UPDATE alliances SET reputation = reputation - ? WHERE guildId = ? AND id = ?`, [amout, message.guild.id, alliance.id]); + + const embed = new EmbedBuilder() + .setTitle('Récuperation Effectué') + .setDescription('💰 Vous avez récupéré **' + amout + '** coins dans la banque de votre alliances.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else if (args[1] == 'coin' || args[0] == 'c' || args[0] == 'coins') { + let amout; + if (args[1] === 'all') { + amout = alliance.bank; + } else if (args[1] > alliance.bank) { + const embed = new EmbedBuilder() + .setTitle('Récuperation Impossible') + .setDescription('❌ Il n\'y a pas suffisament de coins dans l\'alliance pour récupérer cette somme.\n\n💰 il y a actuellement `' + alliance.bank + '`coins') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else { + amout = args[1]; + } + + db.run(`UPDATE users SET pocket = pocket + ? WHERE guildId = ? AND userId = ?`, [amout, message.guild.id, message.author.id]); + db.run(`UPDATE alliances SET bank = bank - ? WHERE guildId = ? AND id = ?`, [amout, message.guild.id, alliance.id]); + + const embed = new EmbedBuilder() + .setTitle('Récuperation Effectué') + .setDescription('💰 Vous avez récupéré **' + amout + '** coins dans la banque de votre alliances.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else { + const embed = new EmbedBuilder() + .setTitle('Récuperation Impossible') + .setDescription('❌ Veuillez spécifier un type valide (rep|coins) :\n(`awith `)') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + } +}; \ No newline at end of file diff --git a/commands/Alliance/alliance.js b/commands/Alliance/alliance.js new file mode 100644 index 0000000..be3221d --- /dev/null +++ b/commands/Alliance/alliance.js @@ -0,0 +1,66 @@ +const { EmbedBuilder } = require('discord.js'); +const db = require('../../fonctions/database.js'); +const embedColor = require('../../fonctions/embedColor.js'); + +module.exports = { + aliases: ['a', 'ainfo', 'allianceinfo'], + description: 'Affiche les informations de votre alliance.', + emote: '🛡️', + utilisation: '', + permission: 0, + + async execute(message, args, client) { + const member = message.mentions.members.first() || message.author; + const team = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM teams WHERE guildId = ? AND id = (SELECT teamId FROM users WHERE guildId = ? AND userId = ?)`, [message.guild.id, message.guild.id, member.id], (err, row) => { + if (err) reject(err); + resolve(row); + }); + }); + const alliance = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM alliances WHERE guildId = ? AND id = (SELECT alliancesId FROM teams WHERE guildId = ? AND id = ?)`, [message.guild.id, message.guild.id, team.id], (err, row) => { + if (err) reject(err); + resolve(row); + }); + }); + + if (!alliance) { + const embed = new EmbedBuilder() + .setTitle('🛡️ Informations d\'alliance') + .setDescription('<@' + member.id + '> n\'est actuellement dans aucune alliance.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else { + const memberlist = await new Promise((resolve, reject) => { + db.all(`SELECT name FROM teams WHERE guildId = ? AND alliancesId = ?`, [message.guild.id, team.alliancesId], (err, rows) => { + if (err) reject(err); + resolve(rows); + }); + }); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + const embed = new EmbedBuilder() + .setTitle('🛡️ Informations de `' + alliance.name + '`:') + .setDescription(`**Id:** \`${alliance.id}\`\n**Description:** \`${alliance.description}\`\n**Banque:** \`${alliance.bank}\`coins => Tout le monde peux recupéré ces coins.\n**Reputation:** \`${alliance.reputation} => Tout le monde peux recupéré ces reputations\`\n\n**Membres (\`${memberlist.length}\`):**\n${memberlist.map(member => `**${member.allianceRole}:** <@${member.userId}>`).join('\n')}\n`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + const urlRegex1 = /(https?:\/\/[^\s]+)/g; + if (alliance.icon && urlRegex1.test(alliance.icon)) { + embed.setThumbnail(alliance.icon); + } + + const urlRegex2 = /(https?:\/\/[^\s]+)/g; + if (alliance.banner && urlRegex2.test(alliance.banner)) { + embedTopDonnateur.setImage(alliance.banner); + } + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + }, +}; \ No newline at end of file diff --git a/commands/achats/shop.js b/commands/achats/shop.js index 3d72bcb..1ce3d8c 100644 --- a/commands/achats/shop.js +++ b/commands/achats/shop.js @@ -5,7 +5,7 @@ const embedColor = require('../../fonctions/embedColor.js'); module.exports = { aliases: ['shop', 'magasin', 'boutique', 'store'], description: 'Affiche le shop du bot.', - emote: '🛍️', + emote: '🛍️', utilisation: '', permission: 0, @@ -13,7 +13,7 @@ module.exports = { const embed = new EmbedBuilder() .setTitle('🛍️ Shop') .setThumbnail(message.guild.iconURL()) - .setDescription(`Sélectionnez un item à acheter. Voici les items disponibles :\n\n> 🔒 AntiRob - Protège contre les vols pendant 2 heures - Prix : 2000 coins`) + .setDescription(`Sélectionnez un item à acheter. Voici les items disponibles :\n\n> 🔒 AntiRob - Protège contre les vols pendant 2 heures - Prix : 2000coins\n\n> 🗝️ Clef - Permet d'ouvrir une boite 100%gagante - Prix : 2500coins\n\n\n\n> 💰 25000 Coins - Prix : 1 reputation`) .setColor(await embedColor(message.author.id, message.guild.id)) .setTimestamp() .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); @@ -28,6 +28,18 @@ module.exports = { .setDescription('Protège contre les vols pendant 2 heures') .setEmoji('🔒') .setDefault(false), + new StringSelectMenuOptionBuilder() + .setLabel('🗝️ Clef') + .setValue('key') + .setDescription('Permet d\'ouvrir une boite') + .setEmoji('🗝️') + .setDefault(false), + new StringSelectMenuOptionBuilder() + .setLabel('💰 25000 Coins') + .setValue('coins') + .setDescription('Vous donne 25K de coins contre 1reputation') + .setEmoji('💰') + .setDefault(false), ); const row = new ActionRowBuilder() @@ -38,32 +50,75 @@ module.exports = { client.on('interactionCreate', async (interaction) => { if (!interaction.isStringSelectMenu()) return; - if (interaction.customId === 'shop') { - const selected = interaction.values[0]; + if (!interaction.customId === 'shop') return + const selected = interaction.values[0]; - if (selected === 'antirob') { - 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 (selected === 'antirob') { + 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.pocket < 2000) { - return interaction.reply({ content: 'Vous n\'avez pas assez d\'argent pour acheter cet item.', ephemeral: true }); - } - - db.run(`UPDATE users SET pocket = pocket - 2000, antiRob = ? WHERE guildId = ? AND userId = ?`, [Date.now(), message.guild.id, message.author.id]); - - const embed = new EmbedBuilder() - .setTitle('🛍️ Shop') - .setDescription(`Vous avez acheté l'item 🔒 AntiRob pour 2000 coins !`) - .setColor(await embedColor(message.author.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - - interaction.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + if (user.pocket < 2000) { + return interaction.reply({ content: 'Vous n\'avez pas assez d\'argent pour acheter cet item.', ephemeral: true }); } + + db.run(`UPDATE users SET pocket = pocket - 2000, antiRob = ? WHERE guildId = ? AND userId = ?`, [Date.now(), message.guild.id, message.author.id]); + + const embed = new EmbedBuilder() + .setTitle('🛍️ Shop') + .setDescription(`Vous avez acheté l'item 🔒 AntiRob pour 2000 coins !`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + interaction.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else if (selected === 'key') { + 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.pocket < 2500) { + return interaction.reply({ content: 'Vous n\'avez pas assez d\'argent pour acheter cet item.', ephemeral: true }); + } + + db.run(`UPDATE users SET pocket = pocket - 2500, key = key + 1 WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id]); + + const embed = new EmbedBuilder() + .setTitle('🛍️ Shop') + .setDescription(`Vous avez acheté l'item 🗝️ clef pour 2500 coins !`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + interaction.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else if (selected === 'coins') { + 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.reputation < 1) { + return interaction.reply({ content: 'Vous n\'avez pas assez de reputation pour acheter cet item.', ephemeral: true }); + } + + db.run(`UPDATE users SET pocket = pocket + 25000, reputation = reputation - 1 WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id]); + + const embed = new EmbedBuilder() + .setTitle('🛍️ Shop') + .setDescription(`Vous avez acheté \`25000\`coins contre une reputation !`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + interaction.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); } }); }, diff --git a/commands/achats/tshop.js b/commands/achats/tshop.js new file mode 100644 index 0000000..c6f1b5f --- /dev/null +++ b/commands/achats/tshop.js @@ -0,0 +1,124 @@ +const { EmbedBuilder, ActionRowBuilder, StringSelectMenuBuilder, StringSelectMenuOptionBuilder } = require('discord.js'); +const db = require('../../fonctions/database.js'); +const embedColor = require('../../fonctions/embedColor.js'); + +module.exports = { + aliases: ['tshop', 'tmagasin', 'tboutique', 'tstore', 'teamshop', 'teammagasin', 'tboutique', 'teamstore'], + description: 'Affiche le shop du bot.', + emote: '🛍️', + utilisation: '', + permission: 0, + + async execute(message, args, client) { + 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); + }); + }); + const team = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM teams WHERE guildId = ? AND id = ?`, [message.guild.id, user.teamId], (err, row) => { + if (err) reject(err); + resolve(row); + }); + }); + + const embed = new EmbedBuilder() + .setTitle('🛍️ Shop') + .setThumbnail(message.guild.iconURL()) + .setDescription(`Sélectionnez un item à acheter POUR VOTRE TEAM, les items sont cummulable, vous gagner déjà ${team.location}coins/min. Voici les items disponibles :\n\n> 🏢 Appartement - Achete un appartement et le met en location, rapporte \`70coins/min\`\nPrix : \`100000\`coins\n\n> 🏠 Maison - Achete une petite maison et la met en location, rapporte \`75coins/min\`\nPrix : \`110000\`coins\n\n> 🏠 Grande maison - Achete une grande maison et la met en location, rapporte \`125coins/min\`\nPrix : \`150000\`coins\n\n> 💎 Villa - Achete une petite maison et la met en location, rapporte \`250coins/min\`\nPrix : \`250000\`coins\n\n> 🏝️ Île - Achete une île et la met en location, rapporte \`2500coins/min\`\nPrix : \`500000\`coins`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + const select = new StringSelectMenuBuilder() + .setCustomId('shop') + .setPlaceholder('Sélectionnez un item') + .addOptions( + new StringSelectMenuOptionBuilder() + .setLabel('🏢 Appartement') + .setValue('appartement') + .setDescription('Achete un appartement et le met en location, rapporte 70coins/min') + .setEmoji('🏢') + .setDefault(false), + + new StringSelectMenuOptionBuilder() + .setLabel('🏠 Maison') + .setValue('maison') + .setDescription('Achete une petite maison et la met en location, rapporte 75coins/min') + .setEmoji('🏠') + .setDefault(false), + + new StringSelectMenuOptionBuilder() + .setLabel('🏠 Grande maison') + .setValue('maison2') + .setDescription('Achete une grande maison et la met en location, rapporte 120coins/min') + .setEmoji('🏠') + .setDefault(false), + + new StringSelectMenuOptionBuilder() + .setLabel('💎 Villa') + .setValue('villa') + .setDescription('Achete une villa et la met en location, rapporte 250coins/min') + .setEmoji('💎') + .setDefault(false), + + new StringSelectMenuOptionBuilder() + .setLabel('🏝️ Île') + .setValue('ile') + .setDescription('Achete une île et la met en location, rapporte 2500coins/min') + .setEmoji('🏝️') + .setDefault(false), + ); + + const row = new ActionRowBuilder() + .addComponents(select); + + message.reply({ embeds: [embed], components: [row], allowedMentions: { repliedUser: false } }); + + client.on('interactionCreate', async (interaction) => { + if (!interaction.isStringSelectMenu()) return; + if (!interaction.customId === 'shop') return + const selected = interaction.values[0]; + + let coup = '' + let item = '' + let win = '' + if (selected === 'appartement') { + coup = '100000' + item = 'appartement' + win = '70' + } else if (selected === 'maison') { + coup = '110000' + item = 'maison' + win = '75' + } else if (selected === 'maison2') { + coup = '150000' + item = 'grande maison' + win = '120' + } else if (selected === 'villa') { + coup = '250000' + item = 'villa' + win = '250' + } else if (selected === 'ile') { + coup = '500000' + item = 'île' + win = '2500' + } + + if (user.teamRole !== 'officier' || user.teamRole !== 'officer') return interaction.reply({ content: 'Vous n\'avez pas les permissions pour faire cet achat', ephemeral: true }); + if (team.bank < coup) return interaction.reply({ content: 'Vous n\'avez pas assez d\'argent pour acheter cet item.', ephemeral: true }); + + db.run(`UPDATE teams SET pocket = pocket - ? WHERE guildId = ? AND userId = ?`, [coup, message.guild.id, message.author.id]); + db.run(`UPDATE teams SET location = location + ? WHERE guildId = ? AND userId = ?`, [win, message.guild.id, message.author.id]); + + const embed = new EmbedBuilder() + .setTitle('🛍️ Shop') + .setDescription(`Vous avez acheté l'item ${item} pour \`${coup}\`coins !`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + interaction.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + }); + }, +}; \ No newline at end of file diff --git a/commands/bot control/blacklistAdd.js b/commands/bot control/blacklistAdd.js new file mode 100644 index 0000000..4c96f89 --- /dev/null +++ b/commands/bot control/blacklistAdd.js @@ -0,0 +1,37 @@ +const { EmbedBuilder } = require('discord.js'); +const db = require('../../fonctions/database.js'); +const embedColor = require('../../fonctions/embedColor.js'); + +module.exports = { + aliases: ['bl', 'addbl'], + description: 'Met un utilisateur comme blacklist (sur ce serveur).', + emote: '🛡️', + utilisation: '<@membre>', + permission: 10, + + async execute(message, args, client) { + + const member = message.mentions.users.first(); + if (!member) { + const embed = new EmbedBuilder() + .setTitle('Blacklist :') + .setDescription(`**Veuillez mentionner un membre valide**`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + + db.run(`UPDATE users SET blacklist = true WHERE guildId = ? AND userId = ?`, [message.guild.id, member.id]); + + const embed = new EmbedBuilder() + .setTitle('Blacklist :') + .setDescription(`**<@${member.id}> est maintement blacklist !**`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + }, +}; diff --git a/commands/bot control/blacklistRemove.js b/commands/bot control/blacklistRemove.js new file mode 100644 index 0000000..788fd79 --- /dev/null +++ b/commands/bot control/blacklistRemove.js @@ -0,0 +1,37 @@ +const { EmbedBuilder } = require('discord.js'); +const db = require('../../fonctions/database.js'); +const embedColor = require('../../fonctions/embedColor.js'); + +module.exports = { + aliases: ['unbl', 'removebl'], + description: 'Met un utilisateur comme non-blacklist (sur ce serveur).', + emote: '🛡️', + utilisation: '<@membre>', + permission: 10, + + async execute(message, args, client) { + + const member = message.mentions.users.first(); + if (!member) { + const embed = new EmbedBuilder() + .setTitle('Un-blacklist :') + .setDescription(`**Veuillez mentionner un membre valide**`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + + db.run(`UPDATE users SET blacklist = false WHERE guildId = ? AND userId = ?`, [message.guild.id, member.id]); + + const embed = new EmbedBuilder() + .setTitle('Un-blacklist :') + .setDescription(`**<@${member.id}> est maintement un-blacklist !**`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + }, +}; diff --git a/commands/bot control/help.js b/commands/bot control/help.js index ccbb8d7..2a6d7a9 100644 --- a/commands/bot control/help.js +++ b/commands/bot control/help.js @@ -2,12 +2,12 @@ const { EmbedBuilder, ButtonStyle, ButtonBuilder, ActionRowBuilder } = require(' const embedColor = require('../../fonctions/embedColor.js'); const getPrefix = require('../../fonctions/getPrefix.js'); -function commandsList (client, category, prefix) { +function commandsList(client, category, prefix) { const casinoCommands = client.commands.filter(command => command.category === category).sort((a, b) => a.name.localeCompare(b.name)); const uniqueCommands = new Map(); casinoCommands.forEach(command => { - uniqueCommands.set(command.name, {description: command.description, emote: command.emote, utilisation: command.utilisation}); + uniqueCommands.set(command.name, { description: command.description, emote: command.emote, utilisation: command.utilisation }); }); let commandsList = ''; @@ -19,174 +19,173 @@ function commandsList (client, category, prefix) { } module.exports = { - aliases: ['h', 'aide'], + aliases: ['', 'h', 'aide'], description: 'Affiche la liste des commandes disponibles', - emote: '📚', + emote: '📚', utilisation: '[commande]', permission: 0, async execute(message, args, client) { - if (args[0] && client.commands.has(args[0])) { - const command = client.commands.get(args[0]); - const prefix = await getPrefix(message.guild.id); - const embed = new EmbedBuilder() - .setTitle(`📚・${command.name}`) - .setThumbnail(message.guild.iconURL()) - .setDescription(`> **Description :** ${command.description}\n> **Utilisation :** \`${prefix}${command.name}${command.utilisation ? ' ' + command.utilisation : ''}\`\n> **Alias :** ${command.aliases.join(', ') || 'Aucun'}\n> **Permission :** ${command.permission}\n> **Catégorie :** ${command.category}\n> **Emote :** ${command.emote}`) - .setColor(await embedColor(message.author.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - - message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); - } else { - if (args[0]) { + if (args) { + if (args[0] && client.commands.has(args[0])) { + const command = client.commands.get(args[0]); + const prefix = await getPrefix(message.guild.id); const embed = new EmbedBuilder() - .setTitle('❌・Commande inconnue') - .setDescription('La commande que vous avez demandée n\'existe pas. Nous vous invitons à vérifier l\'orthographe dans le help si dessous et à réessayer.') + .setTitle(`📚・${command.name}`) + .setThumbnail(message.guild.iconURL()) + .setDescription(`> **Description :** ${command.description}\n> **Utilisation :** \`${prefix}${command.name}${command.utilisation ? ' ' + command.utilisation : ''}\`\n> **Alias :** ${command.aliases.join(', ') || 'Aucun'}\n> **Permission :** ${command.permission}\n> **Catégorie :** ${command.category}\n> **Emote :** ${command.emote}`) .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); - } - const prefix = await getPrefix(message.guild.id); - const embedPage1 = new EmbedBuilder() - .setTitle('📚 ・Information') - .setThumbnail(message.guild.iconURL()) - .setDescription(`Voici le panel d'aide du bot. Pour plus d'informations sur une commande, utilisez ${prefix}help \n\n> **🎙️ Récompenses vocales :**\n> Vous gagnez \`100\` coins toutes les \`15\`minutes lorsque vous êtes en vocal (**NON MUTE** sinon c'est \`50\`coins).\n \n> **📺 Récompenses de streaming :**\n> Activer un stream vous fera gagner \`200\`.\n \n> **📷 Récompenses de caméra :**\n> Activer votre caméra vous fera gagner \`200\`.\n\n> Le coins est une monnaie fictive.`) - .setColor(await embedColor(message.author.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Page 1/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - - const leftButton = new ButtonBuilder() - .setCustomId('left') - .setLabel('◀') - .setStyle(ButtonStyle.Primary); - - const rightButton = new ButtonBuilder() - .setCustomId('right') - .setLabel('▶') - .setStyle(ButtonStyle.Primary); - - const row = new ActionRowBuilder() - .addComponents(leftButton, rightButton); - - let messageEmbed; - if (args[0]) { - messageEmbed = await message.channel.send({ embeds: [embedPage1], components: [row], allowedMentions: { repliedUser: false } }); } else { - messageEmbed = await message.reply({ embeds: [embedPage1], components: [row], allowedMentions: { repliedUser: false } }); + if (args[0]) { + const embed = new EmbedBuilder() + .setTitle('❌・Commande inconnue') + .setDescription('La commande que vous avez demandée n\'existe pas. Nous vous invitons à vérifier l\'orthographe dans le help si dessous et à réessayer.') + .setColor(await embedColor(message.author.id, message.guild.id)) + + message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + } + } + const prefix = await getPrefix(message.guild.id); + const embedPage1 = new EmbedBuilder() + .setTitle('📚 ・Information') + .setThumbnail(message.guild.iconURL()) + .setDescription(`Voici le panel d'aide du bot. Pour plus d'informations sur une commande, utilisez ${prefix}help \n\n> **🎙️ Récompenses vocales :**\n> Vous gagnez \`100\` coins toutes les \`15\`minutes lorsque vous êtes en vocal (**NON MUTE** sinon c'est \`50\`coins).\n \n> **📺 Récompenses de streaming :**\n> Activer un stream vous fera gagner \`200\`.\n \n> **📷 Récompenses de caméra :**\n> Activer votre caméra vous fera gagner \`200\`.\n\n> Le coins est une monnaie fictive.`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Page 1/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + const leftButton = new ButtonBuilder() + .setCustomId('left') + .setLabel('◀') + .setStyle(ButtonStyle.Primary); + + const rightButton = new ButtonBuilder() + .setCustomId('right') + .setLabel('▶') + .setStyle(ButtonStyle.Primary); + + const row = new ActionRowBuilder() + .addComponents(leftButton, rightButton); + + let messageEmbed; + messageEmbed = await message.reply({ embeds: [embedPage1], components: [row], allowedMentions: { repliedUser: false } }); + + const filter = i => i.user.id === message.author.id; + const collector = message.channel.createMessageComponentCollector({ filter, time: 120000 }); + + let page = 1; + collector.on('collect', async i => { + if (i.customId === 'left') { + page--; + if (page < 1) page = 10; + } else if (i.customId === 'right') { + page++; + if (page > 10) page = 1; } - const filter = i => i.user.id === message.author.id; - const collector = message.channel.createMessageComponentCollector({ filter, time: 90000 }); + if (page === 1) { + i.update({ embeds: [embedPage1], components: [row] }); + } else if (page === 2) { + const embedPage2 = new EmbedBuilder() + .setTitle('💰・Casino') + .setThumbnail(message.guild.iconURL()) + .setDescription(commandsList(client, 'casino', prefix)) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Page 2/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - let page = 1; - collector.on('collect', async i => { - if (i.customId === 'left') { - page--; - if (page < 1) page = 10; - } else if (i.customId === 'right') { - page++; - if (page > 10) page = 1; - } + i.update({ embeds: [embedPage2], components: [row], allowedMentions: { repliedUser: false } }); + } else if (page === 3) { + const embedPage3 = new EmbedBuilder() + .setTitle('🎲・Jeux') + .setThumbnail(message.guild.iconURL()) + .setDescription(commandsList(client, 'jeux', prefix)) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Page 3/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - if (page === 1) { - i.update({ embeds: [embedPage1], components: [row] }); - } else if (page === 2) { - const embedPage2 = new EmbedBuilder() - .setTitle('💰・Casino') - .setThumbnail(message.guild.iconURL()) - .setDescription(commandsList(client, 'casino', prefix)) - .setColor(await embedColor(message.author.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Page 2/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + i.update({ embeds: [embedPage3], components: [row], allowedMentions: { repliedUser: false } }); + } else if (page === 4) { + const embedPage4 = new EmbedBuilder() + .setTitle('🛍️・Achats') + .setThumbnail(message.guild.iconURL()) + .setDescription(commandsList(client, 'achats', prefix)) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Page 4/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - i.update({ embeds: [embedPage2], components: [row], allowedMentions: { repliedUser: false } }); - } else if (page === 3) { - const embedPage3 = new EmbedBuilder() - .setTitle('🎲・Jeux') - .setThumbnail(message.guild.iconURL()) - .setDescription(commandsList(client, 'jeux', prefix)) - .setColor(await embedColor(message.author.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Page 3/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + i.update({ embeds: [embedPage4], components: [row], allowedMentions: { repliedUser: false } }); + } else if (page === 5) { + const embedPage5 = new EmbedBuilder() + .setTitle('🏭・Metier et capacité') + .setThumbnail(message.guild.iconURL()) + .setDescription(commandsList(client, 'jobs', prefix)) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Page 5/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - i.update({ embeds: [embedPage3], components: [row], allowedMentions: { repliedUser: false } }); - } else if (page === 4) { - const embedPage4 = new EmbedBuilder() - .setTitle('🛍️・Achats') - .setThumbnail(message.guild.iconURL()) - .setDescription(commandsList(client, 'achats', prefix)) - .setColor(await embedColor(message.author.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Page 4/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + i.update({ embeds: [embedPage5], components: [row], allowedMentions: { repliedUser: false } }); + } else if (page === 6) { + const embedPage6 = new EmbedBuilder() + .setTitle('💼・Teams') + .setThumbnail(message.guild.iconURL()) + .setDescription(commandsList(client, 'teams', prefix)) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Page 6/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - i.update({ embeds: [embedPage4], components: [row], allowedMentions: { repliedUser: false } }); - } else if (page === 5) { - const embedPage5 = new EmbedBuilder() - .setTitle('🏭・Metier et capacité') - .setThumbnail(message.guild.iconURL()) - .setDescription(commandsList(client, 'jobs', prefix)) - .setColor(await embedColor(message.author.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Page 5/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + i.update({ embeds: [embedPage6], components: [row], allowedMentions: { repliedUser: false } }); + } else if (page === 7) { + const embedPage7 = new EmbedBuilder() + .setTitle('🛡️・Teams administration') + .setThumbnail(message.guild.iconURL()) + .setDescription(commandsList(client, 'teams admin', prefix)) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Page 7/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - i.update({ embeds: [embedPage5], components: [row], allowedMentions: { repliedUser: false } }); - } else if (page === 6) { - const embedPage6 = new EmbedBuilder() - .setTitle('💼・Teams') - .setThumbnail(message.guild.iconURL()) - .setDescription(commandsList(client, 'teams', prefix)) - .setColor(await embedColor(message.author.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Page 6/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + i.update({ embeds: [embedPage7], components: [row], allowedMentions: { repliedUser: false } }); + } else if (page === 8) { + const embedPage8 = new EmbedBuilder() + .setTitle('🤝・Alliance') + .setThumbnail(message.guild.iconURL()) + .setDescription(commandsList(client, 'Alliance', prefix)) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Page 8/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - i.update({ embeds: [embedPage6], components: [row], allowedMentions: { repliedUser: false } }); - } else if (page === 7) { - const embedPage7 = new EmbedBuilder() - .setTitle('🛡️・Teams administration') - .setThumbnail(message.guild.iconURL()) - .setDescription(commandsList(client, 'teams admin', prefix)) - .setColor(await embedColor(message.author.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Page 7/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + i.update({ embeds: [embedPage8], components: [row], allowedMentions: { repliedUser: false } }); + } else if (page === 9) { + const embedPage9 = new EmbedBuilder() + .setTitle('👑・Gestion') + .setThumbnail(message.guild.iconURL()) + .setDescription(commandsList(client, 'gestion', prefix)) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Page 9/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - i.update({ embeds: [embedPage7], components: [row], allowedMentions: { repliedUser: false } }); - } else if (page === 8) { - const embedPage8 = new EmbedBuilder() - .setTitle('🤝・Alliance') - .setThumbnail(message.guild.iconURL()) - .setDescription(`page 8`) - .setColor(await embedColor(message.author.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Page 8/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + i.update({ embeds: [embedPage9], components: [row], allowedMentions: { repliedUser: false } }); + } else if (page === 10) { + const embedPage10 = new EmbedBuilder() + .setTitle('👑・Bot control') + .setThumbnail(message.guild.iconURL()) + .setDescription(commandsList(client, 'bot control', prefix)) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Page 10/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - i.update({ embeds: [embedPage8], components: [row], allowedMentions: { repliedUser: false } }); - } else if (page === 9) { - const embedPage9 = new EmbedBuilder() - .setTitle('👑・Gestion') - .setThumbnail(message.guild.iconURL()) - .setDescription(commandsList(client, 'gestion', prefix)) - .setColor(await embedColor(message.author.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Page 9/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + i.update({ embeds: [embedPage10], components: [row], allowedMentions: { repliedUser: false } }); + } + }); - i.update({ embeds: [embedPage9], components: [row], allowedMentions: { repliedUser: false } }); - } else if (page === 10) { - const embedPage10 = new EmbedBuilder() - .setTitle('👑・Bot control') - .setThumbnail(message.guild.iconURL()) - .setDescription(commandsList(client, 'bot control', prefix)) - .setColor(await embedColor(message.author.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Page 10/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + collector.on('end', () => { + messageEmbed.edit({ components: [], allowedMentions: { repliedUser: false } }) + }); - i.update({ embeds: [embedPage10], components: [row], allowedMentions: { repliedUser: false } }); - } - }); - - collector.on('end', () => { - messageEmbed.edit({ components: [], allowedMentions: { repliedUser: false } }) - }); - } } }; \ No newline at end of file diff --git a/commands/casino/me.js b/commands/casino/me.js index 5949f2b..1d39832 100644 --- a/commands/casino/me.js +++ b/commands/casino/me.js @@ -22,6 +22,7 @@ module.exports = { const reputation = user.reputation const niveau = user.lvl const xp = user.xp + const tdrop = user.tdroper let anti_rob = `` if (user.antiRob + 7200000 > Date.now()) { @@ -30,7 +31,7 @@ module.exports = { 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> :small_orange_diamond: **Xp:** \`${xp}/${niveau*100}\``) + .setDescription(`> :moneybag: **Poche:** \`${pocket}\`\n> :bank: **Banque:** \`${bank}\`\n> :star2: **Réputation:** \`${reputation}\`\n\n> :bar_chart: **Niveau:** \`${niveau}\`\n> :small_orange_diamond: **Xp:** \`${xp}/${niveau*100}\`\n\nCoins donnés à une team: \`${tdrop}\`🎁`) .setColor(await embedColor(member.id, message.guild.id)) .setTimestamp() .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); diff --git a/commands/casino/recolt.js b/commands/casino/recolt.js new file mode 100644 index 0000000..abc77f4 --- /dev/null +++ b/commands/casino/recolt.js @@ -0,0 +1,52 @@ +const { EmbedBuilder } = require('discord.js'); +const db = require('../../fonctions/database.js'); +const embedColor = require('../../fonctions/embedColor.js'); + +module.exports = { + aliases: ['recolt', 'recolte'], + description: 'Recolter des objets que vous pourrez vendre ensuite.', + emote: '💼', + utilisation: '', + permission: 0, + + async execute(message, args, client) { + 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); + }); + }); + const lastRecolt = user.lastRecolt + const objet = user.objet + + if (lastRecolt > Date.now() - 2700000) { + const embed = new EmbedBuilder() + .setTitle('Recolte Impossible') + .setDescription(`❌ La météo annonce une tempete... Veuillez attendre \`${Math.floor((lastRecolt + 2700000 - Date.now()) / 60000)}\` minutes avant de pouvoir recolter.`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + + const randomAmount = Math.floor(Math.random() * 2) + 1; + db.run(`UPDATE users SET objet = ?, lastRecolt = ? WHERE guildId = ? AND userId = ?`, [objet + randomAmount, Date.now(), message.guild.id, message.author.id]); + + const recolts = [ + `🍒 Vous avez recolté des cerises sur ${randomAmount} arbre(s) dans votre jardin.`, + `🌽 Vous avez recolté ${randomAmount} parcelle(s) de maïs et vous avez tout mis à l'abri.`, + `🌳 Vous avez trouvé de quoi vous chauffer en vous promenant en foret, vous rentrer chez vous avec ${randomAmount} grosse(s) bûche(s) de bois.` + ]; + + + const embed = new EmbedBuilder() + .setTitle('Objet recolter') + .setDescription(recolts[Math.floor(Math.random() * recolts.length)]) + .setColor(await embedColor(message.author.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/commands/casino/rob.js b/commands/casino/rob.js index 865529a..f750bf9 100644 --- a/commands/casino/rob.js +++ b/commands/casino/rob.js @@ -28,6 +28,20 @@ module.exports = { resolve(row); }); }); + const memberlist = await new Promise((resolve, reject) => { + db.all(`SELECT userId FROM users WHERE guildId = ? AND teamId = ?`, [message.guild.id, user.teamId], (err, rows) => { + if (err) reject(err); + resolve(rows); + }); + }); + if (memberlist.includes(member)) return message.reply({ embeds: [ + new EmbedBuilder() + .setTitle('Erreur') + .setDescription('❌ Veuillez choisir un membre qui __n\'est pas__ dans votre team.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter(footer) + ], allowedMentions: { repliedUser: false } }); if (user.lastRob + 7200000 > Date.now()) { const embed = new EmbedBuilder() diff --git a/commands/casino/sell.js b/commands/casino/sell.js new file mode 100644 index 0000000..633a62f --- /dev/null +++ b/commands/casino/sell.js @@ -0,0 +1,182 @@ +const { EmbedBuilder, ActionRowBuilder, StringSelectMenuBuilder, StringSelectMenuOptionBuilder } = require('discord.js'); +const db = require('../../fonctions/database.js'); +const embedColor = require('../../fonctions/embedColor.js'); + +module.exports = { + aliases: ['vendre'], + description: 'Affiche le menu de vente des objets.', + emote: '🛍️', + utilisation: '', + permission: 0, + + async execute(message, args, client) { + 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); + }); + }); + + const embed = new EmbedBuilder() + .setTitle('🛍️ Shop') + .setThumbnail(message.guild.iconURL()) + .setDescription(`Sélectionnez un nombre d'objet à vendre.\n\nVous avez \`${user.objet}\`objet.\nAttention, il est possible que de petit pourboire de client soit rajouté.`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + const select = new StringSelectMenuBuilder() + .setCustomId('sell') + .setPlaceholder('Sélectionnez un nombre d\'objet') + .addOptions( + new StringSelectMenuOptionBuilder() + .setLabel('👶 Debutant') + .setValue('1') + .setDescription('Vend un objet, pour \`200\`coins.') + .setEmoji('👶') + .setDefault(false) + ) + .addOptions( + new StringSelectMenuOptionBuilder() + .setLabel('🚸 Enfant') + .setValue('2') + .setDescription('Vend deux objet, pour \`400\`coins.') + .setEmoji('🚸') + .setDefault(false) + ) + .addOptions( + new StringSelectMenuOptionBuilder() + .setLabel('🔞 Mineur') + .setValue('3') + .setDescription('Vend trois objet, pour \`600\`coins.') + .setEmoji('🔞') + .setDefault(false) + ) + .addOptions( + new StringSelectMenuOptionBuilder() + .setLabel('🧐 Expert') + .setValue('4') + .setDescription('Vend quatre objet, pour \`800\`coins.') + .setEmoji('🧐') + .setDefault(false), + ) + .addOptions( + new StringSelectMenuOptionBuilder() + .setLabel('👑 Mythique') + .setValue('5') + .setDescription('Vend cinq objet, pour \`1 000\`coins.') + .setEmoji('👑') + .setDefault(false), + ) + .addOptions( + new StringSelectMenuOptionBuilder() + .setLabel('👑 Legendaire') + .setValue('10') + .setDescription('Vend dix objet, pour \`10 000\`coins !') + .setEmoji('👑') + .setDefault(false), + ) + .addOptions( + new StringSelectMenuOptionBuilder() + .setLabel('👑 Ultime') + .setValue('25') + .setDescription('Vend 25 objet, pour \`30 000\`coins !') + .setEmoji('👑') + .setDefault(false), + ) + + const row = new ActionRowBuilder() + .addComponents(select); + + message.reply({ embeds: [embed], components: [row], allowedMentions: { repliedUser: false } }); + + client.on('interactionCreate', async (interaction) => { + if (!interaction.user.id !== message.author.id) return; + if (!interaction.isSelectMenu()) return; + + if (!interaction.customId === 'sell') return + const selected = interaction.values[0]; + + if (selected === '1') { + if (user.objet < 1) { + return interaction.reply({ content: 'Vous n\'avez pas assez d\'objet pour en vendre autant.', ephemeral: true }); + } + db.run(`UPDATE users SET objet = objet - 1, pocket = pocket + 200 WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id]); + } + + if (selected === '2') { + if (user.objet < 2) { + return interaction.reply({ content: 'Vous n\'avez pas assez d\'objet pour en vendre autant.', ephemeral: true }); + } + db.run(`UPDATE users SET objet = objet - 2, pocket = pocket + 400 WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id]); + } + + if (selected === '3') { + if (user.objet < 3) { + return interaction.reply({ content: 'Vous n\'avez pas assez d\'objet pour en vendre autant.', ephemeral: true }); + } + db.run(`UPDATE users SET objet = objet - 3, pocket = pocket + 600 WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id]); + } + + if (selected === '4') { + if (user.objet < 4) { + return interaction.reply({ content: 'Vous n\'avez pas assez d\'objet pour en vendre autant.', ephemeral: true }); + } + db.run(`UPDATE users SET objet = objet - 4, pocket = pocket + 850 WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id]); + } + + if (selected === '5') { + if (user.objet < 5) { + return interaction.reply({ content: 'Vous n\'avez pas assez d\'objet pour en vendre autant.', ephemeral: true }); + } + db.run(`UPDATE users SET objet = objet - 5, pocket = pocket + 1500 WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id]); + } + + if (selected === '10') { + if (user.objet < 10) { + return interaction.reply({ content: 'Vous n\'avez pas assez d\'objet pour en vendre autant.', ephemeral: true }); + } + db.run(`UPDATE users SET objet = objet - 10, pocket = pocket + 10500 WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id]); + } + + if (selected === '25') { + if (user.objet < 25) { + return interaction.reply({ content: 'Vous n\'avez pas assez d\'objet pour en vendre autant.', ephemeral: true }); + } + db.run(`UPDATE users SET objet = objet - 25, pocket = pocket + 31000 WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id]); + } + + + if (select <= 9) { + const embed = new EmbedBuilder() + .setTitle('🛍️ Shop') + .setDescription(`Vous avez vendu \`${select}\`objet pour \`${200 * select}\`coins !`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + interaction.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + else if (select === 10){ + const embed = new EmbedBuilder() + .setTitle('🛍️ Shop') + .setDescription(`Vous avez vendu \`${select}\`objet pour \`10000\`coins !`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + interaction.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + else if (select === 25){ + const embed = new EmbedBuilder() + .setTitle('🛍️ Shop') + .setDescription(`Vous avez vendu \`${select}\`objet pour \`30000\`coins !`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + interaction.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + }); + }, +}; \ No newline at end of file diff --git a/commands/casino/top.js b/commands/casino/top.js index 5cb204e..23fee6b 100644 --- a/commands/casino/top.js +++ b/commands/casino/top.js @@ -6,7 +6,7 @@ module.exports = { aliases: ['leaderboard', 'lb'], description: 'Affiche le top 10 des membres du serveur.', emote: '🏆', - utilisation: '[global|pocket|bank|reputation|niveau]', + utilisation: '[global|pocket|bank|reputation|niveau|teamdonnateur]', permission: 0, async execute(message, args, client) { @@ -20,6 +20,8 @@ module.exports = { args[0] = 'reputation' } else if (args[0] === 'niveau' || args[0] === 'lvl' || args[0] === 'level' || args[0] === 'lvl') { args[0] = 'niveau' + } else if (args[0] === 'teamdonnateur' || args[0] === ' tdonnateur' || args[0] === 'tdroper' || args[0] === ' tdropper' || args[0] === ' teamdrop' || args[0] === 'tdrop' || args[0] === 'teamdroper' || args[0] === 'teamdropper') { + args[0] = 'teamdroper' } else if (!args[0]) { args[0] = 'coins' } else { @@ -71,6 +73,13 @@ module.exports = { resolve(rows); }); }); + } else if (type === 'teamdroper') { + data = await new Promise((resolve, reject) => { + db.all(`SELECT userId, teamdroper AS coins FROM users WHERE guildId = ? ORDER BY coins DESC LIMIT 10`, [message.guild.id], (err, rows) => { + if (err) reject(err); + resolve(rows); + }); + }); } const emoji = { @@ -78,7 +87,8 @@ module.exports = { pocket: '💰', bank: '🏦', reputation: '🔺', - niveau: '📊' + niveau: '📊', + teamdroper: '🎁' } let leaderboard = data.map((row, i) => { @@ -139,7 +149,12 @@ module.exports = { .setLabel('Niveau') .setEmoji('📊') .setDescription('Affiche le top en fonction du niveau') - .setValue('niveau') + .setValue('niveau'), + new StringSelectMenuOptionBuilder() + .setLabel('TeamDroper') + .setEmoji('🎁') + .setDescription('Affiche le top en fonction du nombre de coins donnés à une team') + .setValue('teamdroper') ); const row = new ActionRowBuilder() diff --git a/commands/gestion/drop.js b/commands/gestion/drop.js index b03f047..65d1e57 100644 --- a/commands/gestion/drop.js +++ b/commands/gestion/drop.js @@ -15,17 +15,32 @@ module.exports = { .setLabel('💰') .setStyle(ButtonStyle.Primary); - const row = new ActionRowBuilder() + const row = new ActionRowBuilder() .addComponents(btn); - const sentMessage = await message.reply({ + + /*const sentMessage = message.channel.send('_ _') + let contage = 0 + while (contage == 100) { + setTimeout(() => { + sentMessage.edit(`> Chargement : **${contage}%**`) + contage = + 1 + }, 450); + } + + await sentMessage.edit({ content: `Appuis vite sur le bouton pour gagner ${args[0]}coins`, components: [row], allowedMentions: { repliedUser: false }, - }); + });*/ + const sentMessage = message.reply({ + content: `Appuis vite sur le bouton pour gagner ${args[0]}coins`, + components: [row], + allowedMentions: { repliedUser: false }, + }) const filter = i => i.customId === 'confirm' && i.user.id !== message.author.id; - const collector = sentMessage.createMessageComponentCollector({ filter, time: 30000 }) + const collector = sentMessage.createMessageComponentCollector({ filter, time: 45000 }) collector.on('collect', async (interaction) => { sentMessage.edit({ content: `Le drop est gagner par <@${interaction.user.id}>`, diff --git a/commands/jeux/box.js b/commands/jeux/box.js new file mode 100644 index 0000000..664b729 --- /dev/null +++ b/commands/jeux/box.js @@ -0,0 +1,98 @@ +const { EmbedBuilder, ButtonStyle, ButtonBuilder, ActionRowBuilder } = require('discord.js'); +const embedColor = require('../../fonctions/embedColor.js'); +const db = require('../../fonctions/database.js'); + +module.exports = { + aliases: ['roulette'], + description: 'Lance une roulette 100% gagante. (coûte une clef)', + emote: '🎲', + utilisation: '', + permission: 0, + + async execute(message, args, client) { + const key = await new Promise((resolve, reject) => { + db.get(`SELECT key FROM users WHERE userId = ? AND guildId = ?`, [message.author.id, message.guild.id], (err, row) => { + if (err) { + reject(err); + } else { + resolve(row.key); + } + }); + }); + db.run(`UPDATE users SET key = key - 1 WHERE userId = ? AND guildId = ?`, [message.author.id, message.guild.id]) + + const embed = new EmbedBuilder() + .setTitle('🗝️ Box') + .setDescription(`🪙👑🗝️\n💰🔺🪙\n🪙🪙🗝️`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag} | Il te reste ${key - 1}clef`, iconURL: message.author.displayAvatarURL() }) + + const msg = await message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }) + + await new Promise(resolve => setTimeout(resolve, 1000)); + + const result = Math.floor(Math.random() * 30); + let gain = ''; + let emoji = ''; + let recompense = ''; + if (result === 0) { + gain = '30000'; + emoji = '💰'; + recompense = 'bank'; + } else if (result === 1) { + gain = '5'; + emoji = '🗝️'; + recompense = 'key'; + } else if (result === 2) { + emoji = '👑'; + recompense = 'couronne'; + } else if (result % 2 === 0) { + gain = '5000'; + emoji = '🪙'; + recompense = 'pocket'; + } else { + gain = '3'; + emoji = '🔺'; + recompense = 'reputation'; + } + + if (recompense !== 'couronne') { + await new Promise((resolve, reject) => { + db.run(`UPDATE users SET ${recompense} = ${recompense} + ? WHERE userId = ? AND guildId = ?`, [gain, message.author.id, message.guild.id], (err) => { + if (err) { + reject(err); + } else { + resolve(); + } + }); + }); + msg.delete() + message.reply({ embeds: [ + new EmbedBuilder() + .setTitle('🗝️ Box') + .setDescription(`${emoji, emoji, emoji}\n${emoji, emoji, emoji}\n${emoji, emoji, emoji}\n\nVous avez gagner ${gain}${recompense} !`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag} | Il te reste ${key - 1}clef`, iconURL: message.author.displayAvatarURL() }) + ], allowedMentions: { repliedUser: false } }) + } else { + db.run(`UPDATE users SET bank = bank + ? WHERE userId = ? AND guildId = ?`, [15000, message.author.id, message.guild.id]) + db.run(`UPDATE users SET pocket = pocket + ? WHERE userId = ? AND guildId = ?`, [5000, message.author.id, message.guild.id]) + db.run(`UPDATE users SET reputation = reputation + ? WHERE userId = ? AND guildId = ?`, [5, message.author.id, message.guild.id]) + db.run(`UPDATE users SET key = key + ? WHERE userId = ? AND guildId = ?`, [5, message.author.id, message.guild.id]) + db.run(`UPDATE users SET xp = xp + ? WHERE userId = ? AND guildId = ?`, [50, message.author.id, message.guild.id]) + db.run(`UPDATE users SET lvl = lvl + ? WHERE userId = ? AND guildId = ?`, [2, message.author.id, message.guild.id]) + + msg.delete() + message.reply({ embeds: [ + new EmbedBuilder() + .setTitle('🗝️ Box') + .setDescription(`${emoji, emoji, emoji}\n${emoji, emoji, emoji}\n${emoji, emoji, emoji}\n\n## **Vous avez gagner \`15000\`coins en bank, \`5000\`coins en poche, \`5\`reputation, \`5\`clef, \`50\`xp et \`5\`niveau !!**`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag} | Il te reste ${key - 1}clef`, iconURL: message.author.displayAvatarURL() }) + ], allowedMentions: { repliedUser: false } }) + } + } +}; \ No newline at end of file diff --git a/commands/jeux/dice.js b/commands/jeux/dice.js index 4be0156..bb48d5e 100644 --- a/commands/jeux/dice.js +++ b/commands/jeux/dice.js @@ -11,6 +11,7 @@ module.exports = { async execute(message, args, client) { let mise = 0 + let face = `${args[1]}\` et \`${args[2]}` const pocket = await new Promise((resolve, reject) => { db.get(`SELECT pocket FROM users WHERE userId = ? AND guildId = ?`, [message.author.id, message.guild.id], (err, row) => { if (err) { @@ -53,7 +54,6 @@ module.exports = { }); return } - let face = `${args[1]}\` et \`${args[2]}` if (isNaN(args[0]) && !args[0] == "all") { embedColor(message.author.id, message.guild.id).then(color => { const embed = new EmbedBuilder() diff --git a/commands/jeux/machine-a-sous.js b/commands/jeux/machine-a-sous.js index 93b238e..6821a86 100644 --- a/commands/jeux/machine-a-sous.js +++ b/commands/jeux/machine-a-sous.js @@ -87,9 +87,9 @@ module.exports = { await new Promise(resolve => setTimeout(resolve, 7500)); - let nombre1 = await Math.floor(Math.random() * 9) - let nombre2 = await Math.floor(Math.random() * 9) - let nombre3 = await Math.floor(Math.random() * 9) + let nombre1 = await Math.floor(Math.random() * 10) + let nombre2 = await Math.floor(Math.random() * (nombre1 + 1)) + let nombre3 = await Math.floor(Math.random() * (nombre2 + 2)) let gain = 0; if (nombre1 === nombre2 === nombre3) { @@ -138,7 +138,7 @@ module.exports = { embedColor(message.author.id, message.guild.id).then(color => { const embed = new EmbedBuilder() .setTitle('🪙 Machine à sous') - .setDescription(`Vous avez misé \`${args[0]}\` et les nombres sont : ${nombre1}, ${nombre2}, ${nombre3}. Vous avez perdu \`${0 - gain}\` !\n\nLa probabilité de ne pas perdre à ce jeu est inferieur à 3%. La mise en cas de gain est donc mutiplier par 10`) + .setDescription(`Vous avez misé \`${args[0]}\` et les nombres sont : ${nombre1}, ${nombre2}, ${nombre3}. Vous avez perdu \`${0 - gain}\` !\n\nLa probabilité de ne pas perdre à ce jeu est inferieur à 5%. La mise en cas de gain est donc mutiplier par 10`) .setColor(color) .setTimestamp() .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }) diff --git a/commands/jobs/braquage.js b/commands/jobs/braquage.js index 47acccc..d0b1504 100644 --- a/commands/jobs/braquage.js +++ b/commands/jobs/braquage.js @@ -4,7 +4,7 @@ const db = require('../../fonctions/database.js'); module.exports = { aliases: ['braquage'], - description: 'Tente un braquage. (cout : 5coins)', + description: 'Tente un braquage. (cout : 5rep)', emote: '🏦', utilisation: '<@membre>', permission: 0, @@ -152,7 +152,7 @@ module.exports = { embedColor(message.author.id, message.guild.id).then(color => { const embed = new EmbedBuilder() .setTitle('🔐 Braquage') - .setDescription(`Vous avez braquer ${args[0]} mais vous etes tomber sur un policier. Vous avez non seulement perdu votre gain mais le policier vous a obliger a payer \`3\`reputation de dedommagement`) + .setDescription(`Vous avez braquer <@${cible.id}> mais vous etes tomber sur un policier. Vous avez non seulement perdu votre gain mais le policier vous a obliger a payer \`3\`reputation de dedommagement`) .setColor(color) .setTimestamp() .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }) diff --git a/commands/jobs/juge.js b/commands/jobs/juge.js new file mode 100644 index 0000000..062b69b --- /dev/null +++ b/commands/jobs/juge.js @@ -0,0 +1,177 @@ +const { EmbedBuilder, ButtonStyle, ButtonBuilder, ActionRowBuilder } = require('discord.js'); +const embedColor = require('../../fonctions/embedColor.js'); +const db = require('../../fonctions/database.js'); +const cooldown = new Set(); + +module.exports = { + aliases: ['jugement', 'procès', 'proces'], + description: 'Juge un membre. (cout : 1reputation + 500coins)', + emote: '🏦', + utilisation: '<@membre>', + permission: 0, + + async execute(message, args, client) { + + /////////////////////////////// Calcule des données de la cible //////////////////////////////////////////////// + + const cible = message.mentions.users.first(); + if (!cible) { + const embed = new EmbedBuilder() + .setTitle('Erreur') + .setDescription('❌ Vous devez mentionner un membre.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + const cibleBD = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, cible.id], (err, row) => { + if (err) reject(err); + resolve(row); + }); + }); + + /////////////////////////////// Calcule des données du message.author ///////////////////////////////////////// + + 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); + }); + }); + + const lastJuge = user.lastJuge + if (lastJuge > Date.now() - 3600000) { + const embed = new EmbedBuilder() + .setTitle('Jugement Impossible') + .setDescription(`❌ Vous avez déjà juger récemment. Veuillez attendre ${Math.floor((lastBraquage + 7200000 - Date.now()) / 60000)} minutes avant de pouvoir braquer à nouveau.`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + + let countPr = 0 + let countContre = 0 + const pour = new ButtonBuilder() + .setCustomId('pour') + .setLabel('✅ Pour la sanction') + .setStyle(ButtonStyle.Primary); + const contre = new ButtonBuilder() + .setCustomId('contre') + .setLabel('😡 Contre la sanction') + .setStyle(ButtonStyle.Primary); + + const row = new ActionRowBuilder() + .addComponents(pour); + const msg = message.channel.send({ + embeds: [ + new EmbedBuilder() + .setTitle(`Jugement de ${cible.user.username}`) + .setDescription(`Vote pour la sanction: \`${countPr}\`\nVote contre la sanction: \`${countContre}\``) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setImage('') + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }) + ], + components: [row], + allowedMentions: { repliedUser: false } + }); + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + const filter = i => (i.customId === 'pour' || i.customId === 'contre') && i.user.id === message.author.id; + const collector = msg.createMessageComponentCollector({ filter, time: 60000 }) + collector.on('collect', async (interaction) => { + if (cooldown.has(message.author.id)) { return message.reply({ content: 'Vous avez deja voté', ephemeral: true }) } + cooldown.add(message.author.id); + if (i.customId === 'contre') { + if (i.user.id == message.author.id) { countContre = + 2 } else { countContre = + 1 } + msg.edit({ + embeds: [ + new EmbedBuilder() + .setTitle(`Jugement de ${cible.user.username}`) + .setDescription(`Vote pour la sanction: \`${countPr}\`\nVote contre la sanction: \`${countContre}\``) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setImage('') + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }) + ], + components: [row], + allowedMentions: { repliedUser: false } + }) + } + else { + if (i.user.id == message.author.id) { countPr = + 2 } else { countPr = + 1 } + msg.edit({ + embeds: [ + new EmbedBuilder() + .setTitle(`Jugement de <${cible.id}>`) + .setDescription(`Vote pour la sanction: \`${countPr}\`\nVote contre la sanction: \`${countContre}\``) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setImage('https://tenor.com/view/judge-ace-attorney-ace-attorney-aa-gif-2687377729828245947') + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }) + ], + components: [row], + allowedMentions: { repliedUser: false } + }) + } + }) + + collector.on('end', () => { + if (countContre > countPr) { + msg.edit({ + embeds: [ + new EmbedBuilder() + .setTitle(`Jugement de ${cible.user.username}`) + .setDescription(`Les charges sont abandonnée`) + .setTimestamp() + .setImage('') + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }) + ], components: [], allowedMentions: { repliedUser: false } }); + } + if (countContre == countPr) { + msg.edit({ + embeds: [ + new EmbedBuilder() + .setTitle(`Jugement de ${cible.user.username}`) + .setDescription(`Le jury n'arrive pas à ce mettre d'accord ||(${countPr}pour VS ${countContre}contre)|| Les charges sont donc appliquer mais à moitié, ${cible.user.username} ne pourras plus faire la commande \`work\`, \`daily\`, \`rob\`, \`hack\`, \`kill\`, \`braquage\`, \`rep\`, \`trep\` et \`recolt\` pour la prochaine heures plus le cooldown de chaque commande qui recommancera a la fin de ce delai.`) + .setTimestamp() + .setImage('') + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }) + ], components: [], allowedMentions: { repliedUser: false } + }); + db.run(`UPDATE users SET lastRob =? AND lastRecolt =? AND lastWork =? AND lastDaily =? AND lastRep =? AND lastTrep =? AND lastHack =? AND lastKill =? AND lastBraquage =? WHERE guildId =? AND userId =?`, [Date.now() + 3600000, Date.now() + 3600000, Date.now() + 3600000, Date.now() + 3600000, Date.now() + 3600000, Date.now() + 3600000, Date.now() + 3600000, Date.now() + 3600000, Date.now() + 3600000, message.guild.id, cible.id], (err) => { + if (err) { + console.log(`${err}`) + } + }) + } + if (countContre < countPr) { + msg.edit({ + embeds: [ + new EmbedBuilder() + .setTitle(`Jugement de ${cible.user.username}`) + .setDescription(`Le jury c'est mis d'accord, ${cible.user.username} ne pourras plus faire les commandes \`work\`, \`daily\`, \`rob\`, \`hack\`, \`kill\`, \`braquage\`, \`rep\`, \`trep\` et \`recolt\` pour __les deux__ prochaines heure __**plus le cooldown de chaque commande** qui recommancera a la **fin de ce delai**.__`) + .setTimestamp() + .setImage('') + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }) + ], components: [], allowedMentions: { repliedUser: false } + }); + db.run(`UPDATE users SET lastRob =? AND lastRecolt =? AND lastWork =? AND lastDaily =? AND lastRep =? AND lastTrep =? AND lastHack =? AND lastKill =? AND lastBraquage =? WHERE guildId =? AND userId =?`, [Date.now() + 7200000, Date.now() + 7200000, Date.now() + 7200000, Date.now() + 7200000, Date.now() + 7200000, Date.now() + 7200000, Date.now() + 7200000, Date.now() + 7200000, Date.now() + 7200000, message.guild.id, cible.id], (err) => { + if (err) { + console.log(`${err}`) + } + }) + } + /* CAR TOUJOURS EN TEST ET FLEMME DE ME DROP DES REP ET COINS A CHAQUE FOIS + db.run(`UPDATE users SET reputation = reputation - 1 WHERE guildId =? AND userId =?`, [message.guild.id, message.author.id]) + db.run(`UPDATE users SET pocket = pocket - 500 WHERE guildId =? AND userId =?`, [message.guild.id, message.author.id]) + */ + }); + } +}; \ No newline at end of file diff --git a/commands/teams admin/tcreate.js b/commands/teams admin/tcreate.js index deef77c..0c5206a 100644 --- a/commands/teams admin/tcreate.js +++ b/commands/teams admin/tcreate.js @@ -90,8 +90,19 @@ module.exports = { teamDescription = m.content; let idBase = teamName.toLowerCase().replace(/ /g, ''); + idBase = idBase.replace('0', ''); + idBase = idBase.replace('1', ''); + idBase = idBase.replace('2', ''); + idBase = idBase.replace('3', ''); + idBase = idBase.replace('4', ''); + idBase = idBase.replace('5', ''); + idBase = idBase.replace('6', ''); + idBase = idBase.replace('7', ''); + idBase = idBase.replace('8', ''); + idBase = idBase.replace('9', ''); + let id = idBase; - let increment = 1; + let increment = 0; let exists = true; do { await new Promise((resolve, reject) => { @@ -101,7 +112,7 @@ module.exports = { } else { exists = !!row; if (exists) { - increment++; + increment += 1; id = idBase + increment; } else { db.run(`INSERT INTO teams (guildId, id, name, description) VALUES (?, ?, ?, ?)`, [message.guild.id, id, teamName, teamDescription]); @@ -115,7 +126,7 @@ module.exports = { const embed = new EmbedBuilder() .setTitle('🛡️ Création de team') - .setDescription(`Votre team a été créée avec succès !\n\n**ID :** ${id}\n**Nom :** ${teamName}\n**Description :** ${teamDescription}\n\nVous pouvez maintenant inviter des membres dans votre team avec la commande \`&teaminvite\`.\n\nPour quitter la team, utilisez la commande \`&teamleave\`.`) + .setDescription(`Votre team a été créée avec succès !\n\n**ID :** ${id}\n**Nom :** ${teamName}\n**Description :** ${teamDescription}\n\nVous pouvez maintenant inviter des membres dans votre team avec la commande \`&teaminvite\`.\n\nPour quitter la team, utilisez la commande \`&teamleave\` (vous deverez d'abord donner la team a quelqu'un d'autre).`) .setColor(await embedColor(message.author.id, message.guild.id)) .setTimestamp() .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); diff --git a/commands/teams/twithdraw.js b/commands/teams admin/twithdraw.js similarity index 95% rename from commands/teams/twithdraw.js rename to commands/teams admin/twithdraw.js index 9c4f96e..0afb924 100644 --- a/commands/teams/twithdraw.js +++ b/commands/teams admin/twithdraw.js @@ -1,113 +1,113 @@ -const { EmbedBuilder } = require('discord.js'); -const db = require('../../fonctions/database.js'); -const embedColor = require('../../fonctions/embedColor.js'); - -module.exports = { - aliases: ['tretirer', 'teamwithdraw', 'teamretirer', 'teamwh', 'twh'], - description: 'Retire de l\'argent de la banque de votre team.', - emote: '💰', - utilisation: '', - permission: 0, - - async execute(message, args, client) { - if (args.length !== 1) { - const embed = new EmbedBuilder() - .setTitle('Retrait Impossible') - .setDescription('❌ Vous devez spécifier un montant à retirer.') - .setColor(await embedColor(message.author.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - - return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); - } else if (args[0] !== 'all' && isNaN(args[0])) { - const embed = new EmbedBuilder() - .setTitle('Retrait Impossible') - .setDescription('❌ Vous devez spécifier un montant valide à retirer.') - .setColor(await embedColor(message.author.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - - return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); - } else if (args[0] < 1) { - const embed = new EmbedBuilder() - .setTitle('Retrait Impossible') - .setDescription('❌ Vous devez retirer au moins 1 coin.') - .setColor(await embedColor(message.author.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - - return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); - } - - const teamRole = await new Promise((resolve, reject) => { - db.get(`SELECT teamRole FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => { - if (err) reject(err); - resolve(row.teamRole); - }); - }); - - if (!teamRole || (teamRole !== 'officier' && teamRole !== 'owner')) { - const embed = new EmbedBuilder() - .setTitle('Retrait Impossible') - .setDescription('❌ Vous n\'avez pas la permission de retirer de l\'argent de la banque de l\'équipe.') - .setColor(await embedColor(message.author.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - - return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); - } - - const team = await new Promise((resolve, reject) => { - db.get(`SELECT teamId FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => { - if (err) reject(err); - resolve(row.teamId); - }); - }); - - if (!team) { - const embed = new EmbedBuilder() - .setTitle('Retrait Impossible') - .setDescription('❌ Vous n\'êtes pas dans une team.') - .setColor(await embedColor(message.author.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - - return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); - } else { - const bank = await new Promise((resolve, reject) => { - db.get(`SELECT bank FROM teams WHERE id = ? AND guildId = ?`, [team, message.guild.id], (err, row) => { - if (err) reject(err); - resolve(row.bank); - }); - }); - - let amount; - if (args[0] === 'all') { - amount = bank; - } else if (args[0] > bank) { - const embed = new EmbedBuilder() - .setTitle('Retrait Impossible') - .setDescription(`❌ Votre team n'a pas assez d'argent dans la banque pour retirer cette somme.\n\n💰 Votre team a actuellement **${bank} coins** dans la banque.`) - .setColor(await embedColor(message.author.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - - return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); - } else { - amount = args[0]; - } - - db.run(`UPDATE users SET pocket = pocket + ? WHERE guildId = ? AND userId = ?`, [amount, message.guild.id, message.author.id]); - db.run(`UPDATE teams SET bank = bank - ? WHERE id = ? AND guildId = ?`, [amount, team, message.guild.id]); - - const embed = new EmbedBuilder() - .setTitle('Retrait Effectué') - .setDescription(`💰 Vous avez retiré **${amount}** coins de la banque de votre team.`) - .setColor(await embedColor(message.author.id, message.guild.id)) - .setTimestamp() - .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - - return 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: ['tretirer', 'teamwithdraw', 'teamretirer', 'teamwh', 'twh'], + description: 'Retire de l\'argent de la banque de votre team.', + emote: '💰', + utilisation: '', + permission: 0, + + async execute(message, args, client) { + if (args.length !== 1) { + const embed = new EmbedBuilder() + .setTitle('Retrait Impossible') + .setDescription('❌ Vous devez spécifier un montant à retirer.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else if (args[0] !== 'all' && isNaN(args[0])) { + const embed = new EmbedBuilder() + .setTitle('Retrait Impossible') + .setDescription('❌ Vous devez spécifier un montant valide à retirer.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else if (args[0] < 1) { + const embed = new EmbedBuilder() + .setTitle('Retrait Impossible') + .setDescription('❌ Vous devez retirer au moins 1 coin.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + + const teamRole = await new Promise((resolve, reject) => { + db.get(`SELECT teamRole FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => { + if (err) reject(err); + resolve(row.teamRole); + }); + }); + + if (!teamRole || (teamRole !== 'officier' && teamRole !== 'owner')) { + const embed = new EmbedBuilder() + .setTitle('Retrait Impossible') + .setDescription('❌ Vous n\'avez pas la permission de retirer de l\'argent de la banque de l\'équipe.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + + const team = await new Promise((resolve, reject) => { + db.get(`SELECT teamId FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => { + if (err) reject(err); + resolve(row.teamId); + }); + }); + + if (!team) { + const embed = new EmbedBuilder() + .setTitle('Retrait Impossible') + .setDescription('❌ Vous n\'êtes pas dans une team.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else { + const bank = await new Promise((resolve, reject) => { + db.get(`SELECT bank FROM teams WHERE id = ? AND guildId = ?`, [team, message.guild.id], (err, row) => { + if (err) reject(err); + resolve(row.bank); + }); + }); + + let amount; + if (args[0] === 'all') { + amount = bank; + } else if (args[0] > bank) { + const embed = new EmbedBuilder() + .setTitle('Retrait Impossible') + .setDescription(`❌ Votre team n'a pas assez d'argent dans la banque pour retirer cette somme.\n\n💰 Votre team a actuellement **${bank} coins** dans la banque.`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } else { + amount = args[0]; + } + + db.run(`UPDATE users SET pocket = pocket + ?, teamDroper = teamDroper - ? WHERE guildId = ? AND userId = ?`, [amount, amount, message.guild.id, message.author.id]); + db.run(`UPDATE teams SET bank = bank - ? WHERE id = ? AND guildId = ?`, [amount, team, message.guild.id]); + + const embed = new EmbedBuilder() + .setTitle('Retrait Effectué') + .setDescription(`💰 Vous avez retiré **${amount}** coins de la banque de votre team.`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + }, }; \ No newline at end of file diff --git a/commands/teams/tdeposit.js b/commands/teams/tdeposit.js index 992eae1..009d8fe 100644 --- a/commands/teams/tdeposit.js +++ b/commands/teams/tdeposit.js @@ -63,9 +63,9 @@ module.exports = { } const team = await new Promise((resolve, reject) => { - db.get(`SELECT teamId FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => { + db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => { if (err) reject(err); - resolve(row.teamId); + resolve(row); }); }); if (!team) { @@ -78,8 +78,8 @@ module.exports = { return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); } else { - db.run(`UPDATE users SET pocket = pocket - ? WHERE guildId = ? AND userId = ?`, [amout, message.guild.id, message.author.id]); - db.run(`UPDATE teams SET bank = bank + ? WHERE id = ?`, [amout, team]); + db.run(`UPDATE users SET pocket = pocket - ?, teamDroper = teamDroper + ? WHERE guildId = ? AND userId = ?`, [amout, amout, message.guild.id, message.author.id]); + db.run(`UPDATE teams SET bank = bank + ? WHERE guildId = ? AND id = ?`, [amout, message.guild.id, team.id]); const embed = new EmbedBuilder() .setTitle('Dépôt Effectué') diff --git a/commands/teams/team.js b/commands/teams/team.js index a60d910..1a907bf 100644 --- a/commands/teams/team.js +++ b/commands/teams/team.js @@ -5,14 +5,14 @@ const embedColor = require('../../fonctions/embedColor.js'); module.exports = { aliases: ['t', 'tinfo', 'teaminfo'], description: 'Affiche les informations de votre team.', - emote: '🛡️', + emote: '🛡️', utilisation: '', permission: 0, async execute(message, args, client) { const member = message.mentions.members.first() || message.member; const team = await new Promise((resolve, reject) => { - db.get(`SELECT * FROM teams WHERE guildId = ? AND id = (SELECT teamId FROM users WHERE guildId = ? AND userId = ?)`, [message.guild.id, message.guild.id, member], (err, row) => { + db.get(`SELECT * FROM teams WHERE guildId = ? AND id = (SELECT teamId FROM users WHERE guildId = ? AND userId = ?)`, [message.guild.id, message.guild.id, member.id], (err, row) => { if (err) reject(err); resolve(row); }); @@ -28,6 +28,21 @@ module.exports = { return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); } else { + + const alliance = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM alliances WHERE guildId = ? AND id = (SELECT alliancesId FROM teams WHERE guildId = ? AND id = ?)`, [message.guild.id, message.guild.id, team.id], (err, row) => { + if (err) reject(err); + resolve(row); + }); + }); + let Aname + if (alliance) { + Aname = alliance.name + } + else { + Aname = 'aucune alliance' + } + const memberlist = await new Promise((resolve, reject) => { db.all(`SELECT userId, teamRole FROM users WHERE guildId = ? AND teamId = ?`, [message.guild.id, team.id], (err, rows) => { if (err) reject(err); @@ -51,24 +66,57 @@ module.exports = { CadenaS = "🔐" } + //////////////////////////////////////////////////// TEAM DROPER /////////////////////////////////////////////////////////////////// + data = await new Promise((resolve, reject) => { + db.all(`SELECT userId, teamDroper AS coins FROM users WHERE teamId = ? ORDER BY coins DESC LIMIT 10`, [team.id], (err, rows) => { + if (err) reject(err); + resolve(rows); + }); + }); + let leaderboard = data.map((row, i) => { + let position; + switch (i) { + case 0: + position = ':first_place:'; + break; + case 1: + position = ':second_place:'; + break; + case 2: + position = ':third_place:'; + break; + default: + position = `**${i + 1}.**`; + } + return `${position} <@${row.userId}> - \`${row.coins}\`coins donné(s)`; + }).join('\n'); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + const embed = new EmbedBuilder() .setTitle('🛡️ Informations de `' + team.name + '`:') - .setDescription(`**Id:** \`${team.id}\`\n**Description:** \`${team.description}\`\n**Banque:** \`${team.bank}\`coins\n**Niveau:** \`${team.level}\`\n**Reputation:** \`${team.reputation}\`\n\n**Soldats:** \`${team.soldiers}\`\n**Soldats blessés:** \`${team.woundedSoldiers}\`\n**Niveau du camp:** \`${team.campLevel}\`\n**Tourelles:** \`${team.turrets}\`\n**Cadenas:** \`${CadenaS}\`\n\n**Membres (\`${memberlist.length}\`):**\n${memberlist.map(member => `**${member.teamRole}:** <@${member.userId}>`).join('\n')}`) + .setDescription(`**Id:** \`${team.id}\`\n**Description:** \`${team.description}\`\n**Banque:** \`${team.bank}\`coins\n**Niveau:** \`${team.level}\`\n**Reputation:** \`${team.reputation}\`\n\n**Soldats:** \`${team.soldiers}\`\n**Soldats blessés:** \`${team.woundedSoldiers}\`\n**Niveau du camp:** \`${team.campLevel}\`\n**Tourelles:** \`${team.turrets}\`\n**Cadenas:** \`${CadenaS}\`\n\n\nAlliance : ${Aname}\n\n\n**Membres (\`${memberlist.length}\`):**\n${memberlist.map(member => `**${member.teamRole}:** <@${member.userId}>`).join('\n')}\n`) .setColor(await embedColor(message.author.id, message.guild.id)) .setTimestamp() .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - const urlRegex1 = /(https?:\/\/[^\s]+)/g; - if (team.icon && urlRegex1.test(team.icon)) { - embed.setThumbnail(team.icon); - } - - const urlRegex2 = /(https?:\/\/[^\s]+)/g; - if (team.banner && urlRegex2.test(team.banner)) { - embed.setImage(team.banner); - } + const embedTopDonnateur = new EmbedBuilder() + .setTitle('**Les 10 meilleurs donnateurs de la team sont :**') + .setDescription(`${leaderboard}`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); - return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + const urlRegex1 = /(https?:\/\/[^\s]+)/g; + if (team.icon && urlRegex1.test(team.icon)) { + embed.setThumbnail(team.icon); + } + + const urlRegex2 = /(https?:\/\/[^\s]+)/g; + if (team.banner && urlRegex2.test(team.banner)) { + embedTopDonnateur.setImage(team.banner); + } + + return message.reply({ embeds: [embed, embedTopDonnateur], allowedMentions: { repliedUser: false } }); } }, }; \ No newline at end of file diff --git a/commands/teams/tinvite.js b/commands/teams/tinvite.js index 130e7a7..abb48d2 100644 --- a/commands/teams/tinvite.js +++ b/commands/teams/tinvite.js @@ -38,6 +38,16 @@ module.exports = { allowedMentions: { repliedUser: false } }); } + const team = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM teams WHERE guildId = ? AND id = (SELECT teamId FROM users WHERE guildId = ? AND userId = ?)`, [message.guild.id, message.guild.id, userToInvite.id], (err, row) => { + if (err) reject(err); + resolve(row); + }); + }); + + if (team) { + return message.channel.reply('<@' + userToInvite.id + '> a déjà une team') + } const user = await new Promise((resolve, reject) => { db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => { diff --git a/commands/teams/trep.js b/commands/teams/trep.js index 9149a0f..6ea09e7 100644 --- a/commands/teams/trep.js +++ b/commands/teams/trep.js @@ -74,7 +74,7 @@ module.exports = { const embed = new EmbedBuilder() .setTitle('Reputation ajouté !') - .setDescription('Vous avez ajouter une reputation à la team `' + team.name + '`, qui a maintement `' + team.reputation + 1 + '` reputation !') + .setDescription('Vous avez ajouter une reputation à la team `' + team.name + '`, qui a maintement `' + (team.reputation + 1) + '` reputation !') .setColor(await embedColor(message.author.id, message.guild.id)) .setTimestamp() .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); diff --git a/events/guildCreate.js b/events/guildCreate.js index 2e8e053..dd9df02 100644 --- a/events/guildCreate.js +++ b/events/guildCreate.js @@ -6,7 +6,7 @@ module.exports = { async execute(guild) { db.run(`INSERT OR IGNORE INTO config (guildId, name, value) VALUES (?, ?, ?)`, [guild.id, 'prefix', '&']); guild.members.cache.forEach(member => { - db.run(`INSERT OR IGNORE INTO users (guildId, userId) VALUES (?, ?)`, [guild.id, member.id]); + db.run(`INSERT OR IGNORE INTO users (guildId, guildName, userId, userName) VALUES (?, ?)`, [guild.id, guild.name, member.id, member.name]); }); }, }; \ No newline at end of file diff --git a/events/guildMemberAdd.js b/events/guildMemberAdd.js index 5ea31af..c69a55a 100644 --- a/events/guildMemberAdd.js +++ b/events/guildMemberAdd.js @@ -4,6 +4,6 @@ const db = require('../fonctions/database.js'); module.exports = { name: Events.GuildMemberAdd, async execute(member) { - db.run(`INSERT INTO users (guildId, userId) VALUES (?, ?)`, [member.guild.id, member.id]); + db.run(`INSERT INTO users (guildId, guildName, userId, userName) VALUES (?, ?)`, [member.guild.id, member.guild.name, member.id, member.name]); }, }; \ No newline at end of file diff --git a/events/messageCreate.js b/events/messageCreate.js index dc0d8bf..6aaded3 100644 --- a/events/messageCreate.js +++ b/events/messageCreate.js @@ -1,11 +1,33 @@ const { Message, Events } = require("discord.js"); const db = require('../fonctions/database.js'); +//const getPermissionLevel = require("../fonctions/getPermissionLevel"); +var loggT = require('../loggerT.js'); +var loggE = require('../loggerE.js'); const getPermissionLevel = require("../fonctions/getPermissionLevel.js"); module.exports = { name: Events.MessageCreate, async execute(message, client) { if (message.author.bot) return; + if (message.content == "<@" + client.user.id + ">") { + const command = client.commands.get('help'); + try { + command.execute(message, null, client); + console.log(`[&] ${message.guild.name} | ${message.author.tag} | ${command.name}`.blue) + loggT(`[&] ${message.guild.name} | ${message.author.tag} | ${command.name}`) + } catch (error) { + console.error(error); + loggerT(error) + message.reply("Erreur lors de l'exécution de la commande"); + } + } + 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.blacklist == true) { return } const prefix = db.get(`SELECT value FROM config WHERE guildId = ? AND name = ?`, [message.guild.id, 'prefix'])?.value || '&'; if (message.content.startsWith(prefix)) { @@ -22,9 +44,11 @@ module.exports = { try { command.execute(message, args, client); - console.log(`[&] ${message.guild.name} | ${message.author.tag} | ${command.name}`.blue) + console.log(`[${prefix}}] ${message.guild.name} | ${message.author.tag} | ${command.name}`.blue) + loggT(`[${prefix}] ${message.guild.name} | ${message.author.tag} | ${command.name}`) } catch (error) { console.error(error); + loggE(error) message.reply("Erreur lors de l'exécution de la commande"); } } else if (message.content === `<@!${client.user.id}>` || message.content === `<@${client.user.id}>`) { diff --git a/events/messageCreateLVL.js b/events/messageCreateLVL.js index 12b5f4a..f9546a2 100644 --- a/events/messageCreateLVL.js +++ b/events/messageCreateLVL.js @@ -8,6 +8,14 @@ module.exports = { async execute(message, client) { if (message.channel.type === "DM") return; if (message.author.bot) return; + + 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.blacklist == true) { return } ////////////////////////////////////////////////////////////////// /////////////////////////// xp systeme /////////////////////////// @@ -34,22 +42,15 @@ module.exports = { /////////////////////////// lvl systeme ////////////////////////// ////////////////////////////////////////////////////////////////// - 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 = xp - ?, lvl = lvl + 1, pocket = pocket + ?, reputation = reputation + ? WHERE guildId = ? AND userId = ?`, - [100 * user.lvl, (Math.ceil((user.lvl + 1) / 5)) * 500, Math.ceil((user.lvl + 1) / 5), message.guild.id, message.author.id] + [100 * user.lvl, ((user.lvl + 1) * 250), Math.ceil((user.lvl + 1) / 5), message.guild.id, message.author.id] ); const embedlvl = new EmbedBuilder() .setTitle("Nouveau niveau !") - .setDescription(`Bravo ${message.author}, tu es passé niveau ${user.lvl + 1} sur le serveur \`${message.guild.name}\` !\nTu as reçu \`${(Math.ceil((user.lvl + 1) / 5)) * 500}\` 🪙 et \`${Math.ceil((user.lvl + 1) / 5)}\` 🔺 !`) + .setDescription(`Bravo ${message.author}, tu es passé niveau ${user.lvl + 1} sur le serveur \`${message.guild.name}\` !\nTu as reçu \`${(user.lvl + 1) * 250}\` 🪙 et \`${Math.ceil((user.lvl + 1) / 5)}\` 🔺 !`) .setColor(await embedColor(message.author.id, message.guild.id)); message.author.send({ embeds: [embedlvl] }); diff --git a/events/ready.js b/events/ready.js index 49eac3b..5edac4f 100644 --- a/events/ready.js +++ b/events/ready.js @@ -1,10 +1,13 @@ const { Events, ActivityType } = require('discord.js'); const db = require('../fonctions/database.js'); +var loggT = require('../loggerT.js'); +var loggE = require('../loggerE.js'); module.exports = { name: Events.ClientReady, async execute(client) { console.log(`[READY] ${client.user.tag} est prêt ||| ${client.guilds.cache.size.toLocaleString('fr-FR')} serveurs | ${client.guilds.cache.reduce((acc, guild) => acc + guild.memberCount, 0).toLocaleString('fr-FR')} utilisateurs\n`.green); + loggT(`[READY] ${client.user.tag} est prêt ||| ${client.guilds.cache.size} serveurs | ${client.guilds.cache.reduce((acc, guild) => acc + guild.memberCount, 0)} utilisateurs\n`) client.user.setPresence({ activities: [{ @@ -19,7 +22,7 @@ module.exports = { client.guilds.cache.forEach(guild => { db.run(`INSERT OR IGNORE INTO config (guildId, name, value) VALUES (?, ?, ?)`, [guild.id, 'prefix', '&']); guild.members.cache.forEach(member => { - db.run(`INSERT OR IGNORE INTO users (guildId, userId) VALUES (?, ?)`, [guild.id, member.id]); + db.run(`INSERT OR IGNORE INTO users (guildId, guildName, userId, userName) VALUES (?, ?, ?, ?)`, [guild.id, guild.name, member.id, member.name]); }); }); @@ -29,31 +32,44 @@ module.exports = { guild.members.cache.filter(member => member.voice.channel).forEach(member => { if (member.voice.selfMute == true) { db.run('UPDATE users SET pocket = pocket + 50 WHERE guildId = ? AND userId = ?', [guild.id, member.id]); - db.run('UPDATE users SET xp = xp + 25 WHERE guildId = ? AND userId = ?', [guild.id, member.id]); + db.run('UPDATE users SET xp = xp + 5 WHERE guildId = ? AND userId = ?', [guild.id, member.id]); } else { db.run('UPDATE users SET pocket = pocket + 100 WHERE guildId = ? AND userId = ?', [guild.id, member.id]); - db.run('UPDATE users SET xp = xp + 50 WHERE guildId = ? AND userId = ?', [guild.id, member.id]); + db.run('UPDATE users SET xp = xp + 10 WHERE guildId = ? AND userId = ?', [guild.id, member.id]); } }); guild.members.cache.filter(member => member.voice.channel && member.voice.streaming).forEach(member => { db.run('UPDATE users SET pocket = pocket + 200 WHERE guildId = ? AND userId = ?', [guild.id, member.id]); - db.run('UPDATE users SET xp = xp + 100 WHERE guildId = ? AND userId = ?', [guild.id, member.id]); + db.run('UPDATE users SET xp = xp + 20 WHERE guildId = ? AND userId = ?', [guild.id, member.id]); }); guild.members.cache.filter(member => member.voice.channel && member.voice.selfVideo).forEach(member => { db.run('UPDATE users SET pocket = pocket + 200 WHERE guildId = ? AND userId = ?', [guild.id, member.id]); - db.run('UPDATE users SET xp = xp + 100 WHERE guildId = ? AND userId = ?', [guild.id, member.id]); + db.run('UPDATE users SET xp = xp + 20 WHERE guildId = ? AND userId = ?', [guild.id, member.id]); }); }); }, 15 * 60 * 1000); + setInterval(async () => { + const team = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM teams`, (err, row) => { + if (err) reject(err); + resolve(row); + }); + }); + + if (team.location == 0) return + db.run(`UPDATE teams SET bank = bank + ? WHERE guildId = ? AND userId = ?`, [team.location, message.guild.id, message.author.id]); + }, 1 * 60 * 1000) + //AntiCrash process.on('unhandledRejection', (error) => { if (error.code == "10064") return if (error.code == "10008") return console.log(' [antiCrash] :: Unhandled Rejection/Catch'.red); console.log(error); + loggE(error) }); process.on("uncaughtException", (error, origin) => { @@ -62,6 +78,7 @@ module.exports = { console.log(' [antiCrash] :: Uncaught Exception/Catch'.red); console.log(error); console.log('Information supplémentaire:', origin); + loggE(error) }); process.on('uncaughtExceptionMonitor', (error, origin) => { @@ -70,6 +87,7 @@ module.exports = { console.log(' [antiCrash] :: Uncaught Exception Monitor/Catch'.red); console.log(error); console.log('Information supplémentaire:', origin); + loggE(error) }); process.on('beforeExit', (code) => { @@ -77,6 +95,7 @@ module.exports = { if (error.code == "10008") return console.log(' [antiCrash] :: Before Exit'.red); console.log('Code de sortie:', code); + loggE(error) }); process.on('exit', (code) => { @@ -84,6 +103,7 @@ module.exports = { if (error.code == "10008") return console.log(' [antiCrash] :: Exit'.red); console.log('Code de sortie:', code); + loggE(error) }); }, diff --git a/fonctions/database.js b/fonctions/database.js index 76f9010..3baea75 100644 --- a/fonctions/database.js +++ b/fonctions/database.js @@ -11,28 +11,35 @@ db.run(`CREATE TABLE IF NOT EXISTS config ( db.run(`CREATE TABLE IF NOT EXISTS users ( guildId TEXT, + guildName TEXT, userId TEXT, + userName TEXT, pocket INTEGER DEFAULT 0, bank INTEGER DEFAULT 0, reputation INTEGER DEFAULT 0, lvl INTERGER DEFAULT 0, xp INTERGER DEFAULT 0, + objet INTERGER DEFAULT 0, + key INTERGER DEFAULT 0, buyer BOOLEAN DEFAULT FALSE, owner BOOLEAN DEFAULT FALSE, whitelist BOOLEAN DEFAULT FALSE, blacklist BOOLEAN DEFAULT FALSE, antiRob INTEGER DEFAULT 0, lastRob INTEGER DEFAULT 0, + lastRecolt INTEGER DEFAULT 0, lastWork INTEGER DEFAULT 0, lastDaily INTEGER DEFAULT 0, lastRep INTERGER DEFAULT 0, lastTrep INTERGER DEFAULT 0, + lastArep INTERGER DEFAULT 0, lastHack INTERGER DEFAULT 0, lastKill INTERGER DEFAULT 0, lastBraquage INTERGER DEFAULT 0, job TEXT, teamId TEXT, teamRole TEXT, + teamDroper INTERGER DEFAULT 0, embed TEXT, PRIMARY KEY (guildId, userId) )`); @@ -46,12 +53,27 @@ db.run(`CREATE TABLE IF NOT EXISTS teams ( banner TEXT, reputation INTERGER DEFAULT 0, bank INTEGER DEFAULT 0, + location INTERGER DEFAULT 0, level INTEGER DEFAULT 1, padlock INTEGER DEFAULT 5, soldiers INTEGER DEFAULT 0, woundedSoldiers INTEGER DEFAULT 0, campLevel INTEGER DEFAULT 1, turrets INTEGER DEFAULT 0, + alliancesId TEXT, + PRIMARY KEY (guildId, id) +)`); + +db.run(`CREATE TABLE IF NOT EXISTS alliances ( + guildId TEXT, + id TEXT, + creator TEXT, + name TEXT, + description TEXT, + icon TEXT, + banner TEXT, + reputation INTERGER DEFAULT 0, + bank INTEGER DEFAULT 0, PRIMARY KEY (guildId, id) )`); diff --git a/loggerE.js b/loggerE.js new file mode 100644 index 0000000..acc31d6 --- /dev/null +++ b/loggerE.js @@ -0,0 +1,38 @@ +const fs = require("fs") + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////// +////////// logs d'erreur +////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function saveLOGE(LOG) { + try { + let data = fs.readFileSync('logs/ERROR.txt', 'utf8'); + const log = data.split('\n'); + log.push(...LOG); + data = log.join('\n'); + fs.writeFileSync('logs/ERROR.txt', data); + } catch (err) { + console.log(err); + } +} +module.exports = function loggE(erreur) { + const config = require("./config.json"); + //*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/ TIME ///////////////////////////////////////////////////////////////////////////// + const d = new Date() + var jours = d.getDate().toString().padStart(2, "0") + var mois = d.getMonth().toString().padStart(2, "0") + 1 + var année = d.getFullYear().toString().padStart(2, "0") + var heures = d.getHours().toString().padStart(2, "0") + var minutes = d.getMinutes().toString().padStart(2, "0") + var secondes = d.getSeconds().toString().padStart(2, "0") + var milliseconds = d.getMilliseconds().toString().padStart(3, "0") + const time = ` ${jours}/${mois}/${année} =>> ${heures}h ${minutes}m ${secondes}s ${milliseconds}ms ` + //*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/ CODE DE LOG /////////////////////////////////////////////////////////////////////// + const text = erreur + const ERROR = `[ERROR] || ${time} || ${text}` + const LOG = []; + LOG.push(ERROR); + saveLOGE(LOG); +} diff --git a/loggerT.js b/loggerT.js new file mode 100644 index 0000000..eb75e8e --- /dev/null +++ b/loggerT.js @@ -0,0 +1,51 @@ +const fs = require("fs") + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////// +////////// logs textuel +////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function saveLOGT(LOG) { + try { + let data = fs.readFileSync('logs/TEXT.txt', 'utf8'); + const log = data.split('\n'); + log.push(...LOG); + data = log.join('\n'); + fs.writeFileSync('logs/TEXT.txt', data); + } catch (err) { + console.log(err); + } +} + +module.exports = function loggT(msg) { + const config = require("./config.json"); + if (config.test == true) { + return + } + + if (!msg == "\n" || !msg == "\n\n") { + //*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/ TIME ///////////////////////////////////////////////////////////////////////////// + const d = new Date() + var jours = d.getDate().toString().padStart(2, "0") + var mois = d.getMonth().toString().padStart(2, "0") + var année = d.getFullYear().toString().padStart(2, "0") + var heures = d.getHours().toString().padStart(2, "0") + var minutes = d.getMinutes().toString().padStart(2, "0") + var secondes = d.getSeconds().toString().padStart(2, "0") + var milliseconds = d.getMilliseconds().toString().padStart(3, "0") + const time = ` ${jours}/${mois}/${année} =>> ${heures}h ${minutes}m ${secondes}s ${milliseconds}ms ` + //*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/ CODE DE LOG /////////////////////////////////////////////////////////////////////// + const text = msg + const MSG_T = `[TEXT] || ${time} || ${text}` + const LOG = []; + LOG.push(MSG_T); + saveLOGT(LOG); + } + else { + const MSG_T = `\n\n` + const LOG = []; + LOG.push(MSG_T); + saveLOGT(LOG); + } +} \ No newline at end of file diff --git a/logs/ERROR.txt b/logs/ERROR.txt new file mode 100644 index 0000000..b09261a --- /dev/null +++ b/logs/ERROR.txt @@ -0,0 +1,5 @@ + +[ERROR] || 20/051/2024 =>> 18h 37m 19s 514ms || TypeError: team.forEach is not a function +[ERROR] || 20/051/2024 =>> 18h 37m 19s 551ms || TypeError: team.forEach is not a function +[ERROR] || 20/051/2024 =>> 18h 37m 19s 628ms || TypeError: team.forEach is not a function +[ERROR] || 20/051/2024 =>> 18h 37m 19s 661ms || TypeError: team.forEach is not a function \ No newline at end of file diff --git a/logs/TEXT.txt b/logs/TEXT.txt new file mode 100644 index 0000000..13f7fa3 --- /dev/null +++ b/logs/TEXT.txt @@ -0,0 +1,26 @@ + +[TEXT] || 20/05/2024 =>> 18h 35m 54s 210ms || 5 events loaded +[TEXT] || 20/05/2024 =>> 18h 35m 54s 368ms || 63 commands loaded +[TEXT] || 20/05/2024 =>> 18h 35m 55s 676ms || [READY] Coins#9235 est prêt ||| 4 serveurs | 479 utilisateurs + +[TEXT] || 20/05/2024 =>> 18h 35m 55s 794ms || [READY] Coins#9235 est prêt ||| 4 serveurs | 479 utilisateurs + +[TEXT] || 20/05/2024 =>> 18h 36m 17s 490ms || 5 events loaded +[TEXT] || 20/05/2024 =>> 18h 36m 17s 606ms || 63 commands loaded +[TEXT] || 20/05/2024 =>> 18h 36m 19s 349ms || [READY] Coins#9235 est prêt ||| 4 serveurs | 479 utilisateurs + +[TEXT] || 20/05/2024 =>> 18h 36m 19s 504ms || [READY] Coins#9235 est prêt ||| 4 serveurs | 479 utilisateurs + +[TEXT] || 20/05/2024 =>> 18h 38m 05s 285ms || 5 events loaded +[TEXT] || 20/05/2024 =>> 18h 38m 05s 419ms || 63 commands loaded +[TEXT] || 20/05/2024 =>> 18h 38m 06s 748ms || [READY] Coins#9235 est prêt ||| 4 serveurs | 479 utilisateurs + +[TEXT] || 20/05/2024 =>> 18h 38m 06s 884ms || [READY] Coins#9235 est prêt ||| 4 serveurs | 479 utilisateurs + +[TEXT] || 20/05/2024 =>> 18h 38m 39s 660ms || [&] Serveur Bot Coins | .power.x | box +[TEXT] || 20/05/2024 =>> 18h 38m 39s 707ms || [&] Serveur Bot Coins | .power.x | box +[TEXT] || 21/05/2024 =>> 07h 17m 25s 282ms || 5 events loaded +[TEXT] || 21/05/2024 =>> 07h 17m 25s 369ms || 63 commands loaded +[TEXT] || 21/05/2024 =>> 07h 17m 26s 194ms || [READY] Coins#9235 est prêt ||| 4 serveurs | 479 utilisateurs + +[TEXT] || 21/05/2024 =>> 07h 17m 26s 280ms || [READY] Coins#9235 est prêt ||| 4 serveurs | 479 utilisateurs diff --git a/main.js b/main.js index e0047c7..644215c 100644 --- a/main.js +++ b/main.js @@ -4,6 +4,8 @@ const loadCommands = require("./fonctions/loadCommands"); const loadEvents = require("./fonctions/loadEvents"); const client = new Client({intents: new IntentsBitField(3276799)}); const color = require('colors') +var loggT = require('./loggerT.js'); +var loggE = require('./loggerE.js'); client.events = new Collection(); client.commands = new Collection(); @@ -11,5 +13,7 @@ client.config = require("./config.json"); console.log(`${loadEvents(client, '..\\events')} events loaded`.grey); console.log(`${loadCommands(client, '..\\commands')} commands loaded`.grey); +loggT(`${loadEvents(client, '..\\events')} events loaded`) +loggT(`${loadCommands(client, '..\\commands')} commands loaded`) client.login(process.env.TOKEN); \ No newline at end of file