Channel Select Menus
Channel select menus allow users to select one or more Discord channels from the server. They’re useful for channel configuration, announcements, or channel-based features.
Channel select menus dynamically show all channels the user can see. You can filter which channel types users can select using setChannelTypes().
Creating a Channel Select Menu
Channel select menus in djs-core are created using the ChannelSelectMenu class. Each select menu component file in src/components/selects/channel/ is automatically registered.
Basic Channel Select Menu
import { ChannelSelectMenu } from "@djs-core/runtime";
export default new ChannelSelectMenu() .setPlaceholder("Select a channel") .run(async (interaction) => { const selectedChannel = interaction.channels.first(); if (selectedChannel) { await interaction.reply(`You selected: ${selectedChannel.name}`); } });Channel Types
You can filter which channel types users can select:
import { ChannelSelectMenu } from "@djs-core/runtime";import { ChannelType } from "discord.js";
export default new ChannelSelectMenu() .setPlaceholder("Select a text channel") .setChannelTypes([ChannelType.GuildText]) .run(async (interaction) => { const channel = interaction.channels.first(); if (channel) { await interaction.reply(`Selected text channel: ${channel.name}`); } });Channel Select Menu Data
Channel select menus can receive custom data using .setData().
Component Definition
import { ChannelSelectMenu } from "@djs-core/runtime";
export default new ChannelSelectMenu().withData<{ category: string }>() .setPlaceholder("Select channels") .run(async (interaction, data) => { const channels = interaction.channels.map((ch) => ch.name); await interaction.reply( `Configured ${data.category} channels: ${channels.join(", ")}`, ); });Using Select Menu with Data
configChannelSelect.setData({ category: "announcements" })