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
- Entre em developers.gamevox.com
- Clique em Nova aplicação
- 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_UPDATEsimplesmente aponta paracompatible-voice-gateway-{region}.gamevox.come 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 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.