Portal do Desenvolvedor
Experimental A plataforma de bots e apps está em desenvolvimento ativo. O suporte a servidores auto-hospedados chegou em 13/08/2026 com menos recursos que a nuvem. Veja o que é suportado.
← Documentação

Migrando do Discord

Rode seu bot do Discord no GameVox mudando dois valores de configuração: a URL base do REST e a URL do gateway. Sem mudanças de código, sem troca de SDK.

1. Crie uma aplicação de bot no GameVox

  1. Entre em developers.gamevox.com
  2. Clique em Nova aplicação
  3. Copie o token do bot na janela de criação (aparece uma única vez, salve agora)

2. Aponte sua biblioteca para o GameVox

discord.js (Node, v14+)

const { Client, GatewayIntentBits } = require('discord.js');

const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.MessageContent,
  ],
  rest: { api: 'https://bot-api.gamevox.com/api' },
  ws:   { gatewayURL: 'wss://gateway.gamevox.com' },
});

client.login(process.env.GAMEVOX_BOT_TOKEN);

discord.py

import discord

discord.http.Route.BASE = 'https://bot-api.gamevox.com/api/v10'
discord.gateway.DiscordWebSocket.DEFAULT_GATEWAY = (
    'wss://gateway.gamevox.com/?v=10&encoding=json'
)

intents = discord.Intents.default()
intents.message_content = True

client = discord.Client(intents=intents)
client.run(GAMEVOX_BOT_TOKEN)

JDA (Java)

JDA jda = JDABuilder.createDefault(GAMEVOX_BOT_TOKEN)
    .setGatewayEncoding(GatewayEncoding.JSON)
    .setRestConfig(new RestConfig().setBaseUrl("https://bot-api.gamevox.com/api"))
    .setGatewayPool(scheduler)
    .build();
// O JDA lê a URL do gateway em /gateway/bot na inicialização,
// que o nosso shim REST devolve como wss://gateway.gamevox.com.

Eris (Node)

const Eris = require('eris');

const client = new Eris(GAMEVOX_BOT_TOKEN, {
  rest: { baseURL: 'https://bot-api.gamevox.com/api/v10' },
  ws: { gateway: 'wss://gateway.gamevox.com' },
  // O Eris usa ETF por padrão; force JSON (o GameVox ainda não fala ETF).
});

client.connect();

DSharpPlus (.NET)

var discord = new DiscordClient(new DiscordConfiguration
{
    Token = Environment.GetEnvironmentVariable("GAMEVOX_BOT_TOKEN"),
    TokenType = TokenType.Bot,
    Intents = DiscordIntents.AllUnprivileged | DiscordIntents.MessageContents,
    ApiChannelEndpoint = "https://bot-api.gamevox.com/api/v10",
    GatewayUri = new Uri("wss://gateway.gamevox.com"),
});

await discord.ConnectAsync();

serenity (Rust)

let mut client = Client::builder(&token, intents)
    .event_handler(Handler)
    .api_base("https://bot-api.gamevox.com/api/v10")
    .gateway_url("wss://gateway.gamevox.com")
    .await?;
client.start().await?;

3. Instale o bot em um servidor

Na aba OAuth2 da sua aplicação no portal, monte uma URL de instalação com as permissões desejadas e compartilhe-a. A URL tem o formato padrão do Discord:

https://gamevox.com/oauth2/authorize?client_id=YOUR_APP_ID&scope=bot+applications.commands&permissions=8

Quem é dono do servidor clica no link, escolhe um servidor GameVox próprio e confirma.

4. O que é diferente

A superfície de compatibilidade mira 100%. A lógica do seu bot não precisa saber que não é o Discord. Alguns pontos a conhecer:

  • Os apps são configurados dentro do cliente. O GameVox pode exibir o formulário de configurações do seu app nas Configurações do servidor, então um bot configurável não precisa mais de um dashboard hospedado. É a única incompatibilidade deliberada e a única parte da plataforma sem equivalente no Discord. Documentação completa →
  • Época dos snowflakes: idêntica à do Discord (1420070400000, 01/01/2015 UTC). Analisadores escritos para o Discord funcionam com IDs do GameVox sem alteração. Mais →
  • Tópicos e publicações de fórum ainda não são suportados.
  • A voz funciona com o Lavalink. Sem configuração especial. O VOICE_SERVER_UPDATE simplesmente aponta para compatible-voice-gateway-{region}.gamevox.com e o Lavalink cuida do resto.
  • Emojis personalizados: os emojis do servidor funcionam nas mensagens exatamente como no Discord. Os emojis do próprio app são gerenciados no portal por enquanto; a API de bots só expõe GET. Veja Emojis.
  • Servidores auto-hospedados: clientes podem rodar o GameVox no próprio hardware. Seu bot funciona lá também, com uma superfície menor (ainda sem webhooks nem interações). Veja a documentação de auto-hospedagem.
  • Latência de escrita em EU / AP: bots hospedados fora de us-east verão cerca de 80–150 ms de latência adicional nas escritas por causa do encaminhamento de escrita do Aurora. Hospede em us-east para o melhor desempenho.

5. Configure seu app de dentro do GameVox

No Discord, um bot com qualquer configuração traz um dashboard web: um domínio, um login OAuth2, sessões, verificações de permissão, hospedagem — normalmente só para alguém escolher um canal de log e ligar três recursos. O GameVox já sabe quem é essa pessoa, qual servidor ela está configurando e se ela pode, então oferece essa superfície diretamente ao seu app.

Seu app descreve um formulário pelo gateway; o GameVox o exibe em Configurações do servidor ▸ Integrações ▸ Configurações e devolve os valores editados diretamente. O GameVox não guarda nada — seu app segue sendo o único dono da configuração dele.

A janela de Configurações do servidor do cliente GameVox, mostrando a aba Configurações de um app instalado com uma lista suspensa de idioma, uma chave e uma lista de canais para marcar.
Renderizado inteiramente a partir da resposta de um único bot. O bot não enviou nenhum id de canal — um seletor indica um tipo e o GameVox fornece as opções deste servidor. Nomes de servidor e de canais ocultados.

A integração inteira é um handler de gateway e uma chamada REST:

client.on("raw", async (packet) => {
  if (packet.t !== "APP_SETTINGS_REQUEST") return;
  const { nonce, server_id, action, values } = packet.d;

  const body = action === "save"
    ? { message: await save(server_id, values) }
    : { version: 2, sections: await describe(server_id) };

  await client.rest.post("/applications/@me/settings-response", {
    body: { nonce, ...body },
    query: new URLSearchParams({ server_id }),
  });
});

Doze tipos de campo, incluindo seletores de canal e de cargo que o GameVox preenche para você, campos condicionais, segredos mascarados e seções. Configurações no app →

6. Teste

O teste mais simples: responder pong a !ping.

client.on(Events.MessageCreate, async (msg) => {
  if (msg.author.bot) return;
  if (msg.content === '!ping') {
    await msg.reply('pong');
  }
});

Se o READY aparecer no log e a resposta chegar, seu bot está totalmente conectado. Comandos de barra, voz, componentes: nada disso exige alterações.