OpenClaw

Canal Discord do OpenClaw

Mensagens
Fácil

Conecte o OpenClaw ao Discord usando a API Bot Gateway do discord.js. Crie um bot no Developer Portal do Discord, ative os intents necessários, convide o bot para seu servidor e seu assistente de IA estará ativo no Discord. Suporta mensagens diretas, conversas em canais de servidor, reações, threads, comandos slash e mídia rica. Um dos canais mais fáceis de configurar.

Info rápida
DificuldadeFácil
CategoriaMensagens
Recursos suportados5 / 6

Discord Recursos suportados

Mensagens de texto

Suportado

Mídia e arquivos

Suportado

Reações

Suportado

Threads

Suportado

Mensagens de voz

Não suportado

Chat em grupo

Suportado

Discord Pré-requisitos

  • Uma conta Discord com acesso ao Discord Developer Portal
  • Um Bot Token do Discord Developer Portal (Applications → New Application → Bot)
  • Message Content Intent ativado em Privileged Gateway Intents
  • OpenClaw Gateway em execução e configurado

Discord Configuração rápida

1

Criar bot no Discord e ativar intents

Acesse o Discord Developer Portal (discord.com/developers), crie uma New Application, adicione um usuário Bot e copie o Bot Token. Em Privileged Gateway Intents, ative 'Message Content Intent' (obrigatório) e 'Server Members Intent' (recomendado para consulta de membros).

2

Adicionar configuração do canal Discord

Adicione a configuração do canal Discord em ~/.openclaw/openclaw.json. Defina o token (ou use a variável de ambiente DISCORD_BOT_TOKEN) e configure dm.policy para controlar quem pode enviar mensagens diretas ao bot.

3

Convidar bot para o servidor e testar

No Developer Portal, acesse OAuth2 → URL Generator. Selecione os escopos 'bot' e 'applications.commands'. Escolha as permissões: View Channels, Send Messages, Read Message History, Embed Links, Attach Files, Add Reactions. Abra a URL gerada para convidar o bot ao seu servidor. Envie '@NomeDoBot olá' para testar.

Discord Exemplo de configuração

config.json
{
  "channels": {
    "discord": {
      "enabled": true,
      "token": "YOUR_DISCORD_BOT_TOKEN",
      "dm": {
        "policy": "pairing"
      }
    }
  }
}

Discord Documentação Detalhada

Visão Geral da Arquitetura

O OpenClaw se conecta ao Discord por meio da biblioteca discord.js — um poderoso módulo Node.js para interagir com a API Bot Gateway do Discord. O bot se conecta via WebSocket ao gateway do Discord, recebendo eventos em tempo real para mensagens, reações e outras interações. O roteamento de sessão difere por contexto: conversas por mensagem direta são consolidadas na sessão principal do agente (agent:main:main), enquanto conversas em canais de servidor criam sessões isoladas por canal (agent:<agentId>:discord:channel:<channelId>). Comandos slash possuem suas próprias sessões isoladas por usuário. DMs em grupo são desativadas por padrão.
O bot token pode ser definido via variável de ambiente DISCORD_BOT_TOKEN ou no seu config em channels.discord.token.
Ative o Modo Desenvolvedor no Discord (Configurações do Usuário → Avançado) para copiar facilmente Guild IDs, Channel IDs e User IDs clicando com o botão direito.

Criando Seu Bot

Configurar um bot no Discord requer a criação de uma aplicação no Discord Developer Portal: 1. Acesse discord.com/developers/applications 2. Clique em 'New Application' e dê um nome 3. Navegue até a seção Bot e clique em 'Add Bot' 4. Copie o Bot Token — guarde-o em local seguro 5. Em Privileged Gateway Intents, ative: • Message Content Intent (obrigatório — sem isso, o bot não consegue ler o conteúdo das mensagens) • Server Members Intent (recomendado para consultas de membros/cargos) 6. Acesse OAuth2 → URL Generator 7. Selecione os escopos: 'bot' e 'applications.commands' 8. Selecione as permissões: View Channels, Send Messages, Read Message History, Embed Links, Attach Files, Add Reactions 9. Copie a URL gerada e abra-a para convidar o bot ao seu servidor
Evite conceder permissão de Administrador a menos que esteja depurando. Use as permissões mínimas necessárias para maior segurança.
Mantenha seu bot token em segredo. Qualquer pessoa com o token pode controlar seu bot. Se comprometido, regenere-o no Developer Portal.
O Message Content Intent é obrigatório para que o bot leia o texto das mensagens. Sem ele, o bot se conectará, mas não poderá ver nenhum conteúdo de mensagem.

Políticas de DM

As políticas de DM (Mensagem Direta) controlam quem pode interagir com seu assistente de IA em chats privados. O OpenClaw suporta quatro políticas: • pairing (padrão) — Remetentes desconhecidos recebem um código de pareamento com tempo limitado (expira após 1 hora). Aprove via 'openclaw pairing approve discord <código>' no seu terminal. Uma vez aprovados, podem conversar livremente. • allowlist — Somente IDs de usuários explicitamente listados em dm.allowFrom podem enviar mensagens ao bot. Todos os outros são silenciosamente ignorados. • open — Qualquer pessoa que enviar DM ao bot recebe uma resposta. Requer dm.allowFrom=["*"] para funcionar. Use com cautela. • disabled — O tratamento de DM é completamente desativado. O bot não responderá a nenhuma mensagem direta.
openclaw.json
{
  "channels": {
    "discord": {
      "dm": {
        "policy": "pairing",
        "allowFrom": ["123456789012345678"]
      }
    }
  }
}

Configuração de Canais de Servidor

Canais de servidor (guild) são onde a maioria das interações no Discord acontece. O OpenClaw oferece controle granular sobre quais servidores e canais o bot opera. Configurações de nível superior: • groupPolicy — Controla o tratamento de canais de servidor. Opções: open (responder em todos os canais), disabled (ignorar todas as mensagens de servidor), allowlist (restringir a servidores configurados) A configuração por servidor permite personalizar o comportamento para cada servidor: • slug — Identificador amigável para exibição • users — Lista de permissão de usuários (IDs ou nomes) • requireMention — Se o bot precisa ser @mencionado • reactionNotifications — Controle de notificações de reações (off, own, all, allowlist) Regras por canal permitem controle ainda mais fino dentro de um servidor: • allow — Ativar/desativar o canal • requireMention — Filtro de menção específico do canal • users — Lista de permissão de usuários do canal • skills — Filtro de habilidades (omita para todas) • systemPrompt — Instruções de contexto adicionais para a IA
openclaw.json
{
  "channels": {
    "discord": {
      "groupPolicy": "open",
      "guilds": {
        "YOUR_GUILD_ID": {
          "slug": "my-server",
          "requireMention": true,
          "channels": {
            "CHANNEL_ID": {
              "allow": true,
              "requireMention": false,
              "systemPrompt": "You are a helpful assistant in this channel."
            }
          }
        }
      }
    }
  }
}
Ative o Modo Desenvolvedor no Discord (Configurações do Usuário → Avançado) para clicar com o botão direito e copiar Guild, Channel e User IDs.
O systemPrompt por canal permite dar à IA personalidades ou instruções diferentes para canais diferentes.

Reações e Confirmações

O OpenClaw suporta o sistema de reações do Discord para confirmar mensagens e receber notificações de reações. Reações de confirmação: O bot pode reagir a mensagens recebidas com um emoji para sinalizar que está processando. Configure via messages.ackReaction. A reação pode ser removida automaticamente após a resposta da IA usando messages.removeAckAfterReply. Notificações de reações: Configure por servidor quais reações disparam notificações do agente: • off — Sem notificações de reações • own — Apenas reações a mensagens do bot • all — Todas as reações no canal • allowlist — Reações apenas de usuários permitidos
openclaw.json
{
  "channels": {
    "discord": {
      "messages": {
        "ackReaction": "👀",
        "removeAckAfterReply": true
      },
      "guilds": {
        "GUILD_ID": {
          "reactionNotifications": "own"
        }
      }
    }
  }
}

Formatação e Fragmentação de Mensagens

O Discord tem um limite de 2.000 caracteres por mensagem. O OpenClaw trata automaticamente respostas longas da IA fragmentando-as. Configurações principais: • textChunkLimit — Máximo de caracteres por fragmento de mensagem (padrão: 2000) • maxLinesPerMessage — Limite flexível de linhas por mensagem (padrão: 17) • chunkMode — Estratégia de divisão: 'length' (padrão, limite rígido de caracteres) ou 'newline' (divisão por limites de parágrafo) O bot também injeta contexto de mensagens recentes do servidor (configurável via historyLimit, padrão 20 mensagens) para que a IA possa participar naturalmente de conversas em andamento.
openclaw.json
{
  "channels": {
    "discord": {
      "textChunkLimit": 2000,
      "chunkMode": "newline",
      "historyLimit": 20
    }
  }
}

Comandos Slash e Ações de Ferramentas

O OpenClaw registra comandos slash nativos do Discord automaticamente quando o bot inicia (padrão: auto, configurável via commands.native). Definir commands.native como false limpa os comandos registrados anteriormente. Os comandos seguem as mesmas regras de lista de permissão que as mensagens — usuários não autorizados veem os comandos na interface do Discord, mas recebem uma resposta de 'não autorizado'. Isolamento de sessão: Comandos slash usam chaves de sessão separadas (agent:<agentId>:discord:slash:<userId>) em vez da sessão principal compartilhada, proporcionando isolamento por usuário. O agente suporta um conjunto rico de ações de ferramentas para interagir com o Discord: • Mensagens — Enviar, editar, excluir, fixar/desafixar mensagens, pesquisar mensagens • Threads — Criar threads, listar threads, responder em threads • Reações — Reagir a mensagens, listar reações • Moderação — Timeout, expulsar, banir membros (desativado por padrão) • Informações do servidor — Info de membros, info de cargos, info de canais, lista de emojis • Presença — Definir status do bot (desativado por padrão) Tags de resposta permitem que modelos controlem o encadeamento de mensagens: • [[reply_to_current]] — Resposta em thread à mensagem de origem • [[reply_to:<id>]] — Resposta em thread a um ID de mensagem específico
Certifique-se de que o escopo 'applications.commands' esteja incluído na URL de convite OAuth2 para que os comandos slash apareçam.
Ferramentas de moderação (timeout, expulsar, banir) e gerenciamento de cargos são desativados por padrão. Ative-os explicitamente no seu config se necessário.

Mídia e Manipulação de Arquivos

O OpenClaw suporta envio e recebimento de arquivos de mídia pelo Discord. O tamanho máximo de upload padrão é 8 MB (configurável via mediaMaxMb). Operações suportadas: • Receber imagens e anexos de arquivos dos usuários • Enviar imagens, documentos e outros arquivos nas respostas • Incorporar links com prévias ricas O bot requer a permissão 'Attach Files' para enviar mídia em canais de servidor.
O limite de tamanho de arquivo do Discord depende do nível de boost do servidor. O padrão é 8 MB para servidores sem boost, 50 MB para Nível 2 e 100 MB para Nível 3.

Integração com PluralKit

O OpenClaw suporta opcionalmente a resolução de mensagens proxy do PluralKit, permitindo que o bot identifique corretamente mensagens de sistemas PluralKit. Quando ativado, o bot resolve mensagens com proxy de volta à identidade original do membro PluralKit. Isso é útil para comunidades que usam PluralKit para roteamento de mensagens de sistemas/plurais. Detalhes principais: • Use o prefixo pk:<memberId> em listas de permissão para corresponder membros do PluralKit • Nomes de membros também são correspondidos por nome de exibição ou slug • As consultas usam o ID da mensagem original do Discord dentro da janela de 30 minutos do PluralKit • Se a consulta falhar, mensagens com proxy são tratadas como mensagens de bot (descartadas a menos que allowBots=true)
openclaw.json
{
  "channels": {
    "discord": {
      "pluralkit": {
        "enabled": true,
        "token": "pk_live_..."
      }
    }
  }
}
Sistemas privados do PluralKit requerem um pluralkit.token para resolver membros. Sem ele, mensagens com proxy são tratadas como mensagens de bot e descartadas.
Use o prefixo pk:<memberId> em listas de permissão para correspondência precisa de membros do PluralKit.

Aprovações de Execução (Interface de Botões)

O Discord suporta um fluxo de aprovação baseado em botões para operações de execução. Quando ativado, o bot envia botões interativos (Permitir uma vez, Sempre permitir, Negar) para aprovadores designados via DMs. Isso substitui o fluxo baseado em comando /approve por uma interface mais amigável. Requisitos: • execApprovals.enabled deve ser true • O ID de usuário Discord do aprovador deve estar listado em execApprovals.approvers • Arrays opcionais agentFilter e sessionFilter restringem quais agentes/sessões disparam aprovações Nota: O comando /approve <id> é usado apenas para aprovações encaminhadas. A interface de botões do Discord substitui as aprovações baseadas em comando para interações diretas.
openclaw.json
{
  "channels": {
    "discord": {
      "execApprovals": {
        "enabled": true,
        "approvers": ["USER_ID_1", "USER_ID_2"],
        "agentFilter": [],
        "sessionFilter": []
      }
    }
  }
}
Se os botões de aprovação não aparecerem ou você vir erros de 'unknown approval id', verifique se o ID do usuário está listado em execApprovals.approvers e se execApprovals.enabled está como true.

Portões de Ação

O OpenClaw oferece controle granular sobre quais ações de ferramentas do Discord o agente pode executar. As ações são controladas via channels.discord.actions.<action> (true/false). Ativados por padrão: • reactions, stickers, emojiUploads, stickerUploads, polls, permissions, messages, threads, pins, search, memberInfo, roleInfo, channelInfo, voiceStatus, events, channels Desativados por padrão: • roles — Gerenciamento de cargos (atribuir/remover cargos) • moderation — Timeout, expulsar, banir membros • presence — Definir status/atividade do bot Desative ações específicas para reduzir as capacidades do bot e limitar riscos. Por exemplo, defina channels.discord.actions.moderation=false para garantir que o agente nunca possa expulsar ou banir membros.
Siga o princípio do menor privilégio: ative apenas as ações que seu caso de uso realmente necessita.
Substituições de ferramentas por servidor e por canal estão disponíveis via guilds.<id>.tools e guilds.<id>.channels.<id>.tools para controle mais granular.

Resolução e Correspondência de Lista de Permissão

O OpenClaw suporta múltiplos formatos para especificar usuários e canais em listas de permissão: • IDs numéricos (preferido) — ex., "123456789012345678" • Nomes de usuário/canal do Discord — ex., "username", "#channel-name" • Menções — ex., "<@userId>", "<#channelId>" • Formatos com prefixo — discord:, user:, channel:, pk: (para membros do PluralKit) • Curinga — "*" para acesso irrestrito Na inicialização, o OpenClaw resolve nomes para IDs quando o bot pode pesquisar membros (requer Server Members Intent). O mapeamento é registrado; entradas não resolvidas são mantidas como digitadas. Detecção de proprietário: Quando uma lista de permissão por servidor ou por canal corresponde ao remetente, o OpenClaw trata o remetente como proprietário no prompt do sistema. O proprietário global é configurado via commands.ownerAllowFrom. Herança de threads: Threads herdam a configuração do canal pai (lista de permissão, requireMention, skills, prompts) a menos que explicitamente listadas com o ID do canal da thread.
Use IDs numéricos sempre que possível para correspondência confiável. A resolução baseada em nomes requer Server Members Intent e pode falhar para servidores grandes.
O formato slug é minúsculo com espaços substituídos por hífens (ex., #minha-ajuda → slug minha-ajuda).
Tópicos de canais de servidor são injetados como contexto, mas NÃO como prompt do sistema — trate-os como entrada não confiável.

Discord Referência de Configuração

enabled
Type: booleanDefault: true

Ativar ou desativar o canal Discord

token
Type: stringDefault: ""

Bot Token do Discord. Também pode usar a variável de ambiente DISCORD_BOT_TOKEN

dm.policy
Type: stringDefault: "pairing"

Controla quem pode enviar DM ao bot. Opções: pairing, allowlist, open, disabled

dm.allowFrom
Type: string[]Default: []

IDs de usuários Discord autorizados a enviar DM ao bot (quando dm.policy é allowlist)

groupPolicy
Type: stringDefault: "allowlist"

Política de tratamento de canais de servidor. Opções: open, disabled, allowlist

guilds
Type: objectDefault: {}

Configuração por servidor identificada por guild ID. Inclui slug, users, channels, requireMention, etc.

requireMention
Type: booleanDefault: true

Se o bot requer @menção para responder em canais de servidor

messages.ackReaction
Type: stringDefault: ""

Emoji para reagir como confirmação de mensagem durante o processamento

messages.removeAckAfterReply
Type: booleanDefault: false

Remover a reação de confirmação após a IA responder

textChunkLimit
Type: numberDefault: 2000

Máximo de caracteres por fragmento de mensagem (limite do Discord é 2000)

chunkMode
Type: stringDefault: "length"

Como dividir respostas longas. Opções: length (limite rígido de caracteres), newline (limites de parágrafo)

historyLimit
Type: numberDefault: 20

Número de mensagens recentes do servidor para incluir como contexto da IA

mediaMaxMb
Type: numberDefault: 8

Tamanho máximo de arquivo de mídia em megabytes para uploads

replyToMode
Type: stringDefault: "off"

Modo de encadeamento de respostas. Opções: off, first (encadear apenas o primeiro fragmento), all (encadear todos os fragmentos)

configWrites
Type: booleanDefault: true

Permitir atualizações de config iniciadas pelo Discord via comandos /config set|unset

allowBots
Type: booleanDefault: false

Se deve processar mensagens de outros bots. Use com cautela para evitar loops

retry.attempts
Type: numberDefault: 3

Número de tentativas de retry para chamadas falhas à API do Discord

retry.minDelayMs
Type: numberDefault: 500

Atraso mínimo em milissegundos entre tentativas de retry

retry.maxDelayMs
Type: numberDefault: 30000

Atraso máximo em milissegundos entre tentativas de retry

retry.jitter
Type: numberDefault: 0.1

Fator de jitter aplicado aos atrasos de retry para aleatorização

dm.enabled
Type: booleanDefault: true

Se deve aceitar mensagens diretas

dm.groupEnabled
Type: booleanDefault: false

Ativar tratamento de DMs em grupo

dm.groupChannels
Type: string[]Default: []

Lista de permissão de canais de DM em grupo

dmHistoryLimit
Type: numberDefault: -

Substituição do limite de histórico de DM por usuário

maxLinesPerMessage
Type: numberDefault: 17

Limite flexível de contagem de linhas por fragmento de mensagem

commands.native
Type: string | booleanDefault: "auto"

Registro de comandos slash nativos. Opções: auto (ativado para Discord), true, false

commands.text
Type: objectDefault: {}

Configuração de comandos de texto que requerem mensagens /... independentes

commands.useAccessGroups
Type: booleanDefault: false

Se deve impor verificações de grupo de acesso para comandos

actions.*
Type: booleanDefault: varies

Portões de ação de ferramentas. A maioria ativada por padrão; roles, moderation e presence são desativados por padrão

pluralkit.enabled
Type: booleanDefault: false

Ativar resolução de mensagens proxy do PluralKit

Discord Perguntas Frequentes

Discord Solução de Problemas

Bot conecta mas não responde às mensagens

O Message Content Intent não está ativado, o bot não tem permissões no canal, ou os requisitos de menção estão mal configurados.

Verifique se o Message Content Intent está ativado no Discord Developer Portal (Bot → Privileged Gateway Intents). Confirme que o bot tem as permissões View Channels, Send Messages e Read Message History. Verifique se requireMention está definido como true e o bot não está sendo @mencionado.
DMs não estão funcionando

O tratamento de DM pode estar desativado no config, ou a aprovação de pareamento está pendente.

Verifique se dm.policy não está definido como 'disabled'. Se estiver usando o modo pairing, verifique pareamentos pendentes com 'openclaw pairing list' e aprove via 'openclaw pairing approve discord <código>'. Se estiver usando o modo allowlist, certifique-se de que o ID Discord do usuário está em dm.allowFrom.
Comandos slash não estão visíveis no Discord

O escopo 'applications.commands' não foi incluído na URL de convite OAuth2 do bot.

Acesse o Developer Portal → OAuth2 → URL Generator, certifique-se de que ambos os escopos 'bot' e 'applications.commands' estão selecionados, gere uma nova URL de convite e reconvide o bot ao seu servidor. Comandos slash são controlados pelas mesmas listas de permissão que as mensagens regulares.
Bot está com rate limit ou travado

Os limites de taxa da API do Discord foram atingidos, ou a conexão do gateway está em estado ruim.

Reinicie o gateway com 'openclaw gateway --force'. O OpenClaw inclui lógica de retry integrada com backoff exponencial para limites de taxa (respostas 429). Se o problema persistir, verifique a configuração de retry em channels.discord.retry.
requireMention é false mas o bot ainda não responde

groupPolicy tem como padrão 'allowlist', então o bot só responde em servidores/canais explicitamente configurados.

Defina groupPolicy como 'open' para responder em todos os canais, ou adicione os IDs específicos de servidor e canal à configuração de guilds. Certifique-se de que a entrada do servidor inclui o canal com allow: true.
Botões de aprovação de execução não aparecem nas DMs

execApprovals não está ativado, ou o ID Discord do usuário não está listado no array approvers.

Defina execApprovals.enabled como true na configuração do canal Discord. Adicione o ID numérico do Discord do usuário ao array execApprovals.approvers. Use a interface de botões (não o comando /approve) para aprovações diretas no Discord.