Files
amayo/src/components/selectmenus/ldSelectUser.ts

68 lines
2.0 KiB
TypeScript
Raw Normal View History

import logger from "../../core/lib/logger";
import {
StringSelectMenuInteraction,
MessageFlags,
ModalBuilder,
TextInputBuilder,
TextInputStyle,
ActionRowBuilder
} from 'discord.js';
export default {
customId: 'ld_select_user',
run: async (interaction: StringSelectMenuInteraction) => {
if (!interaction.guild) {
return interaction.reply({
content: '❌ Solo disponible en servidores.',
flags: MessageFlags.Ephemeral
});
}
try {
const selectedUserId = interaction.values[0];
// Obtener información del usuario seleccionado para mostrar en el modal
let userName = 'Usuario';
try {
const member = await interaction.guild.members.fetch(selectedUserId);
userName = member.displayName || member.user.username;
} catch {
try {
const user = await interaction.client.users.fetch(selectedUserId);
userName = user.username;
} catch {
userName = selectedUserId;
}
}
// Crear modal para ingresar la cantidad de puntos
const modal = new ModalBuilder()
.setCustomId(`ld_points_modal:${selectedUserId}`)
.setTitle(`Gestionar puntos de ${userName}`);
// Input para puntos totales (simplificado)
const totalInput = new TextInputBuilder()
.setCustomId('total_points')
.setLabel('Modificar Puntos Totales')
.setPlaceholder('+50 (añadir) / -2 (quitar últimos 2) / =100 (establecer)')
.setStyle(TextInputStyle.Short)
.setRequired(true);
// Añadir el input al modal
// @ts-ignore
modal.addComponents(
// @ts-ignore
new ActionRowBuilder().addComponents(totalInput)
);
await interaction.showModal(modal);
} catch (e) {
logger.error({ err: e }, 'Error en ldSelectUser');
await interaction.reply({
content: '❌ Error al procesar la selección.',
flags: MessageFlags.Ephemeral
});
}
}
};