mirror of
https://github.com/arthur-pbty/bot-discord-coins.git
synced 2026-06-03 15:07:20 +02:00
475 lines
15 KiB
JavaScript
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: [],
|
|
});
|
|
}
|
|
});
|
|
},
|
|
};
|