Usare le Reactions per assegnare badge

Sembra un modo interessante per raggiungere questo obiettivo, sarei interessato a saperne di più se mai vorrai condividere maggiori dettagli!

3 Mi Piace

Certamente. :slight_smile:

Fondamentalmente, nella sua forma più semplice, scegli una Reazione che indica ‘Penso che questo meriti un badge’ che i tuoi membri possono usare per nominare i post, e la query raccoglie quali post hanno ricevuto quella Reazione. Puoi quindi assegnare manualmente il badge dall’elenco che la query ti fornisce, assegnarlo in blocco se ti fidi completamente dell’elenco, o persino configurare l’SQL personalizzato del badge affinché il sistema lo faccia automaticamente. :magic_wand:

Puoi anche applicare alcuni criteri aggiuntivi alla query per renderla più mirata. Ad esempio, ‘un post necessita di x numero di questa Reazione’, o ‘conta solo quella Reazione data da TL2+’.

Funziona anche con emoji personalizzate se non ce n’era una attuale che ritenevi adatta.

2 Mi Piace

Grazie! Ho cercato un po’ ma non sono riuscito a trovare una query che corrispondesse esattamente a questa, saresti disposto a condividere la query? Non ne ho mai creata una da solo ma sento di dover imparare!

Ne ho uno con cui stavo giocando, anche se l’ho messo da parte per guardarlo con occhi freschi e non ci sono ancora tornato, quindi potrebbe aver bisogno di qualche ritocco. Serve ad assegnare un badge basato sull’ottenimento di almeno 10 post con la reazione :chefs_kiss: data da un membro del gruppo ‘data-team’ per post nella categoria Data & reporting

SELECT p.user_id, MIN(p.created_at) granted_at
FROM badge_posts p
  JOIN topic_tags tt ON tt.topic_id = p.topic_id
WHERE tt.tag_id = 615
  AND EXISTS (
         SELECT 1
            FROM discourse_reactions_reactions dr 
             JOIN discourse_reactions_reaction_users dru ON dr.id = dru.reaction_id
             JOIN group_users gu ON gu.user_id = dru.user_id
            WHERE dr.post_id = p.id
              AND dr.reaction_value = 'chefs_kiss'
              AND gu.group_id = 175
       )
 GROUP BY p.user_id
HAVING COUNT(*) >= 10

Anche se non ero soddisfatto dell’uso di MIN perché dava la data di assegnazione sbagliata.

Ci sono molti criteri, ed è automatico, il che penso lo spinga verso l’estremità più complicata. Penso che uno più semplice potrebbe essere molto più realizzabile senza troppi sforzi.

1 Mi Piace

Grazie, questo ha aiutato! Probabilmente questo dovrebbe essere spostato in un nuovo argomento dato che stiamo andando fuori tema. Ma ecco la query che ho creato (con l’aiuto di ChatGPT) che restituisce semplicemente gli utenti che hanno dato/ricevuto la reazione, quante reazioni, la data della reazione e l’URL al post specifico. L’unica cosa che non sono riuscito a fare è rendere l’URL del post cliccabile, sembra che sia limitato agli URL degli argomenti.

WITH reaction_pairs AS (
    SELECT 
      p.user_id AS received_reaction_user_id, 
      dru.user_id AS gave_reaction_user_id, 
      dr.post_id,
      t.id AS topic_id,
      t.slug AS topic_slug,
      p.post_number,
      dru.created_at AS reaction_date
    FROM 
      discourse_reactions_reactions dr
      JOIN discourse_reactions_reaction_users dru ON dr.id = dru.reaction_id
      JOIN posts p ON dr.post_id = p.id
      JOIN topics t ON p.topic_id = t.id
    WHERE 
      dr.reaction_value = 'Your_Specific_Reaction_Here'
)
SELECT 
  ur1.id AS user_id, 
  ur2.username AS "Utente che ha dato la reazione",
  'Your_Community_URL' || 't/' || rp.topic_slug || '/' || rp.topic_id || '/' || rp.post_number AS "URL del post",
  rp.reaction_date AS "Data della reazione",
  COUNT(*) AS "Numero di reazioni"
FROM 
  reaction_pairs rp
  JOIN users ur1 ON rp.received_reaction_user_id = ur1.id
  JOIN users ur2 ON rp.gave_reaction_user_id = ur2.id
GROUP BY 
  ur1.id, 
  ur2.username, 
  rp.topic_slug, 
  rp.topic_id, 
  rp.post_number, 
  rp.reaction_date
ORDER BY 
  "Numero di reazioni" DESC, "Data della reazione" DESC
2 Mi Piace

Per far sì che questa parte faccia la sua magia, aggiungi _url al nome della colonna, quindi:

'Your_Community_URL' || 't/' || rp.topic_slug || '/' || rp.topic_id || '/' || rp.post_number AS post_url
4 Mi Piace