OpenClawSkills
GitHub
Canales • 5 min de lectura

Discord

Estado de soporte del bot de Discord, capacidades y configuración.

Estado: Disponible para DMs y canales de texto de servidor (guild), basado en el gateway oficial del bot de Discord.

Tutorial.step

Configuración Rápida

1. Crea un bot de Discord y copia el token del bot.

2. Habilita <strong>Message Content Intent</strong> en el Portal de Desarrolladores de Discord (si quieres usar lista permitida o resolución de apodos, también habilita <strong>Server Members Intent</strong>).

3. Configura el token para OpenClaw:

- Variable de entorno: <code>DISCORD_BOT_TOKEN=...</code>

- O configuración: <code>channels.discord.token: "..."</code>.

- Cuando ambos están configurados, la configuración tiene precedencia (env es solo fallback para la cuenta predeterminada).

4. Invita el bot a tu servidor y otorga permisos de lectura/escritura de mensajes (si solo quieres usar DMs, también puedes crear un servidor privado para pruebas).

5. Inicia el Gateway.

6. Los DMs por defecto usan emparejamiento: el primer contacto envía un código de emparejamiento, los mensajes solo se procesan después de la aprobación.

Configuración mínima:

Json5
{
  channels: {
    discord: {
      enabled: true,
      token: "TU_BOT_TOKEN",
    },
  },
}
Tutorial.step

Objetivos

- Chatear con OpenClaw via DMs de Discord o canales de servidor.

- Los DMs por defecto se pliegan en la sesión principal del agente (predeterminado '<code>'agent:main:main'</code>'); los canales de servidor están aislados en '<code>'agent:'<agentId>':discord:channel:'<channelId>''</code>' (el nombre para mostrar usa '<code>'discord:'<guildSlug>'#'<channelSlug>''</code>').

- Los DMs grupales se ignoran por defecto; habilítalos con <code>channels.discord.dm.groupEnabled</code> y restringe aún más con <code>channels.discord.dm.groupChannels</code>.

- Mantener enrutamiento determinista: las respuestas siempre vuelven al canal de origen.

Tutorial.step

Cómo Funciona

1. Crea Aplicación Discord → Bot, habilita intents requeridos (DMs/mensajes de servidor/contenido de mensajes), obtén token del bot.

2. Invita el bot a tu servidor y otorga permisos de lectura/envío de mensajes en los canales objetivo.

3. Configura <code>channels.discord.token</code> en OpenClaw (o usa <code>DISCORD_BOT_TOKEN</code> como fallback).

4. Inicia Gateway: cuando el token está disponible y <code>channels.discord.enabled</code> no es <code>false</code>, el canal Discord inicia automáticamente.

- Usar solo env también funciona: configura <code>DISCORD_BOT_TOKEN</code> (no necesitas escribir bloque de configuración).

5. El objetivo de entrega DM usa '<code>'user:'<id>''</code>' (o mención '<code>''<@id>''</code>'). Los IDs numéricos simples son ambiguos y serán rechazados.

6. La entrega a canal de servidor usa '<code>'channel:'<channelId>''</code>'. Las menciones son requeridas por defecto, configurable por guild o canal.

7. Los DMs por defecto usan guardián de seguridad: '<code>'channels.discord.dm.policy'</code>' (predeterminado '<code>'"pairing"'</code>'). Los remitentes desconocidos obtienen un código de emparejamiento (expira en 1 hora), aprueba con: '<code>'openclaw pairing approve discord '<code>''</code>'.

- Para permitir que cualquiera envíe DM: <code>channels.discord.dm.policy="open"</code> y <code>channels.discord.dm.allowFrom=["*"]</code>.

- Para lista permitida estricta: <code>channels.discord.dm.policy="allowlist"</code> y lista remitentes permitidos en <code>channels.discord.dm.allowFrom</code>.

- Para ignorar completamente los DMs: <code>channels.discord.dm.enabled=false</code> o <code>channels.discord.dm.policy="disabled"</code>.

8. Los DMs grupales se ignoran por defecto; habilítalos con <code>channels.discord.dm.groupEnabled</code>.

9. Opcional: usa <code>channels.discord.guilds</code> (priorizados por guild id) para configurar reglas de servidor y reglas de canal.

10. Opcional: comandos nativos. <code>commands.native</code> por defecto es <code>"auto"</code> (Discord/Telegram por defecto activado, Slack por defecto desactivado). Sobrescribe con <code>channels.discord.commands.native: true|false|"auto"</code>; <code>false</code> limpia comandos registrados. Los comandos de texto son controlados por <code>commands.text</code> y deben enviarse como mensajes <code>/...</code> separados. <code>commands.useAccessGroups: false</code> omite verificaciones de grupo de acceso de comandos.

- Lista de comandos y configuración: '<a href="/tools/slash-commands">'/tools/slash-commands'</a>'

11. Opcional: contexto de canal de servidor. <code>channels.discord.historyLimit</code> (predeterminado 20, fallback a <code>messages.groupChat.historyLimit</code>) inyecta los últimos N mensajes como contexto cuando el bot es mencionado; configura en <code>0</code> para deshabilitar.

12. Reacciones: los agentes pueden activar via herramienta '<code>'discord'</code>' (controlado por interruptores '<code>'channels.discord.actions.*'</code>'). Ver '<a href="/tools/reactions">'/tools/reactions'</a>' para semántica de cancelación de reacciones.

13. Los comandos nativos usan clave de sesión aislada: '<code>'agent:'<agentId>':discord:slash:'<userId>''</code>' (no escribe en la sesión '<code>'main'</code>' compartida).

Notas adicionales:

- La resolución de apodo/nombre de usuario → id depende de la búsqueda de miembros del guild, requiere <strong>Server Members Intent</strong>; si la búsqueda de miembros falla, usa id o mención <code><@id></code> directamente.

- slug: todo minúsculas, espacios reemplazados con <code>-</code>; el slug del nombre del canal no incluye <code>#</code>.

- La línea <code>[from:]</code> del mensaje grupal incluye <code>author.tag</code> + <code>id</code> para fácil ping.

Tutorial.step

Escrituras de Config

Por defecto, Discord tiene permitido escribir actualizaciones activadas por <code>/config set|unset</code> de vuelta al archivo de configuración (requiere <code>commands.config: true</code>).

Para deshabilitar:

Json5
{
  channels: { discord: { configWrites: false } },
}
Tutorial.step

Cómo Crear Tu Propio Bot (Portal de Desarrollador)

Este es un flujo de trabajo de configuración típico para usar OpenClaw en canales de servidor (como <code>#help</code>).

#

Tutorial.step

1) Crear App + Usuario Bot

1. Portal de Desarrolladores Discord → <strong>Applications</strong> → <strong>New Application</strong>

2. En tu aplicación:

- <strong>Bot</strong> → <strong>Add Bot</strong>

- Copia <strong>Bot Token</strong> (para <code>DISCORD_BOT_TOKEN</code>)

#

Tutorial.step

2) Habilitar Intents Requeridos

Los "privileged intents" de Discord deben habilitarse explícitamente:

Habilita en <strong>Bot</strong> → <strong>Privileged Gateway Intents</strong>:

- <strong>Message Content Intent</strong> (requerido; de lo contrario verás "Used disallowed intents", o el bot conecta pero no procesa mensajes)

- <strong>Server Members Intent</strong> (recomendado; para búsqueda de miembro/usuario y coincidencia de lista permitida)

<strong>Presence Intent</strong> generalmente no es necesario.

#

Tutorial.step

3) Generar Enlace de Invitación (Generador de URL OAuth2)

En la aplicación: <strong>OAuth2</strong> → <strong>URL Generator</strong>

<strong>Scopes</strong>

- ✅ <code>bot</code>

- ✅ <code>applications.commands</code> (requerido para comandos nativos)

<strong>Permisos del Bot (mínimo recomendado)</strong>

- ✅ View Channels

- ✅ Send Messages

- ✅ Read Message History

- ✅ Embed Links

- ✅ Attach Files

- ✅ Add Reactions (opcional pero recomendado)

- ✅ Use External Emojis / Stickers (opcional)

A menos que estés depurando y confíes completamente en el bot, no selecciones <strong>Administrator</strong>.

Copia la URL generada, ábrela y selecciona un servidor para completar la instalación.

#

Tutorial.step

4) Obtener IDs (guild/usuario/canal)

Discord usa IDs numéricos extensamente; la configuración de OpenClaw también recomienda usar IDs:

1. Discord (desktop/Web) → <strong>User Settings</strong> → <strong>Advanced</strong> → Habilita <strong>Developer Mode</strong>

2. Clic derecho para copiar:

- Nombre del servidor → <strong>Copy Server ID</strong>

- Canal → <strong>Copy Channel ID</strong>

- Usuario → <strong>Copy User ID</strong>

#

Tutorial.step

5) Configurar OpenClaw

##

Tutorial.step

Token

Recomendado usar variable de entorno en el servidor:

- <code>DISCORD_BOT_TOKEN=...</code>

O archivo de configuración:

Json5
{
  channels: {
    discord: {
      enabled: true,
      token: "TU_BOT_TOKEN",
    },
  },
}

Múltiples cuentas: usa '<code>'channels.discord.accounts'</code>' para configurar el token de cada cuenta (opcional '<code>'name'</code>'). Ver estructura compartida en '<a href="/gateway/configuration#telegramaccounts--discordaccounts--slackaccounts--signalaccounts--imessageaccounts">'/gateway/configuration'</a>'.

##

Tutorial.step

Lista Permitida + Enrutamiento

Ejemplo: "Solo en un servidor, solo permitirme, solo permitir #help":

Json5
{
  channels: {
    discord: {
      enabled: true,
      dm: { enabled: false },
      guilds: {
        YOUR_GUILD_ID: {
          users: ["YOUR_USER_ID"],
          requireMention: true,
          channels: {
            help: { allow: true, requireMention: true },
          },
        },
      },
      retry: {
        attempts: 3,
        minDelayMs: 500,
        maxDelayMs: 30000,
        jitter: 0.1,
      },
    },
  },
}

Explicación:

- <code>requireMention: true</code> significa responder solo cuando se menciona (recomendado para canales compartidos para evitar ruido).

- <code>agents.list[].groupChat.mentionPatterns</code> (o <code>messages.groupChat.mentionPatterns</code>) también se tratan como menciones.

- Si <code>channels</code> existe, los canales no listados se deniegan por defecto.

- Los hilos heredan la configuración del canal padre (lista permitida, requireMention, skills, prompts, etc.) a menos que añadas explícitamente el id del canal del hilo a la configuración.

- Los mensajes enviados por el bot se ignoran por defecto; configura <code>channels.discord.allowBots=true</code> para permitir (pero aún filtra mensajes propios).

- Si permites respuestas a otros bots (<code>allowBots=true</code>), usa <code>requireMention</code>, lista permitida de usuarios y prompts claros para prevenir bucles bot-a-bot.

#

Tutorial.step

6) Verificar

1. Inicia gateway.

2. Envía en canal de servidor: <code>@TuBot hola</code>.

3. Si no hay respuesta, ver solución de problemas abajo.

#

Tutorial.step

Solución de Problemas

- Primero ejecuta <code>openclaw doctor</code> y <code>openclaw channels status --probe</code>.

- <strong>"Used disallowed intents"</strong>: Habilita <strong>Message Content Intent</strong> (y usualmente <strong>Server Members Intent</strong>) en Portal de Desarrollador, luego reinicia gateway.

- <strong>Conecta pero no responde en canales de servidor</strong>:

- Falta Message Content Intent, o

- El bot carece de permisos de canal (View/Send/Read History), o

- La configuración requiere mención pero no usaste @, o

- La lista permitida denegó el canal/usuario.

- <strong><code>requireMention: false</code> aún no responde</strong>:

- <code>channels.discord.groupPolicy</code> por defecto es <strong>allowlist</strong>; configúralo en <code>"open"</code>, o configura guild/canal permitido en <code>channels.discord.guilds</code>.

- Si solo configuraste <code>DISCORD_BOT_TOKEN</code> sin crear bloque de configuración <code>channels.discord</code>, el <code>groupPolicy</code> predeterminado del runtime es <code>open</code>. Una vez que configuras explícitamente <code>channels.discord.groupPolicy</code>/<code>channels.defaults.groupPolicy</code> o lista permitida de guild/canal, se ajusta.

- <code>requireMention</code> debe colocarse bajo <code>channels.discord.guilds</code> (o canal específico); <code>channels.discord.requireMention</code> de nivel superior se ignora.