DiscordJS-Template/commands/utility/roleSelector.js

49 lines
1.1 KiB
JavaScript

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
});
});
}