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

Kendi barındırdığın sunucular

Müşteriler GameVox'u kendi donanımlarında çalıştırabilir ve botun orada da çalışır. Bulut API'si, Discord biçimindeki REST isteklerini ve gateway olaylarını müşterinin kontrol kanalı üzerinden aşağı iletir; kendi barındırılan sunucu bunları yerel veritabanında çalıştırır ve yanıt aynı hattan geri gelir. Çoğu endpoint şeffaftır. Desteklenmeyenler aşağıda listelenmiştir.

Nasıl çalışır

Botun GET /guilds/{id} veya POST /channels/{id}/messages çağırdığında bulut bot API'si hedef sunucunun katmanını kontrol eder. Sunucu kendi barındırılan bir sunucuysa isteği (method, path, query, body, bot_user_id) serileştirir ve müşterinin sunucusunun bize açık tuttuğu kalıcı kontrol kanalı WebSocket'i üzerinden aşağı göndeririz. Kendi barındırılan süreç, eşdeğer handler'ı kendi SQLite veritabanlarında çalıştırır ve bir yanıt zarfı döndürür; biz de bunu botuna olduğu gibi geri yazarız.

Yönlendirme bot API katmanında gerçekleşir. Kütüphanen bunu asla görmez. Farklı bir token, farklı bir gateway URL'si, farklı bir SDK yok. Guild bulutta da barındırılsa kendi sunucuda da barındırılsa botun aynı gateway.gamevox.com adresine bağlanır ve aynı app-api.gamevox.com adresini çağırır.

Gecikme

Gidiş-dönüş süresi, müşterinin WAN bağlantısı artı SQLite sorgu süresiyle sınırlıdır; genellikle bir bulut çağrısının üzerine 30–300 ms eklenir. Uçtan uca 12 sn'lik bir süre sınırı uygulanır. Kendi barındırılan bir sunucu yanıt vermeyi bırakırsa (çevrimdışı, güncelleniyor, ağ kesildi) botun, süre sınırının bir saniye içinde 504 Gateway Timeout alır.

Neler çalışıyor

Aşağıdakilerin hepsi, bulutla aynı yanıt biçimiyle, kendi barındırılan sunucunun yerel verileri üzerinde çalışır.

  • Mesajlar: listeleme, getirme, gönderme, düzenleme, silme, toplu silme.
  • Tepkiler: ekleme, kendi tepkisini kaldırma, kullanıcının tepkisini kaldırma, tümünü kaldırma, bir emojinin tümünü kaldırma, kullanıcıları listeleme.
  • Sabitlemeler: sabitleme, sabitlemeyi kaldırma, listeleme.
  • Yazıyor göstergesi: POST /channels/{id}/typing.
  • Kanallar: getirme, güncelleme, silme, listeleme, oluşturma, yeniden sıralama.
  • Sunucu (guild): getirme, güncelleme (ad ve açıklama).
  • Üyeler: listeleme, arama, @me, getirme, güncelleme, takma ad güncelleme, atma, rol ekleme veya kaldırma.
  • Yasaklar: listeleme, getirme, put, silme.
  • Roller: listeleme, getirme, oluşturma, güncelleme, yeniden sıralama, silme ve rol izinleri.
  • Emojiler: listeleme, getirme (sunucuya ait).
  • Ses Panosu: listeleme, getirme (sunucuya ait).
  • Denetim kaydı: GET /guilds/{id}/audit-logs, yalnızca botla ilgili girdiler.
  • Özel URL: GET (her zaman boş biçim).
  • Ses durumu: GET (SFU'dan canlı), PATCH (susturma, taşıma, bağlantı kesme).
  • Webhook'lar: tam CRUD ve çalıştırma. Satırlar bulut depolamada durur; ortaya çıkan mesaj, bot gönderimleri için kullanılan aynı yönlendirme yolu üzerinden kendi barındırılan kanala yazılır, böylece kanal mesajları doğru rozetle görünür.
  • Slash komutları: çağırma; izinler sunucunun kendi gruplarına göre denetlenir. Kayıt buluttakiyle aynıdır.
  • Mesaj bileşenleri: düğmeler, metin seçim menüleri, modallar ve geçici yanıtlar; etkileşim callback, takip (follow-up) ve orijinal yanıt endpoint'leri dahil. Bkz. Mesaj bileşenleri.

501 dönenler (kabul edilir, uygulanmamıştır)

  • deaf ile PATCH .../voice-states/*. Sunucu tarafından sesi kesme, bugün kendi barındırılan SFU'da temel bir işlem değil. Susturma, taşıma (channel_id ile) ve bağlantı kesme (channel_id: null ile) çalışır.
  • PUT .../channels/{id}/permissions/{oid}. Kendi barındırdığın sunucular kanal başına üzerine yazmalar yerine grup düzeyinde izinler kullanır, yani bir Discord üzerine yazmasının uygulanacağı bir şey yok. DELETE 204 döndürür (var olmayan bir üzerine yazmayı silmek hiçbir şey yapmaz).
  • PATCH .../guilds/{id}/vanity-url. Kendi barındırdığın sunucuların özel URL'si yoktur.

404 dönenler (kendi barındırdığın sunucularda yönlendirilmez)

Bu endpoint'ler yalnızca bulut altyapısında var olan kaynaklara dokunur. Botunun bunlara ihtiyacı varsa bir bulut guild'ine karşı tekrar dene.

  • DM kanalı oluşturma (POST /users/@me/channels).
  • Sunucular arası kullanıcı arama (GET /users/{id}, GET /users/by-name/{name}).
  • GET /users/@me/guilds.

Gateway olayları

Kendi barındırılan sunucular, bulutun gönderdiği olayların bir alt kümesini yayınlar. Botun bunları aynı gateway oturumu üzerinden alır. Farklı bir abonelik modeli yok.

Bugün kendi barındırılan sunuculardan gönderilenler:

  • MESSAGE_CREATE, MESSAGE_UPDATE, MESSAGE_DELETE, MESSAGE_DELETE_BULK
  • MESSAGE_REACTION_ADD, MESSAGE_REACTION_REMOVE
  • CHANNEL_CREATE, CHANNEL_UPDATE, CHANNEL_DELETE
  • CHANNEL_PINS_UPDATE
  • GUILD_UPDATE (ad / açıklama değişiklikleri)
  • GUILD_MEMBER_ADD, GUILD_MEMBER_REMOVE, GUILD_MEMBER_UPDATE (takma ad veya rol değişikliği)
  • GUILD_BAN_ADD, GUILD_BAN_REMOVE
  • GUILD_ROLE_CREATE, GUILD_ROLE_UPDATE, GUILD_ROLE_DELETE (sunucunun izin modeli değiştiğinde tetiklenir)
  • TYPING_START
  • VOICE_STATE_UPDATE (katılma, ayrılma, kendini/sunucu tarafından susturma, sesi kesme)
  • INTERACTION_CREATE (slash komutları, bileşen tıklamaları ve modal gönderimleri; bulut tarafından aktarılır)

Kendi barındırılan sunuculardan henüz gönderilmeyenler:

  • PRESENCE_UPDATE. Kendi barındırılan tarafta yeni bir presence yayıncısı gerektiriyor.
  • DM mesaj olayları. Kendi barındırdığın sunucularda sunucular arası DM yok.

Bilinen uyumluluk boşlukları

  • Kendini susturma ve sunucu tarafından susturma: kendi barındırılan SFU, Discord gibi self_mute ile mute'u ayırmak yerine katılımcı başına tek bir susturma biti tutar. VOICE_STATE_UPDATE aynı değeri iki alana da yansıtır; sunucu tarafından susturmanın kaldırılması, kullanıcı kendi susturmasını da kaldırmış gibi görünebilir. İki alandan yalnızca birini okuyan botlar sorun yaşamaz; ikisini karıştıran durum makinesi botları, moderatör anahtarları için mute alanını tercih etmek isteyebilir.
  • Ses taşıma iki olay tetikler: Discord'da yeni bir channel_id ile yapılan PATCH voice-states/{uid} tek bir VOICE_STATE_UPDATE gönderir; kendi barındırılan sunucularda taşıma, ayrılma + yeniden katılma olarak uygulanır, yani hedefin channel_id değerinin önce null'a, sonra yeni kanala döndüğünü görürsün. Aynı kullanıcı için birkaç yüz milisaniye içinde gelen art arda güncellemeleri tek bir taşıma olarak ele al.

Kendi barındırılan sunucuyu algılama

guild nesnesi bugün “kendi barındırılan” bayrağı taşımıyor (Discord ile bayt düzeyinde aynı kalıyoruz). Botunun dallanması gerekiyorsa güvenilir sinyal, yukarıdaki endpoint'lerden birinden gelen, aşağıdaki gibi bir JSON hata gövdesiyle 501 veya 404 yanıtıdır:

{ "code": 0, "message": "voice-state modify not supported on self-hosted yet" }

Yeterince bot daha ucuz bir algılamaya ihtiyaç duyarsa guild payload'ına bir features girdisi (ör. "SELF_HOSTED") ekleyeceğiz. Bu işine yarayacaksa uygulamanın Destek sekmesinden geri bildirim gönder.

Hatalar

  • 502 Bad Gateway. Kendi barındırılan sunucu bozuk bir yanıt döndürdü. Nadirdir; genellikle güncelleme sırasındaki bir sürüm uyuşmazlığından kaynaklanır.
  • 503 Service Unavailable. Kontrol kanalı şu anda bağlı değil. Backoff ile tekrar dene.
  • 504 Gateway Timeout. Sunucu 12 sn içinde yanıt vermedi.

← Dokümanlara dön