Entwicklerportal
Experimentell Die Bot- & App-Plattform wird aktiv weiterentwickelt. Die Unterstützung für selbst gehostete Server ist am 13.08.2026 erschienen und bietet weniger Funktionen als die Cloud. Sieh dir an, was unterstützt wird.
← Doku

Umstieg von Discord

Betreibe deinen bestehenden Discord-Bot auf GameVox, indem du zwei Konfigurationswerte änderst: die REST-Basis-URL und die Gateway-URL. Keine Codeänderungen, kein SDK-Wechsel.

1. Erstelle eine GameVox-Bot-Anwendung

  1. Melde dich auf developers.gamevox.com an
  2. Klicke auf Neue Anwendung
  3. Kopiere den Bot-Token aus dem Erstellungsdialog (wird nur einmal angezeigt, speichere ihn sofort)

2. Richte deine Bibliothek auf GameVox aus

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();
// JDA liest die Gateway-URL beim Start von /gateway/bot,
// die unser REST-Shim als wss://gateway.gamevox.com zurückgibt.

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' },
  // Eris nutzt standardmäßig ETF; erzwinge JSON (GameVox spricht noch kein 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. Installiere den Bot auf einem Server

Baue im Tab OAuth2 deiner Anwendung im Entwicklerportal einen Installationslink mit den benötigten Berechtigungen und teile ihn. Die URL hat die übliche Discord-Form:

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

Server-Eigentümer klicken auf den Link, wählen einen eigenen GameVox-Server und bestätigen.

4. Was anders ist

Die Kompatibilitätsfläche zielt auf 100 %. Die Logik deines Bots muss nicht wissen, dass es nicht Discord ist. Einige Punkte solltest du kennen:

  • Apps werden im Client konfiguriert. GameVox kann das Einstellungsformular deiner App in den Servereinstellungen rendern, sodass ein konfigurierbarer Bot kein gehostetes Dashboard mehr braucht. Das ist die eine bewusste Inkompatibilität und der einzige Teil der Plattform ohne Discord-Entsprechung. Vollständige Doku →
  • Snowflake-Epoche: identisch mit Discord (1420070400000, 01.01.2015 UTC). Parser, die für Discord geschrieben wurden, funktionieren unverändert mit GameVox-IDs. Mehr →
  • Threads / Forenbeiträge werden noch nicht unterstützt.
  • Sprache funktioniert mit Lavalink. Keine besondere Konfiguration. VOICE_SERVER_UPDATE verweist einfach auf compatible-voice-gateway-{region}.gamevox.com, und Lavalink erledigt den Rest.
  • Eigene Emojis: servereigene Emojis funktionieren in Nachrichten genau wie bei Discord. App-eigene Emojis werden vorerst im Entwicklerportal verwaltet; die Bot-API bietet nur GET. Siehe Emojis.
  • Selbst gehostete Server: Kundinnen und Kunden können GameVox auf eigener Hardware betreiben. Dein Bot funktioniert auch dort, mit kleinerem Funktionsumfang (noch keine Webhooks, keine Interaktionen). Siehe Doku zu selbst gehosteten Servern.
  • Schreiblatenz in EU / AP: Bots, die außerhalb von us-east gehostet werden, sehen durch Aurora-Write-Forwarding etwa 80–150 ms zusätzliche Latenz bei Schreibvorgängen. Für beste Leistung in us-east hosten.

5. Konfiguriere deine App direkt in GameVox

Auf Discord bringt ein Bot mit irgendeiner Konfiguration ein Web-Dashboard mit: eine Domain, ein OAuth2-Login, Sitzungen, Berechtigungsprüfungen, Hosting — meist nur, damit eine betreibende Person einen Log-Kanal wählen und drei Funktionen umschalten kann. GameVox weiß bereits, wer die betreibende Person ist, welchen Server sie konfiguriert und ob sie das darf, und bietet diese Fläche deshalb direkt deiner App an.

Deine App beschreibt ein Formular über das Gateway; GameVox rendert es unter Servereinstellungen ▸ Integrationen ▸ Einstellungen und reicht die bearbeiteten Werte direkt zurück. GameVox speichert nichts davon — deine App bleibt die einzige Eigentümerin ihrer Konfiguration.

Das Fenster „Servereinstellungen“ des GameVox-Clients mit dem Einstellungs-Tab einer installierten App: ein Sprach-Dropdown, ein Schalter und eine Kanal-Checkliste.
Vollständig aus der Antwort eines einzigen Bots gerendert. Der Bot hat keine Kanal-IDs gesendet — ein Picker benennt eine Art, und GameVox liefert die Auswahlmöglichkeiten dieses Servers. Server- und Kanalnamen wurden geschwärzt.

Die gesamte Integration besteht aus einem Gateway-Handler und einem REST-Aufruf:

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 }),
  });
});

Zwölf Feldtypen, darunter Kanal- und Rollen-Picker, die GameVox für dich befüllt, bedingte Felder, maskierte Secrets und Abschnitte. In-App-Einstellungen →

6. Teste es

Der einfachste Rauchtest: auf !ping mit pong antworten.

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

Wenn READY im Log erscheint und die Antwort ankommt, ist dein Bot vollständig verbunden. Slash-Befehle, Sprache, Komponenten: keines davon erfordert Änderungen.