This commit is contained in:
Bxio 2025-05-02 00:56:58 +01:00
parent 2de7d1028b
commit 4376cd8302

View File

@ -6,137 +6,137 @@ const {
ActionRowBuilder, ActionRowBuilder,
StringSelectMenuBuilder, StringSelectMenuBuilder,
ButtonBuilder, ButtonBuilder,
} = require('discord.js'); } = require('discord.js');
const conn = require('../../../database/db'); const conn = require('../../../database/db');
module.exports = { module.exports = {
name: 'interactionCreate', name: 'interactionCreate',
async execute(interaction, client) { async execute(interaction, client) {
if (interaction.isCommand()) return; if (interaction.isCommand()) return;
// 🟡 Quando o user clica no botão "Editar metas" // 🟡 Quando o user clica no botão "Editar metas"
if (interaction.isButton() && interaction.customId === 'abrirDropdownMetas') { if (interaction.isButton() && interaction.customId === 'abrirDropdownMetas') {
const userId = interaction.user.id; const userId = interaction.user.id;
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]);
if (!rows.length || !rows[0].meta) { if (!rows.length || !rows[0].meta) {
return interaction.reply({ content: '❌ Nenhuma meta encontrada.', ephemeral: true }); return interaction.reply({ content: '❌ Nenhuma meta encontrada.', ephemeral: true });
} }
const metas = JSON.parse(rows[0].meta); const metas = JSON.parse(rows[0].meta);
const options = Object.keys(metas).map(key => ({ const options = Object.keys(metas).map(key => ({
label: key, label: key,
value: key, value: key,
})); }));
const select = new StringSelectMenuBuilder() const select = new StringSelectMenuBuilder()
.setCustomId('selecionarRecurso') .setCustomId('selecionarRecurso')
.setPlaceholder('Escolhe o recurso...') .setPlaceholder('Escolhe o recurso...')
.addOptions(options); .addOptions(options);
const row = new ActionRowBuilder().addComponents(select); const row = new ActionRowBuilder().addComponents(select);
// Resposta com o menu suspenso /* return interaction.reply({
content: '📦 Escolhe o recurso que queres editar:',
components: [row],
ephemeral: true,
}); */
}
// 🔵 Quando escolhe o recurso → mostrar o modal
if (interaction.isStringSelectMenu() && interaction.customId === 'selecionarRecurso') {
const recurso = interaction.values[0];
// Obter o valor atual do recurso
const userId = interaction.user.id;
const [rows] = await conn.query('SELECT meta FROM users WHERE discord_id = ?', [userId]);
if (!rows.length || !rows[0].meta) {
return interaction.reply({ content: '❌ Nenhuma meta encontrada.', ephemeral: true });
}
const metas = JSON.parse(rows[0].meta);
// Verificar se o recurso existe e obter o valor atual
const recursoData = metas[recurso];
const atual = recursoData ? recursoData.atual : 0;
const modal = new ModalBuilder()
.setCustomId(`definirMeta-${recurso}`)
.setTitle(`Adicionar ou editar meta para ${recurso}`);
const alvoInput = new TextInputBuilder()
.setCustomId('alvo')
.setLabel(`Nova meta para ${recurso}`)
.setStyle(TextInputStyle.Short)
.setPlaceholder(`Ex: 1000 (Atual: ${atual})`)
.setRequired(true);
const row = new ActionRowBuilder().addComponents(alvoInput);
modal.addComponents(row);
return interaction.showModal(modal);
}
// 🟢 Quando envia o modal → salvar no banco
if (interaction.isModalSubmit()) {
const [prefix, recurso] = interaction.customId.split('-');
if (prefix === 'definirMeta' && recurso) {
const novoAlvo = Number(interaction.fields.getTextInputValue('alvo'));
// ✅ Verificar se é número válido ≥ 0
if (isNaN(novoAlvo) || novoAlvo < 0) {
return interaction.reply({ return interaction.reply({
content: '📦 Escolhe o recurso que queres editar:', content: '❌ Por favor insere um número válido (maior ou igual a zero).',
components: [row], ephemeral: true,
ephemeral: true,
}); });
} }
// 🔵 Quando escolhe o recurso → mostrar o modal const userId = interaction.user.id;
if (interaction.isStringSelectMenu() && interaction.customId === 'selecionarRecurso') {
const recurso = interaction.values[0]; try {
// Obter o valor atual do recurso
const userId = interaction.user.id;
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]);
if (!rows.length || !rows[0].meta) { let metas = {};
return interaction.reply({ content: '❌ Nenhuma meta encontrada.', ephemeral: true }); if (rows.length > 0 && rows[0].meta) {
metas = JSON.parse(rows[0].meta);
} }
const metas = JSON.parse(rows[0].meta); // ✅ Verificar se o recurso ainda existe
if (!(recurso in metas)) {
// Verificar se o recurso existe e obter o valor atual return interaction.reply({
const recursoData = metas[recurso]; content: `❌ O recurso **${recurso}** já não está disponível.`,
const atual = recursoData ? recursoData.atual : 0; ephemeral: true,
});
const modal = new ModalBuilder()
.setCustomId(`definirMeta-${recurso}`)
.setTitle(`Adicionar ou editar meta para ${recurso}`);
const alvoInput = new TextInputBuilder()
.setCustomId('alvo')
.setLabel(`Nova meta para ${recurso}`)
.setStyle(TextInputStyle.Short)
.setPlaceholder(`Ex: 1000 (Atual: ${atual})`)
.setRequired(true);
const row = new ActionRowBuilder().addComponents(alvoInput);
modal.addComponents(row);
return interaction.showModal(modal);
}
// 🟢 Quando envia o modal → salvar no banco
if (interaction.isModalSubmit()) {
const [prefix, recurso] = interaction.customId.split('-');
if (prefix === 'definirMeta' && recurso) {
const novoAlvo = Number(interaction.fields.getTextInputValue('alvo'));
// ✅ Verificar se é número válido ≥ 0
if (isNaN(novoAlvo) || novoAlvo < 0) {
return interaction.reply({
content: '❌ Por favor insere um número válido (maior ou igual a zero).',
ephemeral: true,
});
}
const userId = interaction.user.id;
try {
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);
}
// ✅ Verificar se o recurso ainda existe
if (!(recurso in metas)) {
return interaction.reply({
content: `❌ O recurso **${recurso}** já não está disponível.`,
ephemeral: true,
});
}
const atual = metas[recurso]?.atual ?? 0;
const novoValor = atual + novoAlvo; // Somar ao valor atual
metas[recurso] = {
alvo: novoAlvo,
atual: novoValor, // Não alterar o valor atual ao atualizar o alvo
};
await conn.query('UPDATE users SET meta = ? WHERE discord_id = ?', [
JSON.stringify(metas),
userId,
]);
return interaction.reply({
content: `✅ Meta de **${recurso}** atualizada para **${novoValor}** (antes: ${atual})`,
ephemeral: true,
});
} catch (err) {
console.error('Erro ao atualizar metas:', err);
return interaction.reply({
content: '❌ Ocorreu um erro ao salvar a meta.',
ephemeral: true,
});
}
} }
const atual = metas[recurso]?.atual ?? 0;
const novoValor = atual + novoAlvo; // Somar ao valor atual
metas[recurso] = {
alvo: novoAlvo,
atual: novoValor, // Não alterar o valor atual ao atualizar o alvo
};
await conn.query('UPDATE users SET meta = ? WHERE discord_id = ?', [
JSON.stringify(metas),
userId,
]);
return interaction.reply({
content: `✅ Meta de **${recurso}** atualizada para **${novoValor}** (antes: ${atual})`,
ephemeral: true,
});
} catch (err) {
console.error('Erro ao atualizar metas:', err);
return interaction.reply({
content: '❌ Ocorreu um erro ao salvar a meta.',
ephemeral: true,
});
}
} }
}
}, },
}; };