From db551f7e5b480e701cdb365ee2a234c85181560a Mon Sep 17 00:00:00 2001 From: Baipyrus Date: Sun, 28 Jan 2024 18:34:35 +0100 Subject: [PATCH] use slashcommand examples --- commands/utility/login.js | 41 +++++++++++++++++++++++++++ commands/utility/roleSelector.js | 48 ++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 commands/utility/login.js create mode 100644 commands/utility/roleSelector.js diff --git a/commands/utility/login.js b/commands/utility/login.js new file mode 100644 index 0000000..d9a73fb --- /dev/null +++ b/commands/utility/login.js @@ -0,0 +1,41 @@ +import { + ActionRowBuilder, + ModalBuilder, + SlashCommandBuilder, + TextInputBuilder, + TextInputStyle +} from 'discord.js'; + +export const data = new SlashCommandBuilder() + .setName('login') + .setDescription('Opens a login pop-up.'); +export async function modalSubmit(interaction) { + await interaction.reply({ + content: 'Successfully submitted Form!', + ephemeral: true + }); +} +export async function execute(interaction) { + const modal = new ModalBuilder() + .setCustomId('login-modal') + .setTitle('Login Form'); + + const user = new ActionRowBuilder().addComponents( + new TextInputBuilder() + .setCustomId('user') + .setLabel('Enter username:') + .setStyle(TextInputStyle.Short) + .setRequired(true) + ); + const password = new ActionRowBuilder().addComponents( + new TextInputBuilder() + .setCustomId('password') + .setLabel('Enter password:') + .setStyle(TextInputStyle.Short) + .setRequired(true) + ); + + modal.addComponents(user, password); + + await interaction.showModal(modal); +} diff --git a/commands/utility/roleSelector.js b/commands/utility/roleSelector.js new file mode 100644 index 0000000..2812bcf --- /dev/null +++ b/commands/utility/roleSelector.js @@ -0,0 +1,48 @@ +import { + ActionRowBuilder, + ComponentType, + RoleSelectMenuBuilder, + SlashCommandBuilder +} from 'discord.js'; + +export const data = new SlashCommandBuilder() + .setName('role_selector') + .setDMPermission(false) + .setDescription('Provides a role selector.'); +export async function execute(interaction) { + const roles = await interaction.guild.roles.fetch(); + const choices = roles + .filter((r) => r.name.startsWith('test')) + .map((r) => r.id); + + const button = new RoleSelectMenuBuilder() + .setMinValues(1) + .setMaxValues(25) + .setCustomId('role') + .setDefaultRoles(choices) + .setPlaceholder('Select at least one role.'); + + const row = new ActionRowBuilder() + .addComponents(button); + + const response = await interaction.reply({ + components: [row], + ephemeral: true + }); + + const collector = response.createMessageComponentCollector({ + componentType: ComponentType.RoleSelect, + time: 120_000 + }); + + collector.on('collect', async (i) => { + const selection = roles + .filter((r) => i.values.includes(r.id)) + .map((r) => r.name) + .join(', '); + await i.reply({ + content: `You have selected: "${selection}".`, + ephemeral: true + }); + }); +}