كل من أطلق بوت ديسكورد رأى ذلك: يوم ثلاثاء عادي، ثم فجأة increased api errors في كل مكان، ونصف أوامرك تفشل. سجّل Google Trends هذه العبارة كمصطلح بحث "متصاعد" في منتصف 2026؛ وهي تحدث بكثرة تجعل المستخدمين النهائيين يبحثون عنها مباشرة. إليك كيف تنجو منها، وما الذي تستفيده واجهة Noxyr Server API من تلك الدروس.

A request gets a 429, waits out a countdown, then retries and succeeds with a 200. Server 429 200 3 2 1 Retry-After

أكبر أنماط الفشل الثلاثة في Discord API

  • انقطاع عام / انقطاع جزئي: يظهر على discordstatus.com. الأعراض: قد يفشل أي طلب، وقد ينقطع الاتصال بالـ gateway، وتتضاعف زمن الاستجابة في كل مكان.
  • 429 Too Many Requests: تجاوزت حد مجموعة طلبات (bucket). يعيد Discord ترويسة Retry-After تخبرك بالضبط بكم من الوقت يجب أن تنتظر.
  • Gateway invalid session: جلسة WebSocket الخاصة بك قديمة. أعد الاتصال باستخدام رمز الاستئناف (resume token)؛ وإذا فشل ذلك، فأجرِ تعريفاً (identify) جديداً.

ابنِ للفشل، لا للأيام المشمسة

  • احترم Retry-After. لا تُعد المحاولة وفق مؤقتك الخاص. انتظر المدة الدقيقة التي يحددها Discord، ثم أعد المحاولة مرة واحدة. البوتات التي تطرق على حدود 429 تُحظر.
  • التراجع الأسي مع Jitter. عند أخطاء 5xx، انتظر 1 ثانية ثم 2 ثم 4 ثم 8، مع إضافة إزاحة عشوائية صغيرة حتى لا يتدافع أسطول من عمليات إعادة التشغيل معاً.
  • أوقف الاستدعاءات غير الحرجة مؤقتاً (Circuit-break). إذا كان بوتك ينشر ملخصاً أسبوعياً وكانت Discord API متدهورة، فتخطَّ هذه الدورة بدلاً من تكديس الطلبات. يمكن أن ينتظر الملخص؛ أما التوقف فلا يستطيع الانتظار.
  • خزّن مؤقتاً كل ما ليس فورياً. أسماء الخوادم، وقوائم القنوات، ومعرّفات الرتب، خزّنها محلياً. أثناء التوقف، تبقي البيانات المخزنة خدمتك تعمل.
  • اعرض الحالة. إذا كانت أوامر بوتك تفشل لأن Discord متوقف، فأخبر المستخدمين. سطر واحد مثل "Discord يواجه مشكلات حالياً" أفضل من مهلات صامتة.

كيف تطبق واجهة Noxyr Server API هذه الدروس

واجهة Noxyr Server API ليست Discord API، فهي تقرأ من قاعدة بياناتها الخاصة، لكن المبادئ نفسها تنطبق عليها، وقد شكّلت تصميمها:

  • أخطاء يمكن التنبؤ بها: كل فشل يأتي بصيغة JSON مع رمز error ثابت. لا HTML، ولا صيغ متغيرة.
  • ترويسات حدود المعدل: ترويسات RateLimit-* موحدة حتى تتراجع العملاء قبل الوصول إلى 429.
  • التدهور الرشيق: نقطة النهاية /api/v1/server تعود إلى بيانات الخادم المخزنة مؤقتاً عندما يفشل جلب Discord الأساسي.
  • لا أعطال متتالية: كل نقطة نهاية تفشل بشكل مستقل. توقف Discord لا يكسر نقطة نهاية تحليلات التذاكر لديك، لأنها تقرأ من Mongo وليس من Discord.
  • مفتاح إيقاف فوري: تعطيل مفتاح أو نطاق يسري مع الطلب التالي مباشرة، من دون الحاجة إلى إعادة تشغيل.

خطة العمل عندما تسوء الأمور مع Discord

  • 1. تحقق أولاً من discordstatus.com: هل المشكلة فيك وحدك؟
  • 2. راجع سجلات الأخطاء لديك: أخطاء 429، و5xx، وانقطاعات الـ gateway.
  • 3. إذا كانت المشكلة من Discord: أوقف الكتابات غير الحرجة مؤقتاً، والتزم بقيمة Retry-After، وانتظر حتى تنتهي المشكلة.
  • 4. إذا كانت المشكلة منك: تحقق من عمليات النشر الأخيرة، وإبطال التخزين المؤقت، والميزات الجديدة.
  • 5. تواصل. ملاحظة قصيرة وصادقة في قناة الدعم تمنع مئة بلاغ مكرر.

للمزيد عن طبقة الواجهة البرمجية: واجهة Noxyr Server API، وDiscord API مقابل واجهة Noxyr API، ومبادئ تصميم الواجهات لبوتات ديسكورد.