From 3880dcb5bfa64e650718d5067aea1fdd2f92c523 Mon Sep 17 00:00:00 2001 From: Bxio Date: Thu, 1 May 2025 21:52:25 +0100 Subject: [PATCH] --- src/commands/Community/meta.js | 47 ++++++++++++++++++---------------- src/events/handlers/meta.js | 25 +++++++++++++++++- 2 files changed, 49 insertions(+), 23 deletions(-) diff --git a/src/commands/Community/meta.js b/src/commands/Community/meta.js index 45c1a4b..35a73b1 100644 --- a/src/commands/Community/meta.js +++ b/src/commands/Community/meta.js @@ -1,40 +1,43 @@ // src/commands/community/meta.js const { SlashCommandBuilder, - ModalBuilder, - TextInputBuilder, - TextInputStyle, ActionRowBuilder, + StringSelectMenuBuilder, } = require('discord.js'); + const conn = require('../../../database/db'); module.exports = { data: new SlashCommandBuilder() .setName('meta') - .setDescription('Atualiza a meta de um recurso específico.') - .addStringOption(option => - option.setName('recurso') - .setDescription('O nome do recurso (ex: enxofre, ferro)') - .setRequired(true) - ), + .setDescription('Escolhe um recurso para editar a meta.'), async execute(interaction) { - const recurso = interaction.options.getString('recurso'); + const userId = interaction.user.id; + const [rows] = await conn.query('SELECT meta FROM users WHERE discord_id = ?', [userId]); - const modal = new ModalBuilder() - .setCustomId(`definirMeta-${recurso}`) // inclui o nome no ID - .setTitle(`Definir meta para: ${recurso}`); + if (!rows.length || !rows[0].meta) { + return interaction.reply({ content: '❌ Nenhuma meta encontrada.', ephemeral: true }); + } - const alvoInput = new TextInputBuilder() - .setCustomId('alvo') - .setLabel(`Nova meta para ${recurso}`) - .setStyle(TextInputStyle.Short) - .setPlaceholder('Ex: 1000') - .setRequired(true); + const metas = JSON.parse(rows[0].meta); - const row = new ActionRowBuilder().addComponents(alvoInput); - modal.addComponents(row); + const options = Object.keys(metas).map(key => ({ + label: key, + value: key, + })); - await interaction.showModal(modal); + const select = new StringSelectMenuBuilder() + .setCustomId('selecionarRecurso') + .setPlaceholder('Escolhe o recurso...') + .addOptions(options); + + const row = new ActionRowBuilder().addComponents(select); + + await interaction.reply({ + content: '🛠️ Escolhe o recurso que queres editar:', + components: [row], + ephemeral: true, + }); }, }; \ No newline at end of file diff --git a/src/events/handlers/meta.js b/src/events/handlers/meta.js index 3f09032..b456014 100644 --- a/src/events/handlers/meta.js +++ b/src/events/handlers/meta.js @@ -1,4 +1,5 @@ // events/interactionCreate.js +const { ModalBuilder, TextInputBuilder, TextInputStyle, ActionRowBuilder } = require('discord.js'); const conn = require('../../../database/db'); module.exports = { @@ -6,6 +7,29 @@ module.exports = { async execute(interaction, client) { if (interaction.isCommand()) return; + // 🟡 Quando o usuário escolhe o recurso no menu + if (interaction.isStringSelectMenu() && interaction.customId === 'selecionarRecurso') { + const recurso = interaction.values[0]; // Ex: 'carvao', 'enxofre' + + // Cria o modal com base no recurso escolhido + const modal = new ModalBuilder() + .setCustomId(`definirMeta-${recurso}`) + .setTitle(`Definir meta para: ${recurso}`); + + const alvoInput = new TextInputBuilder() + .setCustomId('alvo') + .setLabel(`Nova meta para ${recurso}`) + .setStyle(TextInputStyle.Short) + .setPlaceholder('Ex: 1000') + .setRequired(true); + + const row = new ActionRowBuilder().addComponents(alvoInput); + modal.addComponents(row); + + return await interaction.showModal(modal); + } + + // 🟢 Quando o usuário envia o modal if (interaction.isModalSubmit()) { const [prefix, recurso] = interaction.customId.split('-'); @@ -17,7 +41,6 @@ module.exports = { const [rows] = await conn.query('SELECT meta FROM users WHERE discord_id = ?', [userId]); let metas = {}; - if (rows.length > 0 && rows[0].meta) { metas = JSON.parse(rows[0].meta); }