Radio Group, Checkbox Group y Checkbox
type: 21 · 22 · 23
Modales
Vista previa modal.json
Tres componentes para que el usuario elija dentro de un modal, todos dentro de un Label:
| Tipo | Nombre | Para qué |
|---|---|---|
21 |
Radio Group | Elegir una opción de 2 a 10. |
22 |
Checkbox Group | Elegir varias opciones de 1 a 10. |
23 |
Checkbox | Una casilla de sí / no. |
Encuesta rápida
¿Con qué frecuencia juegas?*
Todos los días
Fines de semana
De vez en cuando
Una vez al mes o menos
¿Qué te interesa?*
Torneos
Sorteos
Eventos de voz
Quiero recibir avisos por mensaje directo
{ "type": 9, "data": { "custom_id": "encuesta", "title": "Encuesta rápida", "components": [ { "type": 18, "label": "¿Con qué frecuencia juegas?", "component": { "type": 21, "custom_id": "frecuencia", "options": [ { "label": "Todos los días", "value": "diario", "default": true }, { "label": "Fines de semana", "value": "finde" }, { "label": "De vez en cuando", "value": "aveces", "description": "Una vez al mes o menos" } ] } }, { "type": 18, "label": "¿Qué te interesa?", "component": { "type": 22, "custom_id": "intereses", "min_values": 0, "options": [ { "label": "Torneos", "value": "torneos" }, { "label": "Sorteos", "value": "sorteos", "default": true }, { "label": "Eventos de voz", "value": "voz" } ] } }, { "type": 18, "label": "Quiero recibir avisos por mensaje directo", "component": { "type": 23, "custom_id": "avisos_md" } } ] }}Radio Group (21)
Sección titulada «Radio Group (21)»| Campo | Tipo | Descripción |
|---|---|---|
type |
entero | obligatorio Siempre 21. |
custom_id |
string | obligatorio 1-100 caracteres. |
options |
array de opciones | obligatorio De 2 a 10 opciones. |
required |
booleano | opcional Por defecto true. |
Recibes: value (string con el valor elegido, o null si no eligió nada).
Checkbox Group (22)
Sección titulada «Checkbox Group (22)»| Campo | Tipo | Descripción |
|---|---|---|
type |
entero | obligatorio Siempre 22. |
custom_id |
string | obligatorio 1-100 caracteres. |
options |
array de opciones | obligatorio De 1 a 10 opciones. |
min_values |
entero | opcional 0-10. Por defecto 1. Debe ser al menos 1 si required es true. |
max_values |
entero | opcional 1-10. Por defecto, el número de opciones. |
required |
booleano | opcional Por defecto true. |
Recibes: values (array de strings; [] si no eligió nada).
Checkbox (23)
Sección titulada «Checkbox (23)»| Campo | Tipo | Descripción |
|---|---|---|
type |
entero | obligatorio Siempre 23. |
custom_id |
string | obligatorio 1-100 caracteres. |
default |
booleano | opcional Si empieza marcada. |
Recibes: value (true si está marcada, false si no).
| Campo | Tipo | Descripción |
|---|---|---|
value |
string | obligatorio Máx. 100 caracteres. |
label |
string | obligatorio Máx. 100 caracteres. |
description |
string | opcional Máx. 100 caracteres. |
default |
booleano | opcional Si empieza marcada. |
Responde a la interacción con el JSON de arriba ("type": 9).
await interaction.showModal({ custom_id: 'encuesta', title: 'Encuesta rápida', components: [ { type: 18, label: '¿Con qué frecuencia juegas?', component: { type: 21, custom_id: 'frecuencia', options: [ { label: 'Todos los días', value: 'diario' }, { label: 'Fines de semana', value: 'finde' }, ], }, }, { type: 18, label: 'Quiero recibir avisos por MD', component: { type: 23, custom_id: 'avisos_md' } }, ],});
// Al enviar (versiones recientes de discord.js)if (interaction.isModalSubmit() && interaction.customId === 'encuesta') { const frecuencia = interaction.fields.getRadioGroup('frecuencia'); // string o null const avisos = interaction.fields.getCheckbox('avisos_md'); // true / false}class Encuesta(discord.ui.Modal, title="Encuesta rápida"): frecuencia = discord.ui.Label(text="¿Con qué frecuencia juegas?", component=discord.ui.RadioGroup()) intereses = discord.ui.Label(text="¿Qué te interesa?", component=discord.ui.CheckboxGroup(min_values=0)) avisos = discord.ui.Label(text="Quiero recibir avisos por MD", component=discord.ui.Checkbox())
def __init__(self): super().__init__() self.frecuencia.component.add_option(label="Todos los días", value="diario") self.frecuencia.component.add_option(label="Fines de semana", value="finde") self.intereses.component.add_option(label="Torneos", value="torneos") self.intereses.component.add_option(label="Sorteos", value="sorteos")
async def on_submit(self, interaction: discord.Interaction): frecuencia = self.frecuencia.component.value # str o None intereses = self.intereses.component.values # list[str] avisos = self.avisos.component.value # bool await interaction.response.send_message("¡Gracias por responder!", ephemeral=True)Requiere una versión de discord.py que incluya RadioGroup, CheckboxGroup y Checkbox (rama principal / versiones más recientes).
discordgo aún no tiene tipos para estos componentes. Puedes enviar el modal con una petición HTTP propia usando el JSON de arriba:
body := map[string]any{ "type": 9, "data": map[string]any{ "custom_id": "encuesta", "title": "Encuesta rápida", "components": []any{ map[string]any{ "type": 18, "label": "Quiero recibir avisos por MD", "component": map[string]any{"type": 23, "custom_id": "avisos_md"}, }, }, },}
endpoint := discordgo.EndpointInteractionResponse(i.ID, i.Token)_, err := s.RequestWithBucketID("POST", endpoint, body, endpoint)