mirror of
https://github.com/arthur-pbty/bot-discord-coins.git
synced 2026-06-03 23:36:29 +02:00
add gunfight commande
This commit is contained in:
@@ -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: [] });
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user