كيف تصنع ديسكورد بوت؟| الجزء الأول

Discord bot

يعد Discord نظامًا أساسيًا شائعًا للمراسلة في الوقت الفعلي مع دعم قوي للروبوتات القابلة للبرمجة. تنتشر الروبوتات في كل مكان على Discord وتوفر مجموعة واسعة من الخدمات بما في ذلك المساعدة في الإشراف والألعاب والموسيقى وعمليات البحث على الإنترنت ومعالجة الدفع والمزيد.

تتمثل إحدى الميزات الأكثر جاذبية لـ Discord من منظور مطور برامج الدردشة الآلية في دعمها القوي للروبوتات القابلة للبرمجة التي تساعد على دمج Discord مع العالم الخارجي وتزويد المستخدمين بتجربة أكثر جاذبية. تنتشر الروبوتات في كل مكان على Discord وتوفر مجموعة واسعة من الخدمات بما في ذلك المساعدة في الإشراف والألعاب والموسيقى وعمليات البحث على الإنترنت ومعالجة الدفع والمزيد.

في هذا البرنامج التعليمي Discord bot سنبدأ بمناقشة واجهة مستخدم Discord وواجهات برمجة تطبيقات REST و WebSocket للروبوتات قبل الانتقال إلى البرنامج التعليمي حيث سنكتب Discord bot بسيطًا في JavaScript. أخيرًا سنسمع من مطور برامج الروبوت الأكثر شهرة في Discord وفقًا لمقاييس معينة وخبراته في تطوير البنية التحتية المهمة وقاعدة الرموز الخاصة به والحفاظ عليها.

Discord bot

واجهة مستخدم Discord

قبل أن نناقش التفاصيل الفنية من المهم فهم كيفية تفاعل المستخدم مع Discord وكيف يقدم Discord نفسه للمستخدمين. الطريقة التي يقدم بها نفسه للروبوتات متشابهة من الناحية المفاهيمية (لكنها بالطبع غير مرئية). في الواقع فإن تطبيقات Discord الرسمية مبنية على نفس واجهات برمجة التطبيقات التي تستخدمها برامج الروبوت. من الممكن تقنيًا تشغيل روبوت داخل حساب مستخدم عادي مع القليل من التعديل ولكن هذا ممنوع بموجب شروط خدمة Discord. الروبوتات مطلوبة للتشغيل في حسابات البوت.

إليك نظرة على إصدار المتصفح 1 من تطبيق Discord الذي يعمل داخل Chrome.

واجهة مستخدم Discord

واجهة المستخدم Discord لتطبيق سطح المكتب هي نفسها تقريبًا تطبيق الويب مع حزم Electron. تم تصميم تطبيق iOS باستخدام React Native. تطبيق Android هو كود Android Java الأصلي.

دعونا نجزءها:

1. قائمة الخادم (server list)

على اليسار على طول قائمة الخوادم التي أنا عضو فيها. إذا كنت معتادًا على Slack فإن الخادم يشبه مساحة عمل Slack ويمثل مجموعة من المستخدمين الذين يمكنهم التفاعل مع بعضهم البعض داخل قناة واحدة أو أكثر في الخادم. تتم إدارة الخادم من قبل منشئه و / أو أي موظف يختارونه ويختارون تفويض المسؤوليات إليه. يحدد المنشئ و / أو الموظفون القواعد وهيكل القنوات في الخادم وإدارة المستخدمين.

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

لاحظ أنه بينما المصطلح المستخدم في واجهة مستخدم Discord هو الخادم فإن المصطلح المستخدم في وثائق المطور وواجهة برمجة التطبيقات هو Guild. بمجرد أن ننتقل إلى الحديث عن الموضوعات الفنية سننتقل إلى الحديث عن النقابات. المصطلحان قابلان للتبادل.

2. قائمة القنوات (channel list)

على يمين قائمة الخادم توجد قائمة القنوات للخادم الذي أشاهده حاليًا (في هذه الحالة خادم Discord API). يمكن تقسيم القنوات إلى عدد تعسفي من الفئات. في خادم Discord API تشمل الفئات INFORMATION و GENERAL و LIBS كما هو موضح. تعمل كل قناة كغرفة دردشة حيث يمكن للمستخدمين مناقشة أي موضوع تخصص القناة له. القناة التي نعرضها حاليًا (معلومات) لها خلفية أفتح. القنوات التي تحتوي على رسائل جديدة منذ آخر مرة شاهدناها بها لون نص أبيض.

3. عرض القناة (view channel)

هذا هو عرض القناة حيث يمكننا رؤية ما يتحدث عنه المستخدمون في القناة التي نشاهدها حاليًا. يمكننا رؤية رسالة واحدة هنا مرئية جزئيًا فقط. إنها قائمة روابط لخوادم الدعم لمكتبات Discord bot الفردية. قام مسؤولو الخادم بتكوين هذه القناة بحيث لا يتمكن المستخدمون العاديون مثلي من إرسال رسائل فيها. يستخدم المسؤولون هذه القناة كلوحة إعلانات لنشر بعض المعلومات المهمة حيث يمكن رؤيتها بسهولة ولن تغرقها الدردشة.

4. قائمة المستخدمين (user list)

يوجد على اليمين قائمة بالمستخدمين المتصلين حاليًا في هذا الخادم. يتم تنظيم المستخدمين في فئات مختلفة وأسمائهم لها ألوان مختلفة. هذا هو نتيجة الأدوار التي لديهم. يصف الدور الفئة (إن وجدت) التي يجب أن يظهر المستخدم تحتها ولون الاسم الذي يجب أن يكون عليه والأذونات التي لديهم في الخادم. يمكن أن يكون للمستخدم أكثر من دور واحد (وغالبًا ما يفعل ذلك) وهناك بعض الرياضيات الأسبقية التي تحدد ما يحدث في هذه الحالة. كحد أدنى كل مستخدم لديه دور @ everyone. يتم إنشاء الأدوار الأخرى وتعيينها بواسطة طاقم الخادم.

5. إدخال النص (text input)

هذا هو إدخال النص حيث يمكنني كتابة الرسائل وإرسالها إذا سمح لي بذلك. بما أنه ليس لدي إذن بإرسال رسائل في هذه القناة لا يمكنني الكتابة هنا.

6. المستخدم (user)

هذا هو المستخدم الحالي. لقد قمت بتعيين اسم المستخدم الخاص بي على “me” وذلك للمساعدة في تجنبي الخلط ولأنني سيء للغاية في اختيار الأسماء. يوجد أسفل اسم المستخدم الخاص بي رقم (# 9484) وهو أداة التمييز الخاصة بي. قد يكون هناك العديد من المستخدمين الآخرين الذين يحملون اسم “me” لكنني الوحيد Me # 9484. من الممكن أيضًا تعيين اسم مستعار لنفسي على أساس كل خادم لذلك يمكن أن أكون معروفًا بأسماء مختلفة في خوادم مختلفة.

هذه هي الأجزاء الأساسية لواجهة مستخدم Discord ولكن هناك الكثير أيضًا. من السهل البدء في استخدام Discord حتى بدون إنشاء حساب لذلك لا تتردد في قضاء دقيقة في التنصت. يمكنك الدخول إلى Discord من خلال زيارة صفحة Discord الرئيسية والنقر على “فتح Discord في متصفح” واختيار اسم مستخدم وربما تشغيل جولة أو اثنتين من “النقر على صور الحافلة”.

واجهة برمجة تطبيقات Discord

تتكون واجهة برمجة تطبيقات Discord من قطعتين منفصلتين: WebSocket و REST APIs. بشكل عام يتم استخدام WebSocket API لتلقي الأحداث من Discord في الوقت الفعلي بينما يتم استخدام REST API لأداء الإجراءات داخل Discord.

واجهة برمجة تطبيقات Discord

واجهة برمجة تطبيقات WebSocket

يتم استخدام WebSocket API لتلقي الأحداث من Discord بما في ذلك إنشاء الرسائل وحذف الرسائل وأحداث طرد / حظر المستخدم وتحديثات أذونات المستخدم وغير ذلك الكثير. الاتصال من الروبوت إلى WebSocket API من ناحية أخرى هو أكثر محدودية. يستخدم الروبوت WebSocket API لطلب اتصال وتعريف نفسه ونبض القلب وإدارة اتصالات الصوت والقيام ببعض الأشياء الأساسية. يمكنك قراءة المزيد من التفاصيل في وثائق بوابة Discord  (يشار إلى اتصال واحد بواجهة برمجة تطبيقات WebSocket على أنه بوابة). لأداء إجراءات أخرى يتم استخدام واجهة برمجة تطبيقات REST.

تحتوي الأحداث من WebSocket API على حمولة تتضمن معلومات تعتمد على نوع الحدث. على سبيل المثال ستصاحب جميع أحداث إنشاء الرسائل كائن مستخدم يمثل كاتب الرسالة. ومع ذلك فإن كائن المستخدم وحده لا يحتوي على جميع المعلومات التي يجب معرفتها عن المستخدم. على سبيل المثال لا توجد معلومات مدرجة حول أذونات المستخدم. إذا كنت بحاجة إلى مزيد من المعلومات فيمكنك الاستعلام عن واجهة برمجة تطبيقات REST الخاصة بها ولكن لأسباب موضحة بمزيد من التفصيل في القسم التالي يجب عليك عمومًا الوصول إلى ذاكرة التخزين المؤقت التي كان ينبغي عليك إنشاؤها من الحمولات المستلمة من الأحداث السابقة بدلاً من ذلك. هناك عدد من الأحداث التي تقدم حمولات ذات صلة بأذونات المستخدم بما في ذلك على سبيل المثال لا الحصر إنشاء النقابة وتحديث دور الجماعة وتحديث القناة.

يمكن أن يوجد الروبوت في 2500 نقابة كحد أقصى لكل اتصال WebSocket. للسماح لبوت بالتواجد في المزيد من النقابات يجب على الروبوت تنفيذ التجزئة وفتح عدة اتصالات WebSocket منفصلة إلى Discord. إذا كان الروبوت الخاص بك يعمل داخل عملية واحدة على عقدة واحدة فهذا مجرد تعقيد إضافي بالنسبة لك قد يبدو غير ضروري. ولكن إذا كان برنامج الروبوت الخاص بك شائعًا جدًا ويحتاج إلى توزيع نهايته الخلفية عبر عقد منفصلة فإن دعم التجزئة في Discord يجعل هذا الأمر أسهل بكثير مما سيكون عليه الأمر بخلاف ذلك.

واجهة برمجة تطبيقات REST

يتم استخدام واجهة برمجة تطبيقات Discord REST بواسطة الروبوتات لتنفيذ معظم الإجراءات مثل إرسال الرسائل وركل / حظر المستخدمين وتحديث أذونات المستخدم (التي تشبه إلى حد كبير الأحداث المستلمة من WebSocket API). يمكن أيضًا استخدام واجهة برمجة تطبيقات REST للاستعلام عن المعلومات ومع ذلك تعتمد الروبوتات بشكل أساسي على الأحداث من WebSocket API بدلاً من ذلك وتقوم بتخزين المعلومات الواردة من أحداث WebSocket مؤقتًا.

هناك عدة أسباب لذلك. الاستعلام عن واجهة برمجة تطبيقات REST للحصول على معلومات المستخدم في كل مرة يتم فيها تلقي حدث إنشاء رسالة على سبيل المثال لا يتسع نطاقه بسبب حدود معدل REST API. كما أنها زائدة عن الحاجة في معظم الحالات حيث توفر WebSocket API المعلومات الضرورية ويجب أن تكون لديك في ذاكرة التخزين المؤقت.

ومع ذلك هناك بعض الاستثناءات وقد تحتاج أحيانًا إلى معلومات غير موجودة في ذاكرة التخزين المؤقت. عندما يتصل الروبوت في البداية ببوابة WebSocket يتم في البداية إرسال حدث جاهز وحدث إنشاء نقابة واحد لكل جماعة يوجد فيها الروبوت على هذا الجزء إلى الروبوت حتى يتمكن من ملء ذاكرة التخزين المؤقت الخاصة به بالحالة الحالية. تتضمن أحداث Guild Create للنقابات المكتظة بالسكان فقط معلومات حول المستخدمين عبر الإنترنت. إذا احتاج الروبوت الخاص بك إلى الحصول على معلومات حول مستخدم غير متصل بالإنترنت فقد لا تكون المعلومات ذات الصلة موجودة في ذاكرة التخزين المؤقت. في هذه الحالة من المنطقي تقديم طلب إلى REST API. أو إذا وجدت نفسك في كثير من الأحيان بحاجة إلى الحصول على معلومات حول المستخدمين غير المتصلين يمكنك بدلاً من ذلك اختيار إرسال رمز تشغيل طلب أعضاء النقابة إلى WebSocket API لطلب أعضاء الجماعة غير المتصلين.

استثناء آخر هو إذا كان تطبيقك غير متصل بواجهة برمجة تطبيقات WebSocket على الإطلاق. على سبيل المثال إذا كان الروبوت الخاص بك يحتوي على لوحة تحكم ويب يمكن للمستخدمين تسجيل الدخول إليها وتغيير إعدادات الروبوت في الخادم الخاص بهم. يمكن تشغيل لوحة معلومات الويب في عملية منفصلة دون أي اتصالات بواجهة WebSocket API ولا توجد ذاكرة تخزين مؤقت للبيانات من Discord. قد يحتاج فقط في بعض الأحيان إلى تقديم عدد قليل من طلبات REST API. في هذا النوع من السيناريو من المنطقي الاعتماد على واجهة برمجة تطبيقات REST للحصول على المعلومات التي تحتاجها.

أغلفة API

في حين أنه من الجيد دائمًا أن يكون لديك بعض الفهم لكل مستوى من مستويات مكدس التكنولوجيا لديك فإن استخدام Discord WebSocket و REST APIs مباشرة يستغرق وقتًا طويلاً وعرضة للخطأ وغير ضروري بشكل عام وخطير في الواقع.

يوفر Discord قائمة منسقة بالمكتبات التي تم فحصها رسميًا ويحذر من:

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

المكتبات التي تم فحصها رسميًا بواسطة Discord هي بشكل عام ناضجة وموثقة جيدًا وتتميز بالتغطية الكاملة لـ Discord API. لن يكون لدى معظم مطوري برامج الروبوت سبب وجيه لتطوير تنفيذ مخصص إلا بدافع الفضول أو الشجاعة!

في هذا الوقت تتضمن المكتبات التي تم فحصها رسميًا تطبيقات لـ Crystal و  C # و D و Go و Java و JavaScript و Lua و Nim و PHP و Python و Ruby و Rust و Swift. قد يكون هناك مكتبتان مختلفتان أو أكثر للغة التي تختارها. يمكن أن يكون اختيار أي منها قرارًا صعبًا. بالإضافة إلى التحقق من الوثائق ذات الصلة قد ترغب في الانضمام إلى خادم Discord API غير الرسمي والتعرف على نوع المجتمع الذي يقف وراء كل مكتبة.

كيف تصنع Discord bot؟

دعونا ننكب على العمل. سنقوم بإنشاء روبوت Discord يتم تعليقه في خادمنا ويستمع إلى خطافات الويب من Ko-fi.  Ko-fi هي خدمة تتيح لك قبول التبرعات بسهولة إلى حساب PayPal الخاص بك. من السهل جدًا إعداد webhooks هناك على عكس PayPal حيث تحتاج إلى أن يكون لديك حساب تجاري لذا فهو رائع للأغراض التوضيحية أو معالجة التبرعات على نطاق صغير.

عندما يتبرع المستخدم بمبلغ 10 دولارات أمريكية أو أكثر ، فإن الروبوت سيخصص له دور عضو مميز يغير لون اسمه وينقله إلى أعلى قائمة المستخدمين عبر الإنترنت. بالنسبة لهذا المشروع سنستخدم Node.js ومكتبة Discord API تسمى Eris  (رابط التوثيق: https://abal.moe/Eris/). إيريس ليست مكتبة JavaScript الوحيدة. يمكنك اختيار discord.js بدلاً من ذلك. سيكون الرمز الذي سنكتبه متشابهًا جدًا في كلتا الحالتين.

جانبا يوفر Patreon وهو معالج تبرعات آخر روبوت Discord رسميًا ويدعم تكوين أدوار Discord كمزايا للمساهمين. سنقوم بتنفيذ شيء مشابه ولكن بالطبع أكثر أساسية.

يتوفر رمز كل خطوة من خطوات البرنامج التعليمي على GitHub (https://github.com/mistval/premium_bot). بعض الخطوات الموضحة في هذا المنشور تحذف الرمز غير المتغير للإيجاز لذا اتبع الروابط المقدمة إلى GitHub إذا كنت تعتقد أنك قد تفقد شيئًا ما.

منشور ذات صلة
برنامج MATLAB 6 Minutes

ماهو برنامج MATLAB؟

أمير مقدم

MATLAB هي لغة برمجة عالية المستوى، مما يعني أنه لا داعي للقلق بشأن المشكلات ذات المستوى المنخفض مثل إدارة الذاكرة (على الرغم من أن المستخدمين الأكثر تقدمًا قد يتعاملون معها).

لغة برمجة Scala 10 Minutes

ما هي لغة برمجة Scala؟

جاسم ناظري

الطريقة الرئيسية هي نقطة دخول برنامج Scala. تتطلب Java Virtual Machine دالة رئيسية تسمى main تأخذ وسيطة واحدة: مصفوفة من السلاسل النصية.

سلسلة دروس: Discord bot

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

السلة