feat: update modal handling and error logging in points management

This commit is contained in:
2025-10-03 23:25:17 -05:00
parent 7b474e8a99
commit a9a2660228
2 changed files with 19 additions and 23 deletions

View File

@@ -27,7 +27,7 @@ export default {
} }
try { try {
// Obtener todos los usuarios con puntos en este servidor (limitado a 25 para el UserSelect) // Obtener estadísticas para filtrar usuarios disponibles
const stats = await prisma.partnershipStats.findMany({ const stats = await prisma.partnershipStats.findMany({
where: { guildId: interaction.guild.id }, where: { guildId: interaction.guild.id },
orderBy: { totalPoints: 'desc' }, orderBy: { totalPoints: 'desc' },
@@ -41,7 +41,7 @@ export default {
}); });
} }
// Crear modal con TextInput y UserSelect usando el nuevo formato de discord.js dev // Crear modal usando la estructura de example.ts.txt (sin Builders)
const modal = { const modal = {
title: 'Gestionar Puntos de Alianza', title: 'Gestionar Puntos de Alianza',
customId: 'ld_points_modal', customId: 'ld_points_modal',
@@ -65,14 +65,14 @@ export default {
}, },
{ {
type: ComponentType.Label, type: ComponentType.Label,
label: 'Selecciona el usuario (del leaderboard)', label: 'Selecciona el usuario del leaderboard',
component: { component: {
type: ComponentType.UserSelect, type: ComponentType.UserSelect,
customId: 'user_select', customId: 'user_select',
required: true, required: true,
minValues: 1, minValues: 1,
maxValues: 1, maxValues: 1,
placeholder: 'Elige un usuario...', placeholder: 'Elige un usuario del leaderboard...',
// Filtrar solo usuarios que están en el leaderboard // Filtrar solo usuarios que están en el leaderboard
defaultUsers: stats.map(s => s.userId) defaultUsers: stats.map(s => s.userId)
}, },
@@ -81,8 +81,10 @@ export default {
} as const; } as const;
await interaction.showModal(modal); await interaction.showModal(modal);
} catch (e) { } catch (e) {
logger.error({ err: e }, 'Error en ldManagePoints'); //@ts-ignore
logger.error('Error en ldManagePoints:', e);
await interaction.reply({ await interaction.reply({
content: '❌ Error al abrir el modal de gestión.', content: '❌ Error al abrir el modal de gestión.',
flags: MessageFlags.Ephemeral flags: MessageFlags.Ephemeral

View File

@@ -29,7 +29,7 @@ export default {
} }
try { try {
// Obtener valores del nuevo formato de modal // Obtener valores del modal - usando la estructura de example.ts.txt
const totalInput = interaction.components.getTextInputValue('points_input').trim(); const totalInput = interaction.components.getTextInputValue('points_input').trim();
const selectedUsers = interaction.components.getSelectedUsers('user_select'); const selectedUsers = interaction.components.getSelectedUsers('user_select');
@@ -174,7 +174,7 @@ export default {
logger.info(`✅ Puntos actualizados exitosamente en la base de datos`); logger.info(`✅ Puntos actualizados exitosamente en la base de datos`);
// Obtener nombre del usuario // Obtener nombre del usuario usando la información del UserSelect
const userName = selectedUser?.tag ?? selectedUser?.username ?? userId; const userName = selectedUser?.tag ?? selectedUser?.username ?? userId;
// Calcular las diferencias // Calcular las diferencias
@@ -208,29 +208,23 @@ export default {
inline: true inline: true
} }
) )
.setTimestamp() .setFooter({ text: `Actualizado por ${interaction.user.username}` })
.setFooter({ text: `Modificado por ${interaction.user.username}` }); .setTimestamp();
await interaction.reply({ await interaction.reply({
embeds: [embed], embeds: [embed],
flags: MessageFlags.Ephemeral flags: MessageFlags.Ephemeral
}); });
logger.info(`✅ Respuesta enviada al usuario`); } catch (error) {
//@ts-ignore
logger.error('❌ Error en ldPointsModal:', error);
} catch (e) { if (!interaction.replied && !interaction.deferred) {
logger.error({ err: e }, 'Error en ldPointsModal'); await interaction.reply({
content: '❌ Error interno al procesar la solicitud. Revisa los logs para más detalles.',
// Intentar responder con el error flags: MessageFlags.Ephemeral
try { });
if (!interaction.replied && !interaction.deferred) {
await interaction.reply({
content: '❌ Error al actualizar los puntos.',
flags: MessageFlags.Ephemeral
});
}
} catch (replyError) {
logger.error({ err: replyError }, 'Error al enviar respuesta de error');
} }
} }
} }