Portail développeurs
Expérimental La plateforme de bots et d'apps est en développement actif. La prise en charge des serveurs auto-hébergés est arrivée le 13/08/2026, avec moins de fonctionnalités que le cloud. Voir ce qui est pris en charge.
← Docs

Migrer depuis Discord

Faites tourner votre bot Discord existant sur GameVox en changeant deux valeurs de configuration : l’URL de base REST et l’URL du gateway. Aucun changement de code, aucun changement de SDK.

1. Créez une application de bot GameVox

  1. Connectez-vous sur developers.gamevox.com
  2. Cliquez sur Nouvelle application
  3. Copiez le jeton du bot depuis la fenêtre de création (affiché une seule fois, enregistrez-le tout de suite)

2. Pointez votre bibliothèque vers 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();
// JDA lit l’URL du gateway depuis /gateway/bot au démarrage,
// que notre shim REST renvoie comme 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' },
  // Eris utilise ETF par défaut ; forcez JSON (GameVox ne parle pas encore 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. Installez le bot sur un serveur

Depuis l’onglet OAuth2 de votre application dans le portail, construisez une URL d’installation avec les permissions voulues et partagez-la. L’URL a la forme standard de Discord :

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

La personne propriétaire du serveur clique sur le lien, choisit un serveur GameVox qui lui appartient, et confirme.

4. Ce qui diffère

La surface de compatibilité vise 100 %. La logique de votre bot n’a pas besoin de savoir que ce n’est pas Discord. Quelques points à connaître :

  • Les apps se configurent dans le client. GameVox peut afficher le formulaire de réglages de votre app dans les Réglages du serveur, de sorte qu’un bot configurable n’a plus besoin d’un tableau de bord hébergé. C’est la seule incompatibilité volontaire, et la seule partie de la plateforme sans équivalent Discord. Documentation complète →
  • Époque des snowflakes : identique à celle de Discord (1420070400000, 01/01/2015 UTC). Les analyseurs écrits pour Discord fonctionnent sur les ID GameVox sans modification. En savoir plus →
  • Les fils et les publications de forum ne sont pas encore pris en charge.
  • Le vocal fonctionne avec Lavalink. Aucune configuration particulière. VOICE_SERVER_UPDATE pointe simplement vers compatible-voice-gateway-{region}.gamevox.com et Lavalink s’occupe du reste.
  • Emojis personnalisés : les emojis du serveur fonctionnent dans les messages exactement comme sur Discord. Les emojis propres à l’app se gèrent pour l’instant dans le portail ; l’API bots n’expose que GET. Voir Emojis.
  • Serveurs auto-hébergés : vos clients peuvent faire tourner GameVox sur leur propre matériel. Votre bot y fonctionne aussi, avec une surface réduite (pas encore de webhooks ni d’interactions). Voir la documentation auto-hébergée.
  • Latence d’écriture en EU / AP : les bots hébergés hors de us-east verront environ 80 à 150 ms de latence supplémentaire en écriture, à cause du renvoi d’écritures Aurora. Hébergez en us-east pour de meilleures performances.

5. Configurez votre app depuis GameVox

Sur Discord, un bot avec la moindre configuration embarque un tableau de bord web : un domaine, une connexion OAuth2, des sessions, des vérifications de permissions, de l’hébergement — le tout, en général, pour qu’une personne choisisse un salon de journalisation et active trois options. GameVox sait déjà qui est cette personne, quel serveur elle configure et si elle en a le droit ; il propose donc cette surface directement à votre app.

Votre app décrit un formulaire via le gateway ; GameVox l’affiche dans Réglages du serveur ▸ Intégrations ▸ Réglages et vous renvoie directement les valeurs modifiées. GameVox n’en stocke rien — votre app reste seule propriétaire de sa configuration.

La fenêtre Réglages du serveur du client GameVox, montrant l’onglet Réglages d’une app installée avec une liste déroulante de langue, un interrupteur et une liste de salons à cocher.
Entièrement rendu à partir de la réponse d’un seul bot. Le bot n’a envoyé aucun id de salon — un sélecteur nomme un type et GameVox fournit les choix de ce serveur. Noms de serveur et de salons masqués.

Toute l’intégration tient en un gestionnaire gateway et un appel 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 }),
  });
});

Douze types de champ, dont des sélecteurs de salon et de rôle que GameVox remplit pour vous, des champs conditionnels, des secrets masqués et des sections. Réglages intégrés →

6. Testez

Le test de fumée le plus simple : répondre pong à !ping.

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

Si READY apparaît dans les journaux et que la réponse arrive, votre bot est complètement connecté. Commandes slash, vocal, composants : rien de tout cela ne demande de modification.