رابط دعوة بوت Discord ليس سوى رابط تفويض OAuth2: يحدد معامل scope نوع الوصول المطلوب (حساب بوت، أو أوامر الشرطة المائلة، أو كلاهما)، ويحدد رقم permissions الصلاحيات التي سيملكها حساب البوت بعد دخوله، ويجب على مسؤول الخادم الموافقة على الرابط كله قبل أن يصبح أي شيء ساري المفعول. فهم هذين المعاملين هو الفرق بين بناء رابط دعوة آمن ونسخ رابط لا تستطيع تفسير كل ما فيه.

An OAuth permission checklist gets reviewed, Administrator is unticked, and the bot joins online. Permissions Kick Members Manage Messages Administrator Authorize YourBot Online

تشريح رابط الدعوة

يبدو رابط الدعوة المعتاد هكذا:

https://discord.com/oauth2/authorize?client_id=123456789&permissions=268446800&scope=bot%20applications.commands

  • client_id - المعرّف العام للتطبيق، وهو آمن للمشاركة، ويظهر في كل رابط دعوة لذلك البوت.
  • scope - نوع الوصول المطلوب، مفصولاً بمسافات (ومُرمَّزاً كـ %20).
  • permissions - رقم واحد يمثل كل صلاحيات الخادم المطلوبة، مجموعةً معاً.
  • guild_id وdisable_guild_select (اختياريان) - لتحديد خادم معيّن مسبقاً وقفل أداة الاختيار عليه، وهذا مفيد لزر "أضفني إلى هذا الخادم" الموجود داخل كل خادم.

نطاق "bot"

هذا هو ما يضيف البوت فعلياً كعضو في الخادم، وهو المدخل الذي يظهر في قائمة الأعضاء مع وسم البوت بجانبه. بدون هذا النطاق لا ينضم شيء، لأنه لا يوجد حساب بوت لتفويضه.

نطاق "applications.commands"

يسجّل هذا النطاق أوامر التطبيق من نوع الشرطة المائلة والمستخدم والرسالة كي يمكن استخدامها في ذلك الخادم. يستطيع البوت تقنياً الانضمام بنطاق bot وحده، لكن لن تظهر أي من أوامره /commands عندما يكتب أحد /، لأن الخادم لم يصرّح بتسجيل الأوامر.

لماذا تريد الاثنين معاً في الغالب

يستطيع بوت دُعي بنطاق bot فقط أن ينشر رسائل، ويتفاعل مع الأزرار على رسائل أرسلها سابقاً، ويرد على أشياء لا تتطلب أمر شرطة مائلة. لكن مستخدمي Discord اليوم يتوقعون الأوامر، والبوت الذي لا يستطيع تسجيلها يبدو معطلاً حتى لو كان يعمل بشكل جيد. كل رابط دعوة تولّده Noxyr، وكذلك معظم روابط البوتات المشروعة، يتضمن النطاقين معاً لهذا السبب تحديداً.

رقم الصلاحيات، مفكوكاً

كل صلاحية في Discord، مثل إرسال الرسائل أو إدارة الأدوار أو طرد الأعضاء، هي بت واحد في حقل من البتات: علم قيمته قوة للعدد اثنين. الرقم في رابط الدعوة هو مجموع كل الأعلام المطلوبة معاً. الرابط الذي يطلب permissions بقيمة 8 يطلب شيئاً واحداً بالتحديد: Administrator، أي وصول كامل غير مقيّد إلى الخادم. أما رابط الدعوة المبني جيداً فيجمع فقط الأعلام المحددة التي يستخدمها كود البوت فعلاً: إدارة القنوات لإنشاء قنوات التذاكر، وإدارة الأدوار لدور التحقق، وإجراءات الإشراف للاستجابة لهجمات الإغراق، لا كل ما توفره Discord.

لماذا يُعدّ Administrator علامة تحذير لا شرطاً

معظم البوتات المشروعة لا تحتاجه. طلبه إما حاجة حقيقية ونادرة لشيء يمسّ تقريباً كل الصلاحيات دفعة واحدة، أو، وهذا أكثر شيوعاً بكثير، بوت بُني بسرعة ولُصق فيه permissions بقيمة 8 لأنه أسهل رقم يمكن الوصول إليه. وهي أيضاً أكثر شاشة مخيفة يعرضها Discord على مالك الخادم أثناء الإعداد، ما يجعلها سبباً شائعاً لرفض الدعوة فوراً أو لإزالة البوت لاحقاً من قِبل شخص يعيد ترتيب الصلاحيات. يمكنك فك رقم الصلاحيات في أي رابط دعوة باستخدام حاسبة صلاحيات Discord قبل النقر على "تفويض"، لترى بالضبط ما الذي يُطلب.

كيف يُبنى رابط دعوة Noxyr، كمثال

بدلاً من طلب Administrator، يُبنى رابط دعوة Noxyr من الصلاحيات المحددة التي تستخدمها ميزاته فعلاً: إدارة القنوات والأدوار للتذاكر والتحقق، وصلاحيات الرسائل والإشراف للاستجابات لهجمات الإغراق، ولا شيء خارج هذه القائمة. ويتضمن دائماً نطاقي bot وapplications.commands معاً، كي تعمل أوامره بمجرد انضمامه.

نطاقات OAuth2 أخرى قد تراها

يعرّف Discord عشرات نطاقات OAuth2 إلى جانب bot وapplications.commands، ومعظمها، مثل identify أو guilds.join، ينتمي إلى مصادقة الويب بأسلوب "تسجيل الدخول باستخدام Discord" لا إلى دعوات البوتات، ولا يظهر أصلاً في رابط الدعوة القياسي. إذا طلب رابط أمامك شيئاً غير مألوف إلى جانب bot، فمن الأفضل التحقق مما يمنحه ذلك النطاق فعلاً قبل التفويض، لأن دعوة البوت التي تحتاج نطاقات مصادقة ويب إضافية أمر غير معتاد خارج الخدمات التي تقدم ربط الحسابات.

بناء رابط الدعوة الخاص ببوتك المخصص

بعد إنشاء تطبيق في بوابة مطوّري Discord، تبني أداة إنشاء الروابط في تبويب OAuth2 هذا الرابط لك عبر خانات الاختيار: حدّد bot وapplications.commands ضمن النطاقات، وحدّد الصلاحيات التي يحتاجها بوتك، ثم انسخ النتيجة، بدلاً من تجميع الرابط ورقم الصلاحيات يدوياً.

أسئلة شائعة

ماذا يفعل disable_guild_select؟ يقفل أداة اختيار الخادم على خادم واحد محدد مسبقاً، فلا يمكن استخدام رابط دعوة مخصص لمجتمع معيّن لإضافة البوت إلى مكان آخر بالخطأ.

هل أحتاج applications.commands إذا كان بوتي يستخدم الأزرار فقط؟ ليس ضرورياً للأزرار على رسائل أرسلها البوت سابقاً، لكنك تحتاجه بمجرد أن يدخل أي أمر شرطة مائلة في الصورة.

هل يمكن أن يضيف تغيير رقم الصلاحيات لاحقاً وصولاً بأثر رجعي؟ لا. الخادم الذي وافق على دعوة يحتفظ بما مُنح في ذلك الوقت، وتغيير الرابط يؤثر فقط في الدعوات المستقبلية، والتثبيتات الموجودة تحتاج إلى دعوة جديدة وموافقة جديدة لتكسب صلاحيات إضافية.

هل يكفي scope=bot وحده؟ يكفي لانضمام البوت، لكن أوامره بالشرطة المائلة لن تظهر من دون applications.commands إلى جانبه.

لماذا تعرض Discord تحذيراً كبيراً عند Administrator؟ لأنه يطلب وصولاً غير مقيّد إلى الخادم كله، وهو أخطر صلاحية يمكن أن يطلبها رابط دعوة بوت.

تريد إعداد دعوة بوتك الخاص؟ اطّلع أولاً على دليلنا حول إنشاء تطبيق Discord، ثم اقرأ وثائق البوت المخصص إذا كنت تفضل تجنب كتابة الكود الذي يقف خلفه كلياً.