Giriş
Discord tarafında voice bağlantıları genelde bot abstraction’ları (discord.js, eris vb.) üzerinden görülür. Ancak perde arkasında Discord’un voice sistemi;
- Ayrı bir Gateway WebSocket
- Ayrı bir Voice WebSocket
- Ve UDP üzerinden gerçek zamanlı medya kanalı
kullanır.
dconnect, bu altyapıyı hiçbir bot kütüphanesi kullanmadan, tamamen düşük seviyede implemente eden bir CLI aracıdır. Üstelik bot token değil, user token ile çalışır.
⚠️ Bu yazı eğitimsel amaçlıdır. User token kullanımı Discord ToS ihlali riski taşır.
dconnect Ne Yapar?
dconnect, tek bir komutla:
- Discord Gateway’e bağlanır
- Hesabı authenticate eder
- İstenen voice channel için VOICE_STATE_UPDATE yollar
- Voice server bilgilerini alır
- Voice WebSocket açar
- UDP discovery yapar
- Voice session’ı aktif hale getirir
Sonuç: Hesap gerçekten voice channel’a girer.
CLI Kullanımı
Opsiyonlar
Örnek
Başarılı çalıştığında terminalde şu akış görülür:
- Gateway bağlantısı
- READY event’i
- Voice state + server alımı
- UDP discovery
- Voice hazır
Mimari Genel Bakış
Proje iki ana bileşenden oluşur:
- DiscordGateway → Normal Discord Gateway
- VoiceConnection → Voice WebSocket + UDP
Her ikisi de EventEmitter tabanlıdır.
Discord Gateway Akışı
Gateway URL Alma
Bu endpoint bize wss://gateway.discord.gg benzeri bir adres döner.
WebSocket Bağlantısı
Gateway v10 ve JSON encoding kullanılır.
HELLO & Heartbeat
Gateway HELLO event’i gönderir:
Bu interval ile heartbeat atılır:
IDENTIFY
Bu noktada hesap gateway’e giriş yapar.
READY Event
Bu session_id, voice bağlantısı için kritiktir.
Voice Channel’a Katılma
VOICE_STATE_UPDATE
Bu paket, Discord’a "ben bu voice’a giriyorum" demektir.
VOICE_SERVER_UPDATE
Discord şu bilgileri yollar:
endpointtoken
Bunlar voice WebSocket için kullanılır.
Voice WebSocket Akışı
Voice WS Açma
Voice IDENTIFY
READY Event
Voice server şunları gönderir:
ssrcipport
Bu noktada UDP discovery başlar.
UDP Discovery (En Kritik Kısım)
Discord voice, IP’ni NAT arkasından öğrenmek için UDP discovery ister.
Cevap geldiğinde artık UDP hattı açıktır.
Protocol Seçimi
Bu, Discord’un varsayılan encryption modudur.
SESSION_DESCRIPTION
Voice server, encryption key yollar:
Bu noktada voice bağlantısı tamamen hazırdır.
Speaking State
Bu paket gönderildiğinde hesap "konuşuyor" olarak görünür.
Temiz Çıkış
- Heartbeat durdurulur
- UDP socket kapatılır
- WebSocket’ler düzgün şekilde close edilir
Sonuç
dconnect, Discord voice altyapısını anlamak isteyenler için gerçek ve çıplak bir referans implementasyonudur.
Bot framework’leri kullanmadan:
- Gateway
- Voice WS
- UDP
- Encryption
nasıl çalışır görmek istiyorsan, bu proje tam olarak o iş için yazıldı.
Ne yaptığını bilmiyorsan kullanma. Ne yaptığını biliyorsan zaten bu yazıyı keyifle okudun 😄
Kaynak: dconnect source code
