Documentation Index
Fetch the complete documentation index at: https://djs-core.cleboost.com/llms.txt
Use this file to discover all available pages before exploring further.
Mentionable select menus allow users to select one or more Discord users or roles from the server. They combine the functionality of user and role select menus into a single component.
Mentionable select menus are flexible - users can select either users OR roles (or both) in a single menu. Perfect when you need flexibility in what can be selected.
Mentionable select menus in djs-core are created using the MentionableSelectMenu class. Each select menu component file in src/components/selects/mentionable/ is automatically registered.
import { MentionableSelectMenu } from "@djs-core/runtime";
export default new MentionableSelectMenu()
.setPlaceholder("Select a user or role")
.run(async (interaction) => {
const selectedUser = interaction.users.first();
const selectedRole = interaction.roles.first();
if (selectedUser) {
await interaction.reply(`You selected user: ${selectedUser.username}`);
} else if (selectedRole) {
await interaction.reply(`You selected role: ${selectedRole.name}`);
}
});
Accessing Selected Items
You can access both users and roles from the interaction:
import { MentionableSelectMenu } from "@djs-core/runtime";
export default new MentionableSelectMenu()
.setPlaceholder("Select users or roles to tag")
.run(async (interaction) => {
const userMentions = interaction.users.map((u) => u.toString()).join(" ");
const roleMentions = interaction.roles.map((r) => r.toString()).join(" ");
let message = "";
if (userMentions) message += `Users: ${userMentions}\n`;
if (roleMentions) message += `Roles: ${roleMentions}`;
await interaction.reply(message || "Nothing selected");
});
Mentionable select menus can receive custom data using .setData().
Component Definition
[src/components/selects/mentionable/notify.ts]
import { MentionableSelectMenu } from "@djs-core/runtime";
export default new MentionableSelectMenu<{ action: string }>()
.setPlaceholder("Select users or roles to notify")
.run(async (interaction, data) => {
const users = interaction.users.map((u) => u.username);
const roles = interaction.roles.map((r) => r.name);
await interaction.reply(
`Performing ${data.action} for users: ${users.join(", ") || "none"} and roles: ${roles.join(", ") || "none"}`,
);
});
notifySelect.setData({ action: "send_notification" })