import { GuildMember, SlashCommandBuilder } from 'discord.js'; import { OptionsCommand } from '../../types/CommandTypes.js'; import { generateRankCard, getXpToNextLevel, } from '../../util/levelingSystem.js'; import { getUserLevel } from '../../db/db.js'; const command: OptionsCommand = { data: new SlashCommandBuilder() .setName('rank') .setDescription('Shows your current rank and level') .addUserOption((option) => option .setName('user') .setDescription('The user to check rank for (defaults to yourself)') .setRequired(false), ), execute: async (interaction) => { const member = await interaction.guild?.members.fetch( (interaction.options.get('user')?.value as string) || interaction.user.id, ); if (!member) { await interaction.reply('User not found in this server.'); return; } await interaction.deferReply(); try { const userData = await getUserLevel(member.id); const rankCard = await generateRankCard(member, userData); const xpToNextLevel = getXpToNextLevel(userData.level, userData.xp); await interaction.editReply({ content: `${member}'s rank - Level ${userData.level} (${userData.xp} XP, ${xpToNextLevel} XP until next level)`, files: [rankCard], }); } catch (error) { console.error('Error getting rank:', error); await interaction.editReply('Failed to get rank information.'); } }, }; export default command;