Skip to main content
User select menus allow users to select one or more Discord users from the server. They’re useful for tagging users, assigning roles, or creating user-based interactions.
Unlike string select menus that require predefined options, user select menus dynamically show all users in the server. Users can be selected directly from Discord’s user picker.

Creating a User Select Menu

User select menus in djs-core are created using the UserSelectMenu class. Each select menu component file in src/components/selects/user/ is automatically registered.
Use user select menus when you need users to select actual Discord users, like tagging people, assigning permissions, or choosing team members. For static options, use string select menus instead.

Basic User Select Menu

import { UserSelectMenu } from "@djs-core/runtime";

export default new UserSelectMenu()
        .setPlaceholder("Select a user")
        .run(async (interaction) => {
                const selectedUser = interaction.users.first();
                if (selectedUser) {
                        await interaction.reply(`You selected: ${selectedUser.username}`);
                }
        });

Multiple User Selection

User select menus can allow users to select multiple users:
import { UserSelectMenu } from "@djs-core/runtime";

export default new UserSelectMenu()
        .setPlaceholder("Select users")
        .setMinValues(1)
        .setMaxValues(5)
        .run(async (interaction) => {
                const selectedUsers = interaction.users.map((user) => user.username);
                await interaction.reply(`Selected users: ${selectedUsers.join(", ")}`);
        });

Accessing Selected Users

The interaction.users collection contains all selected users. Here’s what’s available:
interaction.users
Collection
Collection of all selected User objects - Use .first(), .map(), .forEach(), etc.
interaction.members
Collection
Collection of GuildMember objects (only available in guilds) - Contains server-specific member data
interaction.inGuild()
method
Check if the interaction happened in a server (not DMs) - Returns boolean

User Select Menu Data

User select menus can receive custom data using .setData().

Component Definition

[src/components/selects/user/assign.ts]
import { UserSelectMenu } from "@djs-core/runtime";

export default new UserSelectMenu<{ action: string }>()
        .setPlaceholder("Select users to assign")
        .run(async (interaction, data) => {
                const users = interaction.users.map((u) => u.username);
                await interaction.reply(
                        `Performing ${data.action} for: ${users.join(", ")}`,
                );
        });

Using Select Menu with Data

assignSelect.setData({ action: "assign_role" })