Primeiros passos
Crie um aplicativo, copie o token, autorize o bot em um servidor, registre um comando de barra e responda a ele.
Em poucos minutos você vai ter um bot online respondendo a um comando de barra. Você só precisa de uma conta no vsync, de um servidor onde seja dono (ou tenha Gerenciar servidor) e do Node 20 ou mais novo.
1. Crie um aplicativo#
- Abra as Configurações de usuário e, no grupo "Configurações do app", clique em Desenvolvedores (o Portal do Desenvolvedor).
- Clique em Novo aplicativo, escolha um nome de 2 a 32 caracteres e confirme.
2. Copie o token#
Aparece a janela Token do bot. Copie o token agora: ele é mostrado uma única vez. Se perder, use Bot → Redefinir token (o antigo deixa de funcionar). Guarde-o em uma variável de ambiente, por exemplo VSYNC_BOT_TOKEN.
3. Autorize o bot com o link OAuth2#
- Abra a aba OAuth2 do aplicativo.
- Marque as permissões do bot: no mínimo Ver canais e Enviar mensagens.
- Copie o Link gerado, abra-o, escolha o servidor e clique em Continuar.
O link tem este formato (detalhes em OAuth2 e permissões):
https://vsync.lat/oauth2/authorize?client_id=ID_DO_APP&scope=bot&permissions=VIEW_CHANNEL,SEND_MESSAGES4. Registre um comando e responda#
Instale a biblioteca ws (npm i ws), crie um arquivo bot.mjs e rode com VSYNC_BOT_TOKEN=... node bot.mjs (no Windows, defina a variável antes). O código faz quatro coisas: descobre o id do aplicativo, registra o comando /ola (com PUT, que é idempotente), conecta ao gateway e responde a cada uso do comando.
import WebSocket from "ws";
const API = "https://api.vsync.lat"; // origem da API (veja a página Bots)
const TOKEN = process.env.VSYNC_BOT_TOKEN;
const headers = { Authorization: `Bot ${TOKEN}`, "Content-Type": "application/json" };
// 1. Quem sou eu? O id do aplicativo é o mesmo id do bot.
const me = await fetch(`${API}/bot/me`, { headers }).then((r) => r.json());
const appId = me.application.id;
// 2. Registra o comando /ola (sobrescreve a lista de comandos globais).
await fetch(`${API}/applications/${appId}/commands`, {
method: "PUT",
headers,
body: JSON.stringify([
{
name: "ola",
description: "Diz olá",
options: [{ name: "nome", description: "Como te chamar", type: "string", required: false }],
},
]),
});
// 3. Conecta ao gateway e se identifica em até 10 segundos.
const ws = new WebSocket(API.replace(/^http/, "ws") + "/gateway");
ws.on("message", async (raw) => {
const msg = JSON.parse(raw.toString());
if (msg.op === "hello") {
ws.send(JSON.stringify({ op: "identify", token: TOKEN }));
setInterval(() => ws.send(JSON.stringify({ op: "ping" })), msg.heartbeatMs);
}
if (msg.op === "ready") console.log(`Online como ${msg.user.displayName}`);
// 4. Responde ao comando em até 3 segundos. Este callback NÃO leva o cabeçalho Bot.
if (msg.op === "dispatch" && msg.t === "INTERACTION_CREATE" && msg.d.type === "command") {
const { id, token, data } = msg.d;
await fetch(`${API}/interactions/${id}/${token}/callback`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ type: "message", data: { body: `Olá, ${data.options.nome ?? "mundo"}!` } }),
});
}
});Quando aparecer "Online como ..." no terminal, vá ao chat do servidor e digite /ola. O app mostra o formulário do comando; ao enviar, o bot responde.
Próximos passos#
- Entenda a conexão com o gateway e os eventos.
- Adicione botões, menus e formulários às respostas.
- Formate as mensagens com markdown, menções e embeds.
- Confira os limites e erros para não ser bloqueado.