From 6e8e44924bb97b47601f580ce95400ce9c0b7251 Mon Sep 17 00:00:00 2001 From: *x1 Date: Tue, 18 Jun 2024 17:32:42 +0200 Subject: [PATCH] Add alliances sys (partit 3) --- commands/Alliance/Acreate.js | 141 ++++++++++++++++++++++++++++++++++ commands/Alliance/Adelete.js | 99 ++++++++++++++++++++++++ commands/Alliance/alliance.js | 66 ++++++++++++++++ commands/teams/team.js | 17 +++- 4 files changed, 322 insertions(+), 1 deletion(-) create mode 100644 commands/Alliance/Acreate.js create mode 100644 commands/Alliance/Adelete.js create mode 100644 commands/Alliance/alliance.js diff --git a/commands/Alliance/Acreate.js b/commands/Alliance/Acreate.js new file mode 100644 index 0000000..5fc5efc --- /dev/null +++ b/commands/Alliance/Acreate.js @@ -0,0 +1,141 @@ +const { EmbedBuilder } = require('discord.js'); +const embedColor = require('../../fonctions/embedColor.js'); +const db = require('../../fonctions/database.js'); + +let allianceName +let allianceDescription + +module.exports = { + aliases: ['alliancecreate'], + description: 'Crée une alliance.', + emote: '✒️', + utilisation: '', + permission: 0, + + async execute(message, args, client) { + 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.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 = allianceName.toLowerCase().replace('0', ''); + idBase = allianceName.toLowerCase().replace('1', ''); + idBase = allianceName.toLowerCase().replace('2', ''); + idBase = allianceName.toLowerCase().replace('3', ''); + idBase = allianceName.toLowerCase().replace('4', ''); + idBase = allianceName.toLowerCase().replace('5', ''); + idBase = allianceName.toLowerCase().replace('6', ''); + idBase = allianceName.toLowerCase().replace('7', ''); + idBase = allianceName.toLowerCase().replace('8', ''); + idBase = allianceName.toLowerCase().replace('9', ''); + + let id = idBase; + let increment = '-'; + 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 =+ '-'; + 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 allianceId = ? WHERE guildId = ? AND userId = ?`, [id, message.guild.id, message.author.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..8226565 --- /dev/null +++ b/commands/Alliance/Adelete.js @@ -0,0 +1,99 @@ +const { ButtonStyle, ButtonBuilder, ActionRowBuilder, EmbedBuilder } = require('discord.js'); +const db = require('../../fonctions/database.js'); +const embedColor = require('../../fonctions/embedColor.js'); + +module.exports = { + aliases: ['alliancedelete'], + description: 'Supprime votre alliance.', + emote: '🗑️', + util: '', + permission: 0, + + async execute(message, args, client) { + const alliance = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM alliance 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('🛡️ 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/alliance.js b/commands/Alliance/alliance.js new file mode 100644 index 0000000..03fdb86 --- /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.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.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\n**Reputation:** \`${alliance.reputation}\`\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/teams/team.js b/commands/teams/team.js index b6a8e0c..1a907bf 100644 --- a/commands/teams/team.js +++ b/commands/teams/team.js @@ -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); @@ -79,7 +94,7 @@ module.exports = { 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')}\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() });