update top

This commit is contained in:
arthur
2024-05-28 21:00:48 +02:00
parent 973ba6885f
commit 9f4a6bbbfb
+126 -14
View File
@@ -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 });
}
});
},
}