تعيين العناوين تلقائيًا بناءً على مستوى الثقة في Discourse

مرحباً بالجميع،

لقد قمت بإعداد نظام تصنيف بألقاب مخصصة، ولكن كما تعلمون، لا توجد طريقة مدمجة في 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 في كل مرة؟

شكراً مقدماً!

إعجابَين (2)

أي مساعدة؟

ربما يكون ذلك ممكنًا عن طريق إنشاء أتمتة مخصصة لـ Discourse Automation و Create custom Automations لكنني لا أعرف كيف تعمل.

إعجاب واحد (1)

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

5 إعجابات

شكراً @jahan_gagan! هل من مساعدة في صنع هذا السكريبت؟

رائع! اختراق جميل! :clap:

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

يمكنك محاولة القيام بذلك باستخدام نظام الشارات. قم بإنشاء شارة يتم منحها عندما يصل العضو إلى مستوى الثقة الذي تريده، ثم قم بتعيين “السماح باستخدام الشارة كعنوان”.

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

5 إعجابات

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

إعجاب واحد (1)

مرحباً،

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

لتشغيل البرنامج النصي user_group_membership_through_badge، يجب عليّ تحديد مجموعة. ومع ذلك، أنا أستخدم بالفعل مجموعات النظام الافتراضية: مستوى الثقة 1، 2، 3، 4. هذه المجموعات مدمجة ولا يمكن تحديدها في أداة الأتمتة.

إذا قمت بإنشاء مجموعات جديدة لاستخدامها مع هذه الأتمتة، أخشى ألا يتم نقل جميع الأعضاء الحاليين تلقائيًا — وسأفقد التعيين الدقيق للمستخدمين لمستويات الثقة الخاصة بهم.

إليك لقطة شاشة توضح الخطأ عند ترك حقل المجموعة فارغًا:

هل هناك أي طريقة لتطبيق تحديث الشارة إلى اللقب دون الحاجة إلى مجموعة؟
أو هل هناك حل بديل لاستهداف مجموعات مستوى الثقة مباشرة ضمن هذه الأتمتة؟

@xkhalid لقد قمت بتجميع إضافة سريعة (وهي الأولى لي أيضًا!) تقوم بما يلي:

  • تعيين لقب للمستخدمين الجدد
  • تغيير اللقب إلى اللقب المقابل لمستوى الثقة الخاص بهم. على سبيل المثال، TL1 → TL2: يحصل المستخدمون على لقب TL2 الآن، بدلاً من لقب TL1.
  • تحديث ألقاب المستخدمين كل 12 ساعة (خطط لجعل التردد قابلاً للتكوين)

جميع الألقاب قابلة للتكوين عبر الإعدادات :slightly_smiling_face:.

4 إعجابات

شكرًا لك!

بعد إضافة هذا إلى app.yml

- git clone https://github.com/NateDhaliwal/add-title-based-on-trust-level.git

وإعادة البناء، واجهت خطأ 502 Bad Gateway. هل هناك حل؟
في الوقت الحالي، قمت بإزالته من app.yml وكل شيء يعمل بشكل جيد.

غريب. على حد علمي، قد يظهر هذا الخطأ أحيانًا بعد إعادة البناء، ولكن الانتظار سيحل المشكلة (أو إعادة بناء أخرى).

نعم، أعرف - ولكن هذه المشكلة حدثت فقط بعد إضافة مستودع Git وإعادة البناء. أعطتني هذا الخطأ.

ومع ذلك، سأحاول مرة أخرى لاحقًا.


ماذا عن هذه المشكلة؟ هل يمكن أن تكون ذات صلة؟

إعجاب واحد (1)

سألقي نظرة أخرى على هذا، شكراً لإعلامي.

إعجاب واحد (1)

@xkhalid هل يمكنك تجربته الآن؟ لقد قمت بتحديثه للتو.

إعجاب واحد (1)

شكرا لك! لقد نجح الأمر الآن.

لكنه لم ينعكس لدى جميع المستخدمين. على سبيل المثال، هذا المستخدم في مستوى الثقة 1 وهو مستخدم جديد، ولكن لم يتم تعيين أي لقب له.

هل سيستغرق الأمر بعض الوقت؟

@xkhalid لقد دفعت إصلاحًا. من فضلك أخبرني إذا كان يعمل الآن.
شكرا!

أود أن أشكر @NateDhaliwal على الإضافة الخاصة به!

لقد كانت مفيدة جداً! وتم تحديث اللقب كل 12 ساعة.

إعجاب واحد (1)

مرحباً، شكراً لك على المكون الإضافي الرائع!

لدي حاجة أكثر تعقيداً:
أود تعيين ألقاب المستخدمين تلقائياً بناءً على مزيج من عضوية المجموعة (على سبيل المثال: المجموعة أ أو المجموعة ب) ومستوى الثقة (على سبيل المثال: TL2، TL3، إلخ). على سبيل المثال، سيحصل المستخدم في المجموعة أ مع TL2 على اللقب “A - TL2”، وهكذا.

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

شكراً جزيلاً لك!

هل هذه المجموعات هي المجموعات الأساسية للمستخدم؟

نعم، أريد استخدام المجموعة الأساسية للمستخدم لتحديد اللقب.