const { Client, ChannelType, Interaction, ApplicationCommandOptionType, ModalBuilder, TextInputStyle, TextInputBuilder, PermissionFlagsBits, PermissionsBitField, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, SlashCommandBuilder, ComponentType, StringSelectMenuBuilder, StringSelectMenuOptionBuilder, Embed, } = require('discord.js'); const fs = require('fs') const configFile = fs.readFileSync(`config.json`); const config = JSON.parse(configFile) const mysql = require(`${config.directory}/data/mysql`) module.exports = { name: `interactionCreate`, async execute(interaction, client) { const { guild, member, customId, channel } = interaction; const { ManageChannels, SendMessages } = PermissionFlagsBits; if (!interaction.isButton()) return; if (["accept", "reject"].includes(interaction.customId)) { if (interaction.customId == 'reject') { const data = await mysql.queryExecute(`SELECT * FROM CustomRole WHERE Msg_id = '${interaction.message.id}'`) if (data.length === 0) { return interaction.reply({content:`❌ There is no data of this user in database`,ephemeral:true}) } const modal = new ModalBuilder() .setTitle(`Reject reason`) .setCustomId(`rejectModal`) let description = new TextInputBuilder() .setCustomId(`description`) .setRequired(true) .setLabel("Enter reason to reject") .setStyle(TextInputStyle.Paragraph); const secondActionRow = new ActionRowBuilder() .addComponents(description) modal.addComponents( secondActionRow) await interaction.showModal(modal) const filter = (i) => i.customId === 'rejectModal'; submitted = await interaction.awaitModalSubmit({ filter, time: 1200_000 }) if (submitted) { description = submitted.fields.getTextInputValue('description'); } const embed = new EmbedBuilder() .setTitle(`Custom role request rejected`) .setDescription(`Your request for custom role in Fan19's discord server was rejected by the staff \n\nReason - ${description}`) .setColor(`Red`) .setTimestamp() const member = await interaction.guild.members.fetch(data[0].User_id); try { member.send({embeds:[embed]}) } catch (err) { console.log(`I can't dm the user!`) } const row = new ActionRowBuilder().addComponents( new ButtonBuilder() .setLabel('Rejected') .setCustomId('rejected') .setStyle(ButtonStyle.Danger) .setDisabled(true) ); const Message = await interaction.channel.messages.fetch(data[0].Msg_id) await submitted.reply({ephemeral:true, content:`✅ You have successfully rejected the request`}) Message.edit({components:[row], content:`Request rejected by ${interaction.user}`}) await mysql.queryExecute(`DELETE FROM CustomRole WHERE Msg_id = '${interaction.message.id}'`) } if (interaction.customId == 'accept') { await interaction.deferReply({ephemeral:true}); const data = await mysql.queryExecute(`SELECT * FROM CustomRole WHERE Msg_id = '${interaction.message.id}'`) if (data.length === 0) { return interaction.editReply(`❌ There is no data of this user in database`) } let newRole; try { newRole = await interaction.guild.roles.create({ name:data[0].Role_name, position: config.position, hoist:false, color:data[0].Role_hex, }) } catch (err) { console.log(`I can't create the role`) return interaction.editReply(`❌ I wasn't able to create role`) } if (data[0].Icon !== 'None' && data[0].Icon !== null && data[0].Icon !== 'undefined') { await newRole.edit({icon:data[0].Icon}) } const memb = await interaction.guild.members.fetch(data[0].User_id) await memb.roles.add(newRole) const customRole = await interaction.guild.roles.fetch(config.role.customRole) await memb.roles.add(customRole) const rudish = await interaction.guild.members.fetch(`271974692531732480`) const embed = new EmbedBuilder() .setTitle(`Custom role request accepted`) .setDescription(`After reviewing your custom role request, staff team has decided to accept your request. You now have received your custom role. If you want to change your custom role, use /removecustomrole to delete your custom role and reapply using /customrole.`) .setColor(`Green`) .setFooter({text:`🛠️ Bot coded by @rudish`,iconURL:`${rudish.displayAvatarURL()}`}) .setTimestamp() const row = new ActionRowBuilder().addComponents( new ButtonBuilder() .setLabel('Accepted') .setCustomId('accepted') .setStyle(ButtonStyle.Success) .setDisabled(true) ); const Message = await interaction.channel.messages.fetch(data[0].Msg_id) await interaction.editReply({ephemeral:true, content:`✅ You have successfully accepted the request`}) Message.edit({components:[row], content:`Request accepted by ${interaction.user}`}) const member = await interaction.guild.members.fetch(data[0].User_id); try { member.send({embeds:[embed]}) } catch (err) { console.log(`I can't dm the user!`) } await mysql.queryExecute(`UPDATE CustomRole SET Role_id = '${newRole.id}', Accepted = TRUE`) } } } };