Come posso concedere automaticamente un badge quando l’utente visita un link all’interno del forum Discourse?
Che ne dici di usare la tabella topic_link_clicks?
Penso di avere un badge manuale che potrebbe trarne beneficio.
Ci penserò.
Se si tratta di un link specifico condiviso in un post specifico, penso che questo sarebbe sufficiente:
SELECT DISTINCT tlc.user_id, MIN(tlc.created_at) granted_at
FROM badge_posts p
LEFT JOIN topic_links tl ON tl.post_id = p.id
LEFT JOIN topic_link_clicks tlc ON tlc.topic_link_id = tl.id
WHERE tl.post_id = 1246
AND tl.url = 'https://meta.discourse.org/'
AND tlc.user_id IS NOT NULL
GROUP BY tlc.user_id
Dovresti recuperare il post_id del tuo post specifico dal suo JSON (o eseguire una ricerca tramite il data explorer)
Penso che questo potrebbe funzionare.
Voglio concedere questo badge solo ai membri del nostro corso.
C’è un modo per nascondere un argomento al pubblico generale e renderlo disponibile solo a coloro che ci cliccano sopra tramite un link?
In secondo luogo, come si può fare usando il plugin Dfata explorer?
Non sono sicuro al 100% di seguire il metodo che stai usando per questo? Potresti voler verificare di non complicare eccessivamente l’impostazione.
Se controllare il json non fa per te, una query di ricerca post_id sarebbe qualcosa del genere:
-- [params]
-- topic_id :topic_id
-- int :post_number
SELECT id
FROM posts
WHERE topic_id = :topic_id
AND post_number = :post_number
Quindi puoi usare l’URL del post per estrarre l’ID dell’argomento e il numero del post da inserire nelle caselle dei parametri. ad esempio: https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/4 (vale la pena notare che l’OP è sempre il post_number 1, anche se non è nel link dell’argomento)
In realtà, c’è un parametro magico che potrebbe rendere la ricerca di un post_id usando il data explorer ancora più facile…
-- [params]
-- post_id :url
SELECT id
FROM posts
WHERE id = :url
Incolla l’URL pertinente per il post nella casella del parametro, et voila - estrae il post_id ![]()
Lo sfondo rosso mi fa pensare che non sia un URL di post completo. Se si tratta di un URL di argomento, è necessario aggiungere /1 alla fine:
https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/1
Ha funzionato!
Presumo che questo debba essere sostituito con l’URL del post che include ‘/1’?
Quel pezzo deve essere sostituito con il link su cui stanno cliccando all’interno del post.
E il post_id è il post in cui il link viene incollato/condiviso.
Capisco, quindi non c’è modo di assegnare semplicemente il badge facendogli visitare il link del post?
Penso che dovrebbe esserci, ma sarebbe una query diversa.
Questa assegna un badge per aver cliccato su un link specifico in un post di un forum specifico.
Se vuoi assegnare un badge per la visita di un utente a un particolare argomento, penso che sarebbe:
SELECT DISTINCT tv.user_id, MIN(tv.viewed_at) granted_at
FROM topic_views tv
WHERE tv.topic_id = 728
GROUP BY tv.user_id
(Sostituendo ‘728’ con il topic_id pertinente)
Ok, ecco come l’ho configurato:
Ma quando visito il post in questione (come amministratore), non ricevo il badge. Sto facendo qualcosa di sbagliato?
Poiché necessita del trigger giornaliero di aggiornamento, gli verrà concesso la prossima volta che verrà eseguita l’attività di assegnazione badge giornaliera. È possibile attivare manualmente Jobs::BadgeGrant dalla pagina /sidekiq/scheduler se si desidera velocizzare il controllo.
Come posso farlo aggiornare istantaneamente?
Gli unici trigger disponibili sono:
- Aggiorna giornalmente
- Quando un utente modifica o crea un post
- Quando un utente viene modificato o creato
- Quando un utente agisce su un post
- Quando un utente viene modificato o creato
- Quando un utente cambia il livello di fiducia
Per ottenere un badge più istantaneo, dovresti lavorare all’interno di quelle azioni. Puoi leggere di più in questo argomento - Creating triggered custom badge queries
Ho fatto questo ma non mi è ancora stato concesso.
Per quanto mi riguarda, funziona.
L’hai abilitato? E ti sei assicurato di aver impostato il numero di argomento corretto?
Sì, è abilitato. Provo su un altro profilo. Forse è perché sono l’amministratore.
In secondo luogo, stai semplicemente incollando il link dell’argomento nel tuo browser?
Essere admin non fa differenza per questo.
Dovresti visitare l’argomento affinché venga registrato nella tabella topic_views su cui si basa questo badge.





