Files
bot-discord-coins/commands/teams admin/tdelete.js
T
2024-06-24 00:32:05 +02:00

178 lines
5.8 KiB
JavaScript

const {
ButtonStyle,
ButtonBuilder,
ActionRowBuilder,
EmbedBuilder,
} = require("discord.js");
const db = require("../../fonctions/database.js");
const embedColor = require("../../fonctions/embedColor.js");
module.exports = {
aliases: ["teamdelete"],
description: "Supprime votre équipe.",
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);
},
);
});
if (!team) {
const embed = new EmbedBuilder()
.setTitle("🛡️ Suppression de l'équipe")
.setDescription("Vous n'êtes actuellement pas dans une é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 },
});
} else {
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 !== "owner") {
const embed = new EmbedBuilder()
.setTitle("Suppression Impossible")
.setDescription(
"❌ Vous n'avez pas la permission de supprimer cette é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 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'équipe")
.setDescription(
`Êtes-vous sûr de vouloir supprimer l'équipe ${team.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 teams WHERE guildId = ? AND id = ?`,
[message.guild.id, team.id],
async (err) => {
if (err) {
return i.update({
content:
"Une erreur est survenue lors de la suppression de l'équipe.",
components: [],
});
}
db.run(
`UPDATE users SET teamRole = NULL, teamId = NULL WHERE guildId = ? AND teamId = ?`,
[message.guild.id, team.id],
async (err) => {
if (err) {
return i.update({
content:
"Une erreur est survenue lors de la mise à jour des membres de l'équipe.",
components: [],
});
}
const embed = new EmbedBuilder()
.setTitle("🛡️ Suppression de l'équipe")
.setDescription(
`L'équipe ${team.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'équipe annulée.",
components: [],
});
}
});
collector.on("end", (collected) => {
if (collected.size === 0)
sentMessage.edit({
content: "Temps écoulé. Suppression de l'équipe annulée.",
components: [],
});
});
});
}
},
};