Action Row
type: 1
Mensajes
Vista previa payload.json
La Action Row es una fila horizontal de componentes interactivos. Puede contener:
- de 1 a 5 botones, o
- un único menú de selección.
{ "flags": 32768, "components": [ { "type": 10, "content": "¿Qué quieres hacer?" }, { "type": 1, "components": [ { "type": 2, "style": 1, "label": "Aceptar", "custom_id": "aceptar" }, { "type": 2, "style": 2, "label": "Más tarde", "custom_id": "mas_tarde" }, { "type": 2, "style": 4, "label": "Rechazar", "custom_id": "rechazar" } ] }, { "type": 1, "components": [ { "type": 3, "custom_id": "idioma", "placeholder": "Elige tu idioma", "options": [ { "label": "Español", "value": "es", "emoji": { "name": "🇪🇸" } }, { "label": "English", "value": "en", "emoji": { "name": "🇬🇧" } } ] } ] } ]}| Campo | Tipo | Descripción |
|---|---|---|
type |
entero | obligatorio Siempre 1. |
id |
entero | opcional Identificador único en el mensaje. |
components |
array | obligatorio Hasta 5 Buttons o 1 menú de selección. |
Usa el JSON de arriba como cuerpo del mensaje.
import { ActionRowBuilder, ButtonBuilder, ButtonStyle, StringSelectMenuBuilder, TextDisplayBuilder, MessageFlags,} from 'discord.js';
const buttons = new ActionRowBuilder().addComponents( new ButtonBuilder().setCustomId('aceptar').setLabel('Aceptar').setStyle(ButtonStyle.Primary), new ButtonBuilder().setCustomId('mas_tarde').setLabel('Más tarde').setStyle(ButtonStyle.Secondary), new ButtonBuilder().setCustomId('rechazar').setLabel('Rechazar').setStyle(ButtonStyle.Danger),);
const menu = new ActionRowBuilder().addComponents( new StringSelectMenuBuilder() .setCustomId('idioma') .setPlaceholder('Elige tu idioma') .addOptions( { label: 'Español', value: 'es', emoji: { name: '🇪🇸' } }, { label: 'English', value: 'en', emoji: { name: '🇬🇧' } }, ),);
await channel.send({ flags: MessageFlags.IsComponentsV2, components: [new TextDisplayBuilder().setContent('¿Qué quieres hacer?'), buttons, menu],});buttons = discord.ui.ActionRow( discord.ui.Button(label="Aceptar", style=discord.ButtonStyle.primary, custom_id="aceptar"), discord.ui.Button(label="Más tarde", style=discord.ButtonStyle.secondary, custom_id="mas_tarde"), discord.ui.Button(label="Rechazar", style=discord.ButtonStyle.danger, custom_id="rechazar"),)
menu = discord.ui.ActionRow( discord.ui.Select( custom_id="idioma", placeholder="Elige tu idioma", options=[ discord.SelectOption(label="Español", value="es", emoji="🇪🇸"), discord.SelectOption(label="English", value="en", emoji="🇬🇧"), ], ))
view = discord.ui.LayoutView()view.add_item(discord.ui.TextDisplay("¿Qué quieres hacer?"))view.add_item(buttons)view.add_item(menu)await channel.send(view=view)buttons := discordgo.ActionsRow{Components: []discordgo.MessageComponent{ discordgo.Button{Label: "Aceptar", Style: discordgo.PrimaryButton, CustomID: "aceptar"}, discordgo.Button{Label: "Más tarde", Style: discordgo.SecondaryButton, CustomID: "mas_tarde"}, discordgo.Button{Label: "Rechazar", Style: discordgo.DangerButton, CustomID: "rechazar"},}}
menu := discordgo.ActionsRow{Components: []discordgo.MessageComponent{ discordgo.SelectMenu{ MenuType: discordgo.StringSelectMenu, CustomID: "idioma", Placeholder: "Elige tu idioma", Options: []discordgo.SelectMenuOption{ {Label: "Español", Value: "es", Emoji: &discordgo.ComponentEmoji{Name: "🇪🇸"}}, {Label: "English", Value: "en", Emoji: &discordgo.ComponentEmoji{Name: "🇬🇧"}}, }, },}}
s.ChannelMessageSendComplex(channelID, &discordgo.MessageSend{ Flags: discordgo.MessageFlagsIsComponentsV2, Components: []discordgo.MessageComponent{ discordgo.TextDisplay{Content: "¿Qué quieres hacer?"}, buttons, menu, },})Consejos
Sección titulada «Consejos»- Pon el botón más importante primero y usa solo un botón
Primarypor fila. - Si necesitas más de 5 botones, usa varias filas o considera un menú de selección.
- En V2 las filas pueden ir dentro de un Container, no solo al final del mensaje.