İçeriğe geç
N'oluyo
Kavramlar

Hız sınırları

Son güncelleme:

Bot isteklerinin sınırları tek yerde, bu sayfada yazılıdır. Sınırı aşan istek 429 alır. Yanıttaki bekleme süresine uyan bir bot sorun yaşamaz.

Rota sınıfları

Her bot rotası bir sınıfa aittir. Rotanın sınıfı REST referansında yazar.

SınıfİstekSaniyeHangi işlemler
read305Okuma rotaları
write1010Oluşturma, değiştirme, silme
message55Mesaj gönderme
reaction41Tepki ekleme, kaldırma, temizleme
bulk11Toplu mesaj silme
interaction501Etkileşim yanıtları; ayrıca ephemeral düzenleme etkileşim başına 5 saniyede 5
command520Komut oluşturma, değiştirme, silme; ayrıca kapsam başına günde 200 yeni komut
oauth_read305Authorization: Bearer <access_token> ile çağrılan /oauth2/@me ve /oauth2/@me/guilds rotaları (token başına)

Sınır şunların her biri için ayrı sayılır: bot, rota ve kanal. Rotada kanal yoksa kanal yerine sunucu sayılır; ikisi de yoksa yalnızca bot ve rota. Örneğin iki ayrı kanala aynı anda 5'er mesaj gönderebilirsin.

Genel sınır

Bir bot, tüm rotalar toplamında saniyede en çok 50 istek gönderebilir. Aşınca X-RateLimit-Scope: global ile 429 alır.

Tüm botların ortak tavanı

Tüm botlar birlikte saniyede en çok 70 yazma (read dışındaki her sınıf) yapabilir; ayrıca aynı anda en çok 8 bot isteği (okuma dahil) çalışır. Etkileşim yanıtında yalnızca kanala mesaj yazanlar yazma sayılır:

İstek70 yazmaya sayılır mı
read sınıfıHayır
callback type: 4, 5Evet; flags: 64 ile ephemeral ise hayır
callback type: 7Evet; ephemeral mesajın üstündeyse hayır
callback type: 6, type: 8Hayır
Takip mesajı, @original düzenleme ve silmeEvet
Diğer her yazma rotasıEvet

Aynı anda 8 istek sınırına bunların hepsi girer. Biri aşılırsa bot X-RateLimit-Scope: shared ile 429 alır; yanıtta retry_after ve Retry-After bulunur (eşzamanlılık sınırında 1 saniye). Bu 429 botunun suçu değildir: geçersiz istek sayılmaz ve geçici engele yol açmaz. retry_after kadar bekleyip isteği yeniden gönder.

Etkileşimleri HTTP ile alıyorsan adresinin 200 yanıtı da bu tavanlara, interaction sınıfına ve yayılma bütçesine aynen sayılır; bir callback çağrısı gibi. Tavan doluysa yanıt yazılmaz ve kişi 429 interaction_busy görür. Bu da botunun suçu olmayabilir: başka botlar tavanı doldurmuş olabilir. Teslim günlüğünde sonuç busy olur ve devre kesiciye sayılmaz. Tekrar deneme yoktur; kişi isterse yeniden çalıştırır.

Embed ve bileşenlerin yayılma bütçesi

Bir mesaj, kanaldaki herkese ayrı ayrı gönderilir; embed ve bileşenler mesajı büyütür. Bu yüzden her mesajın embed ve bileşenleri (metin sayılmaz) sunucunun üye sayısıyla (DM'de kişi sayısıyla) çarpılır ve tüm botlarla webhook'ların paylaştığı saniyelik bir bütçeden (700000 bayt) düşer:

ParçaBaytAnlamı
Senin payınSaniyede 175000Bir sahibin tüm botları ve açtığı webhook'lar birlikte. Aşarsan X-RateLimit-Scope: bot ile 429 alırsın.
YedekSaniyede 70000Maliyeti en çok 17500 bayt olan mesajlar için; bir sahip saniyede bunun 17500 baytını kullanabilir. Yedekte yer oldukça bekletme onları durdurmaz.
Tek mesaja en çok21000000Bütçenin 30 saniyesi. Aşarsan 400 fanout_too_large alırsın; max_bytes o kanalın alabileceği en büyük embed ve bileşen boyutunu söyler (2000 kişilik bir sunucuda 10500 bayt).

Maliyeti payından büyük olan mesaj büyük mesajdır. Ardından bir sonraki büyük mesajın için, her sunucuda, mesajın ödenmesi için gereken sürenin dört katı beklersin; o sunucuya da o süre hiçbir bot büyük mesaj gönderemez: sana X-RateLimit-Scope: bot, sunucu için shared ile 429 gelir. Havuzdan (bütçe eksi yedek, saniyede 630000 bayt) fazla tutan büyük mesaj o saniyede kalanı alır, sonra o ve o saniyenin önceden harcadığı ödenene kadar tüm botların sayılan diğer mesajları bekler: 600 kişilik bir sunucuya 32 KiB'lık bir mesaj onları yaklaşık 31 saniye bekletir, hiçbir bekletme yaklaşık 34 saniyeden uzun sürmez. Aynı anda tek bekletme olur. Bütçe dolu ya da bekletmedeyken bot X-RateLimit-Scope: shared ile 429 alır. Bu 429 botunun suçu değildir: geçersiz istek sayılmaz ve geçici engele yol açmaz. bot kapsamlı 429 ise senindir ve diğer sınırların gibi sayılır. retry_after ne kadar bekleyeceğini söyler. Düzenleme istekleri ve webhook'la gönderilen embed'ler de aynı bütçeyi kullanır.

Özel mesajlar

Botunun DM'lerde kendiliğinden yazdıkları (mesaj, tepki, sabitleme, yazıyor) tüm DM'leri toplamında ayrıca sayılır:

SınırİstekSaniyeNe sayılır
dm_send3010Botun tüm DM'lerindeki serbest yazmaları; etkileşim yanıtları sayılmaz

Aşınca X-RateLimit-Scope: bot ile 429 alırsın. retry_after kadar bekleyip yeniden gönder. message sınıfının kanal başına sınırı DM'de de geçerlidir.

Başlıklar

Bot isteklerinin yanıtlarında şu başlıklar gelir:

BaşlıkAnlamı
X-RateLimit-LimitPencerenin izin verdiği istek sayısı
X-RateLimit-RemainingBu pencerede, bu kanal veya sunucu için kalan istek
X-RateLimit-ResetPencerenin bittiği an; üç ondalıklı Unix saniyesi
X-RateLimit-Reset-AfterPencerenin bitmesine kalan saniye; üç ondalıklı
X-RateLimit-BucketRotayı ve sınıfını adlandıran 16 onaltılık basamak

X-RateLimit-Bucket bir rotanın tüm kanallarında aynıdır ama Remaining kanal başına sayılır. Bu yüzden sınırı izlerken kovayı kanal veya sunucu ID'siyle birlikte tut.

Genel sınıra takılan yanıtta yalnızca X-RateLimit-Scope ve Retry-After gelir. Sınır sistemi geçici olarak çalışmıyorsa istekler sınırlanmaz ve bu başlıklar hiç gelmez; kodun bu başlıkların her zaman var olduğunu varsaymasın.

429 yanıtı

HTTP
HTTP/1.1 429 Too Many Requests
Retry-After: 2
X-RateLimit-Scope: bot
X-RateLimit-Limit: 5
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1793966400.250
X-RateLimit-Reset-After: 1.250
X-RateLimit-Bucket: 3f9a1c7e5b2d4860
Content-Type: application/json; charset=utf-8

{"code":"rate_limited","message":"You are being rate limited.","retry_after":1.25}
  • retry_after, gövdede beklenecek süredir; saniye cinsinden, üç ondalığa kadar.

  • Retry-After, başlıktaki aynı süredir; yukarı yuvarlanmış tam saniye.

  • X-RateLimit-Scope, sınıf sınırında bot, genel sınırda global, yukarıdaki tavanda shared olur. Aşağıdaki ek sınırlarda bu başlık gelmez.

Beklemeden tekrar denemek işe yaramaz; aşağıdaki gibi süreyi bekle:

JavaScript
if (res.status === 429) {
  const { retry_after } = await res.json();
  await new Promise((done) => setTimeout(done, retry_after * 1000));
  // sonra isteği yeniden gönder
}

Ek sınırlar

Bazı işlemlerde sınıf sınırına ek olarak şu sınırlar da geçerlidir. Bunlar da 429 verir ve retry_after içerir.

İşlemSınırKod
Mesaj göndermeKanal başına 5 saniyede 5rate_limited
Mesaj düzenlemeKanal başına 5 saniyede 5rate_limited
Dosyalı mesajTüm kanallarda dakikada 20rate_limited
Yazıyor göstergesiKanal başına 5 saniyede 5rate_limited
Sabitleme, sabitleme kaldırmaKanal başına dakikada 10rate_limited
Tepki eklemeKanal başına 5 saniyede 20rate_limited
Dosya yükleme miktarıSaatte 1 GiB, günde 3 GiBupload_quota
Yavaş mod açık kanalda mesajKanalın rate_limit_per_user süresislowmode
Ephemeral mesajTüm botlar birlikte, basan kişi başına 5 saniyede 262144 baytrate_limited

ManageMessages veya ManageChannels iznine sahip olanlar yavaş moddan muaftır.

Portaldaki uygulama işlemlerinin de sınırı vardır: uygulama oluşturma ve token yenileme için hesap başına, bot resmini yükleme ve kaldırma için bot başına 10 dakikada 5 işlem.

Gateway sınırları

Gateway bağlantısının sınırları REST'ten ayrıdır:

İşlemSınırAşılınca
Oturum başlatma (identify)Uygulama başına 5 saniyede 1Bağlantı 4008 ile kapanır
Oturum başlatma (identify)Uygulama başına günde 1000Bağlantı 4016 ile kapanır
Gönderilen çerçeveBağlantı başına dakikada 120Bağlantı 4008 ile kapanır
Durum değiştirme (op 3)Oturum başına dakikada 5RATE_LIMITED gelir, güncelleme yok sayılır
Üye isteği (op 8)Oturum başına dakikada 10, aynı anda 1RATE_LIMITED gelir
Tam üye listesi (op 8)Bot ve sunucu başına 30 saniyede 1RATE_LIMITED gelir

Resume oturum başlatma sayılmaz. Kalan başlatma hakkını GET /gateway/bot gösterir.

Geçersiz istekler ve geçici engel

Bir IP adresinden Bot şemasıyla gönderilen ve reddedilen (401, 403 veya 429 alan) istekler sayılır. Sayı 10 dakika içinde 10000'e ulaşırsa, o adresten gelen Bot şemalı tüm istekler pencere bitene kadar reddedilir, geçerli token'lar dahil:

JSON
{"code":"temporarily_banned","message":"Too many invalid requests. Try again later.","retry_after":312.5}

Yanıt 403'tür ve Retry-After başlığı içerir. Aynı adresten siteyi ve uygulamayı kullanan kişiler bundan etkilenmez.

Bundan kaçınmak için: 401 alınca isteği tekrarlamak yerine botu durdur, 403 alan isteği aynen tekrarlama ve 429 alınca süreyi bekle.

Bu sayfayı yapay zekaya verirsen

Sırada ne var