إنشاء استعلامات شارات مخصصة مُشغَّلة

:bookmark: يشرح هذا الدليل كيفية إنشاء استعلامات شارات مخصصة مُشغَّلة في Discourse، بما في ذلك أنواع الشارات، والقيود على الشارات المُشغَّلة، واستعلام مثال.

:person_raising_hand: مستوى المستخدم المطلوب: مسؤول

:warning: هذه الميزة معطلة بشكل افتراضي. لتمكينها، اتبع هذا الدليل.

عند تحديد الشارات في Discourse، ستواجه خيار “التشغيل” (Trigger) مع الخيارات التالية:

  • التحديث يوميًا
  • عندما يتصرف المستخدم على منشور
  • عندما يقوم المستخدم بتعديل منشور أو إنشائه
  • عندما يغير المستخدم مستوى الثقة
  • عندما يتم تعديل المستخدم أو إنشاؤه

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

أنواع الشارات

هناك نوعان من الشارات يمكنك تحديدهما:

  1. شارات تستهدف المنشورات
  2. شارات لا تستهدف المنشورات

تتطلب جميع تعريفات SQL الخاصة بالشارة تحديد الأعمدة user_id و granted_at. إذا كانت شارتك تستهدف منشورات، فيجب عليك أيضًا تحديد عمود يسمى post_id.

:information_source: إذا لم تكن هذه الأعمدة متاحة بشكل مباشر، يمكنك تسميتها بأسماء مستعارة. على سبيل المثال: u.id as user_id

القيود على الشارات المُشغَّلة

نظرًا لأن الشارات المُشغَّلة يمكن أن تعمل مرة واحدة في الدقيقة، تحتاج إلى تقديم المزيد من “التلميحات” في تعريف الشارة. لا يكفي إرجاع المجموعة الكاملة من الشارات؛ بل يجب عليك أيضًا تقديم تلميحات حول كيفية تنفيذ الشارة على مجموعة فرعية.

المشغلات المستندة إلى المستخدم

إذا كان المشغل الخاص بك يعتمد على المستخدم، فقم بتوفير عبارة حول كيفية تصفيته بناءً على :user_ids.

المشغلات المستندة إلى المنشور

إذا كان المشغل الخاص بك يعتمد على المنشور، فقم بتوفير معلومات حول كيفية تشغيله بناءً على :post_ids.

:exclamation: تذكر أن إعادة الملء الكاملة تعمل يوميًا بغض النظر، لذا يجب أن تأخذ هذا في الاعتبار وتضمين معالجة للمعامل :backfill.

سيتضمن استعلام الشارة المُشغَّلة دائمًا المعامل :backfill وإما المعامل :post_ids أو المعامل :user_ids.

مثال على استعلام شارة مُشغَّلة

إليك مثال لشارة يتم تشغيلها “عندما يتصرف مستخدم على منشور”. في هذه الحالة، ستتلقى تطبيقات “الدلتا” (delta) المعامل :post_ids:

SELECT p.user_id, p.id post_id, p.updated_at granted_at
FROM badge_posts p
WHERE p.like_count >= 25
AND (:backfill OR p.id IN (:post_ids) )

تسمح العبارة (:backfill OR p.id IN (:post_ids) ) بتصفية النتائج. عندما يتم تشغيل مهمة يومية، تكون :backfill صحيحة، ويتم فحص المجموعة بأكملها. عندما تعمل مهام الدلتا، تكون :backfill خاطئة، ويتم تعيين :post_ids.

لماذا التلميح اليدوي ضروري

يقوم استعلام منح الشارة بتشغيل استعلام الشارة الخاص بك في “استعلام فرعي”. غالبًا ما يواجه مُحسِّن PostgreSQL صعوبة عند فحص المجموعة الكاملة عندما تكون العبارة على الاستعلام الرئيسي. في حين أنه قد يتعامل مع الاستعلامات التافهة بشكل جيد، إلا أنه قد يتعثر في التجميعات الأكثر تعقيدًا.

لتجنب المشكلات المحتملة، تمت إضافة هذا القيد، مما يسمح لك بتطبيق المرشحات في المكان الأنسب.

هل تحتاج إلى مساعدة؟

إذا كنت تواجه صعوبة في كتابة استعلام شارة، انشر سؤالًا في Support - صف ما تحاول تحقيقه وضمّن عملك قيد التقدم. سيحاول المجتمع المساعدة.

:information_source: يمكن أن تكون مشغلات الشارات معقدة. غالبًا ما تكون التحديثات “اليومية” كافية، ويمكنك تخطي الجوانب الأكثر تعقيدًا في الاستعلامات المُشغَّلة.

38 إعجابًا
Creating Custom Badges and Triggers
Creating custom badge with custom rules
How to grant badges using Automation?
Two custom badges on moderation
Pre approval email in the dashboard waiting to go
Help me get Discourse set up for the first time
Grant badges based on gender profile field?
Badges for X Number of Solutions Created?
Discourse-Math badge
Assigned a badge based on multiple badge assignment
Problem testing Badge Query from Data Explorer
Understanding and using badges
First Post badge
Grant Badge when user visits link
Custom Icons for admins and moderators (and other groups)
A silver badge for _each_ 5 bronze badges
Automatically set active members to follow a category
A silver badge for _each_ 5 bronze badges
A silver badge for _each_ 5 bronze badges
About Badges
What is the 'backfill`?
Query to create some groups based on activity
Are badges customizable?
Badge query working in explorer but not in badge SQL?
Badges for posting
Plugin or other option to require a post and a like?
Gamification beyond Leaderboard
Bulk Award a badge to a set of users
What does admin_js.admin.badges.trigger_type.user_change mean in Discourse?
Grant Custom Badge Upon Reading ToS
Set badges to be auto granted?
Access to category after 10 posts (automatic group membership)
Add badge for adding profile picture
How do you assign a badge automatically as soon as someone is added to a group?
Moderator - Badges, Stars, etc. - Positive Feedback?
Hidden Settings on Discourse Hosted Sites
Require LinkedIn or GitHub account to advance from TL0 to TL1. Possible?
Need some Help with my Triggered Custom Badge Query
Exclude certain categories from the Trust Levels
How does Meta handle the bug reporter badge?
Restricting users to join any one private group
An automatic group of group owners
Is it possible to have a badge for 100 solutions?
Grant a badge for all members of a group
Can I change the threshold of the Solved badges?
Grant badges through Automation
What is the 'backfill`?