This commit is contained in:
Bxio 2025-05-01 21:37:48 +01:00
parent 42c67150aa
commit 1936684a8c
2 changed files with 73 additions and 160 deletions

View File

@ -1,114 +1,42 @@
// comandos/Community/meta.js // src/commands/community/meta.js
const { ModalBuilder, TextInputBuilder, TextInputStyle, ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder, SlashCommandBuilder } = require('discord.js'); const {
const conn = require('../../../database/db'); // Ajusta o caminho SlashCommandBuilder,
ModalBuilder,
module.exports = { TextInputBuilder,
TextInputStyle,
ActionRowBuilder,
} = require('discord.js');
module.exports = {
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName('meta') .setName('meta')
.setDescription('Exibe as informações do membro que enviou o comando.'), .setDescription('Verifica ou atualiza as tuas metas na base de dados.'),
async execute(interaction) { async execute(interaction) {
await interaction.deferReply({ ephemeral: true }); const modal = new ModalBuilder()
.setCustomId('definirMeta')
try { .setTitle('Definir metas semanais');
const [rows] = 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 WHERE u.discord_id = ? ORDER BY c.id DESC', const carvaoInput = new TextInputBuilder()
[interaction.user.id] .setCustomId('carvao')
); .setLabel('Meta de carvão')
.setStyle(TextInputStyle.Short)
if (!rows.length) { .setPlaceholder('Ex: 1000')
return await interaction.editReply('Nenhum membro encontrado.'); .setRequired(true);
}
const enxofreInput = new TextInputBuilder()
const embed = new EmbedBuilder().setColor("#00b0f4"); .setCustomId('enxofre')
const row = rows[0]; // Já que é apenas um usuário, podemos pegar o primeiro da lista .setLabel('Meta de enxofre')
let metas = {}; .setStyle(TextInputStyle.Short)
.setPlaceholder('Ex: 800')
try { .setRequired(true);
if (row.meta) {
metas = JSON.parse(row.meta); const firstRow = new ActionRowBuilder().addComponents(carvaoInput);
} const secondRow = new ActionRowBuilder().addComponents(enxofreInput);
} catch (err) {
console.warn('JSON mal formatado para usuário:', row.discord_username); modal.addComponents(firstRow, secondRow);
}
await interaction.showModal(modal);
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
});
const button = new ActionRowBuilder().addComponents(
new ButtonBuilder()
.setCustomId('edit_meta')
.setLabel('Editar Meta')
.setStyle(ButtonStyle.Primary)
);
await interaction.editReply({ embeds: [embed], components: [button] });
} catch (error) {
console.error('Erro ao acessar o banco de dados:', error);
await interaction.editReply({ content: 'Erro ao carregar os dados do membro!' });
}
}, },
};
async handleButtonClick(interaction) {
if (interaction.customId === 'edit_meta') {
const modal = new ModalBuilder()
.setCustomId('meta_modal')
.setTitle('Editar Meta');
modal.addComponents(
new ActionRowBuilder().addComponents(
new TextInputBuilder()
.setCustomId('new_atual')
.setLabel('Novo valor de Atual')
.setStyle(TextInputStyle.Short)
.setPlaceholder('Insira o novo valor...')
.setRequired(true)
)
);
await interaction.showModal(modal);
}
},
async handleModalSubmit(interaction) {
const newAtual = interaction.fields.getTextInputValue('new_atual');
try {
const [rows] = await conn.execute(
'SELECT u.id, u.meta FROM users u WHERE u.discord_id = ?',
[interaction.user.id]
);
if (!rows.length) {
return await interaction.reply({ content: 'Usuário não encontrado', ephemeral: true });
}
let metas = JSON.parse(rows[0].meta);
metas['carvao'].atual = newAtual;
await conn.execute(
'UPDATE users SET meta = ? WHERE discord_id = ?',
[JSON.stringify(metas), interaction.user.id]
);
await interaction.reply({ content: 'Meta atualizada com sucesso!', ephemeral: true });
} catch (error) {
console.error('Erro ao atualizar a meta no banco de dados:', error);
await interaction.reply({ content: 'Erro ao atualizar a meta!', ephemeral: true });
}
}
};

View File

@ -1,57 +1,42 @@
// events/interactionCreate.js // events/interactionCreate.js
const { InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, MessageFlags } = require('discord.js'); const conn = require('../../../database/db');
const conn = require('../../../database/db'); // Ajusta o caminho
module.exports = { module.exports = {
name: 'interactionCreate', name: 'interactionCreate',
async execute(interaction, client) { async execute(interaction, client) {
// Deixa os comandos slash serem tratados normalmente
if (interaction.isCommand()) return;
// Trata submissões de modal
if (interaction.isModalSubmit()) {
if (interaction.customId === 'definirMeta') {
const carvao = interaction.fields.getTextInputValue('carvao');
const enxofre = interaction.fields.getTextInputValue('enxofre');
const userId = interaction.user.id;
if (interaction.isAutocomplete()) { const metas = {
const focusedValue = interaction.options.getFocused(true); carvao: Number(carvao),
enxofre: Number(enxofre),
if (interaction.commandName === 'addmembro') { };
console.error(focusedValue);
if (focusedValue.name == 'cargo'){
try {
const [rows] = await conn.execute(
'SELECT name,value FROM choices LIMIT 25',
[`%${focusedValue}%`]
);
const suggestions = rows.map(row => ({ try {
name: row.name, await conn.query(
value: row.value, 'UPDATE users SET meta = ? WHERE discord_id = ?',
})); [JSON.stringify(metas), userId]
);
await interaction.respond(suggestions); await interaction.reply({
} catch (err) { content: '✅ Metas atualizadas com sucesso!',
console.error('Erro ao buscar sugestões:', err); ephemeral: true,
await interaction.respond([]); });
} } catch (err) {
} console.error('Erro ao atualizar metas:', err);
if (focusedValue.name == 'raça'){ await interaction.reply({
try { content: '❌ Ocorreu um erro ao salvar as metas.',
const [rows] = await conn.execute( ephemeral: true,
'SELECT name,value FROM choices LIMIT 25', });
[`%${focusedValue}%`]
);
const suggestions = rows.map(row => ({
name: row.name,
value: row.value,
}));
await interaction.respond(suggestions);
} catch (err) {
console.error('Erro ao buscar sugestões:', err);
await interaction.respond([]);
}
}
}
} }
}, }
}; }
},
};