diff --git a/src/commands/Community/meta.js b/src/commands/Community/meta.js index 4449f2a..1164a83 100644 --- a/src/commands/Community/meta.js +++ b/src/commands/Community/meta.js @@ -5,124 +5,101 @@ const { StringSelectMenuBuilder, ButtonBuilder, EmbedBuilder, - } = require('discord.js'); - const conn = require('../../../database/db'); - - module.exports = { +} = require('discord.js'); +const conn = require('../../../database/db'); + +module.exports = { data: new SlashCommandBuilder() .setName('meta') .setDescription('Escolhe um recurso para editar a meta.'), - + async execute(interaction) { - await interaction.deferReply({ ephemeral: true }); - - try { - const [usersRows] = await conn.execute('SELECT u.id, u.discord_id, u.discord_username, u.nig, u.meta, c.name AS nomedocargo FROM users u JOIN choices c ON u.cargo = c.value ORDER BY c.id DESC'); - const embed = new EmbedBuilder().setColor("#00b0f4"); - - // Adiciona cada usuário como um campo no embed - usersRows.forEach(row => { - let metas = {}; - - try { - if (row.meta) { - metas = JSON.parse(row.meta); - } - } catch (err) { - console.warn('JSON mal formatado para usuário:', row.discord_username); - } - - let metasText = ''; - for (const [nomejson, dados] of Object.entries(metas)) { - if (typeof dados === 'object' && dados !== null && 'alvo' in dados && 'atual' in dados) { - metasText += `* *${nomejson}:* \`${dados.atual} / ${dados.alvo}\`\n`; - } else { - metasText += `* *${nomejson}:* \`formato inválido\`\n`; - } - } - - embed.addFields({ - name: '', - value: `\n\n> **${row.nig}** \n > <@${row.discord_id}>\n **Cargo:** \`${row.nomedocargo}\` \n**Meta Semanal:** \n${metasText}\n\n`, - inline: true - }); - }); - - await interaction.editReply({ embeds: [embed] }); - - } catch (error) { - console.error('Erro ao buscar usuários:', error); - await interaction.editReply({ content: '❌ Erro ao carregar informações dos usuários.' }); - } - - try { - 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.editReply({ content: '❌ Nenhuma meta encontrada.', ephemeral: true }); - } - - let metas = {}; + await interaction.deferReply({ ephemeral: true }); + try { - metas = JSON.parse(rows[0].meta); - } catch (err) { - console.error('Erro ao analisar JSON de metas:', err); - return interaction.editReply({ content: '❌ Erro ao ler as metas do utilizador.', ephemeral: true }); - } - - const chaves = Object.keys(metas); - if (chaves.length === 0) { - return interaction.editReply({ content: '❌ Nenhuma meta definida ainda.', ephemeral: true }); - } - - const options = chaves.map(key => ({ - label: key, - value: key, - })); - - const select = new StringSelectMenuBuilder() - .setCustomId('selecionarRecurso') - .setPlaceholder('Escolhe o recurso...') - .addOptions(options); - - const rowSelect = new ActionRowBuilder().addComponents(select); - const rowButton = new ActionRowBuilder().addComponents( - new ButtonBuilder() - .setCustomId('mostrarDropdown') - .setLabel('Escolher Recurso') - .setStyle(1) - ); - - await interaction.editReply({ - content: '🛠️ Clica no botão para escolher o recurso:', - components: [rowButton], - ephemeral: true, - }); - - // Espera pelo clique no botão - const filter = (i) => i.customId === 'mostrarDropdown' && i.user.id === interaction.user.id; - const collector = interaction.channel.createMessageComponentCollector({ filter, time: 15000 }); - - collector.on('collect', async (i) => { - if (i.customId === 'mostrarDropdown') { - await i.update({ - content: '🛠️ Agora escolhe o recurso:', - components: [rowSelect], + const [usersRows] = await conn.execute('SELECT u.id, u.discord_id, u.discord_username, u.nig, u.meta, c.name AS nomedocargo FROM users u JOIN choices c ON u.cargo = c.value ORDER BY c.id DESC'); + const embed = new EmbedBuilder().setColor("#00b0f4"); + + // Adiciona cada usuário como um campo no embed + usersRows.forEach(row => { + let metas = {}; + + try { + if (row.meta) { + metas = JSON.parse(row.meta); + } + } catch (err) { + console.warn('JSON mal formatado para usuário:', row.discord_username); + } + + let metasText = ''; + for (const [nomejson, dados] of Object.entries(metas)) { + if (typeof dados === 'object' && dados !== null && 'alvo' in dados && 'atual' in dados) { + metasText += `* *${nomejson}:* \`${dados.atual} / ${dados.alvo}\`\n`; + } else { + metasText += `* *${nomejson}:* \`formato inválido\`\n`; + } + } + + embed.addFields({ + name: '', + value: `\n\n> **${row.nig}** \n > <@${row.discord_id}>\n **Cargo:** \`${row.nomedocargo}\` \n**Meta Semanal:** \n${metasText}\n\n`, + inline: true + }); }); - } - }); - - collector.on('end', (collected) => { - if (collected.size === 0) { - interaction.editReply({ content: '❌ O tempo para escolher o recurso expirou.' }); - } - }); - - } catch (error) { - console.error('Erro ao buscar usuários:', error); - await interaction.editReply({ content: '❌ Erro ao carregar informações dos usuários.' }); - } - }, - }; - \ No newline at end of file + + await interaction.editReply({ embeds: [embed] }); + + } catch (error) { + console.error('Erro ao buscar usuários:', error); + await interaction.editReply({ content: '❌ Erro ao carregar informações dos usuários.' }); + } + + try { + 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.editReply({ content: '❌ Nenhuma meta encontrada.', ephemeral: true }); + } + + let metas = {}; + try { + metas = JSON.parse(rows[0].meta); + } catch (err) { + console.error('Erro ao analisar JSON de metas:', err); + return interaction.editReply({ content: '❌ Erro ao ler as metas do utilizador.', ephemeral: true }); + } + + const chaves = Object.keys(metas); + if (chaves.length === 0) { + return interaction.editReply({ content: '❌ Nenhuma meta definida ainda.', ephemeral: true }); + } + + const options = chaves.map(key => ({ + label: key, + value: key, + })); + + const select = new StringSelectMenuBuilder() + .setCustomId('selecionarRecurso') + .setPlaceholder('Escolhe o recurso...') + .addOptions(options); + + const rowSelect = new ActionRowBuilder().addComponents(select); + const rowButton = new ActionRowBuilder().addComponents( + new ButtonBuilder() + .setCustomId('mostrarDropdown') + .setLabel('Escolher Recurso') + .setStyle(1) // Usando o valor numérico para PRIMARY (1) + ); + + await interaction.editReply({ + content: '🛠️ Clica no botão para escolher o recurso:', + components: [rowButton], + ephemeral: true, + }); + + // Espera pelo clique no botão + const filter = (i) => i.customId === 'mostrarDropdown' && i.user.id === interaction.user.id; + const collector = interaction.channel.createMessageComponentCollector({ filter, time: 15000