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

475 lines
15 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: [],
});
}
});
},
};