حدود المعدل
كم طلبًا يستطيع البوت إرساله، وكيف تقرأ الترويسات، وما تفعله بعد 429.
الحدود الثلاثة
- الحصص. يُحسب كل مسار على حصة، في نافذة من 10 ثوانٍ. يسردها الجدول أدناه.
- الحد العام. يرسل البوت 50 طلبًا في الثانية على الأكثر، عبر كل المسارات.
- الطلبات المرفوضة. العنوان الذي يجمع 10000 جواب
401أو403خلال 10 دقائق يُحظر 10 دقائق. هذا يمنع تخمين الرموز، والبوت السليم لا يقترب منه أبدًا.
تُحسب البوتات بمعرّفها، فالحدود واحدة من أي عنوان ولا تتغير بزيادة العمليات.
الترويسات
تخبرك كل استجابة بموقعك. هذه القيم من جواب حقيقي لـGET /users/@me:
x-ratelimit-limit: 20
x-ratelimit-remaining: 13
x-ratelimit-reset-after: 3766
x-ratelimit-bucket: 7575212770586562519| الترويسة | المعنى |
|---|---|
X-RateLimit-Limit | الطلبات المسموحة في النافذة |
X-RateLimit-Remaining | الطلبات المتبقية |
X-RateLimit-Reset-After | الميلي ثانية حتى تعود النافذة |
X-RateLimit-Bucket | معرّف لهذه الحصة. رقم وليس اسم الحصة |
X-RateLimit-Global | true إذا كان الحد العام هو الذي بُلغ |
Retry-After | مع 429 فقط: ثوانٍ للانتظار، مقربة إلى أعلى |
بعد 429
حد المعدل هو 429 بلا type:
{ "retry_after": 3531, "global": false }retry_after بالميلي ثانية.
global: false: انتظر هذه المدة ثم كرر هذا الطلب. تستطيع الطلبات الأخرى المتابعة.global: true: بلغ البوت 50 في الثانية. أوقف كل الطلبات حتى تنتهي المدة، لا هذا الطلب وحده.
let pausedUntil = 0;
async function call(path, init) {
const wait = pausedUntil - Date.now();
if (wait > 0) await new Promise((r) => setTimeout(r, wait));
const response = await fetch(`https://api.zrzur.com${path}`, init);
if (response.status !== 429) return response;
const body = await response.json();
if (body.type) throw new Error(body.type); // a refusal, see below
if (body.global) pausedUntil = Date.now() + body.retry_after;
await new Promise((r) => setTimeout(r, body.retry_after));
return call(path, init);
}و429 مع type رفض يُعرض على الشخص، لا مهلة تُنتظر. يعني InSlowmode الوضع البطيء في القناة، وRateLimited حد الويب هوك.
الحصص
| Bucket | / 10 s | |
|---|---|---|
any_dlta | 20 | /webhooks, /, /applications, /oauth2, /custom, /invites, /soundboard |
bots | 10 | /bots |
channels | 15 | /channels (per channel) |
default_avatar | 255 | /users |
interaction_callbacks | 10 | /interactions (per interaction) |
interactions | 15 | /interactions |
interactions_autocomplete | 30 | /interactions |
messaging | 10 | /channels (per channel) |
servers | 5 | /servers (per server) |
user_edit | 2 | /users (per user) |
users | 20 | /users |
تُحسب /servers و/channels لكل سيرفر ولكل قناة. لا تسمح حصة servers إلا بـ5 طلبات كل 10 ثوانٍ لكل سيرفر، تتقاسمها القراءة والكتابة. ولقوائم الأعضاء (GET /servers/{target}/members) حصتها الخاصة من 15، وهي member_list. يبلغها بوت إشراف نشط بسرعة: احتفظ بالأعضاء في ذاكرة تغذيها Ready وأحداث الأعضاء، واستخدم بيانات العضو الواردة مع التفاعلات.
لـ/interactions/{interaction_id}/{token}/... حصة من 10 لكل تفاعل، وهذا كثير.
حدود أخرى
| ما يُحدّ | الحد |
|---|---|
| ويب هوك واحد | 5 رسائل في ثانيتين |
| كل ويب هوك قناة واحدة | 30 رسالة في الدقيقة |
| الكتابة عبر HTTP | 5 كل 10 ثوانٍ لكل قناة |
| التفاعلات | 3 ثوانٍ للرد، و15 دقيقة للإنهاء |