Portal deweloperski
Eksperymentalne Platforma botów i aplikacji jest aktywnie rozwijana. Obsługa serwerów hostowanych samodzielnie pojawiła się 13.08.2026 i ma mniej funkcji niż chmura. Zobacz, co jest obsługiwane.
← Dokumentacja

Przejście z Discorda

Uruchom istniejącego bota Discord w GameVox, zmieniając dwie wartości konfiguracji: bazowy URL REST i URL gatewaya. Bez zmian w kodzie, bez wymiany SDK.

1. Utwórz aplikację bota GameVox

  1. Zaloguj się na developers.gamevox.com
  2. Kliknij Nowa aplikacja
  3. Skopiuj token bota z okna tworzenia (pokazywany jest tylko raz, zapisz go od razu)

2. Skieruj swoją bibliotekę na GameVox

REST API jest pod adresem app-api.gamevox.com. Pierwotna nazwa, bot-api.gamevox.com, to to samo API i nadal działa, więc istniejące boty nie wymagają zmian.

discord.js (Node, v14+)

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

const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.MessageContent,
  ],
  rest: { api: 'https://app-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://app-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://app-api.gamevox.com/api"))
    .setGatewayPool(scheduler)
    .build();
// JDA przy starcie odczytuje URL gatewaya z /gateway/bot,
// a nasza warstwa REST zwraca tam wss://gateway.gamevox.com.

Eris (Node)

const Eris = require('eris');

const client = new Eris(GAMEVOX_BOT_TOKEN, {
  rest: { baseURL: 'https://app-api.gamevox.com/api/v10' },
  ws: { gateway: 'wss://gateway.gamevox.com' },
  // Eris domyślnie używa kodowania ETF; wymuś JSON (GameVox nie obsługuje jeszcze 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://app-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://app-api.gamevox.com/api/v10")
    .gateway_url("wss://gateway.gamevox.com")
    .await?;
client.start().await?;

3. Zainstaluj bota na serwerze

W zakładce OAuth2 swojej aplikacji w portalu deweloperskim zbuduj URL instalacji z potrzebnymi uprawnieniami i udostępnij go. URL ma standardową postać znaną z Discorda:

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

Właściciele serwerów klikają link, wybierają swój serwer GameVox i potwierdzają.

4. Co jest inaczej

Celem jest 100% zgodności. Logika twojego bota nie musi wiedzieć, że to nie Discord. Warto pamiętać o kilku rzeczach:

  • Aplikacje konfiguruje się w kliencie. GameVox może wyświetlić formularz ustawień twojej aplikacji w Ustawieniach serwera, więc bot z konfiguracją nie potrzebuje już hostowanego panelu. To jedyna celowa niezgodność i jedyna część platformy bez odpowiednika na Discordzie. Pełna dokumentacja →
  • Epoka snowflake: identyczna jak na Discordzie (1420070400000, 2015-01-01 UTC). Parsery napisane dla Discorda działają z identyfikatorami GameVox bez zmian. Więcej →
  • Wątki i posty na forum nie są jeszcze obsługiwane.
  • Głos działa z Lavalinkiem. Bez specjalnej konfiguracji. VOICE_SERVER_UPDATE po prostu wskazuje na compatible-voice-gateway-{region}.gamevox.com, a resztą zajmuje się Lavalink.
  • Własne emoji: emoji serwera działają w wiadomościach dokładnie tak jak na Discordzie. Emoji aplikacji na razie zarządza się w portalu deweloperskim; API botów udostępnia tylko GET. Zobacz Emoji.
  • Serwery hostowane samodzielnie: klienci mogą uruchamiać GameVox na własnym sprzęcie. Twój bot działa również tam, łącznie z komendami ukośnikowymi i komponentami wiadomości, choć z nieco mniejszym zakresem funkcji. Zobacz dokumentację serwerów hostowanych samodzielnie.
  • Opóźnienie zapisów w EU / AP: boty hostowane poza us-east odczują około 80–150 ms dodatkowego opóźnienia przy zapisach z powodu przekazywania zapisów w Aurorze. Dla najlepszej wydajności hostuj w us-east.

5. Skonfiguruj aplikację z poziomu GameVox

Na Discordzie bot z jakąkolwiek konfiguracją wymaga panelu WWW: domeny, logowania OAuth2, sesji, sprawdzania uprawnień, hostingu. Zwykle tylko po to, żeby operator mógł wybrać kanał logów i przełączyć trzy funkcje. GameVox już wie, kim jest operator, który serwer konfiguruje i czy ma do tego prawo, więc udostępnia tę warstwę bezpośrednio twojej aplikacji.

Twoja aplikacja opisuje formularz przez gateway; GameVox wyświetla go w Ustawienia serwera ▸ Integracje ▸ Ustawienia i odsyła zmienione wartości prosto do niej. GameVox niczego z tego nie przechowuje: twoja aplikacja pozostaje jedynym właścicielem swojej konfiguracji.

Okno Ustawień serwera w kliencie GameVox z zakładką Ustawienia zainstalowanej aplikacji: lista rozwijana języka, przełącznik i lista kanałów do zaznaczenia.
Wygenerowane w całości z jednej odpowiedzi bota. Bot nie wysłał żadnych identyfikatorów kanałów: selektor podaje rodzaj, a GameVox dostarcza opcje z tego serwera. Nazwy serwera i kanałów zostały ukryte.

Cała integracja to jeden handler gatewaya i jedno wywołanie 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 }),
  });
});

Dwanaście typów pól, w tym selektory kanałów i ról, które GameVox wypełnia za ciebie, pola warunkowe, maskowane sekrety i sekcje. Ustawienia w aplikacji →

6. Przetestuj

Najprostszy test: odpowiedz na !ping wiadomością pong.

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

Jeśli w logach pojawi się READY i dotrze odpowiedź, twój bot jest w pełni połączony. Komendy ukośnikowe, głos, komponenty: żadne z nich też nie wymagają zmian.