Update Bot
This commit is contained in:
@@ -1,65 +1,72 @@
|
||||
const { SlashCommandBuilder, EmbedBuilder } = require('discord.js');
|
||||
const { getLeaderboard, getXPProgress } = require('../../functions/xp/xp.js');
|
||||
const { colors, emojis } = require('../../utils/constants');
|
||||
const { colors } = require('../../utils/constants');
|
||||
|
||||
module.exports = {
|
||||
category: 'xp',
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('leaderboard')
|
||||
.setDescription('Affiche le classement des niveaux')
|
||||
.addIntegerOption(option =>
|
||||
option.setName('limit')
|
||||
.setDescription('Nombre d\'utilisateurs à afficher (par défaut: 10)')
|
||||
.setRequired(false)
|
||||
.setMinValue(1)
|
||||
.setMaxValue(25)),
|
||||
async execute(interaction) {
|
||||
await interaction.deferReply();
|
||||
|
||||
const limit = interaction.options.getInteger('limit') || 10;
|
||||
const leaderboard = await getLeaderboard(interaction.guild.id, limit);
|
||||
|
||||
if (leaderboard.length === 0) {
|
||||
return interaction.editReply({
|
||||
content: '❌ Aucun utilisateur trouvé dans le classement.'
|
||||
});
|
||||
}
|
||||
|
||||
const leaderboardData = [];
|
||||
for (const user of leaderboard) {
|
||||
try {
|
||||
const member = await interaction.guild.members.fetch(user.userId).catch(() => null);
|
||||
if (member) {
|
||||
leaderboardData.push({
|
||||
user: member.user,
|
||||
xp: user.xp,
|
||||
level: user.level
|
||||
});
|
||||
}
|
||||
} catch (err) { /* Ignorer */ }
|
||||
}
|
||||
|
||||
const medals = ['🥇', '🥈', '🥉'];
|
||||
const description = leaderboardData.map((data, index) => {
|
||||
const medal = medals[index] || `\`${index + 1}.\``;
|
||||
const progress = getXPProgress(data.xp, data.level);
|
||||
return `${medal} **${data.user.displayName}** • ${emojis.level} Niveau \`${data.level}\` • ${emojis.xp} \`${data.xp.toLocaleString()} XP\` • \`${progress.percentage}%\``;
|
||||
}).join('\n');
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setAuthor({
|
||||
name: interaction.guild.name,
|
||||
iconURL: interaction.guild.iconURL({ dynamic: true }) || undefined
|
||||
})
|
||||
.setTitle(`${emojis.leaderboard} Classement des Niveaux`)
|
||||
.setColor(colors.xp)
|
||||
.setDescription(description || 'Aucun utilisateur dans le classement')
|
||||
.setFooter({
|
||||
text: `Top ${limit} • ${interaction.guild.name}`,
|
||||
iconURL: interaction.guild.iconURL({ dynamic: true }) || undefined
|
||||
})
|
||||
.setTimestamp();
|
||||
|
||||
await interaction.editReply({ embeds: [embed] });
|
||||
},
|
||||
};
|
||||
category: 'xp',
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('leaderboard')
|
||||
.setDescription('Affiche le classement des niveaux')
|
||||
.addIntegerOption(option =>
|
||||
option.setName('limit')
|
||||
.setDescription('Nombre d\'utilisateurs à afficher (par défaut: 10)')
|
||||
.setRequired(false)
|
||||
.setMinValue(1)
|
||||
.setMaxValue(25)),
|
||||
async execute(interaction) {
|
||||
await interaction.deferReply();
|
||||
|
||||
const limit = interaction.options.getInteger('limit') || 10;
|
||||
const leaderboard = await getLeaderboard(interaction.guild.id, limit);
|
||||
|
||||
if (leaderboard.length === 0) {
|
||||
return interaction.editReply({
|
||||
content: '❌ Aucun utilisateur trouvé dans le classement.'
|
||||
});
|
||||
}
|
||||
|
||||
// Récupérer les informations des utilisateurs
|
||||
const leaderboardData = [];
|
||||
for (const user of leaderboard) {
|
||||
try {
|
||||
const member = await interaction.guild.members.fetch(user.userId).catch(() => null);
|
||||
if (member) {
|
||||
leaderboardData.push({
|
||||
user: member.user,
|
||||
xp: user.xp,
|
||||
level: user.level
|
||||
});
|
||||
}
|
||||
} catch (err) {
|
||||
// Ignorer les erreurs
|
||||
}
|
||||
}
|
||||
|
||||
const { emojis } = require('../../utils/constants');
|
||||
|
||||
// Créer la description du classement
|
||||
const medals = ['🥇', '🥈', '🥉'];
|
||||
const description = leaderboardData.map((data, index) => {
|
||||
const medal = medals[index] || `\`${index + 1}.\``;
|
||||
const progress = getXPProgress(data.xp, data.level);
|
||||
return `${medal} **${data.user.displayName}** • ${emojis.level} Niveau \`${data.level}\` • ${emojis.xp} \`${data.xp.toLocaleString()} XP\` • \`${progress.percentage}%\``;
|
||||
}).join('\n');
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setAuthor({
|
||||
name: `${interaction.guild.name}`,
|
||||
iconURL: interaction.guild.iconURL({ dynamic: true }) || undefined
|
||||
})
|
||||
.setTitle(`${emojis.leaderboard} Classement des Niveaux`)
|
||||
.setColor(colors.xp)
|
||||
.setDescription(description || 'Aucun utilisateur dans le classement')
|
||||
.setFooter({
|
||||
text: `Top ${limit} • ${interaction.guild.name}`,
|
||||
iconURL: interaction.guild.iconURL({ dynamic: true }) || undefined
|
||||
})
|
||||
.setTimestamp();
|
||||
|
||||
await interaction.editReply({ embeds: [embed] });
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user