Ana içeriğe geç

İşlem kodları ve kapanış kodları

İşlem kodu (opcode), bir Gateway yükünü adlandıran sayıdır. Kapanış kodu ise Gateway'in bir bağlantıyı sonlandırırken gönderdiği sayıdır. Bu sayfadaki her değer yalnız TEBHOS Gateway'ine aittir. Bağlantı ve durum makinesi Gateway'e genel bakış sayfasında, bu işlem kodlarının yükleri ise İstemci komutları sayfasında açıklanır.

İşlem kodları

Op Ad Yön
0 Dispatch Sunucudan istemciye
1 Heartbeat Çift yönlü
2 Identify İstemciden sunucuya
3 Presence Update İstemciden sunucuya
4 Voice State Update İstemciden sunucuya
5 Voice Server Ping Ayrılmış
6 Resume İstemciden sunucuya
7 Reconnect Sunucudan istemciye
8 Request Guild Members İstemciden sunucuya
9 Invalid Session Sunucudan istemciye
10 Hello Sunucudan istemciye
11 Heartbeat ACK Sunucudan istemciye
12 Gateway Error Ayrılmış
14 Lazy Request İstemciden sunucuya
15 Request Guild Counts İstemciden sunucuya
16 Request Channel Member Counts İstemciden sunucuya

TEBHOS, Opcode 9'u hiçbir zaman d: true ile göndermez; bu yüzden Invalid Session asla resume talimatı değildir.

Yük ve gönderilme zamanı

Op Yük Gönderilme zamanı
0 Olaya özgü veri TEBHOS, t ile adlandırılmış bir olay ve s ile bir oturum sıra numarası gönderir. Resumed geçerli sıra numarasını ilerletmeden taşır; yeniden oynatılan bir Dispatch özgün sıra numarasını korur
1 İstemciden son işlenen sıra numarası veya null, sunucudan null İstemci bildirilen zamanlamaya göre gönderir. Son onaydan bu yana aralığın yüzde 90'ı geçtiğinde sunucu hemen bir heartbeat ister
2 Identify nesnesi İstemci kimliği doğrulanmış bir oturum başlatır
3 Presence Update nesnesi İstemci oturum durumunu (presence) değiştirir
4 Voice State Update nesnesi İstemci sese katılır, taşınır, güncellenir veya sesten ayrılır
5 Uygulanmamış Hiç gönderilmez. Bunu gönderen istemci, tanımsız her işlem kodunda olduğu gibi kapatılır
6 Resume nesnesi İstemci, saklanan bir oturumu yeni bir soket üzerinde geri yükler
7 d alanı yok Gateway istemciden bağlantıyı değiştirmesini ister ve ardından 4000 ile kapatır. Düğüm boşaltılırken, oturum başka bir düğüme aktarılırken ve yeni bir soketten gelen Resume bu soketin yerini aldığında gönderilir
8 Request Guild Members nesnesi İstemci sınırlı üye parçaları ister
9 Sabit false Resume ile belirtilen oturum bulunamadı ya da kurulmuş bir oturum sona erdi. Ardından soketin kimliği doğrulanmamış olur
10 heartbeat_interval içeren nesne WebSocket kabul edilirken, herhangi bir istemci yükü okunmadan önce gönderilir
11 d alanı yok Kabul edilen bir istemci heartbeat'ini onaylar
12 Uygulanmamış Hiç gönderilmez. Hatalar istemciye bir Dispatch veya kapanış çerçevesi olarak ulaşır
14 Lazy Request nesnesi İstemci sınırlı sunucu aboneliklerini değiştirir
15 Request Guild Counts nesnesi İstemci güncel sunucu sayılarını ister
16 Request Channel Member Counts nesnesi İstemci kanal sayılarını ister

Kayıt eksiksizdir. Opcode 13 ve 16'nın üzerindeki her değer tanımsızdır.

TEBHOS gelen bir yükü şu sırayla çözümler.

  1. d anahtarı olan Heartbeat, oturum bağlı olsun ya da olmasın işlenir.
  2. d içeren Identify yalnız bağlı bir oturum yokken işlenir. Oturum bağlıyken gelen ya da d içermeyen Identify 4005 ile kapatır.
  3. d içeren Resume yalnız bağlı bir oturum yokken işlenir. Oturum bağlıyken gelen ya da d içermeyen Resume 4005 ile kapatır.
  4. Heartbeat dahil, d içermeyen diğer her yük 4001 ile kapatır.
  5. Kalan her işlem kodu, bağlı bir oturum yokken 4003 ile kapatır.
  6. Bağlı bir oturum varken Presence Update, Voice State Update, Request Guild Members, Lazy Request, Request Guild Counts ve Request Channel Member Counts işlenir. Sunucu işlem kodları ve tanımsız değerler dahil diğer her işlem kodu 4001 ile kapatır.

Bilinmeyen sunucu işlem kodları ileriye dönük uyumludur

İstemci bilinmeyen bir işlem kodunu günlüğe kaydetmeli ve çerçeveyi yok saymalıdır (SHOULD); yalnız sunucu bu kayıttan daha yeni bir işlem kodu kullandı diye bağlantıyı kapatmamalı veya yeniden bağlanmamalıdır (MUST NOT).

Kapanış kodları

Kod Ad Anlamı
4000 Bilinmeyen hata Boşaltma, sınıflandırılmamış bir oturum oluşturma hatası veya saklanan oturumuna ulaşılamayan bir Resume
4001 Bilinmeyen işlem kodu İşlem kodu tanımsız, bir sunucu işlem kodu ya da yükte d yok
4002 Kod çözme hatası Yük boyutu, sıkıştırma akışı, kodlama veya komut alanları geçersiz
4003 Kimlik doğrulanmamış Kimlik doğrulama gerektiren bir komut, Identify veya Resume bir oturum bağlamadan önce geldi
4004 Kimlik doğrulama başarısız Token geçersiz ya da Resume ile belirtilen saklanan oturumun sahibi değil
4005 Zaten kimlik doğrulanmış Identify veya Resume, bir oturum bağlıyken ya da d olmadan geldi
4007 Geçersiz sıra Heartbeat veya Resume, Geçersiz sıra bölümünde belirtildiği gibi komutun kabul ettiği sınırların dışında bir sıra numarası verdi
4008 Hız sınırına takıldı Eşzamanlı bağlantı, bağlantı yükü, kaynak IP yükü, oturum yükü veya oturum sayısı bütçesi aşıldı
4009 Oturum zaman aşımı Gateway bir onay beklerken son kabul edilen heartbeat onayından bu yana 45.000 ms'den fazla geçti
4010 Geçersiz shard Identify shard değeri geçerli bir [shard_id, shard_count] çifti değil. shard_count 1 ile 16.384 arasında bir tamsayı, shard_id ise ondan küçük, negatif olmayan bir tamsayıdır
4011 Sharding gerekli Shard filtresinden sonra tek bir bot oturumuna 2.500'den fazla sunucu düşüyor. Daha büyük bir shard_count ile identify yapılır
4012 Geçersiz API sürümü v bağlantı parametresi yok veya 1 değil

4006 kodu atanmamıştır. 4013 kodu (Ack backpressure) Gateway'de ayrılmıştır ve şu an gönderilmez. İstemcinin, oturumunun aldığı olayları nasıl sınırlayacağı Olay filtreleme sayfasında açıklanır.

Oturum sonucu

Kod Sürdürülebilir Sonuç durumu
4000 Koşullu Kapatıldı. Bağlantıya bağlı bir oturum kurtarılabilir kalır
4001 Koşullu Kapatıldı. Önceden kurulmuş bir oturum saklanmaya devam eder
4002 Koşullu Kapatıldı. Önceden kurulmuş bir oturum saklanmaya devam eder
4003 Hayır Kapatıldı. Bu bağlantı için oturum yok
4004 Koşullu Kapatıldı. Başarısız bir Resume, belirttiği oturumu geçersiz kılmaz. Başarısız bir Identify kurtarılacak bir şey bırakmaz
4005 Koşullu Kapatıldı. Önceki bir Identify veya Resume ile kurulan oturum saklanmaya devam eder
4007 O deneme için hayır Kapatıldı. Belirtilen oturum, süresi dolana kadar saklanmaya devam eder
4008 Koşullu Kapatıldı. Önceden kurulmuş bir oturum saklanmaya devam eder
4009 Koşullu Kapatıldı. Önceden kurulmuş bir oturum saklanmaya devam eder
4010 Hayır Kapatıldı. Oturum oluşturulmadı
4011 Hayır Kapatıldı. Oturum oluşturulmadı
4012 Hayır Hello'dan önce kapatıldı. Oturum yok

Bir oturumu soketsiz bırakan kapanış, soketin sona erdiği andan itibaren ölçülen yeni bir 60.000 ms'lik saklama süresi başlatır. Resumable (Sürdürülebilir) yalnız önceden kurulmuş bir oturumun Resume ile hâlâ kurtarılıp kurtarılamayacağını belirtir. Saklama süresi ve Sınırlar ve hız sınırları sayfasındaki sınırlı yeniden oynatma arabelleği, bir Resume'un neleri yeniden oynatacağını yine de sınırlar.

Değişiklik yapmadan yeniden bağlanmak 4004, 4010 ve 4012'yi yeniden üretir

Yeniden bağlanmadan önce token, shard çifti veya sürüm değiştirilmelidir.

Geçersiz sıra

4007 kapanışı Heartbeat için bir kurala, Resume için başka bir kurala uyar.

Heartbeat yalnız değerin türünü ve yalnız bir oturum bağlandıktan sonra denetler. Oturum bağlanmadan önce Gateway her d değerini kabul eder ve Opcode 11 ile yanıt verir. Oturum bağlıyken null veya herhangi bir tamsayı olan d değerini kabul eder; diğer her değer 4007 ile kapatır. Onaylanmış sıra numarasının altındaki bir sıra numarası bu sınırı değiştirmez; diğer her tamsayı sınırı ayarlar ve yeniden oynatma arabelleğini kırpar. Oturumun 5.000 ms içinde doğrulayamadığı bir heartbeat da (oturum süreci tam sona ererken gelen dahil) 4007 ile kapatır.

Resume iki sınırı denetler ve seq değeri ikisini de geçmelidir.

  • Geçerli sıra numarası. Oturumun gönderdiği son sıra numarasının üstündeki bir seq 4007 ile kapatır.
  • Onaylanmış sıra numarası. Son onaylanan sıra numarasının altındaki bir seq 4007 ile kapatır. Daha yüksek sıra numaralı bir heartbeat bu sınırı taşır.

Kapanış nedenleri

Gateway her uygulama kapanışıyla birlikte kesin bir neden dizesi gönderir.

Neden Kod Sebep
Invalid API version 4012 v bağlantı parametresi yok veya 1 değil
Too many connections 4008 Kaynak IP zaten 256 eşzamanlı Gateway bağlantısına sahip
Encode failed 4002 Hello kodlanamadı
Compression failed: zstd-stream 4002 zstd üzerinde anlaşılmış bir bağlantıda Hello sıkıştırılamadı
Payload too large 4002 Gelen bir mesaj hatta 4.096 baytı ya da sıkıştırma açıldıktan sonra 4.096 baytı aştı
Decompression failed 4002 Gelen sıkıştırılmış bir mesajın sıkıştırması açılamadı
Decode failed 4002 Yük geçerli JSON değil ya da nesne dışında bir şeye çözülüyor
Invalid payload 4002 Çözülen nesnede op yok
Rate limited 4008 Bağlantı, kaynak IP veya oturum yük bütçesi aşıldı
Unknown opcode 4001 İşlem kodu tanımsız, bir sunucu işlem kodu ya da yükte d yok
Not authenticated 4003 Kimlik doğrulama gerektiren bir komut, oturum bağlanmadan önce geldi
Already authenticated 4005 Identify veya Resume, bir oturum bağlıyken ya da d olmadan geldi
Invalid identify payload 4002 Identify'da token veya properties eksik ya da bir alan yanlış türde
Invalid shard 4010 Identify shard değeri geçerli bir [shard_id, shard_count] çifti değil
Sharding required 4011 Shard filtresinden sonra tek bir bot oturumuna 2.500'den fazla sunucu düşüyor
Too many sessions 4008 Kullanıcının zaten 100 canlı Gateway oturumu var
Invalid token 4004 Identify token'ı geçersiz ya da Resume token'ı belirtilen oturumun sahibi değil
Failed to start session 4000 Oturum oluşturma, Gateway'in sınıflandırmadığı bir hata döndürdü
Session start failed 4000 Oturum oluşturma yeniden denemelerden sonra da başarısız olmaya devam etti
Invalid resume payload 4002 Resume bir nesne değil, token veya session_id eksik ya da dize değil, veya seq eksik ya da tamsayı değil
Invalid sequence 4007 Heartbeat veya Resume, Geçersiz sıra bölümündeki sınırların dışında bir sıra numarası verdi
Invalid presence payload 4002 Presence Update bir nesne değil, status içermiyor ya da status dizesi bilinen bir değer değil
Invalid voice payload 4002 Voice State Update d değeri bir nesne değil
Session unavailable 4000 Resume sürerken saklanan oturuma ulaşılamadı
Session drain requested; reconnect to continue 4000 Kapanıştan hemen önce Opcode 7 gönderildi
Heartbeat timeout 4009 Bir öncekinden sonraki 45.000 ms içinde yeni bir heartbeat onayı kabul edilmedi

Encode failed ve Compression failed: zstd-stream yalnız Hello çerçevesi yazılırken üretilir. Daha sonra kodlanamayan veya sıkıştırılamayan giden bir çerçeve düşürülür ve bağlantı açık kalır.

Gateway, sınıflandırılmış geçici bir hatadan sonra Identify'ı bekletir ve sessizce yeniden dener; bu yüzden bağlantı açık kalır. Bu durum duraklatılmış bir dağıtımı, boşaltılan bir düğümü, uygun olmayan bir hesabı, Identify hız sınırını, dolmuş bir başlatma bütçesini ve başarısız olan ya da hız sınırına takılan bir oturum aramasını kapsar.

Neden dizeleri kararlı hat (wire) değerleridir. İstemci koda göre dallanır ve tanılama için nedeni kaydedebilir (MAY).

Bazı retler hiçbir şey göndermez

Bekletilen veya atılan bir Identify ya da Resume, bütçeyi aşan bir Presence Update, düşürülen sınırlı bir istek ve reddedilen bir ses durumu güncellemesi kapanış veya neden üretmez. Hangi komutun bu şekilde davrandığı İstemci komutları sayfasında belirtilir.

Sıradan WebSocket kapanışları

Bir aktarım, TEBHOS uygulama kapanış kodu olmadan sona erebilir; ağ hatasında, bir aracı sıfırlamasında ve sıradan bir 1000 veya 1001 kapanışında olduğu gibi. Kurulmuş bir oturum, aktarım sona erdikten sonra 60.000 ms boyunca kullanılabilir kalır; daha sonraki bir aktarım sonu yeni bir 60.000 ms'lik süre başlatır. Ne sürenin uzunluğu ne de sınırlı yeniden oynatma geçmişi büyür.