Hız sınırları
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 | İstek | Saniye | Hangi işlemler |
|---|---|---|---|
read | 30 | 5 | Okuma rotaları |
write | 10 | 10 | Oluşturma, değiştirme, silme |
message | 5 | 5 | Mesaj gönderme |
reaction | 4 | 1 | Tepki ekleme, kaldırma, temizleme |
bulk | 1 | 1 | Toplu mesaj silme |
interaction | 50 | 1 | Etkileşim yanıtları; ayrıca ephemeral düzenleme etkileşim başına 5 saniyede 5 |
command | 5 | 20 | Komut oluşturma, değiştirme, silme; ayrıca kapsam başına günde 200 yeni komut |
oauth_read | 30 | 5 | Authorization: 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:
| İstek | 70 yazmaya sayılır mı |
|---|---|
read sınıfı | Hayır |
callback type: 4, 5 | Evet; flags: 64 ile ephemeral ise hayır |
callback type: 7 | Evet; ephemeral mesajın üstündeyse hayır |
callback type: 6, type: 8 | Hayır |
Takip mesajı, @original düzenleme ve silme | Evet |
| 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ça | Bayt | Anlamı |
|---|---|---|
| Senin payın | Saniyede 175000 | Bir sahibin tüm botları ve açtığı webhook'lar birlikte. Aşarsan X-RateLimit-Scope: bot ile 429 alırsın. |
| Yedek | Saniyede 70000 | Maliyeti 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 çok | 21000000 | Bü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 | İstek | Saniye | Ne sayılır |
|---|---|---|---|
dm_send | 30 | 10 | Botun 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ık | Anlamı |
|---|---|
X-RateLimit-Limit | Pencerenin izin verdiği istek sayısı |
X-RateLimit-Remaining | Bu pencerede, bu kanal veya sunucu için kalan istek |
X-RateLimit-Reset | Pencerenin bittiği an; üç ondalıklı Unix saniyesi |
X-RateLimit-Reset-After | Pencerenin bitmesine kalan saniye; üç ondalıklı |
X-RateLimit-Bucket | Rotayı 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/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ındabot, genel sınırdaglobal, yukarıdaki tavandasharedolur. 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:
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.
| İşlem | Sınır | Kod |
|---|---|---|
| Mesaj gönderme | Kanal başına 5 saniyede 5 | rate_limited |
| Mesaj düzenleme | Kanal başına 5 saniyede 5 | rate_limited |
| Dosyalı mesaj | Tüm kanallarda dakikada 20 | rate_limited |
| Yazıyor göstergesi | Kanal başına 5 saniyede 5 | rate_limited |
| Sabitleme, sabitleme kaldırma | Kanal başına dakikada 10 | rate_limited |
| Tepki ekleme | Kanal başına 5 saniyede 20 | rate_limited |
| Dosya yükleme miktarı | Saatte 1 GiB, günde 3 GiB | upload_quota |
| Yavaş mod açık kanalda mesaj | Kanalın rate_limit_per_user süresi | slowmode |
| Ephemeral mesaj | Tüm botlar birlikte, basan kişi başına 5 saniyede 262144 bayt | rate_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:
| İşlem | Sınır | Aşılınca |
|---|---|---|
| Oturum başlatma (identify) | Uygulama başına 5 saniyede 1 | Bağlantı 4008 ile kapanır |
| Oturum başlatma (identify) | Uygulama başına günde 1000 | Bağlantı 4016 ile kapanır |
| Gönderilen çerçeve | Bağlantı başına dakikada 120 | Bağlantı 4008 ile kapanır |
Durum değiştirme (op 3) | Oturum başına dakikada 5 | RATE_LIMITED gelir, güncelleme yok sayılır |
Üye isteği (op 8) | Oturum başına dakikada 10, aynı anda 1 | RATE_LIMITED gelir |
Tam üye listesi (op 8) | Bot ve sunucu başına 30 saniyede 1 | RATE_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:
{"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
- JavaScript kütüphanesi ve Python kütüphanesi: otomatik kova kuyruğu ve
Retry-Afteryönetimi - Hatalar:
rate_limited,slowmodeveupload_quotakodları - Güvenlik: geçersiz istek engelinden kaçınma ve güvenli çalışma