Ana içeriğe geç

Command Palette

Search for a command to run...

Discord Sese User Token ile Gerçek Bağlantı Nasıl Kurulur?

Yayınlandığı tarih9 Şub 2026
Görüntüleme
Yorumlar

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:

  1. Discord Gateway’e bağlanır
  2. Hesabı authenticate eder
  3. İstenen voice channel için VOICE_STATE_UPDATE yollar
  4. Voice server bilgilerini alır
  5. Voice WebSocket açar
  6. UDP discovery yapar
  7. Voice session’ı aktif hale getirir

Sonuç: Hesap gerçekten voice channel’a girer.


CLI Kullanımı

dconnect <token> --guild <guild_id> --channel <channel_id>

Opsiyonlar

--mute   ## Sese kapalı gir
--deaf   ## Kulaklığı kapalı gir

Örnek

dconnect MTIzNDU2... --guild 123456789 --channel 987654321 --mute

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

GET https://discord.com/api/gateway

Bu endpoint bize wss://gateway.discord.gg benzeri bir adres döner.


WebSocket Bağlantısı

new WebSocket(`${url}?v=10&encoding=json`)

Gateway v10 ve JSON encoding kullanılır.


HELLO & Heartbeat

Gateway HELLO event’i gönderir:

{
  "op": 10,
  "d": { "heartbeat_interval": 41250 }
}

Bu interval ile heartbeat atılır:

op: 1, d: sequence

IDENTIFY

{
  op: 2,
  d: {
    token,
    intents: GUILDS | GUILD_VOICE_STATES
  }
}

Bu noktada hesap gateway’e giriş yapar.


READY Event

READY → session_id + user bilgisi

Bu session_id, voice bağlantısı için kritiktir.


Voice Channel’a Katılma

VOICE_STATE_UPDATE

{
  op: 4,
  d: {
    guild_id,
    channel_id,
    self_mute,
    self_deaf
  }
}

Bu paket, Discord’a "ben bu voice’a giriyorum" demektir.


VOICE_SERVER_UPDATE

Discord şu bilgileri yollar:

  • endpoint
  • token

Bunlar voice WebSocket için kullanılır.


Voice WebSocket Akışı

Voice WS Açma

wss://<endpoint>?v=4

Voice IDENTIFY

{
  op: 0,
  d: {
    server_id,
    user_id,
    session_id,
    token
  }
}

READY Event

Voice server şunları gönderir:

  • ssrc
  • ip
  • port

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.

const packet = Buffer.alloc(70)
packet.writeUInt32BE(ssrc, 0)
udp.send(packet, port, ip)

Cevap geldiğinde artık UDP hattı açıktır.


Protocol Seçimi

{
  op: 1,
  d: {
    protocol: "udp",
    data: {
      address,
      port,
      mode: "xsalsa20_poly1305"
    }
  }
}

Bu, Discord’un varsayılan encryption modudur.


SESSION_DESCRIPTION

Voice server, encryption key yollar:

secret_key

Bu noktada voice bağlantısı tamamen hazırdır.


Speaking State

voiceConn.setSpeaking(true)

Bu paket gönderildiğinde hesap "konuşuyor" olarak görünür.


Temiz Çıkış

Ctrl + C
  • 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

GitHub'da düzenle
Son güncelleme: 9 Şub 2026