Gateway
Eventos em tempo real via socket.io e intents.
O Gateway entrega eventos em tempo real. Ele é socket.io v4 (não um WebSocket puro): use a biblioteca socket.io-client.
Conectar
const { io } = require('socket.io-client');
const socket = io('https://nexapp.online', {
path: '/socket.io', // padrão
auth: { token: process.env.NEX_TOKEN },
});
socket.on('connect', () => console.log('online'));
socket.on('connect_error', (err) => console.error(err.message)); // "Sem token" | "Token inválido"
socket.on('disconnect', (reason) => console.log('caiu:', reason));- Ao conectar, o bot fica online (ou no status salvo em Presença).
- Não existe evento
READYnem handshake de intents: os intents são lidos da configuração da aplicação no momento de cada entrega. - O heartbeat é o ping/pong nativo do socket.io (25 s / 20 s) — não precisa implementar nada.
- O socket.io reconecta sozinho; ao cair o último socket, o bot fica offline.
Intents
Configurados no portal (PUT /api/applications/:id/intents). Um evento só chega se o intent estiver ligado e o bot tiver acesso (ex.: VER_CANAL no canal da mensagem).
| Intent | Libera |
|---|---|
messages.read | MESSAGE_CREATE, MESSAGE_UPDATE, MESSAGE_DELETE |
members.read | GUILD_MEMBER_ADD, GUILD_MEMBER_REMOVE |
interactions.receive | INTERACTION_CREATE (modo Gateway). Também é obrigatório para os comandos aparecerem e os cliques funcionarem. |
voice.connect | Eventos de voz e a rota voice-members — veja Voz. |
messages.write | Só declarativo — hoje não libera nem bloqueia nada. Enviar depende apenas da permissão ENVIAR_MENSAGENS. |
Eventos
Só os eventos abaixo fazem parte da API pública. Reações, fixar, mudanças de canal/cargo e mensagens em threads ainda não são enviadas a bots. Um bot nunca recebe DMs, pedidos de amizade ou notificações.
MESSAGE_CREATE / MESSAGE_UPDATE
O objeto Message completo. Inclui as mensagens do próprio bot — filtre por fromId ou applicationId para não responder a si mesmo.
{
"id": "…", "serverId": "…", "channelId": "…", "fromId": "…",
"content": "!ping", "type": "text", "createdAt": "…", "editedAt": null,
"embeds": null, "components": null, "flags": 0, "applicationId": null,
"replyTo": null, "mentions": [], "reactions": [], "pinned": false
}MESSAGE_DELETE
{ "id": "id-da-mensagem" }id vem no evento. Se precisar saber o canal, guarde o mapeamento quando a mensagem for criada.GUILD_MEMBER_ADD
Alguém entrou no servidor (convite, Descobrir, entrada automática) ou um bot foi instalado.
{
"serverId": "…", "userId": "…", "nickname": null, "joinedAt": "…",
"timeoutUntil": null, "timeoutReason": null, "roleIds": [],
"user": { "id": "…", "username": "…", "displayName": "…", "isBot": false }
}GUILD_MEMBER_REMOVE
{ "serverId": "…", "userId": "…", "reason": "kicked" }reason: kicked, banned, app_uninstalled ou ausente (saiu por conta própria).
INTERACTION_CREATE
Slash command, clique em componente ou envio de modal — formato completo em Interações. Só no modo Gateway.
Eventos de voz
channel_voice:participants_update, channel_voice:signal, voice:permission_changed e voice:session_ended — veja Voz.