تقييد النشر في فئة حتى يقوموا بـ "الإعجاب" بموضوع ما

مساء الخير. لدي فئة بيع/شراء/مبادلة على موقعي وأرغب في تقييد النشر فيها حتى يقوم العضو بـ “الإعجاب” بموضوع القواعد. لقد سألت روبوت الذكاء الاصطناعي، وقد أعطاني بعض التعليمات. ومع ذلك، يبدو أنه يتطلب أتمتة ديسكورس (Discourse Automation) المتوفرة فقط في الخطط المستضافة.

هل هناك طريقة يمكنني من خلالها القيام بذلك على منصتي المستضافة ذاتيًا؟

مرحباً، إنه مُضمَّن بالفعل مع الإصدار المجتمعي مجاناً. يمكنك تفعيله في علامة التبويب المكونات الإضافية (Plugins).

إعجابَين (2)

لا تهتم. اكتشفت أنه يمكنني إضافة إضافة التشغيل التلقائي لـ Discord يدويًا…

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

حسنًا، ربما باستخدام Discourse Policy وأذونات المجموعة؟

  • add-users-to-group: يقبل مجموعة واحدة كمدخل؛ سيتم إضافة المستخدمين الذين يقبلون السياسة تلقائيًا إلى هذه المجموعة (عندما يتم إلغاء السياسة يدويًا أو إذا تم تحديث إصدار السياسة، تتم إزالة المستخدمين من المجموعة)
إعجابَين (2)

لقد اكتشفت الحل (بمساعدة ask.discourse.org).

كان عليّ تفعيل “badge sql” ثم إنشاء شارة تُمنح عندما يقوم شخص ما بالإعجاب بالمنشور المحدد. بعد ذلك، أنشأت مجموعة يقوم “Discord Automation” بتعيينها تلقائيًا بناءً على امتلاك المستخدم للشارة. لقد منحت مجموعة “everyone” إمكانية القراءة فقط للفئة حتى يتمكنوا فقط من التفاعل. ومنحت المجموعة المخصصة إمكانية الوصول الكامل.

إعجابَين (2)

جميل – شكرًا لمشاركة التفاصيل!
الآن يمكنك وضع علامة على مشاركتك كحل لك. :grin:

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

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

3 إعجابات

فقط في حال كان أي شخص آخر مهتمًا بفعل هذا، إليك ملخص قصير لما فعلته:

  1. أولاً، تحتاج إلى تمكين Badge SQL (SQL الشارات) من خلال واجهة سطر الأوامر (CLI) لخادم Discourse الخاص بك:
./launcher enter app
rails c
SiteSetting.enable_badge_sql = true
  1. بعد ذلك، ابحث عن مُعرّف الموضوع (Topic ID) الذي تريد أن يتفاعل معه الأعضاء للحصول على الشارة. في مثيلي، مُعرّف الموضوع هو 117
  2. بعد ذلك، ابحث عن مُعرّف الموضوع (Topic ID) الذي تريد أن يتفاعل معه الأعضاء للحصول على الشارة. في مثيلي، مُعرّف الموضوع هو 117

Screenshot 2026-02-27 113204

  1. أنشئ شارتك المخصصة:
    1. المسؤول (Admin) > الشارات (Badges) > جديد (New)
    2. سمِّ الشارة ما تشاء (مثل: قارئ قواعد B/S/T)
    3. اختر نوع الشارة، وأيقونة، وأعطها وصفًا
    4. إذا اتبعت الخطوة 1، سترى مربع استعلام (query box) حيث يمكنك كتابة استعلام SQL. الصق هذا الاستعلام (غيّر p.topic_id = 117 إلى مُعرّف الموضوع الخاص بك):
      1. SELECT DISTINCT ON (pa.user_id)
          pa.user_id,
          pa.post_id,
          pa.created_at granted_at
        FROM post_actions pa
        JOIN posts p ON pa.post_id = p.id AND p.post_number = 1
        WHERE pa.post_action_type_id = 2
          AND p.topic_id = 117
          AND (:backfill OR pa.post_id IN (:post_ids))
        
    5. تأكد من تحديد كل من Run revocation query daily (تشغيل استعلام الإلغاء يوميًا) و Query targets posts (الاستعلام يستهدف المنشورات).
    6. يجب تعيين المُشغّل (trigger) على When a user acts on post (عندما يتفاعل مستخدم مع منشور)
  2. الآن نُنشئ الأتمتة (Automation)
    1. أولاً، أنشئ مجموعة جديدة ليتم إضافة الأعضاء إليها. لقد سميتها فقط bst_rules_agreed، وهي مُعدّة بحيث يمكن لمالكي المجموعة والمشرفين فقط رؤية العضوية. لا تحتاج إلى أي تأثيرات لمستوى الثقة (Trust Level).
    2. بعد ذلك، انتقل إلى الإضافات (Plugins) > الأتمتة (Automation)
      1. أضف أتمتة جديدة
        1. اختر User Group Membership Through Badge (عضوية مجموعة المستخدمين عبر الشارة)
        2. المُشغّل (Trigger): Recurring (متكرر)
          1. التكرار (Recurrence): لقد ضبطته على كل ساعة. اختر ما تراه مناسبًا لك.
          2. اختر تاريخ البدء
        3. خيارات البرنامج النصي (Script Options):
          1. الشارة (Badge): اختر الشارة التي أنشأتها أعلاه
          2. المجموعة (Group): اختر المجموعة التي أنشأتها أعلاه

هذا كل شيء. يجب أن يكون لديك الآن نظام يضمن موافقة الأعضاء على قواعد الفئة قبل أن يتمكنوا من النشر في تلك الفئة.

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

3 إعجابات

تم اقتراح حل بديل في الموضوع الخاص بإضافة المواضيع الخاصة. أنا أنقل ذلك إلى هنا.

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

شكرًا لك على هذا المكوّن الإضافي! كنت أبحث عن طريقة لتوفير نظام تذاكر أساسي في مجتمعنا.

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

هذا يمنع الأشخاص الذين لم يقبلوا القواعد من النشر في الفئة. ومع ذلك، لا يزال بإمكانهم رؤية وقراءة جميع المنشورات.

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

هذا ليس ما كان هذا المكون الإضافي مُعدًا للقيام به.

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

لقد نظرت في إضافة السياسة (Policy plugin) قبل أن أتعمق في الطريقة التي انتهى بي الأمر بها لتعيين عضوية المجموعة. السبب الذي يجعلني لا أحب السياسة لهذا الغرض هو أنه يجب تطبيقها على مجموعة. سأحتاج إلى تطبيقها على شيء مثل trust_level_1 للتأكد من أن كل من يريد أن يكون جزءًا من B/S/T يراها. ولكن، ليس الجميع يريد المشاركة في B/S/T. لا أريد أن أزعجهم بشيء آخر للنقر عليه (على الرغم من أنه سريع) إذا لم يكونوا مهتمين به.

  • قم بإنشاء مجموعة “متقدمو طلبات BST” ومجموعة “أعضاء BST”
  • اجعل “متقدمو طلبات BST” مجموعة يمكن الانضمام إليها بحرية
  • ضع سياسة تنطبق على “متقدمي طلبات BST” وتضيف إلى “أعضاء BST”
  • امنح “أعضاء BST” إمكانية الوصول إلى الفئة

سينضم الناس إلى “متقدمي طلبات BST”، ويوافقون على السياسة ويصبحون أعضاء في “أعضاء BST”. هذا حل صعب ولكنه أقل صعوبة من تشغيل آلة روب جولدبرج كاملة عن طريق الإعجاب بمنشور.

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

تم دمج مشاركتين في موضوع موجود: Private Topics Plugin

قد ينجح هذا أيضًا. سأبحث فيه. شكرًا لك!! أنا جديد حقًا على Discourse، لذا أتعلم الطرق.