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

289 lines
10 KiB
JavaScript

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])
*/
});
},
};