| ملخص | قم بإجراء تحديات تسجيل دخول يومية محددة بوقت مع لوحات صدارة ومنشورات مؤتمتة وجوائز شارات. | |
| رابط المستودع | GitHub - R23DPrinting/discourse-daily-challenge · GitHub | |
| دليل التثبيت | كيفية تثبيت الإضافات في Discourse |
القصة
أدير مجتمعًا للصحة والعافية انتقل مؤخرًا من ديسكورد (Discord) إلى ديسكورس (Discourse). في ديسكورد، قمت ببناء روبوت مخصص لإجراء تحديات لياقة بدنية شهرية — كان الأعضاء ينشرون تمارينهم اليومية، وكان الروبوت يتتبع عمليات تسجيل الدخول، وينشر لوحات صدارة أسبوعية، ويعلن عن الفائزين في نهاية كل شهر. كانت هذه واحدة من أكثر ميزاتنا شعبية.
بعد الانتقال إلى ديسكورس، بدأ الأعضاء في طلب عودة التحديات. بحثت عن إضافة موجودة ووجدت خالي الوفاض. لذلك، قمت ببناء واحدة.
ما بدأ كحل سريع تحول إلى نظام تحدي متكامل يعمل بشكل أفضل من روبوت ديسكورد الأصلي. وبما أنه قد يكون مفيدًا للمجتمعات الأخرى، فأنا أشاركه هنا.
الميزات
- تسجيل الدخول باستخدام هاشتاغ أو صورة — يقوم الأعضاء بتسجيل الدخول عن طريق نشر هاشتاغ التحدي (مثل
#AprilFitness) أو تحميل صورة إلى موضوع التحدي. كلاهما يؤدي إلى تسجيل دخول صالح. - تسجيل دخول واحد في اليوم — يتم فرضه على مستوى التطبيق وقاعدة البيانات. يعتمد إطار العمل اليومي لكل مستخدم على المنطقة الزمنية لملفه الشخصي.
- منطقة زمنية خاصة بكل تحدي — قم بتعيين المنطقة الزمنية للتحدي بشكل مستقل عن المنطقة الزمنية للخادم الخاص بك حتى لا يتم استبعاد أي عضو عند منتصف ليل التوقيت العالمي المنسق (UTC).
- لوحة تحكم إدارية في الوقت الفعلي — تعرض جميع التحديات النشطة في وقت واحد مع عدد المشاركين، ومتوسط عمليات تسجيل الدخول، وتتبع السلسلة، ونسبة الإكمال، ولوحة صدارة مصنفة.
- تحديات متزامنة متعددة — قم بإجراء عدة تحديات في وقت واحد، لكل منها موضوعه الخاص وهاشتاغه وجدوله الزمني وشارته.
- التحديات المؤرشفة — يتم الاحتفاظ بالتحديات المكتملة في أرشيف قابل للطي يعرض الإحصائيات النهائية والفائزين ومعدلات الإكمال.
- منشورات لوحة الصدارة الأسبوعية المؤتمتة — يتم نشرها في موضوع التحدي في يوم وساعة قابلين للتهيئة في المنطقة الزمنية الخاصة بالتحدي.
- منشور النتائج النهائية — يتم نشره تلقائيًا في اليوم التالي لانتهاء التحدي، ويسرد كل من حقق هدف تسجيل الدخول.
- جوائز شارة مخصصة — ينشئ تلقائيًا شارة ديسكورس لكل تحدي ويمنحها للمشاركين المؤهلين عند انتهاء التحدي.
- إدارة تسجيل الدخول من قبل المسؤول — إضافة أو إزالة عمليات تسجيل الدخول لأي مستخدم مباشرة من لوحة المسؤول.
- تشغيل يدوي للوحة الصدارة — نشر لوحة الصدارة في أي وقت من صفحة تفاصيل التحدي.
- تاريخ انتهاء شامل — إذا قمت بتعيين تاريخ الانتهاء على 31 مارس، يتم احتساب عمليات تسجيل الدخول في 31 مارس.
الإعداد
إنشاء تحدي
اذهب إلى Admin → Plugins → Daily Challenge → Challenges → New Challenge (المسؤول ← الإضافات ← التحدي اليومي ← التحديات ← تحدي جديد)
أدخل مُعرِّف الموضوع (Topic ID) لربط التحدي بموضوع موجود. سيعرض المكون الإضافي عنوان الموضوع للتأكيد. املأ هاشتاغ التشغيل، وتواريخ البدء والانتهاء، وعدد عمليات تسجيل الدخول المطلوبة لإكمال التحدي.
اضبط Challenge timezone (المنطقة الزمنية للتحدي) لتكون المنطقة الزمنية الأساسية لمجتمعك لضمان تقييم حدود التاريخ بشكل صحيح لأعضائك.
إذا كنت تريد منشورات لوحة صدارة أسبوعية مؤتمتة، فقم بتمكين المفتاح وحدد اليوم والساعة. إذا كنت تريد شارة إكمال، فقم بتمكين المفتاح وأدخل اسم الشارة (على سبيل المثال، “بطل اللياقة البدنية لشهر أبريل”).
انقر فوق Save challenge (حفظ التحدي) — إذا كان منح الشارة ممكّنًا، يتم إنشاء الشارة تلقائيًا.
تشغيل تحدي
بمجرد إنشائه، يصبح التحدي نشطًا على الفور. ينشر الأعضاء في الموضوع المرتبط باستخدام الهاشتاغ أو صورة لتسجيل الدخول. تعرض لوحة التحكم الإدارية (Admin → Plugins → Daily Challenge → Dashboard (المسؤول ← الإضافات ← التحدي اليومي ← لوحة التحكم)) إحصائيات في الوقت الفعلي لجميع التحديات النشطة.
نصائح
- اطلب من الأعضاء تعيين منطقتهم الزمنية في Profile → Preferences → Interface → Timezone (الملف الشخصي ← التفضيلات ← الواجهة ← المنطقة الزمنية) للحصول على نوافذ دقيقة لتسجيل الدخول اليومي.
- استخدم الزر Post Leaderboard Now (انشر لوحة الصدارة الآن) في صفحة تفاصيل التحدي لتشغيل منشور لوحة الصدارة في أي وقت.
- استخدم قسم Check-ins (عمليات تسجيل الدخول) في صفحة تفاصيل التحدي لإضافة أو إزالة عمليات تسجيل دخول يدويًا لأي مستخدم.
الإعدادات
| الاسم | الوصف |
|---|---|
| daily_challenge_enabled | مفتاح التمكين/التعطيل الرئيسي للمكون الإضافي |
| Topic ID | الموضوع الذي ينشر فيه المشاركون عمليات تسجيل الدخول |
| Hashtag trigger | الهاشتاغ الذي تتم مراقبته، بدون علامة # |
| Start date | أول يوم يتم فيه قبول عمليات تسجيل الدخول |
| End date | آخر يوم يتم فيه قبول عمليات تسجيل الدخول (شامل) |
| Check-ins needed | عدد عمليات تسجيل الدخول المطلوبة لإكمال التحدي والتأهل للحصول على الشارة |
| Description | ملاحظة داخلية اختيارية حول التحدي (لا تظهر للمشاركين) |
| Challenge timezone | المنطقة الزمنية المستخدمة لحدود التاريخ وجدول النشر الأسبوعي |
| Enable weekly leaderboard post | تشغيل/إيقاف المنشورات الأسبوعية المؤتمتة |
| Post day of week | اليوم الذي يتم فيه نشر المنشور الأسبوعي |
| Post hour (0-23) | الساعة التي يتم فيها نشر المنشور الأسبوعي في المنطقة الزمنية للتحدي |
| Award completion badge | تشغيل/إيقاف إنشاء الشارة تلقائيًا ومنحها |
| Badge name | اسم الشارة التي تم إنشاؤها لهذا التحدي |
ماذا بعد
التخطيط للإصدار الثاني (v2):
- تأكيد عبر الرسائل الخاصة (DM) بعد كل عملية تسجيل دخول مع الإحصائيات الحالية
- رسائل تذكير يومية عبر الرسائل الخاصة للمشاركين الذين لم يسجلوا الدخول بعد
- أوامر الوسم (mention) (@) للاستعلام عن الإحصائيات الشخصية
الدعم وطلبات الميزات
إذا واجهت أي مشاكل أو كانت لديك أفكار لميزات جديدة، يرجى فتح مشكلة على GitHub أو الرد على هذا الموضوع.