Gateway (tempo real)
Conecte o bot ao gateway WebSocket, mantenha a conexão viva, mostre uma atividade e reconecte com segurança.
O gateway entrega eventos em tempo real. URL: wss://api.vsync.lat/gateway. Cada mensagem é um JSON de texto.
Conexão#
- Você abre o WebSocket. O servidor envia
hello. - Em até 10 segundos você envia
identifycom o token. Senão a conexão fecha com 4001. - O servidor responde
readye depois umGUILD_CREATEpara cada servidor do bot. - A partir daí chegam os eventos (
op: "dispatch"). Enviepingperiodicamente.
{ "op": "hello", "heartbeatMs": 30000 }{ "op": "identify", "token": "SEU_TOKEN" }{
"op": "ready",
"application": { "id": "1af40b9e-...", "name": "Capture Bot", "description": "", "avatarUrl": null, "bannerUrl": null, "tags": [], "botUsername": "capture_bot8420", "botPublic": false, "interactionsUrl": null, "guildCount": 1, "createdAt": 1791420368461 },
"user": { "id": "1af40b9e-...", "username": "capture_bot8420", "displayName": "Capture Bot", "bot": true, "avatarUrl": null, "online": false, "status": "offline", "activity": null },
"guilds": [ { "id": "682f1017-...", "name": "Capture", "iconUrl": null, "ownerId": "bc86cc02-...", "partner": false, "verified": false } ]
}(user traz mais campos de perfil; aqui resumidos.) Os eventos têm sempre este envelope. O seq começa em 1 e cresce de 1 em 1 por conexão:
{ "op": "dispatch", "seq": 2, "t": "MESSAGE_CREATE", "d": { } }Heartbeat#
Envie { "op": "ping" } a cada heartbeatMs (30 segundos). O servidor responde { "op": "pong" }. Se ficar cerca de 70 segundos sem ping, a conexão cai com 4009.
Presença e atividade#
O bot aparece online enquanto tiver conexão aberta. Para mostrar uma atividade (até 64 caracteres) ou limpá-la:
{ "op": "update_presence", "activity": { "name": "Jogando Xadrez" } }{ "op": "update_presence", "activity": null }Reconexão#
Não existe retomada de sessão: ao reconectar você faz identify de novo, recebe ready e os GUILD_CREATE com o estado atual, e eventos perdidos durante a queda não são reenviados. Reconecte com backoff exponencial (1 s, 2 s, 4 s, até 30 s, com um pouco de aleatoriedade) e zere o contador quando receber ready. O bot/src/client.mjs implementa isso.