Skip to content
mobius1qwe edited this page Nov 13, 2026 · 1 revision

Home > Chatbot > Discord

Chatbot no Discord

Important

Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.

Nível: intermediário

Em uma frase: TRALChatDiscord liga o robô ao Discord: comandos de barra e botões pelo endpoint de interações (com assinatura Ed25519), mensagens de canal pelo gateway (WebSocket) e respostas pela API REST v10.

Você vai precisar: os pacotes RALModuleChatPackage e RALModuleChatDiscordPackage (este requer RALCryptoCurvesPackage, RALNetPackage e RALModuleWebSocketPackage), um cliente RAL com HTTPS e, para receber interações, um TRALChatWebhookModule num servidor com HTTPS público.

Preparando no Discord

  1. No portal de desenvolvedores, crie uma aplicação e, nela, um bot.
  2. Copie a Public Key (página da aplicação) para PublicKey e o token do bot para o token do canal (TokenSource por variável de ambiente, como nos outros canais).
  3. Copie o Application ID para ApplicationId.
  4. Em Interactions Endpoint URL, ponha https://seu.dominio/discord (a rota do canal no módulo de webhook). Ao salvar, o Discord testa a URL com assinaturas certas e erradas: o RAL responde 401 às erradas, como ele exige.
  5. Para ler as mensagens comuns dos canais, ligue o Message Content Intent do bot.
  6. Convide o bot com os escopos bot e applications.commands.

Recebendo

  • Interações (comandos de barra, botões, menus): chegam pelo webhook, conferidas por Ed25519 sobre o horário e o corpo, com janela de 5 minutos. O RAL responde na hora com "pensando..." e a primeira resposta do robô preenche essa mensagem.
  • Mensagens de canal e conversas diretas: ReceiveMode := crmPolling liga o gateway (WebSocket) do Discord, com batimento, retomada e reconexão; Intents escolhe o que ele manda.
  • RegisterCommand('pedido', 'Faz um pedido', vRelatorio) registra um comando de barra.

Enviando

Texto (até 2000 caracteres; com UseEmbeds, em embed até 4096, cor EmbedColor), botões (ButtonsPerRow), menu de seleção para listas, anexos, edição, remoção, "digitando" e mensagem direta (conversa u:<id do usuário>). O limite de 5 mensagens a cada 5 segundos por canal e o retry_after do Discord já são respeitados.

Erros comuns

sintoma causa o que fazer
o portal não aceita a Interactions Endpoint URL PublicKey errada ou servidor sem HTTPS público confira a chave e o certificado
o robô não vê o texto das mensagens falta o Message Content Intent ligue no portal e em Intents
comando de barra não aparece não registrado, ou bot sem applications.commands RegisterCommand e convite com o escopo

Veja também

Começar

Servidor

MQTT 🚧

E-mail 🚧

Chatbot 🚧

Cliente

Motores

Avançado

Ajuda

🚧 = em desenvolvimento, pode mudar

Clone this wiki locally