This commit is contained in:
Bxio 2025-05-01 21:52:25 +01:00
parent 489a62b026
commit 3880dcb5bf
2 changed files with 49 additions and 23 deletions

View File

@ -1,40 +1,43 @@
// src/commands/community/meta.js // src/commands/community/meta.js
const { const {
SlashCommandBuilder, SlashCommandBuilder,
ModalBuilder,
TextInputBuilder,
TextInputStyle,
ActionRowBuilder, ActionRowBuilder,
StringSelectMenuBuilder,
} = require('discord.js'); } = require('discord.js');
const conn = require('../../../database/db');
module.exports = { module.exports = {
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName('meta') .setName('meta')
.setDescription('Atualiza a meta de um recurso específico.') .setDescription('Escolhe um recurso para editar a meta.'),
.addStringOption(option =>
option.setName('recurso')
.setDescription('O nome do recurso (ex: enxofre, ferro)')
.setRequired(true)
),
async execute(interaction) { 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() if (!rows.length || !rows[0].meta) {
.setCustomId(`definirMeta-${recurso}`) // inclui o nome no ID return interaction.reply({ content: '❌ Nenhuma meta encontrada.', ephemeral: true });
.setTitle(`Definir meta para: ${recurso}`); }
const alvoInput = new TextInputBuilder() const metas = JSON.parse(rows[0].meta);
.setCustomId('alvo')
.setLabel(`Nova meta para ${recurso}`)
.setStyle(TextInputStyle.Short)
.setPlaceholder('Ex: 1000')
.setRequired(true);
const row = new ActionRowBuilder().addComponents(alvoInput); const options = Object.keys(metas).map(key => ({
modal.addComponents(row); 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,
});
}, },
}; };

View File

@ -1,4 +1,5 @@
// events/interactionCreate.js // events/interactionCreate.js
const { ModalBuilder, TextInputBuilder, TextInputStyle, ActionRowBuilder } = require('discord.js');
const conn = require('../../../database/db'); const conn = require('../../../database/db');
module.exports = { module.exports = {
@ -6,6 +7,29 @@ module.exports = {
async execute(interaction, client) { async execute(interaction, client) {
if (interaction.isCommand()) return; 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()) { if (interaction.isModalSubmit()) {
const [prefix, recurso] = interaction.customId.split('-'); 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]); const [rows] = await conn.query('SELECT meta FROM users WHERE discord_id = ?', [userId]);
let metas = {}; let metas = {};
if (rows.length > 0 && rows[0].meta) { if (rows.length > 0 && rows[0].meta) {
metas = JSON.parse(rows[0].meta); metas = JSON.parse(rows[0].meta);
} }