#Não consigo usar os slash commands (do openclaw) no discord.

1 messages · Page 1 of 1 (latest)

minor peak
#

Ja conectei o openclaw ao discord e ele funciona corretamente via mensagens , o bot tem permissão de adm e eu sou "owner" dor servidor, contudo recebo um mensagem efêmera de "você não tem permissão" quando tento usar qualquer slash command do bot.

rich impBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> ✅ Mark Solution

hot juniperBOT
#

Isso normalmente cai em duas causas bem diferentes no Discord — e dá pra checar rápido qual é a sua.

1) Permissão do Discord (não é do OpenClaw)

Se a mensagem efêmera aparece “instantânea” e parece do próprio Discord, confira no canal onde você roda o comando:

  • Editar Canal → Permissões → “Usar comandos de aplicativo (Use Application Commands)”
    • garanta que não está em “Negar” pra você / seu cargo / @everyone.
  • Configurações do Servidor → Integrações → (seu app/bot)
    • veja se os comandos não estão restritos a um cargo específico.

Mesmo sendo owner, um deny explícito em permissões do canal pode causar exatamente esse “você não tem permissão”.

2) Autorização do OpenClaw para comandos (bem comum)

O OpenClaw pode deixar você conversar normal por mensagem, mas bloquear slash commands se você não estiver na allowlist de comandos.

Pontos pra checar na config:

#

(A) Você tem commands.allowFrom definido?

Se você configurou commands.allowFrom e seu usuário não está lá, todo slash command vai dar “sem permissão”.

Exemplo (permitindo seu user id no Discord):

{
  commands: {
    allowFrom: {
      discord: ["user:<SEU_USER_ID>"]
    }
  }
}

Docs: https://docs.openclaw.ai/tools/slash-commands (seção Config, commands.allowFrom)

(B) Você está tentando usar comandos em servidor (guild)?

#

Pra usar bem em guild, normalmente você precisa allowlistar o servidor/usuário:

{
  channels: {
    discord: {
      groupPolicy: "allowlist",
      guilds: {
        <SEU_SERVER_ID>: {
          users: ["<SEU_USER_ID>"],
          requireMention: false
        }
      }
    }
  }
}
#

Docs: https://docs.openclaw.ai/channels/discord.md (seção “Recommended: Set up a guild workspace”)


Me diz 3 coisas e eu fecho o diagnóstico

  1. Você está rodando o slash command em DM com o bot ou num canal do servidor?
  2. Qual sua versão? openclaw --version
  3. Cole aqui apenas (com tokens redigidos) os trechos commands e channels.discord do seu openclaw.json.

(Importante: não poste o channels.discord.token.)

minor peak
#
  1. Em um canal do servidor
  2. 2026.3.1
  3. Não sei onde encontrar isso
hot juniperBOT
#

Beleza — como você está tentando num canal do servidor e a versão está ok, o próximo passo é só achar onde está a config ativa do OpenClaw e checar a allowlist de comandos.

Onde achar o openclaw.json (caminho da config)

No terminal da máquina onde o Gateway está rodando, rode:

openclaw config file

Isso imprime o caminho do arquivo de config que o Gateway/CLI estão usando (por padrão costuma ser algo como ~/.openclaw/openclaw.json).
Docs: https://docs.openclaw.ai/cli/config

O que você deve me mandar (sem vazar token)

Rode estes comandos e cole o output aqui:

#
openclaw config get commands --json
openclaw config get channels.discord.groupPolicy --json
openclaw config get channels.discord.guilds --json

(Obs: não manda channels.discord.token.)

O conserto mais provável

Se no commands aparecer allowFrom, ele vira a única allowlist para slash commands. Aí, se seu user id não estiver lá, o bot responde “você não tem permissão”.

Você pode:

  • ou adicionar seu usuário em commands.allowFrom.discord (formato user:<SEU_USER_ID>)
  • ou remover commands.allowFrom pra voltar a usar as allowlists do canal/guild

Depois de qualquer mudança:

#
openclaw gateway restart

Extra (lado Discord, só pra eliminar dúvida)

No canal: Editar Canal → Permissões → “Usar comandos de aplicativo”: garanta que não está “Negar”.

Se você colar aqui o output dos 3 config get acima, eu te digo exatamente qual linha ajustar.

minor peak
hot juniperBOT
#

Seu output está batendo com um cenário bem comum:

  • channels.discord.guildsnão existe (“Config path not found”)
  • e esse “opeb” muito provavelmente é open (groupPolicy = open)

Nesse modo, o bot pode até responder “normal” em mensagens, mas os slash commands ficam bloqueados porque o OpenClaw trata comandos como algo que exige autorização explícita.

Vamos resolver em 2 jeitos — o Jeito A é o mais rápido.


Primeiro: ache o arquivo de config ativo

No terminal da máquina que roda o Gateway:

openclaw config file
#

(se isso falhar, manda o erro aqui)


Jeito A (rápido): permitir slash commands só pro seu usuário

  1. Pegue seu Discord User ID (Developer Mode → clique direito no seu usuário → “Copy User ID”)

  2. Rode (substitui <...>):

openclaw config set commands.allowFrom.discord '["user:<SEU_USER_ID>"]' --strict-json
openclaw gateway restart

Isso libera slash commands só pra você, sem mexer no resto.

Docs do commands.allowFrom: https://docs.openclaw.ai/tools/slash-commands

#

Jeito B (recomendado pra servidor privado): allowlist do servidor

Se você quer que o Discord vire um “workspace” certinho:

openclaw config set channels.discord.groupPolicy '"allowlist"' --strict-json
openclaw config set 'channels.discord.guilds["<SEU_SERVER_ID>"]' '{ requireMention: false, users: ["<SEU_USER_ID>"] }' --strict-json
openclaw gateway restart

Docs: https://docs.openclaw.ai/channels/discord.md


Só pra confirmar (importante)

Essa mensagem efêmera “você não tem permissão” aparece com o avatar/nome do seu bot (OpenClaw), ou parece uma mensagem “do próprio Discord”?

#
  • Se for do bot → as configs acima resolvem.
  • Se for do Discord → aí é permissão do canal (“Usar comandos de aplicativo / Use Application Commands”) e a gente ajusta do lado do Discord.

Me manda o resultado de:

openclaw config file
openclaw config get channels.discord.groupPolicy

e me diz se a efêmera é do bot ou do Discord.

minor peak
hot juniperBOT
#

Perfeito — channels.discord.groupPolicy = "Open" explica o comportamento.

No modo Open, o bot pode responder mensagens no servidor, mas slash commands ficam bloqueados porque o OpenClaw exige um “sender autorizado” pra rodar comandos (por segurança).

Você tem 2 caminhos:


Opção 1 (recomendada): colocar o servidor em allowlist (workspace “certo”)

  1. Pegue os IDs:
  • Server ID: Developer Mode ligado → clique direito no ícone do servidor → Copy Server ID
  • User ID: clique direito no seu usuário → Copy User ID
  1. Aplique a config:
#
openclaw config set channels.discord.groupPolicy '"allowlist"' --strict-json
openclaw config set 'channels.discord.guilds["<SEU_SERVER_ID>"]' '{ requireMention: false, users: ["<SEU_USER_ID>"] }' --strict-json
openclaw gateway restart

Depois disso, os slash commands devem funcionar no servidor.

Docs: https://docs.openclaw.ai/channels/discord.md


Opção 2 (mais rápida, sem mexer no groupPolicy): allowlist só de comandos

Se você quiser manter Open, mas liberar slash commands só pra você:

#
openclaw config set commands.allowFrom.discord '["user:<SEU_USER_ID>"]' --strict-json
openclaw gateway restart

Docs: https://docs.openclaw.ai/tools/slash-commands


Se você colar aqui apenas seu Server ID e User ID (só números, isso não é secreto), eu te devolvo os comandos já prontos pra copiar/colar.

minor peak
#

do servidor: 1338620596577374301
meu: 830859997432119306

quero que mencionar para ativar a resposta ainda seja necessário

hot juniperBOT
#

Ótimo — então vamos pelo modo allowlist e manter mention obrigatório.

Roda isso no host do Gateway:

openclaw config set channels.discord.groupPolicy '"allowlist"' --strict-json
openclaw config set 'channels.discord.guilds["1338620596577374301"]' '{ requireMention: true, users: ["830859997432119306"] }' --strict-json
openclaw gateway restart

O que isso faz:

  • Só esse servidor fica “liberado” (allowlist)
  • O bot só responde mensagens normais quando for mencionado (requireMention: true)
  • Seus slash commands devem passar porque você está na lista users

Se depois do restart ainda aparecer “você não tem permissão”, me manda o output de:

#
openclaw config get commands.allowFrom
openclaw config get commands.useAccessGroups

(às vezes alguém setou commands.allowFrom e isso sobrepõe tudo).

minor peak
hot juniperBOT
#

Esse “Config token differs from token service…” não tem a ver com Discord em si — é o OpenClaw avisando que o token do Gateway que está no ~/.openclaw/openclaw.json é diferente do token que ficou “gravado” no serviço/daemon quando ele foi instalado.

Isso costuma aparecer quando:

  • você mudou gateway.auth.token em algum momento ou
  • o serviço foi instalado com um token e depois o config ficou diferente.

1) Primeiro: confirma que sua config do Discord foi gravada mesmo

Roda:

openclaw config get 'channels.discord.guilds["1338620596577374301"]'
openclaw config get channels.discord.groupPolicy

Você deve ver algo como allowlist e o objeto com requireMention: true + seu user.

2) Agora: reiniciar o serviço “do jeito certo” (e corrigir o aviso do token)

#

Eu recomendo reinstalar o serviço do gateway (isso só reescreve a configuração do daemon; não apaga seus dados):

openclaw gateway install --force
openclaw gateway restart

Depois disso, testa de novo um slash command (ex: /status).

Docs do gateway service: https://docs.openclaw.ai/cli/gateway

3) Se ainda não funcionar

Manda aqui o output de:

openclaw gateway status
#

(esse comando geralmente mostra exatamente onde está a divergência “Config (cli)” vs “Config (service)” e fica fácil dizer qual token/config o serviço está usando.)

Quando os slash commands funcionarem, você ainda vai manter o comportamento que você quer: responder só quando mencionar (porque requireMention: true continua valendo).

minor peak