Files
bot-discord-coins/commands/jobs/juge.js
T
2024-06-19 16:03:37 +02:00

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