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)
deafilePATCH .../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_idile) ve bağlantı kesme (channel_id: nullile) ç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.DELETE204dö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_BULKMESSAGE_REACTION_ADD,MESSAGE_REACTION_REMOVECHANNEL_CREATE,CHANNEL_UPDATE,CHANNEL_DELETECHANNEL_PINS_UPDATEGUILD_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_REMOVEGUILD_ROLE_CREATE,GUILD_ROLE_UPDATE,GUILD_ROLE_DELETE(sunucunun izin modeli değiştiğinde tetiklenir)TYPING_STARTVOICE_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_muteilemute'u ayırmak yerine katılımcı başına tek bir susturma biti tutar.VOICE_STATE_UPDATEaynı 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çinmutealanını tercih etmek isteyebilir. - Ses taşıma iki olay tetikler: Discord'da yeni bir
channel_idile yapılan PATCHvoice-states/{uid}tek birVOICE_STATE_UPDATEgönderir; kendi barındırılan sunucularda taşıma, ayrılma + yeniden katılma olarak uygulanır, yani hedefinchannel_iddeğerinin öncenull'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.