Repository navigation
chatbot 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.
- No portal de desenvolvedores, crie uma aplicação e, nela, um bot.
- Copie a Public Key (página da aplicação) para
PublicKeye o token do bot para o token do canal (TokenSourcepor variável de ambiente, como nos outros canais). - Copie o Application ID para
ApplicationId. - 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. - Para ler as mensagens comuns dos canais, ligue o Message Content Intent do bot.
- Convide o bot com os escopos
boteapplications.commands.
- 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 := crmPollingliga o gateway (WebSocket) do Discord, com batimento, retomada e reconexão;Intentsescolhe o que ele manda. -
RegisterCommand('pedido', 'Faz um pedido', vRelatorio)registra um comando de barra.
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.
| 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 |
Começar
Servidor
- Rotas e parâmetros
- Rotas avançadas: tipos, grupos, versões 🚧
- Ler o pedido e responder
- Objetos no corpo 🚧
- Resposta em fluxo 🚧
- Plugins 🚧
- Serviços (contêiner de dependências) 🚧
- Barramento de eventos 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- JSON-RPC 2.0 🚧
- Servidor MCP (IA) 🚧
-
Protocol Buffers 🚧
- gRPC 🚧
- WebSocket 🚧
- Hubs (WebSocket) 🚧
- Swagger e Postman
- Servidor SOAP 🚧
- WS-Security 🚧
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
- Testes em memória 🚧
MQTT 🚧
- O que é e quando usar 🚧
- Cliente MQTT 🚧
- Broker MQTT 🚧
- MQTT-SN 🚧
- Ponte REST 🚧
- Segurança 🚧
- Rede ruim 🚧
E-mail 🚧
- Mensagens 🚧
- Enviar 🚧
- Receber 🚧
- Ler a caixa postal 🚧
- Verificar o que chega 🚧
- Servir caixas postais 🚧
- S/MIME 🚧
- OpenPGP 🚧
Chatbot 🚧
- O robô e os canais 🚧
- Telegram 🚧
- Gateways REST (WhatsApp não oficial) 🚧
- Discord 🚧
- Slack 🚧
- Microsoft Teams 🚧
- Conversa em etapas 🚧
Cliente
Motores
- Qual motor escolher?
- Compatibilidade
- Recursos
- QUIC
- Motor NgHttp2 (HTTP/2) 🚧
- Motor XSocket 🚧
- Motor AdvancedHTTP (experimental) 🚧
Avançado
Ajuda
- Problemas comuns
- Atualizar o Indy
- Várias versões do Delphi
- Vídeos e guias
- Módulos de terceiros
- Licenças
- Contribuir
- Roadmap e changelog
🚧 = em desenvolvimento, pode mudar