لقد قمت بإعداد نظام تصنيف بألقاب مخصصة، ولكن كما تعلمون، لا توجد طريقة مدمجة في Discourse لتعيين لقب افتراضي لجميع المستخدمين الجدد. لذلك، قمت بإنشاء حل بديل حيث:
الأعضاء الجدد في المجموعة 1
الأعضاء النشطون في المجموعة 2
وهكذا…
الطريقة التي استخدمتها هي كالتالي:
cd /var/discourse
./launcher enter app
rails c
User.where(trust_level: 0).update_all(title: "عضو جديد")
User.where(trust_level: 1).update_all(title: "عضو جديد")
User.where(trust_level: 2).update_all(title: "عضو مشارك")
User.where(trust_level: 3).update_all(title: "عضو مبدع")
المشكلة
يجب علي تشغيل هذه الأوامر يدوياً في كل مرة ينضم فيها مستخدم جديد. إذا قمت بتشغيل البرنامج النصي اليوم وانضم عضو جديد غداً، فلن يحصل على اللقب تلقائياً، لذلك يجب علي تسجيل الدخول إلى الخادم وإعادة تشغيل الأوامر.
لقد حاولت أتمتة ذلك باستخدام برنامج نصي بلغة Ruby واستدعائه عبر crontab، ولكنني أحصل على خطأ.
لقد سألت ChatGPT، وأخبرني:
“نموذج المستخدم غير محمل عند تشغيل البرنامج النصي مباشرة باستخدام Ruby خارج بيئة Discourse.”
المشكلة هي أنه ليس لدي إعداد config/environment المناسب داخل ملفات Discourse.
هل هناك طريقة لأتمتة ذلك دون استخدام crontab؟ أو كيف يمكنني تنفيذ برنامج نصي بشكل صحيح يقوم بتحديث ألقاب المستخدمين دون الدخول يدوياً إلى وحدة تحكم Rails في كل مرة؟
يمكنك تحقيق ذلك باستخدام برنامج نصي مخصص للأتمتة يستفيد من مشغلات User Event و User Promoted Event. عند إنشاء مستخدم جديد (User Event) أو تغيير مستوى الثقة لديه (User Promoted Event)، يمكنك تشغيل برنامج نصي لتعيين عنوان له تلقائيًا بناءً على مستوى ثقته.
يبدو من المؤسف أن بعض إعدادات المجموعة غير متاحة للمجموعات المؤتمتة مثل مستويات الثقة. يجب أن يكون من الممكن تعيين عنوان المستخدم بناءً على مجموعة مستوى الثقة التي ينتمون إليها ولكن هذا ليس هو الحال.
يمكنك محاولة القيام بذلك باستخدام نظام الشارات. قم بإنشاء شارة يتم منحها عندما يصل العضو إلى مستوى الثقة الذي تريده، ثم قم بتعيين “السماح باستخدام الشارة كعنوان”.
يمكنك بعد ذلك إنشاء أتمتة باستخدام البرنامج النصي “عضوية مجموعة المستخدم من خلال الشارة” الذي يعمل كل يوم ويقوم بتحديث عنوان المستخدم ورمزه.
هل سيكون مكون سمة يضيف هذه المعلومات إلى بطاقة المنشور/المستخدم أكثر مرونة؟ بهذه الطريقة لا يزال بإمكان المستخدمين استخدام حقل العنوان لأشياء أخرى كما هو مقصود (شارات، معرفات مجموعات، شيء مخصص قد ترغب في إضافته)، ووجوده مضافًا بواسطة مكون سمة يعني أنهم لا يستطيعون تغييره/إزالته.
أحاول تطبيق هذا باستخدام أتمتة نظام الشارات، ولكني أواجه قيودًا.
لتشغيل البرنامج النصي user_group_membership_through_badge، يجب عليّ تحديد مجموعة. ومع ذلك، أنا أستخدم بالفعل مجموعات النظام الافتراضية: مستوى الثقة 1، 2، 3، 4. هذه المجموعات مدمجة ولا يمكن تحديدها في أداة الأتمتة.
إذا قمت بإنشاء مجموعات جديدة لاستخدامها مع هذه الأتمتة، أخشى ألا يتم نقل جميع الأعضاء الحاليين تلقائيًا — وسأفقد التعيين الدقيق للمستخدمين لمستويات الثقة الخاصة بهم.
إليك لقطة شاشة توضح الخطأ عند ترك حقل المجموعة فارغًا:
لدي حاجة أكثر تعقيداً:
أود تعيين ألقاب المستخدمين تلقائياً بناءً على مزيج من عضوية المجموعة (على سبيل المثال: المجموعة أ أو المجموعة ب) ومستوى الثقة (على سبيل المثال: TL2، TL3، إلخ). على سبيل المثال، سيحصل المستخدم في المجموعة أ مع TL2 على اللقب “A - TL2”، وهكذا.
هل سيكون من الممكن توسيع المكون الإضافي الخاص بك لدعم هذه الميزة، أو هل لديك أي نصائح حول كيفية تنفيذها؟
ليس لدي خبرة في البرمجة بنفسي، لذا سأكون ممتناً جداً لأي اقتراحات أو مساعدة.