add commands

This commit is contained in:
Arthur
2024-05-26 19:56:11 +02:00
committed by GitHub
parent 053edb4754
commit 25fd9a8a96
29 changed files with 2911 additions and 0 deletions
+151
View File
@@ -0,0 +1,151 @@
const { EmbedBuilder, StringSelectMenuBuilder, ActionRowBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: [],
description: 'Change la couleur de vos embed.',
emote: '🔵',
utilisation: '',
permission: 0,
async execute(message, args, client) {
const embed = new EmbedBuilder()
.setTitle('🔵 Embed')
.setDescription(`Sélectionnez une couleur pour vos embeds`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
const select = new StringSelectMenuBuilder()
.setCustomId('color')
.setPlaceholder('Sélectionnez une couleur')
.addOptions([
{
label: '🔴 Rouge',
description: 'Prix : 3 rep🔺',
value: 'red',
},
{
label: '🟠 Orange',
description: 'Prix : 3 rep🔺',
value: 'orange',
},
{
label: '🟡 Jaune',
description: 'Prix : 3 rep🔺',
value: 'yellow',
},
{
label: '🟢 Vert',
description: 'Prix : 3 rep🔺',
value: 'green',
},
{
label: '🔵 Bleu',
description: 'Prix : 3 rep🔺',
value: 'blue',
},
{
label: '🟣 Violet',
description: 'Prix : 3 rep🔺',
value: 'purple',
},
{
label: '🟤 Marron',
description: 'Prix : 3 rep🔺',
value: 'brown',
},
{
label: '⚫ Noir',
description: 'Prix : 3 rep🔺',
value: 'black',
},
{
label: '⚪ Blanc',
description: 'Prix : 3 rep🔺',
value: 'white',
},
{
label: 'Aléatoire 🌈',
description: 'Prix : 5 rep🔺',
value: 'random',
},
]);
const row = new ActionRowBuilder()
.addComponents(select);
const embedMessage = await message.reply({ embeds: [embed], components: [row], allowedMentions: { repliedUser: false } });
const filter = (interaction) => interaction.user.id === message.author.id;
const collector = embedMessage.createMessageComponentCollector({ filter, time: 60000 });
collector.on('collect', async (interaction) => {
if (interaction.isStringSelectMenu()) {
if (!client.user) return
const value = interaction.values[0];
const user = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
const reputation = user.reputation;
if (value === 'random') {
if (reputation < 5) {
const embed = new EmbedBuilder()
.setTitle('Erreur')
.setDescription('❌ Vous n\'avez pas assez de réputations pour acheter cette couleur.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return interaction.reply({ embeds: [embed], ephemeral: true, allowedMentions: { repliedUser: false } });
}
db.run(`UPDATE users SET reputation = reputation - 5, embed = 'random' WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err) => {
if (err) return console.error(err);
});
const embed = new EmbedBuilder()
.setTitle('🔵 Embed')
.setDescription('✅ Vous avez acheté la couleur aléatoire pour vos embeds.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
interaction.reply({ embeds: [embed], ephemeral: true, allowedMentions: { repliedUser: false } });
} else {
if (reputation < 3) {
const embed = new EmbedBuilder()
.setTitle('Erreur')
.setDescription('❌ Vous n\'avez pas assez de réputations pour acheter cette couleur.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return interaction.reply({ embeds: [embed], ephemeral: true, allowedMentions: { repliedUser: false } });
}
db.run(`UPDATE users SET reputation = reputation - 3, embed = ? WHERE guildId = ? AND userId = ?`, [value, message.guild.id, message.author.id], (err) => {
if (err) return console.error(err);
});
const embed = new EmbedBuilder()
.setTitle('🔵 Embed')
.setDescription(`✅ Vous avez acheté la couleur ${value} pour vos embeds.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
interaction.reply({ embeds: [embed], ephemeral: true, allowedMentions: { repliedUser: false } });
}
}
});
collector.on('end', async () => {
embedMessage.edit({ components: [] });
});
},
};
+23
View File
@@ -0,0 +1,23 @@
const { EmbedBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: ['shop', 'magasin', 'boutique', 'store'],
description: 'Affiche le shop du bot.',
emote: '🛍️',
utilisation: '',
permission: 0,
async execute(message, args, client) {
const embed = new EmbedBuilder()
.setTitle('🛍️ Shop')
.setThumbnail(message.guild.iconURL())
.setDescription(`Sélectionnez un item à acheter. Voici les items disponibles :\n\n> 🔒 AntiRob - Protège contre les vols pendant 2 heures - Prix : 2000 coins\n> 🔑 Clé - Permet d'ouvrir une boîte - Prix : 10000 coins\n> 🔫 [Job] Braqueur - Permet d'avoir accès à la commande &braquage - Prix : 15 réputations\n> 🔪 [Job] Killer - Permet d'avoir accès à la commande &kill - Prix : 13 réputations\n> 💻 [Job] Hacker - Permet d'avoir accès à la commande &hack - Prix : 11 réputations\n> ⚖️ [Job] Juge - Permet d'avoir accès à la commande &juge - Prix : 15 réputations`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
},
};
+163
View File
@@ -0,0 +1,163 @@
const { EmbedBuilder, ButtonStyle, ButtonBuilder, ActionRowBuilder } = require('discord.js');
const embedColor = require('../../fonctions/embedColor.js');
function commandsList (client, category) {
const casinoCommands = client.commands.filter(command => command.category === category).sort((a, b) => a.name.localeCompare(b.name));
const uniqueCommands = new Map();
casinoCommands.forEach(command => {
uniqueCommands.set(command.name, {description: command.description, emote: command.emote, utilisation: command.utilisation});
});
let commandsList = '';
uniqueCommands.forEach((command, name) => {
commandsList += `${command.emote} \`${name}${command.utilisation ? ' ' + command.utilisation : ''}\`\n${command.description}\n\n`;
});
return commandsList;
}
module.exports = {
aliases: ['h', 'aide'],
description: 'Affiche la liste des commandes disponibles',
emote: '📚',
utilisation: '[commande]',
permission: 0,
async execute(message, args, client) {
const embedPage1 = new EmbedBuilder()
.setTitle('📚 Information')
.setThumbnail(message.guild.iconURL())
.setDescription(`Voici le panel d'aide du bot. Pour plus d'informations sur une commande, utilisez &help <commande>\n\n> **🎙️ Récompenses vocales :**\n> Vous gagnez \`1500\` pièces toutes les 15 minutes lorsque vous êtes en vocal.\n> \n> **📺 Récompenses de streaming :**\n> Activer un stream vous fera gagner \`250\`.\n> \n> **📷 Récompenses de caméra :**\n> Activer votre caméra vous fera gagner \`250\`.\n\n> Le coins est une monnaie fictive.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Page 1/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
const leftButton = new ButtonBuilder()
.setCustomId('left')
.setLabel('◀')
.setStyle(ButtonStyle.Primary);
const rightButton = new ButtonBuilder()
.setCustomId('right')
.setLabel('▶')
.setStyle(ButtonStyle.Primary);
const row = new ActionRowBuilder()
.addComponents(leftButton, rightButton);
const messageEmbed = await message.reply({ embeds: [embedPage1], components: [row], allowedMentions: { repliedUser: false } });
const filter = i => i.user.id === message.author.id;
const collector = message.channel.createMessageComponentCollector({ filter, time: 60000 });
let page = 1;
collector.on('collect', async i => {
if (i.customId === 'left') {
page--;
if (page < 1) page = 10;
} else if (i.customId === 'right') {
page++;
if (page > 10) page = 1;
}
if (page === 1) {
i.update({ embeds: [embedPage1], components: [row] });
} else if (page === 2) {
const embedPage2 = new EmbedBuilder()
.setTitle('💰 Casino')
.setThumbnail(message.guild.iconURL())
.setDescription(commandsList(client, 'casino'))
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Page 2/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
i.update({ embeds: [embedPage2], components: [row], allowedMentions: { repliedUser: false } });
} else if (page === 3) {
const embedPage3 = new EmbedBuilder()
.setTitle('🎲 Jeux')
.setThumbnail(message.guild.iconURL())
.setDescription(commandsList(client, 'jeux'))
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Page 3/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
i.update({ embeds: [embedPage3], components: [row], allowedMentions: { repliedUser: false } });
} else if (page === 4) {
const embedPage4 = new EmbedBuilder()
.setTitle('🛍️ Achats')
.setThumbnail(message.guild.iconURL())
.setDescription(commandsList(client, 'achats'))
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Page 4/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
i.update({ embeds: [embedPage4], components: [row], allowedMentions: { repliedUser: false } });
} else if (page === 5) {
const embedPage5 = new EmbedBuilder()
.setTitle('🏭 Metier et capacité')
.setThumbnail(message.guild.iconURL())
.setDescription(`page 5`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Page 5/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
i.update({ embeds: [embedPage5], components: [row], allowedMentions: { repliedUser: false } });
} else if (page === 6) {
const embedPage6 = new EmbedBuilder()
.setTitle('🛡️ Teams')
.setThumbnail(message.guild.iconURL())
.setDescription(commandsList(client, 'teams'))
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Page 6/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
i.update({ embeds: [embedPage6], components: [row], allowedMentions: { repliedUser: false } });
} else if (page === 7) {
const embedPage7 = new EmbedBuilder()
.setTitle('💼 Teams 2')
.setThumbnail(message.guild.iconURL())
.setDescription(`page 7`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Page 7/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
i.update({ embeds: [embedPage7], components: [row], allowedMentions: { repliedUser: false } });
} else if (page === 8) {
const embedPage8 = new EmbedBuilder()
.setTitle('🤝 Alliance')
.setThumbnail(message.guild.iconURL())
.setDescription(`page 8`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Page 8/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
i.update({ embeds: [embedPage8], components: [row], allowedMentions: { repliedUser: false } });
} else if (page === 9) {
const embedPage9 = new EmbedBuilder()
.setTitle('👑 Gestion')
.setThumbnail(message.guild.iconURL())
.setDescription(commandsList(client, 'gestion'))
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Page 9/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
i.update({ embeds: [embedPage9], components: [row], allowedMentions: { repliedUser: false } });
} else if (page === 10) {
const embedPage10 = new EmbedBuilder()
.setTitle('👑 Bot control')
.setThumbnail(message.guild.iconURL())
.setDescription(commandsList(client, 'bot control'))
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Page 10/10 | Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
i.update({ embeds: [embedPage10], components: [row], allowedMentions: { repliedUser: false } });
}
});
collector.on('end', () => {
messageEmbed.edit({ components: [], allowedMentions: { repliedUser: false } })
});
}
};
+38
View File
@@ -0,0 +1,38 @@
const { ButtonStyle, ButtonBuilder, ActionRowBuilder } = require('discord.js');
module.exports = {
aliases: ['latence'],
description: 'Avoir la latence du bot.',
emote: '⏱️',
utilisation: '',
permission: 0,
async execute(message, args, client) {
const ping = new ButtonBuilder()
.setCustomId('confirm')
.setLabel('🔄')
.setStyle(ButtonStyle.Primary);
const row = new ActionRowBuilder()
.addComponents(ping);
const sentMessage = await message.reply({
content: `La latence est de : ${client.ws.ping}`,
components: [row],
});
const filter = i => i.customId === 'confirm' && i.user.id === message.author.id;
const collector = sentMessage.createMessageComponentCollector({ filter, time: 15000 })
collector.on('collect', async (interaction) => {
sentMessage.edit({
content: `La latence est de : ${client.ws.ping}`,
components: [row],
});
interaction.reply({ content: 'La latence a été rafraichie', ephemeral: true, allowedMentions: { repliedUser: false } });
});
collector.on('end', () => {
sentMessage.edit({ components: [] });
});
}
};
+47
View File
@@ -0,0 +1,47 @@
const { EmbedBuilder, ButtonStyle, ButtonBuilder, ActionRowBuilder } = require('discord.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: ['srvs'],
description: 'Affiche la liste des serveurs où le bot est présent',
emote: '🌐',
utilisation: '',
permission: 10,
async execute(message, args, client) {
const embed = new EmbedBuilder()
.setTitle('Liste des serveurs')
.setDescription(client.guilds.cache.map(guild => `${guild.name} (ID: ${guild.id})`).join('\n'))
.setColor(await embedColor(message.author.id, message.guild.id));
const ping = new ButtonBuilder()
.setCustomId('confirm')
.setLabel('🔄')
.setStyle(ButtonStyle.Primary);
const row = new ActionRowBuilder()
.addComponents(ping);
const sentMessage = await message.reply({
embeds: [embed],
components: [row],
allowedMentions: { repliedUser: false }
});
const filter = i => i.customId === 'confirm' && i.user.id === message.author.id;
const collector = sentMessage.createMessageComponentCollector({ filter, time: 60000 });
collector.on('collect', async (interaction) => {
embed.setDescription(client.guilds.cache.map(guild => `${guild.name} (ID: ${guild.id})`).join('\n'));
sentMessage.edit({
embeds: [embed],
components: [row],
});
interaction.reply({ content: 'La liste des serveurs a été rafraichie', ephemeral: true });
});
collector.on('end', () => {
sentMessage.edit({ components: [] });
});
}
};
+33
View File
@@ -0,0 +1,33 @@
const { EmbedBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: ['coin', 'money', 'balance', 'bal', 'wallet', 'cash'],
description: 'Affiche le solde d\'un compte.',
emote: '💵',
utilisation: '[@membre]',
permission: 0,
async execute(message, args, client) {
const member = message.mentions.members.first() || message.member;
const user = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, member.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
const pocket = user.pocket
const bank = user.bank
const reputation = user.reputation
const embed = new EmbedBuilder()
.setAuthor({ name: `Détails du Compte de ${member.user.tag}`, iconURL: member.user.displayAvatarURL() })
.setDescription(`> :moneybag: Poche ${pocket}\n> :bank: Banque ${bank}\n> :star2: Réputation ${reputation}`)
.setColor(await embedColor(member.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
},
};
+70
View File
@@ -0,0 +1,70 @@
const { EmbedBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: ['dy'],
description: 'Récupère ton argent quotidien.',
emote: '🎁',
utilisation: '',
permission: 0,
async execute(message, args, client) {
const user = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
const lastDaily = user.lastDaily
const pocket = user.pocket
if (lastDaily > Date.now() - 86400000) {
const embed = new EmbedBuilder()
.setTitle('Argent Impossible')
.setDescription(`❌ Vous avez déjà récupèré votre argent quotidien récemment. Veuillez attendre ${Math.floor((lastDaily + 86400000 - Date.now()) / 60000)} minutes avant de pouvoir travailler à nouveau.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
}
const randomAmount = Math.floor(Math.random() * (500 - 100 + 1) + 100);
db.run(`UPDATE users SET pocket = ?, lastDaily = ? WHERE guildId = ? AND userId = ?`, [pocket + randomAmount, Date.now(), message.guild.id, message.author.id]);
const dailys = [
`🌅 Vous vous êtes réveillé tôt ce matin et avez trouvé ${randomAmount} coins sous votre oreiller.`,
`🍳 Vous avez préparé un délicieux petit-déjeuner et avez été récompensé par ${randomAmount} coins pour votre talent culinaire.`,
`☀️ En partant pour une promenade matinale, vous avez découvert ${randomAmount} coins brillant sous le soleil levant.`,
`🌸 Vous avez aidé à planter de nouvelles fleurs dans le jardin du village et avez reçu ${randomAmount} coins pour votre contribution.`,
`🐦 Vous avez nourri les oiseaux dans le parc et avez trouvé ${randomAmount} coins cachés parmi les graines.`,
`📚 Après avoir lu un livre inspirant, vous avez été inspiré à démarrer votre journée avec ${randomAmount} coins d'idées nouvelles.`,
`🌱 Vous avez planté un arbre pour marquer le début de la journée et avez été récompensé par ${randomAmount} coins pour votre action écologique.`,
`🚴 Vous avez fait une balade à vélo matinale et avez découvert ${randomAmount} coins sur le bord du chemin.`,
`🌞 Vous avez salué le lever du soleil avec une méditation paisible et avez trouvé ${randomAmount} coins cachés dans votre esprit calme.`,
`🌳 En ramassant des déchets dans le parc, vous avez trouvé ${randomAmount} coins comme récompense pour garder l'environnement propre.`,
`🎨 Vous avez commencé la journée avec une séance de peinture et avez vendu votre première toile pour ${randomAmount} coins.`,
`🐶 Vous avez promené le chien du voisin et avez été surpris avec ${randomAmount} coins comme remerciement.`,
`📝 Vous avez tenu un journal de gratitude pour votre routine matinale et avez été récompensé par ${randomAmount} coins pour chaque moment apprécié.`,
`🏃‍♂️ Vous avez fait une course matinale et avez découvert ${randomAmount} coins le long du parcours.`,
`☕ Après avoir préparé un café revigorant, vous avez trouvé ${randomAmount} coins au fond de votre tasse.`,
`🌻 Vous avez cultivé votre jardin et avez récolté ${randomAmount} coins en légumes frais pour le petit-déjeuner.`,
`🎶 Vous avez écouté votre chanson préférée pour commencer la journée et avez été récompensé par ${randomAmount} coins pour votre bon goût musical.`,
`🌈 Vous avez commencé la journée avec une séance de yoga revitalisante et avez trouvé ${randomAmount} coins dans la position du lotus.`,
`💌 Vous avez envoyé des messages de bonnes nouvelles à vos proches et avez été récompensé par ${randomAmount} coins pour répandre la joie.`,
`💻 Vous avez commencé votre journée de travail avec détermination et avez trouvé ${randomAmount} coins cachés dans votre boîte de réception.`,
];
const embed = new EmbedBuilder()
.setTitle('Argent Récupéré')
.setDescription(dailys[Math.floor(Math.random() * dailys.length)])
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
},
};
+58
View File
@@ -0,0 +1,58 @@
const { EmbedBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: ['dep', 'depot'],
description: 'Dépose de l\'argent dans votre compte en banque.',
emote: '💰',
utilisation: '<montant|all>',
permission: 0,
async execute(message, args, client) {
const user = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
const pocket = user.pocket
const bank = user.bank
let title = 'Dépôt Impossible'
let description = ''
if (args.length === 0) {
description = '❌ Vous devez spécifier un montant à déposer.'
} else if (args[0] === 'all') {
if (pocket <= 0) {
description = '❌ Vous n\'avez pas d\'argent à déposer.'
} else {
title = 'Dépôt Réussi'
description = `💰 Vous avez déposé ${pocket} coins dans votre compte en banque.`
db.run(`UPDATE users SET pocket = ?, bank = ? WHERE guildId = ? AND userId = ?`, [0, pocket + bank, message.guild.id, message.author.id]);
}
} else if (isNaN(args[0])) {
description = '❌ Vous devez spécifier un montant valide à déposer.'
} else if (pocket <= 0) {
description = '❌ Vous n\'avez pas d\'argent à déposer.'
} else if (parseInt(args[0]) > pocket) {
description = '❌ Vous n\'avez pas assez d\'argent pour déposer cette somme.'
} else if (parseInt(args[0]) <= 0) {
description = '❌ Vous ne pouvez pas deposer une somme négative ou nulle.';
} else {
title = 'Dépôt Réussi'
description = `💰 Vous avez déposé ${args[0]} coins dans votre compte en banque.`
db.run(`UPDATE users SET pocket = ?, bank = ? WHERE guildId = ? AND userId = ?`, [pocket - parseInt(args[0]), bank + parseInt(args[0]), message.guild.id, message.author.id]);
}
const embed = new EmbedBuilder()
.setTitle(title)
.setDescription(description)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
},
};
+98
View File
@@ -0,0 +1,98 @@
const { EmbedBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: [],
description: 'Paye un membre de votre serveur.',
emote: '💳',
utilisation: '<montant> <@membre>',
permission: 0,
async execute(message, args, client) {
let amount;
const member = message.mentions.members.first();
const user = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
const pocket = user.pocket;
if (!member) {
const embed = new EmbedBuilder()
.setTitle('Erreur')
.setDescription('❌ Veuillez mentionner un membre du serveur.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
}
if (!args[0]) {
const embed = new EmbedBuilder()
.setTitle('Erreur')
.setDescription('❌ Veuillez spécifier un montant à payer.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed] });
} else if (args[0] === 'all') {
amount = pocket;
} else if (isNaN(args[0])) {
const embed = new EmbedBuilder()
.setTitle('Erreur')
.setDescription('❌ Veuillez spécifier un montant valide.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed] });
} else if (args[0] <= 0) {
const embed = new EmbedBuilder()
.setTitle('Erreur')
.setDescription('❌ Veuillez spécifier un montant supérieur à 0.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed] });
} else if (args[0] > pocket) {
const embed = new EmbedBuilder()
.setTitle('Erreur')
.setDescription('❌ Vous n\'avez pas assez d\'argent pour effectuer cette transaction.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed] });
} else if (!Number.isInteger(Number(args[0]))) {
const embed = new EmbedBuilder()
.setTitle('Erreur')
.setDescription('❌ Veuillez spécifier un montant entier.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
} else {
amount = args[0];
}
db.run(`UPDATE users SET pocket = pocket - ? WHERE guildId = ? AND userId = ?`, [amount, message.guild.id, message.author.id]);
db.run(`UPDATE users SET pocket = pocket + ? WHERE guildId = ? AND userId = ?`, [amount, message.guild.id, member.id]);
const embed = new EmbedBuilder()
.setTitle('Paiement')
.setDescription(`💰 Vous avez payé ${amount} à ${member.user.tag}.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
},
};
+87
View File
@@ -0,0 +1,87 @@
const { EmbedBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: [],
description: 'Vol de l\'argent a un membre.',
emote: '🦹',
utilisation: '<@membre>',
permission: 0,
async execute(message, args, client) {
const member = message.mentions.users.first();
if (!member) {
const embed = new EmbedBuilder()
.setTitle('Erreur')
.setDescription('❌ Vous devez mentionner un membre.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
}
const user = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
if (user.lastRob + 7200000 > Date.now()) {
const embed = new EmbedBuilder()
.setTitle('Erreur')
.setDescription(`❌ Vous devez encore attendre ${Math.floor((user.lastRob + 7200000 - Date.now()) / 60000)} minutes avant de pouvoir voler à nouveau.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
}
const memberInfo = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, member.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
if (memberInfo.antiRob + 7200000 > Date.now()) {
const embed = new EmbedBuilder()
.setTitle('Erreur')
.setDescription(`❌ Vous ne pouvez pas voler <@${member.id}> pour le moment, il est protégé par un bouclier anti-vol pendant encore ${Math.floor((memberInfo.antiRob + 7200000 - Date.now()) / 60000)} minutes.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
}
const memberPocket = memberInfo.pocket;
if (memberPocket <= 0) {
const embed = new EmbedBuilder()
.setTitle('Erreur')
.setDescription(`❌ <@${member.id}> n'a pas d'argent sur lui pour que vous puissiez le voler.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
}
const amount = Math.floor(Math.random() * memberPocket) + 1;
db.run(`UPDATE users SET pocket = pocket - ? WHERE guildId = ? AND userId = ?`, [amount, message.guild.id, member.id]);
db.run(`UPDATE users SET pocket = pocket + ?, lastRob = ? WHERE guildId = ? AND userId = ?`, [amount, Date.now(), message.guild.id, message.author.id]);
const embed = new EmbedBuilder()
.setTitle('Vol')
.setDescription(`💰 Vous avez volé ${amount} à <@${member.id}>.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
},
};
+110
View File
@@ -0,0 +1,110 @@
const { EmbedBuilder, ActionRowBuilder, StringSelectMenuBuilder, StringSelectMenuOptionBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: ['leaderboard', 'lb'],
description: 'Affiche le top 10 des membres du serveur',
emote: '🏆',
utilisation: '[pocket|bank|reputation]',
permission: 0,
async execute(message, args, client) {
let type = 'bank';
let emote = ':bank:';
if (args[0] ==='pocket') {
type = args[0]
emote = ':moneybag:';
} else if (args[0] === 'reputation') {
type = args[0]
emote = ':star2:';
} else if (args[0] && args[0] !== 'bank') {
const embed = new EmbedBuilder()
.setTitle('Erreur')
.setDescription('❌ Veuillez spécifier un type de leaderboard valide: `pocket`, `bank` ou `reputation`')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } })
}
const [embed, row] = await leaderboard(message, type);
const replyMessage = await message.reply({ embeds: [embed], components: [row] });
client.on('interactionCreate', async (interaction) => {
if (!interaction.isStringSelectMenu()) return;
if (interaction.customId === 'topLeaderboard') {
const selected = interaction.values[0];
await interaction.deferUpdate();
const [embed, row] = await leaderboard(message, selected);
replyMessage.edit({ embeds: [embed], components: [row] });
interaction.followUp({ content: `Leaderboard mis à jour en fonction de \`${selected}\``, ephemeral: true });
}
});
},
};
async function leaderboard(message, type) {
const topUsers = await new Promise((resolve, reject) => {
db.all(`SELECT * FROM users WHERE guildId = ? ORDER BY ${type} DESC LIMIT 10`, [message.guild.id], (err, rows) => {
if (err) reject(err);
resolve(rows);
});
});
let emote = ':bank:';
if (type === 'pocket') {
emote = ':moneybag:';
} else if (type === 'reputation') {
emote = ':star2:';
}
const description = topUsers.map((user, index) => {
let place;
if (index === 0) {
place = ':first_place:';
} else if (index === 1) {
place = ':second_place:';
} else if (index === 2) {
place = ':third_place:';
} else {
place = `${index + 1}.`;
}
return `${place} <@${user.userId}> - \`${user[type]}\` ${emote}`;
});
const embed = new EmbedBuilder()
.setAuthor({ name: `Top 10 des Membres de ${message.guild.name} en ${type}`, iconURL: message.guild.iconURL() })
.setDescription(description.join('\n\n'))
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
const select = new StringSelectMenuBuilder()
.setCustomId('topLeaderboard')
.setPlaceholder('Choisissez un type de leaderboard')
.addOptions(
new StringSelectMenuOptionBuilder()
.setLabel('Pocket')
.setDescription('Affiche le top en fonction de leur argent de poche')
.setValue('pocket'),
new StringSelectMenuOptionBuilder()
.setLabel('Bank')
.setDescription('Affiche le top en fonction de leur argent en banque')
.setValue('bank'),
new StringSelectMenuOptionBuilder()
.setLabel('Reputation')
.setDescription('Affiche le top en fonction de leur réputation')
.setValue('reputation')
);
const row = new ActionRowBuilder()
.addComponents(select);
return [embed, row];
}
+58
View File
@@ -0,0 +1,58 @@
const { EmbedBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: ['ret', 'retrait', 'with', 'withdraw', 'wd', 'take', 'wh'],
description: 'Retire de l\'argent de votre compte en banque.',
emote: '🏦',
utilisation: '<montant|all>',
permission: 0,
async execute(message, args, client) {
const user = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
const pocket = user.pocket;
const bank = user.bank;
let title = 'Retrait Impossible';
let description = '';
if (args.length === 0) {
description = '❌ Vous devez spécifier un montant à retirer.';
} else if (args[0] === 'all') {
if (bank <= 0) {
description = '❌ Vous n\'avez pas d\'argent à retirer de votre compte en banque.';
} else {
title = 'Retrait Réussi';
description = `🏦 Vous avez retiré ${bank} coins de votre compte en banque.`;
db.run(`UPDATE users SET pocket = ?, bank = ? WHERE guildId = ? AND userId = ?`, [pocket + bank, 0, message.guild.id, message.author.id]);
}
} else if (isNaN(args[0])) {
description = '❌ Vous devez spécifier un montant valide à retirer.';
} else if (bank <= 0) {
description = '❌ Vous n\'avez pas d\'argent à retirer.'
} else if (parseInt(args[0]) > bank) {
description = '❌ Vous n\'avez pas assez d\'argent dans votre compte en banque pour retirer cette somme.';
} else if (parseInt(args[0]) <= 0) {
description = '❌ Vous ne pouvez pas retirer une somme négative ou nulle.';
} else {
title = 'Retrait Réussi';
description = `🏦 Vous avez retiré ${args[0]} coins de votre compte en banque.`;
db.run(`UPDATE users SET pocket = ?, bank = ? WHERE guildId = ? AND userId = ?`, [pocket + parseInt(args[0]), bank - parseInt(args[0]), message.guild.id, message.author.id]);
}
const embed = new EmbedBuilder()
.setTitle(title)
.setDescription(description)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
},
};
+84
View File
@@ -0,0 +1,84 @@
const { EmbedBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: ['wk', 'travail'],
description: 'Travaillez pour gagner de l\'argent.',
emote: '💼',
utilisation: '',
permission: 0,
async execute(message, args, client) {
const user = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
const lastWork = user.lastWork
const pocket = user.pocket
if (lastWork > Date.now() - 3600000) {
const embed = new EmbedBuilder()
.setTitle('Travail Impossible')
.setDescription(`❌ Vous avez déjà travaillé récemment. Veuillez attendre ${Math.floor((lastWork + 3600000 - Date.now()) / 60000)} minutes avant de pouvoir travailler à nouveau.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
}
const randomAmount = Math.floor(Math.random() * (500 - 100 + 1) + 100);
db.run(`UPDATE users SET pocket = ?, lastWork = ? WHERE guildId = ? AND userId = ?`, [pocket + randomAmount, Date.now(), message.guild.id, message.author.id]);
const works = [
`💼 Vous avez exploré une ancienne ruine et avez trouvé ${randomAmount} coins.`,
`🛠️ Vous avez aidé un marchand à réparer son chariot et il vous a donné ${randomAmount} coins en remerciement.`,
`🌳 En chassant dans la forêt, vous avez découvert un trésor caché contenant ${randomAmount} coins.`,
`🔍 Après avoir résolu une énigme antique, vous avez reçu ${randomAmount} coins comme récompense.`,
`🧪 Vous avez vendu des potions magiques sur le marché et avez gagné ${randomAmount} coins.`,
`🕵️ En explorant une grotte sombre, vous avez trouvé ${randomAmount} coins dissimulés dans un coffre.`,
`🐉 Après avoir vaincu un dragon, vous avez récupéré ${randomAmount} coins dans son repaire.`,
`🏆 Vous avez participé à un tournoi de chevalerie et avez remporté ${randomAmount} coins en prix.`,
`🗺️ En aidant un groupe de voyageurs perdus à retrouver leur chemin, vous avez reçu ${randomAmount} coins.`,
`🔎 Après avoir résolu un mystère criminel, vous avez été récompensé par ${randomAmount} coins par la ville.`,
`⚓ Vous avez navigué sur les mers et avez trouvé ${randomAmount} coins dans une épave.`,
`⛏️ En explorant les catacombes, vous avez découvert ${randomAmount} coins enfouis dans le sol.`,
`🌉 Après avoir construit un pont pour la communauté, vous avez reçu ${randomAmount} coins comme gratitude.`,
`🦅 Vous avez réussi à apprivoiser un griffon et avez reçu ${randomAmount} coins en récompense.`,
`⛏️ En découvrant une mine abandonnée, vous avez extrait ${randomAmount} coins de minerai précieux.`,
`🏹 Vous avez secouru un groupe de voyageurs attaqués par des brigands et avez reçu ${randomAmount} coins comme reconnaissance.`,
`📚 En explorant une ancienne bibliothèque abandonnée, vous avez trouvé ${randomAmount} coins cachés dans un vieux livre.`,
`🏹 Après avoir participé à une compétition de tir à l'arc, vous avez remporté ${randomAmount} coins en prix.`,
`😺 Vous avez sauvé un chaton coincé dans un arbre et son propriétaire vous a donné ${randomAmount} coins en guise de remerciement.`,
`🕊️ En réussissant à apaiser une querelle entre deux factions rivales, vous avez été récompensé par ${randomAmount} coins.`,
`🌊 Vous avez découvert un trésor antique dans les profondeurs de la mer et avez récupéré ${randomAmount} coins.`,
`🏫 Après avoir construit une école pour les enfants du village, vous avez reçu ${randomAmount} coins de la part des parents reconnaissants.`,
`👮 Vous avez capturé un voleur recherché et avez été récompensé par ${randomAmount} coins par les autorités locales.`,
`🏞️ En explorant une caverne mystérieuse, vous avez trouvé ${randomAmount} coins dissimulés derrière une cascade.`,
`🔨 Après avoir prêté main-forte à un forgeron pour créer une armure, vous avez été payé ${randomAmount} coins pour votre travail.`,
`🏛️ Vous avez découvert un artefact magique dans les ruines d'un temple ancien et l'avez échangé contre ${randomAmount} coins.`,
`🚶 En offrant vos services en tant que guide à des voyageurs perdus, vous avez gagné ${randomAmount} coins pour les ramener en sécurité.`,
`🔥 Après avoir éteint un incendie qui menaçait le village, vous avez été récompensé par ${randomAmount} coins par les habitants reconnaissants.`,
`🎉 Vous avez organisé un festival annuel pour célébrer la récolte et avez collecté ${randomAmount} coins en dons des participants.`,
`🐉 En sauvant un noble des griffes d'une bête féroce, vous avez été généreusement récompensé par ${randomAmount} coins et des terres.`,
`🏰 Après avoir découvert un passage secret dans le château du roi, vous avez trouvé ${randomAmount} coins cachés dans un coffre-fort.`,
`👨‍👩‍👧‍👦 Vous avez résolu un conflit familial ancien et avez reçu ${randomAmount} coins en récompense de votre médiation.`,
`⛏️ En explorant les montagnes, vous avez trouvé une mine abandonnée remplie de ${randomAmount} coins de minerai précieux.`,
`📜 Après avoir livré un message crucial à temps, vous avez été payé ${randomAmount} coins par le destinataire reconnaissant.`,
`🤝 Vous avez négocié un accord commercial fructueux entre deux cités et avez reçu ${randomAmount} coins comme commission.`,
];
const embed = new EmbedBuilder()
.setTitle('Travail Terminé')
.setDescription(works[Math.floor(Math.random() * works.length)])
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
},
};
+51
View File
@@ -0,0 +1,51 @@
const { EmbedBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: [],
description: 'Ajoute de l\'argent de votre compte en banque ou de votre poche ou de votre réputation.',
emote: '💰',
utilisation: '<montant> <pocket|bank|reputation> [@membre]',
permission: 10,
async execute(message, args, client) {
const user = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
let member = message.author;
let title = 'Ajout d\'argent';
let description = `💰 Vous avez ajouté ${args[0]} à votre ${args[1]}.`;
if (isNaN(args[0])) {
title = 'Erreur';
description = '❌ Veuillez entrer un montant valide.';
} else if (args[0] <= 0) {
title = 'Erreur';
description = '❌ Veuillez entrer un montant supérieur à 0.';
} else if (args[1] !== 'pocket' && args[1] !== 'bank' && args[1] !== 'reputation') {
title = 'Erreur';
description = '❌ Veuillez entrer une destination valide (pocket, bank, reputation).';
} else if (message.mentions.users.first()) {
member = message.mentions.users.first();
description = `💰 Vous avez ajouté ${args[0]} à la ${args[1]} de ${member.tag}.`;
}
const embed = new EmbedBuilder()
.setTitle(title)
.setDescription(description)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
if (title !== 'Erreur') {
db.run(`UPDATE users SET ${args[1]} = ${args[1]} + ? WHERE guildId = ? AND userId = ?`, [args[0], message.guild.id, member.id]);
}
message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
},
};
+51
View File
@@ -0,0 +1,51 @@
const { EmbedBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: [],
description: 'Retire de l\'argent de votre compte en banque ou de votre poche ou de votre réputation.',
emote: '💰',
utilisation: '<montant> <pocket|bank|reputation> [@membre]',
permission: 10,
async execute(message, args, client) {
const user = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
let member = message.author;
let title = 'Argent retiré';
let description = `💰 Vous avez retiré ${args[0]} à votre ${args[1]}.`;
if (isNaN(args[0])) {
title = 'Erreur';
description = '❌ Veuillez entrer un montant valide.';
} else if (args[0] <= 0) {
title = 'Erreur';
description = '❌ Veuillez entrer un montant supérieur à 0.';
} else if (args[1] !== 'pocket' && args[1] !== 'bank' && args[1] !== 'reputation') {
title = 'Erreur';
description = '❌ Veuillez entrer une destination valide (pocket, bank, reputation).';
} else if (message.mentions.users.first()) {
member = message.mentions.users.first();
description = `💰 Vous avez retiré ${args[0]} à la ${args[1]} de ${member.tag}.`;
}
const embed = new EmbedBuilder()
.setTitle(title)
.setDescription(description)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
if (title !== 'Erreur') {
db.run(`UPDATE users SET ${args[1]} = ${args[1]} - ? WHERE guildId = ? AND userId = ?`, [args[0], message.guild.id, member.id]);
}
message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
},
};
+366
View File
@@ -0,0 +1,366 @@
const { EmbedBuilder, ButtonStyle, ButtonBuilder, ActionRowBuilder } = require('discord.js');
const embedColor = require('../../fonctions/embedColor.js');
const db = require('../../fonctions/database.js');
const cardValues = {
'A': 11, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '10': 10, 'J': 10, 'Q': 10, 'K': 10
};
const cardSymbols = ['♠️', '♥️', '♦️', '♣️'];
const usersWithGameInProgress = new Map();
setInterval(() => {
usersWithGameInProgress.clear();
}, 180000);
function drawCard() {
const symbol = cardSymbols[Math.floor(Math.random() * cardSymbols.length)];
const value = Object.keys(cardValues)[Math.floor(Math.random() * Object.keys(cardValues).length)];
return { symbol, value };
}
module.exports = {
aliases: ['bj'],
description: 'Joue au blackjack.',
emote: '🃏',
utilisation: '<mise>',
permission: 0,
async execute(message, args, client) {
if (args.length !== 1) {
embedColor(message.author.id, message.guild.id).then(color => {
const embed = new EmbedBuilder()
.setTitle('🃏 Blackjack')
.setDescription(`Vous devez spécifier une mise. Exemple : \`&blackjack 100\`.`)
.setColor(color)
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } })
});
} else if (isNaN(args[0])) {
embedColor(message.author.id, message.guild.id).then(color => {
const embed = new EmbedBuilder()
.setTitle('🃏 Blackjack')
.setDescription(`La mise doit être un nombre.`)
.setColor(color)
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } })
});
} else if (args[0] < 25) {
embedColor(message.author.id, message.guild.id).then(color => {
const embed = new EmbedBuilder()
.setTitle('🃏 Blackjack')
.setDescription(`La mise doit être supérieure ou égale à \`25\`.`)
.setColor(color)
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } })
});
}
const pocket = await new Promise((resolve, reject) => {
db.get(`SELECT pocket FROM users WHERE userId = ? AND guildId = ?`, [message.author.id, message.guild.id], (err, row) => {
if (err) {
reject(err);
} else {
resolve(row.pocket);
}
});
});
if (pocket < args[0]) {
embedColor(message.author.id, message.guild.id).then(color => {
const embed = new EmbedBuilder()
.setTitle('🃏 Blackjack')
.setDescription(`Vous n'avez pas assez d'argent pour miser cette somme.`)
.setColor(color)
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } })
});
} else {
const user = message.author;
const guildId = message.guild.id;
const currencyName = 'coins'
let amount = args[0];
let pocketAmount = await new Promise((resolve, reject) => {
db.get(`SELECT pocket FROM users WHERE userId = ? AND guildId = ?`, [message.author.id, message.guild.id], (err, row) => {
if (err) {
reject(err);
} else {
resolve(row.pocket || 0);
}
});
});
const playerCards = [drawCard(), drawCard()];
const dealerCards = [drawCard()];
const playerTotal = playerCards.reduce((total, card) => total + cardValues[card.value], 0);
if (playerTotal === 21 && playerCards.length === 2) {
const blackjackPayoutMultiplier = 1.25;
const winnings = Math.floor(amount * blackjackPayoutMultiplier);
let pocketAmount = await new Promise((resolve, reject) => {
db.get(`SELECT pocket FROM users WHERE userId = ? AND guildId = ?`, [message.author.id, message.guild.id], (err, row) => {
if (err) {
reject(err);
} else {
resolve(row.pocket || 0);
}
});
});
await new Promise((resolve, reject) => {
db.run(`UPDATE users SET pocket = ? WHERE userId = ? AND guildId = ?`, [pocketAmount + winnings, message.author.id, message.guild.id], (err) => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
const winEmbed = new EmbedBuilder()
.setTitle('Blackjack 🎲')
.setDescription(`Félicitations ! Vous avez un blackjack naturel et vous avez gagné ${winnings} ${currencyName}.`)
.setColor('#0099ff');
return message.reply({ embeds: [winEmbed], allowedMentions: { repliedUser: false } });
}
const embed = new EmbedBuilder()
.setTitle('Blackjack 🎲')
.setThumbnail('https://cdn.discordapp.com/attachments/1120446538544595005/1190016467257802843/kumarhane-poker.gif?ex=65a04433&is=658dcf33&hm=3ea3b7c74eb724d17249e3a60968f8c10b7d85452f3684b969a02a17ca79ab3e&')
.addFields(
{ name: 'Votre main', value: `Cartes: ${playerCards.map(card => card.symbol + ' ' + card.value).join(' ')}\nTotal: ${playerTotal}`, inline: true },
{ name: 'Main du croupier', value: `Cartes: ${dealerCards[0].symbol + ' ' + dealerCards[0].value} ?\nTotal: ?`, inline: true }
)
.setColor('#0099ff');
const row = new ActionRowBuilder()
.addComponents(
new ButtonBuilder()
.setCustomId('blackjack_hit')
.setLabel('Hit')
.setStyle(ButtonStyle.Primary),
new ButtonBuilder()
.setCustomId('blackjack_stand')
.setLabel('Stand')
.setStyle(ButtonStyle.Primary),
new ButtonBuilder()
.setCustomId('blackjack_cancel')
.setLabel('Annuler')
.setStyle(ButtonStyle.Danger)
);
const msg = await message.channel.send({ embeds: [embed], components: [row], allowedMentions: { repliedUser: false } });
const collector = msg.createMessageComponentCollector({time: 60000 });
await new Promise((resolve, reject) => {
db.run(`UPDATE users SET pocket = ? WHERE userId = ? AND guildId = ?`, [pocketAmount - amount, message.author.id, message.guild.id], (err) => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
usersWithGameInProgress.set(user.id);
collector.on('collect', async i => {
if (i.user.id !== user.id) {
return i.reply({ content: ":x: Vous n'avez pas la permission d'interagir avec ces boutons", ephemeral: true });
}
await i.deferUpdate();
if (i.customId === 'blackjack_hit') {
playerCards.push(drawCard());
let playerTotal = playerCards.reduce((total, card) => total + cardValues[card.value], 0);
if (playerTotal === 21) {
const winnings = amount * 1.5;
let pocketAmount = await new Promise((resolve, reject) => {
db.get(`SELECT pocket FROM users WHERE userId = ? AND guildId = ?`, [message.author.id, message.guild.id], (err, row) => {
if (err) {
reject(err);
} else {
resolve(row.pocket || 0);
}
});
});
await new Promise((resolve, reject) => {
db.run(`UPDATE users SET pocket = ? WHERE userId = ? AND guildId = ?`, [pocketAmount + winnings, message.author.id, message.guild.id], (err) => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
const winEmbed = new EmbedBuilder()
.setTitle('Blackjack 🎲')
.setDescription(`Félicitations ! Vous avez atteint 21. Vous avez gagné ${winnings} ${currencyName}.`)
.setColor('#0099ff');
message.reply({ embeds: [winEmbed], allowedMentions: { repliedUser: false } });
usersWithGameInProgress.delete(user.id);
collector.stop();
} else if (playerTotal > 21) {
const loseEmbed = new EmbedBuilder()
.setTitle('Blackjack 🎲')
.setDescription(`Vous avez dépassé 21. Vous avez perdu ${amount} ${currencyName}.`)
.setColor('#0099ff');
message.reply({ embeds: [loseEmbed], allowedMentions: { repliedUser: false } });
collector.stop();
} else {
embed.spliceFields(0, 1, { name: 'Votre main', value: `Cartes: ${playerCards.map(card => card.symbol + ' ' + card.value).join(' ')}\nTotal: ${playerTotal}`, inline: true });
i.editReply({ embeds: [embed] });
}
usersWithGameInProgress.delete(user.id);
} else if (i.customId === 'blackjack_stand') {
let dealerTotal = dealerCards.reduce((total, card) => total + cardValues[card.value], 0);
while (dealerTotal < 17) {
dealerCards.push(drawCard());
dealerTotal = dealerCards.reduce((total, card) => total + cardValues[card.value], 0);
}
const playerTotal = playerCards.reduce((total, card) => total + cardValues[card.value], 0);
let result;
if (dealerTotal > 21) {
result = `Le croupier a dépassé 21. Vous gagnez ${amount * 1.5} ${currencyName}. !`;
let pocketAmount = await new Promise((resolve, reject) => {
db.get(`SELECT pocket FROM users WHERE userId = ? AND guildId = ?`, [message.author.id, message.guild.id], (err, row) => {
if (err) {
reject(err);
} else {
resolve(row.pocket || 0);
}
});
});
await new Promise((resolve, reject) => {
db.run(`UPDATE users SET pocket = ? WHERE userId = ? AND guildId = ?`, [pocketAmount + amount * 1.5, message.author.id, message.guild.id], (err) => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
const winEmbed = new EmbedBuilder()
.setTitle('Blackjack 🎲')
.setDescription(result)
.setColor('#0099ff');
message.reply({ embeds: [winEmbed], allowedMentions: { repliedUser: false } });
usersWithGameInProgress.delete(user.id);
} else if (dealerTotal > playerTotal) {
result = `Le croupier a ${dealerTotal} et gagne. Vous avez perdu ${amount} ${currencyName}.`;
const loseEmbed = new EmbedBuilder()
.setTitle('Blackjack 🎲')
.setDescription(result)
.setColor('#0099ff');
message.reply({ embeds: [loseEmbed], allowedMentions: { repliedUser: false } });
usersWithGameInProgress.delete(user.id);
} else if (dealerTotal < playerTotal) {
let pocketAmount = await new Promise((resolve, reject) => {
db.get(`SELECT pocket FROM users WHERE userId = ? AND guildId = ?`, [message.author.id, message.guild.id], (err, row) => {
if (err) {
reject(err);
} else {
resolve(row.pocket || 0);
}
});
});
const winnings = amount * 1.5;
await new Promise((resolve, reject) => {
db.run(`UPDATE users SET pocket = ? WHERE userId = ? AND guildId = ?`, [pocketAmount + winnings, message.author.id, message.guild.id], (err) => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
result = `Vous gagnez ! Vous avez gagné ${winnings} ${currencyName}.`;
const winEmbed = new EmbedBuilder()
.setTitle('Blackjack 🎲')
.setDescription(result)
.setColor('#0099ff');
message.reply({ embeds: [winEmbed], allowedMentions: { repliedUser: false } });
usersWithGameInProgress.delete(user.id);
} else {
result = 'Il y a eu égalité. Vous récupérez votre mise.';
let pocketAmount = await db.get(`${guildId}.pocket.${user.id}`) || 0;
await db.set(`${guildId}.pocket.${user.id}`, pocketAmount + amount);
const tieEmbed = new EmbedBuilder()
.setTitle('Blackjack 🎲')
.setDescription(result)
.setColor('#0099ff');
message.reply({ embeds: [tieEmbed], allowedMentions: { repliedUser: false } });
}
usersWithGameInProgress.delete(user.id);
collector.stop();
} else if (i.customId === 'blackjack_cancel') {
let pocketAmount = await new Promise((resolve, reject) => {
db.get(`SELECT pocket FROM users WHERE userId = ? AND guildId = ?`, [message.author.id, message.guild.id], (err, row) => {
if (err) {
reject(err);
} else {
resolve(row.pocket || 0);
}
});
});
await new Promise((resolve, reject) => {
db.run(`UPDATE users SET pocket = ? WHERE userId = ? AND guildId = ?`, [pocketAmount + amount / 2, message.author.id, message.guild.id], (err) => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
const cancelEmbed = new EmbedBuilder()
.setTitle('Blackjack 🎲')
.setDescription('Partie annulée. Vous récupérez la moitié de votre mise.')
.setColor('#0099ff');
message.reply({ embeds: [cancelEmbed], allowedMentions: { repliedUser: false } });
usersWithGameInProgress.delete(user.id);
collector.stop();
}
});
}
}
};
+147
View File
@@ -0,0 +1,147 @@
const { EmbedBuilder, ButtonStyle, ButtonBuilder, ActionRowBuilder } = require('discord.js');
const embedColor = require('../../fonctions/embedColor.js');
const db = require('../../fonctions/database.js');
module.exports = {
aliases: ['roulette'],
description: 'Lance une roulette.',
emote: '🎲',
utilisation: '<mise> <couleur>',
permission: 0,
async execute(message, args, client) {
if (args.length !== 2) {
embedColor(message.author.id, message.guild.id).then(color => {
const embed = new EmbedBuilder()
.setTitle('🎲 Roulette')
.setDescription(`Vous devez spécifier une mise et une couleur. Exemple : \`&roulette 100 rouge\`.`)
.setColor(color)
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } })
});
} else if (isNaN(args[0])) {
embedColor(message.author.id, message.guild.id).then(color => {
const embed = new EmbedBuilder()
.setTitle('🎲 Roulette')
.setDescription(`La mise doit être un nombre.`)
.setColor(color)
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } })
});
} else if (args[0] < 25) {
embedColor(message.author.id, message.guild.id).then(color => {
const embed = new EmbedBuilder()
.setTitle('🎲 Roulette')
.setDescription(`La mise doit être supérieure ou égale à \`25\`.`)
.setColor(color)
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } })
});
} else if (args[1] !== 'rouge' && args[1] !== 'noir' && args[1] !== 'vert' && args[1] !== 'red' && args[1] !== 'black' && args[1] !== 'green') {
embedColor(message.author.id, message.guild.id).then(color => {
const embed = new EmbedBuilder()
.setTitle('🎲 Roulette')
.setDescription(`La couleur doit être \`rouge\`, \`noir\` ou \`vert\`.`)
.setColor(color)
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } })
});
}
const pocket = await new Promise((resolve, reject) => {
db.get(`SELECT pocket FROM users WHERE userId = ? AND guildId = ?`, [message.author.id, message.guild.id], (err, row) => {
if (err) {
reject(err);
} else {
if (row.pocket < args[0]) {
embedColor(message.author.id, message.guild.id).then(color => {
const embed = new EmbedBuilder()
.setTitle('🎲 Roulette')
.setDescription(`Vous n'avez pas assez d'argent sur vous pour miser cette somme.`)
.setColor(color)
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } })
});
} else {
resolve(row.pocket);
}
}
});
});
embedColor(message.author.id, message.guild.id).then(color => {
const embed = new EmbedBuilder()
.setTitle('🎲 Roulette')
.setImage('https://images-ext-1.discordapp.net/external/Zz7GmmFoFdFRB7GCjiJGaDHDjJi8noOLY8zasCmUOGQ/https/media.giphy.com/media/26uflBhaGt5lQsaCA/giphy.gif')
.setDescription(`Vous avez misé \`${args[0]}\` sur \`${args[1]}\`. La bille tourne...\nRésultat dans 10 secondes...`)
.setColor(color)
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } })
});
await new Promise(resolve => setTimeout(resolve, 10000));
const result = Math.floor(Math.random() * 37);
let colorR = '';
if (result === 0) {
colorR = 'vert';
} else if (result % 2 === 0) {
colorR = 'rouge';
} else {
colorR = 'noir';
}
let gain = 0;
if (((args[1] === 'rouge' || args[1] === 'red') && colorR === 'rouge') || ((args[1] === 'noir' || args[1] === 'black') && colorR === 'noir') || ((args[1] === 'vert' || args[1] === 'green') && colorR === 'vert')) {
gain = args[0] * 2;
} else {
gain = 0-args[0];
}
await new Promise((resolve, reject) => {
db.run(`UPDATE users SET pocket = pocket + ? WHERE userId = ? AND guildId = ?`, [gain, message.author.id, message.guild.id], (err) => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
if (gain >= 0) {
embedColor(message.author.id, message.guild.id).then(color => {
const embed = new EmbedBuilder()
.setTitle('🎲 Roulette')
.setDescription(`Vous avez misé \`${args[0]}\` sur \`${args[1]}\` et la bille est tombée sur \`${colorR}\`. Vous avez gagné \`${gain}\` !`)
.setColor(color)
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } })
});
} else {
embedColor(message.author.id, message.guild.id).then(color => {
const embed = new EmbedBuilder()
.setTitle('🎲 Roulette')
.setDescription(`Vous avez misé \`${args[0]}\` sur \`${args[1]}\` et la bille est tombée sur \`${colorR}\`. Vous avez perdu \`${0-gain}\` !`)
.setColor(color)
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } })
});
}
}
};
+130
View File
@@ -0,0 +1,130 @@
const { EmbedBuilder } = require('discord.js');
const embedColor = require('../../fonctions/embedColor.js');
const db = require('../../fonctions/database.js');
let teamName
let teamDescription
module.exports = {
aliases: ['teamcreate'],
description: 'Crée une team.',
emote: '🛡️',
utilisation: '',
permission: 0,
async execute(message, args, client) {
await new Promise((resolve, reject) => {
db.get(`SELECT teamId, pocket FROM users WHERE userId = ? AND guildId = ?`, [message.author.id, message.guild.id], (err, row) => {
if (err) {
reject(err);
} else {
if (row.teamId !== null ) {
embedColor(message.author.id, message.guild.id).then(color => {
const embed = new EmbedBuilder()
.setTitle('🛡️ Création de team')
.setDescription(`Vous êtes déjà dans une team. Vous devez quitter votre team actuelle pour en créer une nouvelle.`)
.setColor(color)
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } })
});
} else if (row.pocket < 3000) {
embedColor(message.author.id, message.guild.id).then(color => {
const embed = new EmbedBuilder()
.setTitle('🛡️ Création de team')
.setDescription(`Vous n'avez pas assez de fonds pour créer une team. Vous avez besoin de 3000.`)
.setColor(color)
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } })
});
} else {
db.run(`UPDATE users SET pocket = pocket - 3000 WHERE userId = ? AND guildId = ?`, [message.author.id, message.guild.id]);
resolve();
}
}
});
});
const embed = new EmbedBuilder()
.setTitle('🛡️ Création de team')
.setDescription(`Ecrivez le nom de votre team dans le chat.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
const messageTeam = await message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
const filter = m => m.author.id === message.author.id;
const collector = message.channel.createMessageCollector({ filter, time: 60000, max: 1 });
collector.on('collect', async m => {
if (m.content.length > 20) {
m.reply('Le nom de la team ne doit pas dépasser 20 caractères.');
return collector.stop();
} else if (m.content.length < 3) {
m.reply('Le nom de la team doit contenir au moins 3 caractères.');
return collector.stop();
} else {
teamName = m.content;
const embed = new EmbedBuilder()
.setTitle('🛡️ Création de team')
.setDescription(`Ecrivez la description de votre team dans le chat.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
messageTeam.edit({ embeds: [embed] });
m.delete();
const collectorD = message.channel.createMessageCollector({ filter, time: 60000, max: 1 });
collectorD.on('collect', async m => {
if (m.content.length > 100) {
m.reply('La description de la team ne doit pas dépasser 100 caractères.');
return collectorD.stop();
} else if (m.content.length < 2) {
m.reply('La description de la team doit contenir au moins 2 caractères.');
return collectorD.stop();
} else {
teamDescription = m.content;
let idBase = teamName.toLowerCase().replace(/ /g, '');
let id = idBase;
let increment = 1;
let exists = true;
do {
await new Promise((resolve, reject) => {
db.get(`SELECT * FROM teams WHERE id = ? AND guildId = ?`, [id, message.guild.id], (err, row) => {
if (err) {
reject(err);
} else {
exists = !!row;
if (exists) {
increment++;
id = idBase + increment;
} else {
db.run(`INSERT INTO teams (guildId, id, name, description) VALUES (?, ?, ?, ?)`, [message.guild.id, id, teamName, teamDescription]);
db.run(`UPDATE users SET teamId = ?, teamRole = ? WHERE guildId = ? AND userId = ?`, [id, 'owner', message.guild.id, message.author.id]);
}
resolve();
}
});
});
} while (exists);
const embed = new EmbedBuilder()
.setTitle('🛡️ Création de team')
.setDescription(`Votre team a été créée avec succès !\n\n**ID :** ${id}\n**Nom :** ${teamName}\n**Description :** ${teamDescription}\n\nVous pouvez maintenant inviter des membres dans votre team avec la commande \`&teaminvite\`.\n\nPour quitter la team, utilisez la commande \`&teamleave\`.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
messageTeam.edit({ embeds: [embed] });
m.delete();
}
});
}
});
}
};
+105
View File
@@ -0,0 +1,105 @@
const { ButtonStyle, ButtonBuilder, ActionRowBuilder, EmbedBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: ['teamdelete'],
description: 'Supprime votre équipe.',
emote: '🛡️',
util: '',
permission: 0,
async execute(message, args, client) {
const team = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM teams WHERE guildId = ? AND id = (SELECT teamId FROM users WHERE guildId = ? AND userId = ?)`, [message.guild.id, message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
if (!team) {
const embed = new EmbedBuilder()
.setTitle('🛡️ Suppression de l\'équipe')
.setDescription('Vous n\'êtes actuellement pas dans une équipe.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
} else {
const teamRole = await new Promise((resolve, reject) => {
db.get(`SELECT teamRole FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row.teamRole);
});
});
if (teamRole !== 'owner') {
const embed = new EmbedBuilder()
.setTitle('Suppression Impossible')
.setDescription('❌ Vous n\'avez pas la permission de supprimer cette équipe.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
}
const row = new ActionRowBuilder()
.addComponents(
new ButtonBuilder()
.setCustomId('confirm_delete')
.setLabel('Confirmer')
.setStyle(ButtonStyle.Danger),
new ButtonBuilder()
.setCustomId('cancel_delete')
.setLabel('Annuler')
.setStyle(ButtonStyle.Secondary)
);
const embed = new EmbedBuilder()
.setTitle('🛡️ Suppression de l\'équipe')
.setDescription(`Êtes-vous sûr de vouloir supprimer l'équipe ${team.name}? Cette action est irréversible.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
message.reply({ embeds: [embed], components: [row], allowedMentions: { repliedUser: false } }).then(sentMessage => {
const filter = i => i.customId === 'confirm_delete' || i.customId === 'cancel_delete' && i.user.id === message.author.id;
const collector = sentMessage.createMessageComponentCollector({ filter, time: 15000 });
collector.on('collect', async i => {
if (i.customId === 'confirm_delete') {
db.run(`DELETE FROM teams WHERE guildId = ? AND id = ?`, [message.guild.id, team.id], async (err) => {
if (err) {
return i.update({ content: 'Une erreur est survenue lors de la suppression de l\'équipe.', components: [] });
}
db.run(`UPDATE users SET teamRole = NULL, teamId = NULL WHERE guildId = ? AND teamId = ?`, [message.guild.id, team.id], async (err) => {
if (err) {
return i.update({ content: 'Une erreur est survenue lors de la mise à jour des membres de l\'équipe.', components: [] });
}
const embed = new EmbedBuilder()
.setTitle('🛡️ Suppression de l\'équipe')
.setDescription(`L'équipe ${team.name} a été supprimée avec succès.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return i.update({ embeds: [embed], components: [] });
});
});
} else {
await i.update({ content: 'Suppression de l\'équipe annulée.', components: [] });
}
});
collector.on('end', collected => {
if (collected.size === 0) sentMessage.edit({ content: 'Temps écoulé. Suppression de l\'équipe annulée.', components: [] });
});
});
}
},
};
+113
View File
@@ -0,0 +1,113 @@
const { EmbedBuilder, ButtonStyle, ButtonBuilder, ActionRowBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: ['teamdemote'],
description: 'Rétrograder un officier à membre dans votre équipe.',
emote: '🛡️',
utilisation: '<@user>',
permission: 0,
async execute(message, args, client) {
if (!args[0]) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Rétrograder un officier')
.setDescription('Veuillez mentionner un utilisateur à rétrograder.')
.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 userToDemote = message.mentions.users.first();
if (!userToDemote) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Rétrograder un officier')
.setDescription('Utilisateur non trouvé.')
.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 user = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
if (!user || user.teamRole !== 'owner') {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Rétrograder un officier')
.setDescription('Vous n\'êtes pas administrateur de cette équipe.')
.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 userToDemoteInfo = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, userToDemote.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
if (!userToDemoteInfo || userToDemoteInfo.teamId !== user.teamId) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Rétrograder un officier')
.setDescription('L\'utilisateur mentionné n\'est pas dans votre équipe.')
.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 (userToDemoteInfo.teamRole !== 'officer') {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Rétrograder un officier')
.setDescription('L\'utilisateur mentionné n\'est pas un officier.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
],
allowedMentions: { repliedUser: false }
});
}
db.run(`UPDATE users SET teamRole = 'membre' WHERE guildId = ? AND userId = ?`, [message.guild.id, userToDemote.id], async (err) => {
if (err) {
return message.reply('Une erreur est survenue lors de la rétrogradation de l\'utilisateur.');
}
const embed = new EmbedBuilder()
.setTitle('🛡️ Rétrogradation dans l\'équipe')
.setDescription(`${userToDemote.tag} a été rétrogradé au rang de membre.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
});
},
};
+94
View File
@@ -0,0 +1,94 @@
const { EmbedBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: ['tdep', 'tdepot', 'teamdep', 'teamdepot'],
description: 'Dépose de l\'argent dans la banque de votre team.',
emote: '💰',
utilisation: '<montant|all>',
permission: 0,
async execute(message, args, client) {
if (args.length !== 1) {
const embed = new EmbedBuilder()
.setTitle('Dépôt Impossible')
.setDescription('❌ Vous devez spécifier un montant à déposer.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
} else if (args[0] !== 'all' && isNaN(args[0])) {
const embed = new EmbedBuilder()
.setTitle('Dépôt Impossible')
.setDescription('❌ Vous devez spécifier un montant valide à déposer.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
} else if (args[0] < 1) {
const embed = new EmbedBuilder()
.setTitle('Dépôt Impossible')
.setDescription('❌ Vous devez déposer au moins 1 coin.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
}
const pocket = await new Promise((resolve, reject) => {
db.get(`SELECT pocket FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row.pocket);
});
});
let amout;
if (args[0] === 'all') {
amout = pocket;
} else if (args[0] > pocket) {
const embed = new EmbedBuilder()
.setTitle('Dépôt Impossible')
.setDescription('❌ Vous n\'avez pas assez d\'argent sur vous pour déposer cette somme.\n\n💰 Vous avez actuellement **' + pocket + 'coins** sur vous.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
} else {
amout = args[0];
}
const team = await new Promise((resolve, reject) => {
db.get(`SELECT teamId FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row.teamId);
});
});
if (!team) {
const embed = new EmbedBuilder()
.setTitle('Dépôt Impossible')
.setDescription('❌ Vous n\'êtes pas dans une team.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
} else {
db.run(`UPDATE users SET pocket = pocket - ? WHERE guildId = ? AND userId = ?`, [amout, message.guild.id, message.author.id]);
db.run(`UPDATE teams SET bank = bank + ? WHERE id = ?`, [amout, team]);
const embed = new EmbedBuilder()
.setTitle('Dépôt Effectué')
.setDescription('💰 Vous avez déposé **' + amout + '** coins dans la banque de votre team.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
}
},
};
+57
View File
@@ -0,0 +1,57 @@
const { EmbedBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: ['t'],
description: 'Affiche les informations de votre team.',
emote: '🛡️',
utilisation: '',
permission: 0,
async execute(message, args, client) {
const team = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM teams WHERE guildId = ? AND id = (SELECT teamId FROM users WHERE guildId = ? AND userId = ?)`, [message.guild.id, message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
if (!team) {
const embed = new EmbedBuilder()
.setTitle('🛡️ Informations de team')
.setDescription('Vous n\'êtes actuellement pas dans une team.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
} else {
const memberlist = await new Promise((resolve, reject) => {
db.all(`SELECT userId, teamRole FROM users WHERE guildId = ? AND teamId = ?`, [message.guild.id, team.id], (err, rows) => {
if (err) reject(err);
resolve(rows);
});
});
const embed = new EmbedBuilder()
.setTitle('🛡️ Informations de team')
.setDescription(`**Nom:** ${team.name}\n**Description:** ${team.description}\n**Banque:** ${team.bank} coins\n**Niveau:** ${team.level}\n**Soldats:** ${team.soldiers}\n**Soldats blessés:** ${team.woundedSoldiers}\n**Niveau du camp:** ${team.campLevel}\n**Tourelles:** ${team.turrets}\n**Cadenas:** ${team.padlock}\n**Membres (${memberlist.length}):**\n${memberlist.map(member => `<@${member.userId}> : ${member.teamRole}`).join('\n')}`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
const urlRegex1 = /(https?:\/\/[^\s]+)/g;
if (team.icon && urlRegex1.test(team.icon)) {
embed.setThumbnail(team.icon);
}
const urlRegex2 = /(https?:\/\/[^\s]+)/g;
if (team.banner && urlRegex2.test(team.banner)) {
embed.setImage(team.banner);
}
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
}
},
};
+54
View File
@@ -0,0 +1,54 @@
const { EmbedBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: ['tedit'],
description: 'Modifie les informations de votre team.',
emote: '🛡️',
utilisation: '<nom|bannière|photo|description> <nouvelle valeur>',
permission: 0,
async execute(message, args, client) {
if (args.length > 0) {
const subCommand = args[0].toLowerCase();
const newValue = args.slice(1).join(' ');
if (['name', 'banner', 'icon', 'description'].includes(subCommand)) {
await new Promise((resolve, reject) => {
db.run(`UPDATE teams SET ${subCommand} = ? WHERE guildId = ? AND id = (SELECT teamId FROM users WHERE guildId = ? AND userId = ?)`, [newValue, message.guild.id, message.guild.id, message.author.id], (err) => {
if (err) reject(err);
resolve();
});
});
const embed = new EmbedBuilder()
.setTitle('🛡️ Modification de team')
.setDescription(`La ${subCommand} de votre team a été mise à jour.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
} else {
const embed = new EmbedBuilder()
.setTitle('🛡️ Modification de team')
.setDescription('❌ Vous devez spécifier ce que vous voulez modifier (name, banner, icon ou description).')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
}
} else {
const embed = new EmbedBuilder()
.setTitle('🛡️ Modification de team')
.setDescription('Veuillez spécifier ce que vous voulez modifier et la nouvelle valeur.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
}
},
};
+95
View File
@@ -0,0 +1,95 @@
const { EmbedBuilder, ButtonStyle, ButtonBuilder, ActionRowBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: ['tinvite'],
description: 'Invite un utilisateur à votre team.',
emote: '🛡️',
utilisation: '<@user>',
permission: 0,
async execute(message, args, client) {
if (!args[0]) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Invitation à l\'équipe')
.setDescription('Veuillez mentionner un utilisateur à inviter.')
.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 userToInvite = message.mentions.users.first();
if (!userToInvite) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Invitation à l\'équipe')
.setDescription('Utilisateur non trouvé.')
.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 user = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
if (!user || user.teamRole !== 'owner') {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Invitation à l\'équipe')
.setDescription('Vous n\'êtes pas administrateur de cette équipe.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
],
allowedMentions: { repliedUser: false }
});
}
embedColor(message.author.id, message.guild.id).then(color => {
const accept = new ButtonBuilder()
.setCustomId('accept')
.setLabel('Rejoindre la team')
.setStyle(ButtonStyle.Success);
const row = new ActionRowBuilder()
.addComponents(accept);
const embed = new EmbedBuilder()
.setTitle('🛡️ Invitation à l\'équipe')
.setDescription(`<@${userToInvite.id}> tu as été invité à rejoindre l'équipe de <@${message.author.id}>. Pour accepter l'invitation, clique sur le bouton.`)
.setColor(color)
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
(async () => {
const sentMessage = await message.reply({ embeds: [embed], components: [row], allowedMentions: { repliedUser: false } });
const filter = i => i.customId === 'accept' && i.user.id === userToInvite.id;
const collector = sentMessage.createMessageComponentCollector({ filter, time: 120000 });
collector.on('collect', async (interaction) => {
db.run(`UPDATE users SET teamId = ?, teamRole = ? WHERE guildId = ? AND userId = ?`, [user.teamId, 'membre', message.guild.id, userToInvite.id], (err) => {
if (err) {
return message.reply('Une erreur est survenue lors de l\'invitation de l\'utilisateur.');
}
interaction.reply({ content: 'Tu as rejoint l\'équipe.', allowedMentions: { repliedUser: false } });
sentMessage.edit({ components: [] });
});
});
})();
});
},
};
+144
View File
@@ -0,0 +1,144 @@
const { EmbedBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: ['teamkick'],
description: 'Expulse un utilisateur de votre team.',
emote: '🛡️',
utilisation: '<@user>',
permission: 0,
async execute(message, args, client) {
if (!args[0]) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Expulsion de l\'équipe')
.setDescription('Veuillez mentionner un utilisateur à expulser.')
.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 userToKick = message.mentions.users.first();
if (!userToKick) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Expulsion de l\'équipe')
.setDescription('Utilisateur non trouvé.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
],
allowedMentions: { repliedUser: false }
});
} else if (userToKick.id === message.author.id) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Expulsion de l\'équipe')
.setDescription('Vous ne pouvez pas vous expulser de votre propre équipe. Si vous souhaitez quitter votre équipe, utilisez la commande `&tleave`.')
.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 team = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM teams WHERE guildId = ? AND id = (SELECT teamId FROM users WHERE guildId = ? AND userId = ?)`, [message.guild.id, message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
if (!team) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Expulsion de l\'équipe')
.setDescription('Vous n\'êtes pas dans une équipe.')
.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 user = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
const userToKickInfo = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, userToKick.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
if (!userToKickInfo || userToKickInfo.teamId !== user.teamId) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Expulsion de l\'équipe')
.setDescription('L\'utilisateur mentionné n\'est pas dans votre équipe.')
.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 (!user || user.teamRole !== 'owner') {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Expulsion de l\'équipe')
.setDescription('Vous n\'êtes pas administrateur de cette équipe.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
],
allowedMentions: { repliedUser: false }
});
}
db.run(`UPDATE users SET teamId = NULL, teamRole = NULL WHERE guildId = ? AND userId = ?`, [message.guild.id, userToKick.id], async (err) => {
if (err) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Expulsion de l\'équipe')
.setDescription('Une erreur est survenue lors de l\'expulsion de l\'utilisateur.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
],
allowedMentions: { repliedUser: false }
});
}
embedColor(message.author.id, message.guild.id).then(color => {
const embed = new EmbedBuilder()
.setTitle('🛡️ Expulsion de l\'équipe')
.setDescription(`${userToKick.tag} a été expulsé de l'équipe.`)
.setColor(color)
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } })
});
});
},
};
+101
View File
@@ -0,0 +1,101 @@
const { EmbedBuilder, ButtonStyle, ButtonBuilder, ActionRowBuilder } = require('discord.js');
const embedColor = require('../../fonctions/embedColor.js');
const db = require('../../fonctions/database.js');
module.exports = {
aliases: ['teamleave'],
description: 'Quitte une team.',
emote: '🛡️',
utilisation: '',
permission: 0,
async execute(message, args, client) {
await new Promise((resolve, reject) => {
db.get(`SELECT teamId FROM users WHERE userId = ? AND guildId = ?`, [message.author.id, message.guild.id], (err, row) => {
if (err) {
reject(err);
} else {
if (row.teamId === null ) {
embedColor(message.author.id, message.guild.id).then(color => {
const embed = new EmbedBuilder()
.setTitle('🛡️ Quitter une team')
.setDescription(`Vous n'êtes dans aucune team.`)
.setColor(color)
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } })
});
} else {
resolve();
}
}
});
});
await new Promise((resolve, reject) => {
db.get(`SELECT teamRole FROM users WHERE userId = ? AND guildId = ?`, [message.author.id, message.guild.id], (err, row) => {
if (err) {
reject(err);
} else {
if (row.teamRole === 'owner') {
embedColor(message.author.id, message.guild.id).then(color => {
const embed = new EmbedBuilder()
.setTitle('🛡️ Quitter une team')
.setDescription(`Vous êtes le leader de votre team. Vous devez nommer un autre membre leader avant de quitter la team. Pour cela, utilisez la commande \`&tpromote <membre>\` jusqu'à ce que vous ne soyez plus leader.`)
.setColor(color)
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } })
});
} else {
resolve();
}
}
});
});
const embed = new EmbedBuilder()
.setTitle('🛡️ Quitter une team')
.setDescription(`Êtes-vous sûr de vouloir quitter votre team ?`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
const confirmeButton = new ButtonBuilder()
.setCustomId('confirme')
.setLabel('✅')
.setStyle(ButtonStyle.Primary);
const row = new ActionRowBuilder()
.addComponents(confirmeButton);
const messageTeam = await message.reply({ embeds: [embed], components: [row], allowedMentions: { repliedUser: false } });
const filter = i => i.user.id === message.author.id;
const collector = messageTeam.createMessageComponentCollector({ filter, time: 60000 });
collector.on('collect', async i => {
if (i.customId === 'confirme') {
db.run(`UPDATE users SET teamId = NULL, teamRole = NULL WHERE userId = ? AND guildId = ?`, [message.author.id, message.guild.id], err => {
if (err) {
console.error(err);
return i.reply('Une erreur est survenue.');
}
embedColor(message.author.id, message.guild.id).then(color => {
const embed = new EmbedBuilder()
.setTitle('🛡️ Quitter une team')
.setDescription(`Vous avez quitté votre team.`)
.setColor(color)
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
return i.update({ embeds: [embed], components: [] });
});
});
}
});
}
};
+147
View File
@@ -0,0 +1,147 @@
const { ButtonStyle, ButtonBuilder, ActionRowBuilder, EmbedBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: ['teamadmin', 'tadmin', 'teamowner'],
description: 'Promouvoir un utilisateur à administrateur dans votre équipe.',
emote: '🛡️',
utilisation: '<@user>',
permission: 0,
async execute(message, args, client) {
if (!args[0]) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Promotion dans l\'équipe')
.setDescription('Veuillez mentionner un utilisateur à promouvoir.')
.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 userToPromote = message.mentions.users.first();
if (!userToPromote) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Promotion dans l\'équipe')
.setDescription('Utilisateur non trouvé.')
.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 user = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
if (!user || user.teamRole !== 'owner') {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Promotion dans l\'équipe')
.setDescription('Vous n\'êtes pas administrateur de cette équipe.')
.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 userToPromoteInfo = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, userToPromote.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
if (!userToPromoteInfo || userToPromoteInfo.teamId !== user.teamId) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Promotion dans l\'équipe')
.setDescription('L\'utilisateur mentionné n\'est pas dans votre équipe.')
.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 bouton = new ButtonBuilder()
.setCustomId('promote_to_admin')
.setLabel('Confirmer')
.setStyle(ButtonStyle.Success);
const row = new ActionRowBuilder()
.addComponents(bouton);
const embed = new EmbedBuilder()
.setTitle('🛡️ Promotion dans l\'équipe')
.setDescription(`Êtes-vous sûr de vouloir promouvoir ${userToPromote.tag} au rang d'administrateur ?`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
const sendMessage = await message.reply({ embeds: [embed], components: [row], allowedMentions: { repliedUser: false } });
const filter = i => i.customId === 'promote_to_admin' && i.user.id === message.author.id;
const collector = sendMessage.createMessageComponentCollector({ filter, time: 120000 });
collector.on('collect', async (interaction) => {
db.run(`UPDATE users SET teamRole = 'owner' WHERE guildId = ? AND userId = ?`, [message.guild.id, userToPromote.id], async (err) => {
if (err) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Promotion dans l\'équipe')
.setDescription('Une erreur est survenue lors de la promotion de l\'utilisateur.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
],
allowedMentions: { repliedUser: false }
});
}
db.run(`UPDATE users SET teamRole = 'officier' WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], async (err) => {
if (err) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Promotion dans l\'équipe')
.setDescription('Une erreur est survenue lors de la mise à jour de votre rôle.')
.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('🛡️ Promotion dans l\'équipe')
.setDescription(`${userToPromote.tag} a été promu au rang d'administrateur. Vous avez été rétrogradé au rang d'officier.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
sendMessage.edit({ embeds: [embed], components: [] });
});
});
});
},
};
+123
View File
@@ -0,0 +1,123 @@
const { EmbedBuilder, ButtonStyle, ButtonBuilder, ActionRowBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: ['teampromote'],
description: 'Promouvoir un utilisateur à officier dans votre équipe.',
emote: '🛡️',
utilisation: '<@user>',
permission: 0,
async execute(message, args, client) {
if (!args[0]) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Promotion dans l\'équipe')
.setDescription('Veuillez mentionner un utilisateur à promouvoir.')
.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 userToPromote = message.mentions.users.first();
if (!userToPromote) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Promotion dans l\'équipe')
.setDescription('Utilisateur non trouvé.')
.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 user = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
if (!user || user.teamRole !== 'owner') {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Promotion dans l\'équipe')
.setDescription('Vous n\'êtes pas administrateur de cette équipe.')
.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 userToPromoteInfo = await new Promise((resolve, reject) => {
db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, userToPromote.id], (err, row) => {
if (err) reject(err);
resolve(row);
});
});
if (!userToPromoteInfo || userToPromoteInfo.teamId !== user.teamId) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Promotion dans l\'équipe')
.setDescription('L\'utilisateur mentionné n\'est pas dans votre équipe.')
.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 (userToPromoteInfo.teamRole === 'officer') {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Promotion dans l\'équipe')
.setDescription('L\'utilisateur mentionné est déjà un officier.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
],
allowedMentions: { repliedUser: false }
});
}
db.run(`UPDATE users SET teamRole = 'officer' WHERE guildId = ? AND userId = ?`, [message.guild.id, userToPromote.id], async (err) => {
if (err) {
return message.reply({
embeds: [
new EmbedBuilder()
.setTitle('🛡️ Promotion dans l\'équipe')
.setDescription('Une erreur est survenue lors de la promotion de l\'utilisateur.')
.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('🛡️ Promotion dans l\'équipe')
.setDescription(`${userToPromote.tag} a été promu au rang d'officier.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
});
},
};
+113
View File
@@ -0,0 +1,113 @@
const { EmbedBuilder } = require('discord.js');
const db = require('../../fonctions/database.js');
const embedColor = require('../../fonctions/embedColor.js');
module.exports = {
aliases: ['tretirer', 'teamwithdraw', 'teamretirer', 'teamwh', 'twh'],
description: 'Retire de l\'argent de la banque de votre team.',
emote: '💰',
utilisation: '<montant|all>',
permission: 0,
async execute(message, args, client) {
if (args.length !== 1) {
const embed = new EmbedBuilder()
.setTitle('Retrait Impossible')
.setDescription('❌ Vous devez spécifier un montant à retirer.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
} else if (args[0] !== 'all' && isNaN(args[0])) {
const embed = new EmbedBuilder()
.setTitle('Retrait Impossible')
.setDescription('❌ Vous devez spécifier un montant valide à retirer.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
} else if (args[0] < 1) {
const embed = new EmbedBuilder()
.setTitle('Retrait Impossible')
.setDescription('❌ Vous devez retirer au moins 1 coin.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
}
const teamRole = await new Promise((resolve, reject) => {
db.get(`SELECT teamRole FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row.teamRole);
});
});
if (!teamRole || (teamRole !== 'officier' && teamRole !== 'owner')) {
const embed = new EmbedBuilder()
.setTitle('Retrait Impossible')
.setDescription('❌ Vous n\'avez pas la permission de retirer de l\'argent de la banque de l\'équipe.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
}
const team = await new Promise((resolve, reject) => {
db.get(`SELECT teamId FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, message.author.id], (err, row) => {
if (err) reject(err);
resolve(row.teamId);
});
});
if (!team) {
const embed = new EmbedBuilder()
.setTitle('Retrait Impossible')
.setDescription('❌ Vous n\'êtes pas dans une team.')
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
} else {
const bank = await new Promise((resolve, reject) => {
db.get(`SELECT bank FROM teams WHERE id = ? AND guildId = ?`, [team, message.guild.id], (err, row) => {
if (err) reject(err);
resolve(row.bank);
});
});
let amount;
if (args[0] === 'all') {
amount = bank;
} else if (args[0] > bank) {
const embed = new EmbedBuilder()
.setTitle('Retrait Impossible')
.setDescription(`❌ Votre team n'a pas assez d'argent dans la banque pour retirer cette somme.\n\n💰 Votre team a actuellement **${bank} coins** dans la banque.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
} else {
amount = args[0];
}
db.run(`UPDATE users SET pocket = pocket + ? WHERE guildId = ? AND userId = ?`, [amount, message.guild.id, message.author.id]);
db.run(`UPDATE teams SET bank = bank - ? WHERE id = ? AND guildId = ?`, [amount, team, message.guild.id]);
const embed = new EmbedBuilder()
.setTitle('Retrait Effectué')
.setDescription(`💰 Vous avez retiré **${amount}** coins de la banque de votre team.`)
.setColor(await embedColor(message.author.id, message.guild.id))
.setTimestamp()
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() });
return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } });
}
},
};