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
- developers.gamevox.com adresinde giriş yap
- Yeni uygulama'ya tıkla
- 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_UPDATEyalnızcacompatible-voice-gateway-{region}.gamevox.comadresini 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
GETsunar. 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.
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.