String Select
type: 3
Mensajes
Modales
Vista previa payload.json
El String Select es un menú desplegable con hasta 25 opciones que tú defines. El usuario puede elegir una o varias.
{ "flags": 32768, "components": [ { "type": 10, "content": "**¿Qué juegos te gustan?** Elige hasta 3." }, { "type": 1, "components": [ { "type": 3, "custom_id": "juegos", "placeholder": "Elige tus juegos", "min_values": 1, "max_values": 3, "options": [ { "label": "Minecraft", "value": "minecraft", "description": "Construcción y aventura", "emoji": { "name": "⛏️" } }, { "label": "Fortnite", "value": "fortnite", "description": "Battle royale", "emoji": { "name": "🔫" } }, { "label": "Rocket League", "value": "rocket", "description": "Fútbol con coches", "emoji": { "name": "🚗" } }, { "label": "Among Us", "value": "amongus", "description": "Encuentra al impostor", "emoji": { "name": "🕵️" } } ] } ] } ]}| Campo | Tipo | Descripción |
|---|---|---|
type |
entero | obligatorio Siempre 3. |
id |
entero | opcional Identificador único. |
custom_id |
string | obligatorio Lo que recibe tu bot. 1-100 caracteres. |
options |
array de opciones | obligatorio De 1 a 25 opciones. |
placeholder |
string | opcional Texto cuando no hay nada elegido. Máx. 150 caracteres. |
min_values |
entero | opcional Mínimo de opciones a elegir (0-25). Por defecto 1. |
max_values |
entero | opcional Máximo de opciones a elegir (máx. 25). Por defecto 1. |
required |
booleano | opcional Solo modales. Si es obligatorio. Por defecto true. Se ignora en mensajes. |
disabled |
booleano | opcional Solo mensajes. Desactiva el menú. Por defecto false. Da error en modales. |
| Campo | Tipo | Descripción |
|---|---|---|
label |
string | obligatorio Texto visible. Máx. 100 caracteres. |
value |
string | obligatorio Valor que recibe tu bot. Máx. 100 caracteres. |
description |
string | opcional Texto pequeño debajo. Máx. 100 caracteres. |
emoji |
emoji parcial | opcional Emoji a la izquierda. |
default |
booleano | opcional Si aparece elegida al principio. |
Usa el JSON de arriba. Cuando alguien elija, recibirás data.values, por ejemplo ["minecraft", "rocket"].
import { ActionRowBuilder, StringSelectMenuBuilder, StringSelectMenuOptionBuilder, MessageFlags,} from 'discord.js';
const menu = new StringSelectMenuBuilder() .setCustomId('juegos') .setPlaceholder('Elige tus juegos') .setMinValues(1) .setMaxValues(3) .addOptions( new StringSelectMenuOptionBuilder().setLabel('Minecraft').setValue('minecraft') .setDescription('Construcción y aventura').setEmoji('⛏️'), new StringSelectMenuOptionBuilder().setLabel('Fortnite').setValue('fortnite') .setDescription('Battle royale').setEmoji('🔫'), );
const row = new ActionRowBuilder().addComponents(menu);
// Leer la elecciónclient.on('interactionCreate', async (interaction) => { if (interaction.isStringSelectMenu() && interaction.customId === 'juegos') { await interaction.reply({ content: `Has elegido: ${interaction.values.join(', ')}`, flags: MessageFlags.Ephemeral }); }});select = discord.ui.Select( custom_id="juegos", placeholder="Elige tus juegos", min_values=1, max_values=3, options=[ discord.SelectOption(label="Minecraft", value="minecraft", description="Construcción y aventura", emoji="⛏️"), discord.SelectOption(label="Fortnite", value="fortnite", description="Battle royale", emoji="🔫"), ],)
async def on_select(interaction: discord.Interaction): await interaction.response.send_message(f"Has elegido: {', '.join(select.values)}", ephemeral=True)
select.callback = on_select
view = discord.ui.LayoutView()view.add_item(discord.ui.ActionRow(select))minValues := 1row := discordgo.ActionsRow{Components: []discordgo.MessageComponent{ discordgo.SelectMenu{ MenuType: discordgo.StringSelectMenu, CustomID: "juegos", Placeholder: "Elige tus juegos", MinValues: &minValues, MaxValues: 3, Options: []discordgo.SelectMenuOption{ {Label: "Minecraft", Value: "minecraft", Description: "Construcción y aventura", Emoji: &discordgo.ComponentEmoji{Name: "⛏️"}}, {Label: "Fortnite", Value: "fortnite", Description: "Battle royale", Emoji: &discordgo.ComponentEmoji{Name: "🔫"}}, }, },}}
// Leer la elección// data := i.MessageComponentData(); data.Values -> []string{"minecraft"}En un modal
Sección titulada «En un modal»Dentro de un modal, el menú va dentro de un Label:
{ "type": 18, "label": "Tu plataforma", "component": { "type": 3, "custom_id": "plataforma", "options": [ { "label": "PC", "value": "pc" }, { "label": "Consola", "value": "consola" }, { "label": "Móvil", "value": "movil" } ] }}