mirror of
https://github.com/arthur-pbty/bot-discord-coins.git
synced 2026-06-03 23:36:29 +02:00
update top
This commit is contained in:
+126
-14
@@ -6,7 +6,7 @@ module.exports = {
|
||||
aliases: ['leaderboard', 'lb'],
|
||||
description: 'Affiche le top 10 des membres du serveur',
|
||||
emote: '🏆',
|
||||
utilisation: '[coins|pocket|bank|reputation|niveau]',
|
||||
utilisation: '[global|pocket|bank|reputation|niveau]',
|
||||
permission: 0,
|
||||
|
||||
async execute(message, args, client) {
|
||||
@@ -34,19 +34,131 @@ module.exports = {
|
||||
], allowedMentions: { repliedUser: false } })
|
||||
}
|
||||
|
||||
let data;
|
||||
if (args[0] === 'coins') {
|
||||
data = db.all(`SELECT userId, pocket+bank AS coins FROM users WHERE guildId = ? ORDER BY coins DESC LIMIT 10`, [message.guild.id]);
|
||||
} else if (args[0] === 'pocket') {
|
||||
data = db.all(message.guild.id, 'SELECT userId, pocket AS coins FROM users WHERE guildId = ? ORDER BY coins DESC LIMIT 10', [message.guild.id]);
|
||||
} else if (args[0] === 'bank') {
|
||||
data = db.all(message.guild.id, 'SELECT userId, bank AS coins FROM users WHERE guildId = ? ORDER BY coins DESC LIMIT 10', [message.guild.id]);
|
||||
} else if (args[0] === 'reputation') {
|
||||
data = db.all(message.guild.id, 'SELECT userId, reputation AS coins FROM users WHERE guildId = ? ORDER BY coins DESC LIMIT 10', [message.guild.id]);
|
||||
} else if (args[0] === 'niveau') {
|
||||
data = db.all(message.guild.id, 'SELECT userId, lvl AS coins FROM users WHERE guildId = ? ORDER BY coins DESC LIMIT 10', [message.guild.id]);
|
||||
}
|
||||
async function leaderboard (type) {
|
||||
let data;
|
||||
if (type === 'coins') {
|
||||
data = await new Promise((resolve, reject) => {
|
||||
db.all(`SELECT userId, pocket+bank AS coins FROM users WHERE guildId = ? ORDER BY coins DESC LIMIT 10`, [message.guild.id], (err, rows) => {
|
||||
if (err) reject(err);
|
||||
resolve(rows);
|
||||
});
|
||||
});
|
||||
} else if (type === 'pocket') {
|
||||
data = await new Promise((resolve, reject) => {
|
||||
db.all(`SELECT userId, pocket AS coins FROM users WHERE guildId = ? ORDER BY coins DESC LIMIT 10`, [message.guild.id], (err, rows) => {
|
||||
if (err) reject(err);
|
||||
resolve(rows);
|
||||
});
|
||||
});
|
||||
} else if (type === 'bank') {
|
||||
data = await new Promise((resolve, reject) => {
|
||||
db.all(`SELECT userId, bank AS coins FROM users WHERE guildId = ? ORDER BY coins DESC LIMIT 10`, [message.guild.id], (err, rows) => {
|
||||
if (err) reject(err);
|
||||
resolve(rows);
|
||||
});
|
||||
});
|
||||
} else if (type === 'reputation') {
|
||||
data = await new Promise((resolve, reject) => {
|
||||
db.all(`SELECT userId, reputation AS coins FROM users WHERE guildId = ? ORDER BY coins DESC LIMIT 10`, [message.guild.id], (err, rows) => {
|
||||
if (err) reject(err);
|
||||
resolve(rows);
|
||||
});
|
||||
});
|
||||
} else if (type === 'niveau') {
|
||||
data = await new Promise((resolve, reject) => {
|
||||
db.all(`SELECT userId, lvl AS coins FROM users WHERE guildId = ? ORDER BY coins DESC LIMIT 10`, [message.guild.id], (err, rows) => {
|
||||
if (err) reject(err);
|
||||
resolve(rows);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
const emoji = {
|
||||
coins: '🪙',
|
||||
pocket: '💰',
|
||||
bank: '🏦',
|
||||
reputation: '🔺',
|
||||
niveau: '📊'
|
||||
}
|
||||
|
||||
let leaderboard = data.map((row, i) => {
|
||||
let position;
|
||||
switch (i) {
|
||||
case 0:
|
||||
position = ':first_place:';
|
||||
break;
|
||||
case 1:
|
||||
position = ':second_place:';
|
||||
break;
|
||||
case 2:
|
||||
position = ':third_place:';
|
||||
break;
|
||||
default:
|
||||
position = `**${i + 1}.**`;
|
||||
}
|
||||
return `${position} <@${row.userId}> - \`${row.coins}\` ${emoji[type]}`;
|
||||
}).join('\n\n');
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle('🏆 Top 10 des membres du serveur')
|
||||
.setDescription(`Voici le top 10 des membres du serveur trié par ${type}:\n\n${leaderboard}`)
|
||||
.setColor(await embedColor(message.author.id, message.guild.id))
|
||||
.setTimestamp()
|
||||
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
|
||||
|
||||
console.log(data)
|
||||
return embed
|
||||
}
|
||||
|
||||
const embed = await leaderboard(args[0]);
|
||||
|
||||
const select = new StringSelectMenuBuilder()
|
||||
.setCustomId('topLeaderboard')
|
||||
.setPlaceholder('Choisissez un type de leaderboard')
|
||||
.addOptions(
|
||||
new StringSelectMenuOptionBuilder()
|
||||
.setLabel('Global')
|
||||
.setEmoji('🪙')
|
||||
.setDescription('Affiche le top en fonction de la somme de l\'argent en poche et en banque')
|
||||
.setValue('coins'),
|
||||
new StringSelectMenuOptionBuilder()
|
||||
.setLabel('Poche')
|
||||
.setEmoji('💰')
|
||||
.setDescription('Affiche le top en fonction de l\'argent en poche')
|
||||
.setValue('pocket'),
|
||||
new StringSelectMenuOptionBuilder()
|
||||
.setLabel('Banque')
|
||||
.setEmoji('🏦')
|
||||
.setDescription('Affiche le top en fonction de l\'argent en banque')
|
||||
.setValue('bank'),
|
||||
new StringSelectMenuOptionBuilder()
|
||||
.setLabel('Réputation')
|
||||
.setEmoji('🔺')
|
||||
.setDescription('Affiche le top en fonction de la réputation')
|
||||
.setValue('reputation'),
|
||||
new StringSelectMenuOptionBuilder()
|
||||
.setLabel('Niveau')
|
||||
.setEmoji('📊')
|
||||
.setDescription('Affiche le top en fonction du niveau')
|
||||
.setValue('niveau')
|
||||
);
|
||||
|
||||
const row = new ActionRowBuilder()
|
||||
.addComponents(select);
|
||||
|
||||
const replyMessage = await message.reply({ embeds: [embed], components: [row], allowedMentions: { repliedUser: false } })
|
||||
|
||||
client.on('interactionCreate', async (interaction) => {
|
||||
if (!interaction.isStringSelectMenu()) return;
|
||||
|
||||
if (interaction.customId === 'topLeaderboard') {
|
||||
const selected = interaction.values[0];
|
||||
|
||||
await interaction.deferUpdate();
|
||||
|
||||
const embed = await leaderboard(selected);
|
||||
replyMessage.edit({ embeds: embed });
|
||||
interaction.followup({ content: 'Leaderboard mis à jour', ephemeral: true });
|
||||
}
|
||||
});
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user