const { SlashCommandBuilder, ActionRowBuilder, StringSelectMenuBuilder, EmbedBuilder } = require('discord.js'); const allowedRoleIds = ['1387349547243671663', '1387349381652549672']; // IDs dos cargos autorizados module.exports = { data: new SlashCommandBuilder() .setName('punir') .setDescription('Aplica uma punição a um membro.') .addUserOption(option => option.setName('utilizador') .setDescription('Membro a ser punido') .setRequired(true) ), async execute(interaction, client, database) { // Tenta obter o membro da guilda const user = interaction.options.getUser('utilizador'); const member = interaction.guild.members.cache.get(user.id); if (!member) { return interaction.reply({ content: '❌ Não consegui encontrar esse membro no servidor.', ephemeral: true }); } // Verifica se quem usou tem um dos cargos permitidos const hasPermission = interaction.member.roles.cache.some(role => allowedRoleIds.includes(role.id)); if (!hasPermission) { return interaction.reply({ content: '❌ Não tens permissão para usar este comando.', ephemeral: true }); } // Menu de seleção de punições const menu = new StringSelectMenuBuilder() .setCustomId('punicao_menu') .setPlaceholder('Escolhe o tipo de punição') .addOptions([ { label: 'Advertência Verbal', value: 'verbal' }, { label: 'Advertência Escrita', value: 'escrita' }, { label: 'Suspensão', value: 'suspensao' }, { label: 'Expulsão', value: 'expulsao' }, ]); const row = new ActionRowBuilder().addComponents(menu); await interaction.reply({ content: `⚠️ Escolhe a punição para **${member.user.tag}**:`, components: [row], ephemeral: true }); // Coletor do menu const collector = interaction.channel.createMessageComponentCollector({ componentType: 3, // Select menu time: 60_000, filter: i => i.user.id === interaction.user.id, }); collector.on('collect', async i => { const tipo = i.values[0]; let texto; switch (tipo) { case 'verbal': texto = '🔈 Advertência Verbal'; break; case 'escrita': texto = '📝 Advertência Escrita'; break; case 'suspensao': texto = '⛔ Suspensão'; break; case 'expulsao': texto = '🚫 Expulsão'; // Expulsar o membro automaticamente (opcional) try { await member.kick(`Punição aplicada por ${interaction.user.tag}`); } catch (err) { console.error('Erro ao expulsar:', err); await interaction.channel.send(`❌ Não consegui expulsar ${member.user.tag}. Verifica as permissões do bot.`); } break; } const embed = new EmbedBuilder() .setTitle('🚨 Punição Aplicada') .addFields( { name: 'Membro', value: `${member.user.tag} (${member.id})`, inline: true }, { name: 'Punição', value: texto, inline: true }, { name: 'Responsável', value: `${interaction.user.tag}`, inline: true } ) .setColor(0xff0000) .setTimestamp(); await i.update({ content: `✅ Punição aplicada: **${texto}**`, components: [] }); await interaction.channel.send({ embeds: [embed] }); }); } };