Zrzur المطوّرون

حدود المعدل

كم طلبًا يستطيع البوت إرساله، وكيف تقرأ الترويسات، وما تفعله بعد 429.

الحدود الثلاثة

  1. الحصص. يُحسب كل مسار على حصة، في نافذة من 10 ثوانٍ. يسردها الجدول أدناه.
  2. الحد العام. يرسل البوت 50 طلبًا في الثانية على الأكثر، عبر كل المسارات.
  3. الطلبات المرفوضة. العنوان الذي يجمع 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-Globaltrue إذا كان الحد العام هو الذي بُلغ
Retry-Afterمع 429 فقط: ثوانٍ للانتظار، مقربة إلى أعلى

بعد 429

حد المعدل هو 429 بلا type:

{ "retry_after": 3531, "global": false }

retry_after بالميلي ثانية.

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_dlta20/webhooks, /, /applications, /oauth2, /custom, /invites, /soundboard
bots10/bots
channels15/channels (per channel)
default_avatar255/users
interaction_callbacks10/interactions (per interaction)
interactions15/interactions
interactions_autocomplete30/interactions
messaging10/channels (per channel)
servers5/servers (per server)
user_edit2/users (per user)
users20/users

تُحسب /servers و/channels لكل سيرفر ولكل قناة. لا تسمح حصة servers إلا بـ5 طلبات كل 10 ثوانٍ لكل سيرفر، تتقاسمها القراءة والكتابة. ولقوائم الأعضاء (GET /servers/{target}/members) حصتها الخاصة من 15، وهي member_list. يبلغها بوت إشراف نشط بسرعة: احتفظ بالأعضاء في ذاكرة تغذيها Ready وأحداث الأعضاء، واستخدم بيانات العضو الواردة مع التفاعلات.

لـ/interactions/{interaction_id}/{token}/... حصة من 10 لكل تفاعل، وهذا كثير.

حدود أخرى

ما يُحدّالحد
ويب هوك واحد5 رسائل في ثانيتين
كل ويب هوك قناة واحدة30 رسالة في الدقيقة
الكتابة عبر HTTP5 كل 10 ثوانٍ لكل قناة
التفاعلات3 ثوانٍ للرد، و15 دقيقة للإنهاء

التالي