Files
bot-discord-coins/commands/Alliance/Acreate.js
T
2024-06-24 00:32:05 +02:00

234 lines
8.6 KiB
JavaScript

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();
}
});
}
});
},
};