İş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.
danahtarı olan Heartbeat, oturum bağlı olsun ya da olmasın işlenir.diçeren Identify yalnız bağlı bir oturum yokken işlenir. Oturum bağlıyken gelen ya dadiçermeyen Identify4005ile kapatır.diçeren Resume yalnız bağlı bir oturum yokken işlenir. Oturum bağlıyken gelen ya dadiçermeyen Resume4005ile kapatır.- Heartbeat dahil,
diçermeyen diğer her yük4001ile kapatır. - Kalan her işlem kodu, bağlı bir oturum yokken
4003ile kapatır. - 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
4001ile 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
seq4007ile kapatır. - Onaylanmış sıra numarası. Son onaylanan sıra numarasının altındaki bir
seq4007ile 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.