add gunfight commande

This commit is contained in:
arthur
2024-05-28 18:12:00 +02:00
parent 09232a9ccf
commit 2025657118
+315
View File
@@ -0,0 +1,315 @@
const { EmbedBuilder, ButtonStyle, ButtonBuilder, ActionRowBuilder } = require('discord.js');
const embedColor = require('../../fonctions/embedColor.js');
const db = require('../../fonctions/database.js');
module.exports = {
aliases: [],
description: 'Joue au gunfight.',
emote: '🔫',
utilisation: '<@membre> <mise>',
permission: 0,
async execute(message, args, client) {
let member;
let mise;
if (message.mentions.members.first()?.id && args.length === 1) {
member = message.mentions.members.first().id;
mise = args[0];
} else if (args.length === 2 && message.mentions.members.first()?.id) {
member = message.mentions.members.first()?.id;
mise = args[1];
} else if (args.length === 2) {
member = args[0];
mise = args[1];
} else {
return message.reply({ embeds: [
new EmbedBuilder()
.setTitle('🔫 Gunfight')
.setDescription(`Vous devez spécifier un membre et une mise. Exemple : \`&gunfight @membre 100\`.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
], allowedMentions: { repliedUser: false } })
}
if (!member || !mise) {
return message.reply({ embeds: [
new EmbedBuilder()
.setTitle('🔫 Gunfight')
.setDescription(`Vous devez spécifier un membre et une mise. Exemple : \`&gunfight @membre 100\`.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
], allowedMentions: { repliedUser: false } })
}
if (isNaN(mise)) {
return message.reply({ embeds: [
new EmbedBuilder()
.setTitle('🔫 Gunfight')
.setDescription(`La mise doit être un nombre.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
], allowedMentions: { repliedUser: false } })
}
if (mise < 25) {
return message.reply({ embeds: [
new EmbedBuilder()
.setTitle('🔫 Gunfight')
.setDescription(`La mise doit être supérieure ou égale à \`25\`.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
], allowedMentions: { repliedUser: false } })
}
if (member === message.author.id) {
return message.reply({ embeds: [
new EmbedBuilder()
.setTitle('🔫 Gunfight')
.setDescription(`Vous ne pouvez pas jouer contre vous-même.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
], allowedMentions: { repliedUser: false } })
}
if (member === client.user.id) {
return message.reply({ embeds: [
new EmbedBuilder()
.setTitle('🔫 Gunfight')
.setDescription(`Je ne peux pas jouer contre vous désolé.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
], allowedMentions: { repliedUser: false } })
}
if (client.users.cache.get(member)?.bot) {
return message.reply({ embeds: [
new EmbedBuilder()
.setTitle('🔫 Gunfight')
.setDescription('Vous ne pouvez pas jouer contre un bot.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
], allowedMentions: { repliedUser: false } })
}
const pocketUser = 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) {
resolve(row.pocket);
} else {
resolve(null);
}
}
});
});
const pocketMember = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE userId = ? AND guildId = ?`, [member, message.guild.id], (err, row) => {
if (err) {
reject(err);
} else {
if (row) {
resolve(row.pocket);
} else {
resolve(null);
}
}
});
});
if (pocketUser === null) {
return message.reply({ embeds: [
new EmbedBuilder()
.setTitle('🔫 Gunfight')
.setDescription(`Vous n'êtes pas enregistré dans la base de données.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
], allowedMentions: { repliedUser: false } })
}
if (pocketMember === null) {
return message.reply({ embeds: [
new EmbedBuilder()
.setTitle('🔫 Gunfight')
.setDescription(`Le membre spécifié n'existe pas.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
], allowedMentions: { repliedUser: false } })
}
if (pocketUser < mise) {
return message.reply({ embeds: [
new EmbedBuilder()
.setTitle('🔫 Gunfight')
.setDescription(`Vous n'avez pas assez d'argent sur vous pour miser cette somme.\nVotre solde actuel est de ${pocketUser} coins.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
], allowedMentions: { repliedUser: false } })
}
if (pocketMember < mise) {
return message.reply({ embeds: [
new EmbedBuilder()
.setTitle('🔫 Gunfight')
.setDescription(`Ce membre n'a pas assez d'argent sur lui pour miser cette somme.\nSon solde actuel est de ${pocketMember} coins.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
], allowedMentions: { repliedUser: false } })
}
if (pocketUser === 0) {
return message.reply({ embeds: [
new EmbedBuilder()
.setTitle('🔫 Gunfight')
.setDescription(`Vous n'avez pas d'argent sur vous pour miser.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
], allowedMentions: { repliedUser: false } })
}
if (pocketMember === 0) {
return message.reply({ embeds: [
new EmbedBuilder()
.setTitle('🔫 Gunfight')
.setDescription(`Ce membre n'a pas d'argent sur lui pour miser.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
], allowedMentions: { repliedUser: false } })
}
const embed = new EmbedBuilder()
.setTitle('🔫 Gunfight')
.setDescription(`Vous avez défié <@${member}> à un duel de gunfight pour une mise de ${mise} coins.\nVeuillez appuyer sur le bouton pour accepter ou refuser le défi.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
const buttonAccept = new ButtonBuilder()
.setCustomId('gunfight-accept')
.setLabel('Accepter')
.setStyle(ButtonStyle.Success);
const buttonRefuse = new ButtonBuilder()
.setCustomId('gunfight-refuse')
.setLabel('Refuser')
.setStyle(ButtonStyle.Danger);
const actionRow = new ActionRowBuilder()
.addComponents(buttonAccept, buttonRefuse);
const sendMessage = await message.reply({ embeds: [embed], components: [actionRow], allowedMentions: { repliedUser: false } });
const filter = i => i.user.id === member;
const collector = sendMessage.createMessageComponentCollector({ filter, time: 60000 });
collector.on('collect', async i => {
if (i.customId === 'gunfight-accept') {
collector.stop();
i.deferUpdate();
db.run(`UPDATE users SET pocket = pocket - ? WHERE userId = ? AND guildId = ?`, [mise, message.author.id, message.guild.id]);
db.run(`UPDATE users SET pocket = pocket - ? WHERE userId = ? AND guildId = ?`, [mise, member, message.guild.id]);
const tirerBtn = new ButtonBuilder()
.setCustomId('gunfight-tirer')
.setLabel('Tirer')
.setStyle(ButtonStyle.Danger);
const actionRow = new ActionRowBuilder()
.addComponents(tirerBtn);
sendMessage.edit({ embeds: [
new EmbedBuilder()
.setTitle('🔫 Gunfight')
.setDescription(`Le membre a accepté votre défi de gunfight. Le duel va commencer.\nAppuyez sur le bouton pour tirer quand il devient vert.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
], components: [actionRow] });
const timer = Math.floor(Math.random() * 10000) + 5000
let fincollector = false;
const filter = i => i.user.id === member || i.user.id === message.member.id;
const tirerCollector = sendMessage.createMessageComponentCollector({ filter, time: timer });
tirerCollector.on('collect', async i => {
if (i.customId === 'gunfight-tirer') {
fincollector = true;
tirerCollector.stop();
sendMessage.edit({ components: [] });
let winner;
let notwinner;
if (i.user.id === member) {
winner = member;
notwinner = message.author.id;
} else {
winner = message.author.id;
notwinner = member;
}
i.reply({ embeds: [
new EmbedBuilder()
.setTitle('🔫 Gunfight')
.setDescription(`Le duel est terminé. <@${winner}> a gagné la somme de ${mise*2} coins car <@${notwinner}> a tiré trop tôt`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
] });
db.run(`UPDATE users SET pocket = pocket + ? WHERE userId = ? AND guildId = ?`, [mise*2, winner, message.guild.id]);
}
});
tirerCollector.on('end', async () => {
if (fincollector) return;
tirerBtn.setStyle(ButtonStyle.Success);
sendMessage.edit({ components: [actionRow] });
const filter = i => i.user.id === member || i.user.id === message.member.id;
const tirerCollector = sendMessage.createMessageComponentCollector({ filter, time: 60000 });
tirerCollector.on('collect', async i => {
if (i.customId === 'gunfight-tirer') {
tirerCollector.stop();
sendMessage.edit({ components: [] });
i.reply({ embeds: [
new EmbedBuilder()
.setTitle('🔫 Gunfight')
.setDescription(`Le duel est terminé. <@${i.user.id}> a gagné la somme de ${mise*2} coins.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
] });
db.run(`UPDATE users SET pocket = pocket + ? WHERE userId = ? AND guildId = ?`, [mise*2, i.user.id, message.guild.id]);
return;
}
});
});
} else if (i.customId === 'gunfight-refuse') {
collector.stop();
sendMessage.edit({ embeds: [
new EmbedBuilder()
.setTitle('🔫 Gunfight')
.setDescription(`Le membre a refusé votre défi de gunfight.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
], components: [] });
}
});
}
};