feat: update modal handling and error logging in points management
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user