Creazione di query personalizzate per badge attivati

:bookmark: Questa guida spiega come creare query di badge personalizzate attivate in Discourse, inclusi i tipi di badge, i vincoli per i badge attivati e una query di esempio.

:person_raising_hand: Livello utente richiesto: Amministratore

:warning: Questa funzionalità è disabilitata per impostazione predefinita. Per abilitarla, segui questa guida.

Quando si definiscono i badge in Discourse, si incontrerà un’opzione “Trigger” con le seguenti scelte:

  • Aggiorna giornalmente
  • Quando un utente agisce su un post
  • Quando un utente modifica o crea un post
  • Quando un utente cambia livello di fiducia
  • Quando un utente viene modificato o creato

Questi trigger forzano l’esecuzione dei badge a intervalli più frequenti del giornaliero, assicurando che gli utenti vengano notificati dei nuovi badge più vicini al momento in cui l’azione è avvenuta.

Tipi di badge

Ci sono due tipi di badge che puoi definire:

  1. Badge che mirano ai post
  2. Badge che non mirano ai post

Tutte le definizioni SQL dei badge richiedono di selezionare le colonne user_id e granted_at. Se il tuo badge mira ai post, devi anche selezionare una colonna denominata post_id.

:information_source: Se queste colonne non sono direttamente disponibili, puoi rinominarle (alias). Ad esempio: u.id as user_id

Vincoli per i badge attivati

Poiché i badge attivati possono essere eseguiti una volta al minuto, è necessario fornire più “suggerimenti” nella definizione del badge. Non è sufficiente restituire l’intero set di badge; è necessario fornire anche suggerimenti su come eseguire il badge su un sottoinsieme.

Trigger basati sull’utente

Se il tuo trigger è basato sull’utente, fornisci una clausola su come filtrarlo in base a :user_ids.

Trigger basati sui post

Se il tuo trigger è basato sui post, fornisci informazioni su come attivarlo in base a :post_ids.

:exclamation: Ricorda che un riempimento completo (full backfill) viene eseguito comunque giornalmente, quindi devi considerarlo e includere la gestione del parametro :backfill.

La tua query di badge attivata includerĂ  sempre il parametro :backfill e o il parametro :post_ids o il parametro :user_ids.

Esempio di query di badge attivata

Ecco un esempio di un badge attivato “quando un utente agisce su un post”. In questo caso, le applicazioni “delta” riceveranno il parametro :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) )

La clausola (:backfill OR p.id IN (:post_ids) ) consente di filtrare i risultati. Quando viene eseguita l’attività giornaliera, :backfill è true, quindi viene scansionato l’intero set. Quando vengono eseguite le attività delta, :backfill è false e :post_ids è impostato.

Perché è necessario il suggerimento manuale

La query di assegnazione del badge esegue la tua query del badge in una “sottoquery”. Spesso, l’ottimizzatore di PostgreSQL ha difficoltà quando esegue la scansione dell’intero set quando la clausola è sulla query principale. Sebbene possa gestire bene query banali, può fallire con aggregazioni più complesse.

Per evitare potenziali problemi, questo vincolo è stato aggiunto, consentendoti di applicare i filtri nella posizione più appropriata.

Hai bisogno di aiuto?

Se hai problemi a scrivere una query di badge, pubblica una domanda in Support descrivi cosa stai cercando di ottenere e includi il tuo lavoro in corso. La community cercherĂ  di aiutare.

:information_source: I trigger dei badge possono essere complessi. Spesso, gli aggiornamenti “giornalieri” sono sufficienti e puoi saltare gli aspetti più intricati delle query attivate.

38 Mi Piace
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`?