Geliştirici Portalı
Deneysel Bot ve uygulama platformu aktif olarak geliştiriliyor. Kendi barındırdığın sunucu desteği 13.08.2026'da yayınlandı ve buluta göre daha az özellik sunuyor. Nelerin desteklendiğine bak.
← Dokümanlar

Discord'dan geçiş

Mevcut Discord botunu iki yapılandırma değerini değiştirerek GameVox'ta çalıştır: REST taban URL'si ve gateway URL'si. Kod değişikliği yok, SDK değiştirmek yok.

1. Bir GameVox bot uygulaması oluştur

  1. developers.gamevox.com adresinde giriş yap
  2. Yeni uygulama'ya tıkla
  3. Bot token'ını oluşturma penceresinden kopyala (yalnızca bir kez gösterilir, hemen kaydet)

2. Kütüphaneni GameVox'a yönlendir

REST API adresi app-api.gamevox.com. Eski adı olan bot-api.gamevox.com aynı API'dir ve çalışmaya devam eder, bu yüzden mevcut botlarda değişiklik gerekmez.

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, gateway URL'sini başlangıçta /gateway/bot'tan okur;
// REST katmanımız bunu wss://gateway.gamevox.com olarak döndürür.

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 varsayılan olarak ETF kodlaması kullanır; JSON'u zorla (GameVox henüz ETF desteklemiyor).
});

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. Botu bir sunucuya kur

Geliştirici portalında uygulamanın OAuth2 sekmesinden ihtiyacın olan izinlerle bir kurulum URL'si oluştur ve paylaş. URL, standart Discord biçimindedir:

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

Sunucu sahipleri bağlantıya tıklar, sahip oldukları bir GameVox sunucusunu seçer ve onaylar.

4. Neler farklı

Uyumluluk hedefi %100. Botunun mantığının Discord'da olmadığını bilmesine gerek yok. Dikkat etmen gereken birkaç şey var:

  • Uygulamalar istemcinin içinden yapılandırılır. GameVox, uygulamanın ayarlar formunu Sunucu Ayarları'nda gösterebilir; böylece yapılandırılabilir bir botun artık barındırılan bir panele ihtiyacı kalmaz. Bu, bilinçli olarak yapılmış tek uyumsuzluk ve platformun Discord'da karşılığı olmayan tek kısmı. Tüm dokümanlar →
  • Snowflake epoch'u: Discord'unkiyle aynı (1420070400000, 2015-01-01 UTC). Discord için yazılmış ayrıştırıcılar GameVox ID'lerinde değişiklik olmadan çalışır. Daha fazlası →
  • Konular (thread) / forum gönderileri henüz desteklenmiyor.
  • Ses, Lavalink ile çalışır. Özel bir yapılandırma gerekmez. VOICE_SERVER_UPDATE yalnızca compatible-voice-gateway-{region}.gamevox.com adresini gösterir, gerisini Lavalink halleder.
  • Özel emojiler: sunucuya ait emojiler mesajlarda tam olarak Discord'daki gibi çalışır. Uygulamaya ait emojiler şimdilik geliştirici portalından yönetilir; bot API'si yalnızca GET sunar. Bkz. Emojiler.
  • Kendi barındırdığın sunucular: müşteriler GameVox'u kendi donanımlarında çalıştırabilir. Botun orada da çalışır, slash komutları ve mesaj bileşenleri dahil, ama biraz daha dar bir kapsamla. Bkz. Kendi barındırdığın sunucu dokümanları.
  • AB / AP yazma gecikmesi: us-east dışında barındırılan botlar, Aurora yazma yönlendirmesi nedeniyle yazma işlemlerinde yaklaşık 80–150 ms ek gecikme görür. En iyi performans için us-east'te barındır.

5. Uygulamanı GameVox'un içinden yapılandır

Discord'da herhangi bir yapılandırması olan bir bot, bir web paneliyle gelir: bir alan adı, bir OAuth2 girişi, oturumlar, izin kontrolleri, barındırma. Çoğu zaman da tüm bunlar, bir yöneticinin bir log kanalı seçip üç özelliği açıp kapatabilmesi için. GameVox, yöneticinin kim olduğunu, hangi sunucuyu yapılandırdığını ve buna yetkisi olup olmadığını zaten bildiği için bu yüzeyi doğrudan uygulamana sunar.

Uygulaman gateway üzerinden bir form tanımlar; GameVox bunu Sunucu Ayarları ▸ Entegrasyonlar ▸ Ayarlar içinde gösterir ve düzenlenen değerleri doğrudan geri iletir. GameVox bunların hiçbirini saklamaz: yapılandırmanın tek sahibi uygulaman olarak kalır.

GameVox istemcisinin Sunucu Ayarları penceresi; kurulu bir uygulamanın Ayarlar sekmesinde bir dil açılır listesi, bir anahtar ve bir kanal onay listesi görünüyor.
Tamamen tek bir botun yanıtından oluşturuldu. Bot hiçbir kanal ID'si göndermedi: bir seçici yalnızca bir tür belirtir, GameVox da bu sunucunun kendi seçeneklerini sağlar. Sunucu ve kanal adları gizlendi.

Tüm entegrasyon bir gateway handler'ı ve bir REST çağrısından ibaret:

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

GameVox'un senin için doldurduğu kanal ve rol seçicileri, koşullu alanlar, maskelenmiş secret'lar ve bölümler dahil on iki alan türü. Uygulama İçi Ayarlar →

6. Test et

En basit smoke testi: !ping mesajına pong ile yanıt ver.

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

READY log'a düşüyor ve yanıt geliyorsa botun tamamen bağlı demektir. Slash komutları, ses, bileşenler: hiçbiri değişiklik gerektirmez.