This commit is contained in:
parent
d3c97d7971
commit
bc861f8e4f
@ -5,124 +5,101 @@ const {
|
|||||||
StringSelectMenuBuilder,
|
StringSelectMenuBuilder,
|
||||||
ButtonBuilder,
|
ButtonBuilder,
|
||||||
EmbedBuilder,
|
EmbedBuilder,
|
||||||
} = require('discord.js');
|
} = require('discord.js');
|
||||||
const conn = require('../../../database/db');
|
const conn = require('../../../database/db');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
.setName('meta')
|
.setName('meta')
|
||||||
.setDescription('Escolhe um recurso para editar a meta.'),
|
.setDescription('Escolhe um recurso para editar a meta.'),
|
||||||
|
|
||||||
async execute(interaction) {
|
async execute(interaction) {
|
||||||
await interaction.deferReply({ ephemeral: true });
|
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 = {};
|
|
||||||
try {
|
try {
|
||||||
metas = JSON.parse(rows[0].meta);
|
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');
|
||||||
} catch (err) {
|
const embed = new EmbedBuilder().setColor("#00b0f4");
|
||||||
console.error('Erro ao analisar JSON de metas:', err);
|
|
||||||
return interaction.editReply({ content: '❌ Erro ao ler as metas do utilizador.', ephemeral: true });
|
// Adiciona cada usuário como um campo no embed
|
||||||
}
|
usersRows.forEach(row => {
|
||||||
|
let metas = {};
|
||||||
const chaves = Object.keys(metas);
|
|
||||||
if (chaves.length === 0) {
|
try {
|
||||||
return interaction.editReply({ content: '❌ Nenhuma meta definida ainda.', ephemeral: true });
|
if (row.meta) {
|
||||||
}
|
metas = JSON.parse(row.meta);
|
||||||
|
}
|
||||||
const options = chaves.map(key => ({
|
} catch (err) {
|
||||||
label: key,
|
console.warn('JSON mal formatado para usuário:', row.discord_username);
|
||||||
value: key,
|
}
|
||||||
}));
|
|
||||||
|
let metasText = '';
|
||||||
const select = new StringSelectMenuBuilder()
|
for (const [nomejson, dados] of Object.entries(metas)) {
|
||||||
.setCustomId('selecionarRecurso')
|
if (typeof dados === 'object' && dados !== null && 'alvo' in dados && 'atual' in dados) {
|
||||||
.setPlaceholder('Escolhe o recurso...')
|
metasText += `* *${nomejson}:* \`${dados.atual} / ${dados.alvo}\`\n`;
|
||||||
.addOptions(options);
|
} else {
|
||||||
|
metasText += `* *${nomejson}:* \`formato inválido\`\n`;
|
||||||
const rowSelect = new ActionRowBuilder().addComponents(select);
|
}
|
||||||
const rowButton = new ActionRowBuilder().addComponents(
|
}
|
||||||
new ButtonBuilder()
|
|
||||||
.setCustomId('mostrarDropdown')
|
embed.addFields({
|
||||||
.setLabel('Escolher Recurso')
|
name: '',
|
||||||
.setStyle(1)
|
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({
|
|
||||||
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],
|
|
||||||
});
|
});
|
||||||
}
|
|
||||||
});
|
await interaction.editReply({ embeds: [embed] });
|
||||||
|
|
||||||
collector.on('end', (collected) => {
|
} catch (error) {
|
||||||
if (collected.size === 0) {
|
console.error('Erro ao buscar usuários:', error);
|
||||||
interaction.editReply({ content: '❌ O tempo para escolher o recurso expirou.' });
|
await interaction.editReply({ content: '❌ Erro ao carregar informações dos usuários.' });
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
try {
|
||||||
} catch (error) {
|
const userId = interaction.user.id;
|
||||||
console.error('Erro ao buscar usuários:', error);
|
const [rows] = await conn.query('SELECT meta FROM users WHERE discord_id = ?', [userId]);
|
||||||
await interaction.editReply({ content: '❌ Erro ao carregar informações dos usuários.' });
|
|
||||||
}
|
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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user