mirror of
https://github.com/arthur-pbty/bot-discord-coins.git
synced 2026-06-22 18:19:25 +02:00
315 lines
13 KiB
JavaScript
315 lines
13 KiB
JavaScript
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: [] });
|
|
}
|
|
});
|
|
}
|
|
}; |