This commit is contained in:
parent
2de7d1028b
commit
4376cd8302
@ -6,137 +6,137 @@ const {
|
||||
ActionRowBuilder,
|
||||
StringSelectMenuBuilder,
|
||||
ButtonBuilder,
|
||||
} = require('discord.js');
|
||||
const conn = require('../../../database/db');
|
||||
|
||||
module.exports = {
|
||||
} = require('discord.js');
|
||||
const conn = require('../../../database/db');
|
||||
|
||||
module.exports = {
|
||||
name: 'interactionCreate',
|
||||
async execute(interaction, client) {
|
||||
if (interaction.isCommand()) return;
|
||||
|
||||
// 🟡 Quando o user clica no botão "Editar metas"
|
||||
if (interaction.isButton() && interaction.customId === 'abrirDropdownMetas') {
|
||||
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);
|
||||
const options = Object.keys(metas).map(key => ({
|
||||
label: key,
|
||||
value: key,
|
||||
}));
|
||||
|
||||
const select = new StringSelectMenuBuilder()
|
||||
.setCustomId('selecionarRecurso')
|
||||
.setPlaceholder('Escolhe o recurso...')
|
||||
.addOptions(options);
|
||||
|
||||
const row = new ActionRowBuilder().addComponents(select);
|
||||
|
||||
// Resposta com o menu suspenso
|
||||
if (interaction.isCommand()) return;
|
||||
|
||||
// 🟡 Quando o user clica no botão "Editar metas"
|
||||
if (interaction.isButton() && interaction.customId === 'abrirDropdownMetas') {
|
||||
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);
|
||||
const options = Object.keys(metas).map(key => ({
|
||||
label: key,
|
||||
value: key,
|
||||
}));
|
||||
|
||||
const select = new StringSelectMenuBuilder()
|
||||
.setCustomId('selecionarRecurso')
|
||||
.setPlaceholder('Escolhe o recurso...')
|
||||
.addOptions(options);
|
||||
|
||||
const row = new ActionRowBuilder().addComponents(select);
|
||||
|
||||
/* 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({
|
||||
content: '📦 Escolhe o recurso que queres editar:',
|
||||
components: [row],
|
||||
ephemeral: true,
|
||||
content: '❌ Por favor insere um número válido (maior ou igual a zero).',
|
||||
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 userId = interaction.user.id;
|
||||
|
||||
try {
|
||||
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 });
|
||||
|
||||
let metas = {};
|
||||
if (rows.length > 0 && rows[0].meta) {
|
||||
metas = JSON.parse(rows[0].meta);
|
||||
}
|
||||
|
||||
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({
|
||||
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,
|
||||
});
|
||||
}
|
||||
|
||||
// ✅ 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,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user