Comment puis-je accorder automatiquement un badge lorsqu’un utilisateur visite un lien dans le forum Discourse ?
Que diriez-vous d’utiliser la table topic_link_clicks ?
Je pense qu’il pourrait y avoir un badge manuel qui pourrait en bénéficier.
Je vais y réfléchir.
S’il s’agit d’un lien spécifique partagé dans un message spécifique, je pense que celui-ci ferait l’affaire :
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
Vous devrez récupérer le post_id de votre message spécifique à partir de son JSON (ou effectuer une recherche via l’explorateur de données).
Je pense que cela pourrait fonctionner.
Je souhaite uniquement accorder ce badge aux membres de notre cours.
Existe-t-il un moyen de masquer un sujet au grand public et de le rendre uniquement disponible à ceux qui cliquent dessus via un lien ?
Deuxièmement, comment cela peut-il être fait en utilisant le plugin Dfata explorer ?
Je ne suis pas sûr à 100% de suivre la méthode que vous utilisez pour cela ? Vous voudrez peut-être vérifier que vous ne compliquez pas trop la configuration.
Si l’examen du json n’est pas votre tasse de thé, une requête de recherche de post_id ressemblerait à ceci :
-- [params]
-- topic_id :topic_id
-- int :post_number
SELECT id
FROM posts
WHERE topic_id = :topic_id
AND post_number = :post_number
Ensuite, vous pouvez utiliser l’URL du post pour extraire l’id du sujet et le numéro du post à entrer dans les cases de paramètres. par exemple : https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/4 (il est à noter que l’OP est toujours le post_number 1, même s’il n’est pas dans le lien du sujet)
En fait, il existe un paramètre magique qui pourrait rendre la recherche d’un post_id encore plus facile avec l’explorateur de données…
-- [params]
-- post_id :url
SELECT id
FROM posts
WHERE id = :url
Collez l’URL pertinente du post dans la case du paramètre, et voilà - il vous donne le post_id ![]()
L’arrière-plan rouge me fait penser qu’il ne s’agit pas d’une URL de publication complète. S’il s’agit d’une URL de sujet, vous devez ajouter /1 à la fin :
https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/1
Ça a marché !
Je suppose que cela doit être remplacé par l’URL du message incluant le ‘/1’ ?
Ce passage doit être remplacé par le lien sur lequel ils cliquent dans la publication.
Et le post_id est la publication dans laquelle le lien est collé/partagé.
Je vois, il n’y a donc aucun moyen de simplement accorder le badge en leur faisant visiter le lien du message ?
Je pense qu’il devrait y en avoir, mais ce serait une requête différente.
Celle-ci décerne un badge pour avoir cliqué sur un lien spécifique dans un message de forum spécifique.
Si vous souhaitez décerner un badge pour la visite d’un sujet particulier par un utilisateur, je pense que ce serait :
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
(En remplaçant ‘728’ par le topic_id pertinent)
Ok, je l’ai configuré comme ceci :
Mais lorsque je visite le post en question (en tant qu’administrateur), je n’obtiens pas le badge. Est-ce que je fais quelque chose de mal ?
Comme il a besoin du déclencheur Update Daily, il sera accordé la prochaine fois que le travail d’attribution de badge quotidien s’exécutera. Vous pouvez déclencher manuellement Jobs::BadgeGrant depuis votre page /sidekiq/scheduler si vous souhaitez accélérer le processus de vérification.
Comment puis-je le faire mettre à jour instantanément ?
Les seuls déclencheurs disponibles sont :
- Mise à jour quotidienne
- Lorsqu’un utilisateur modifie ou crée un message
- Lorsqu’un utilisateur est modifié ou créé
- Lorsqu’un utilisateur interagit avec un message
- Lorsqu’un utilisateur est modifié ou créé
- Lorsqu’un utilisateur change de niveau de confiance
Pour obtenir un badge plus instantané, vous devrez travailler dans le cadre de ces actions. Vous pouvez en lire plus dans ce sujet - Creating triggered custom badge queries
Je l’ai fait mais je ne l’ai toujours pas reçu.
Pour info, ça marche pour moi.
L’avez-vous activé ? Et vous êtes-vous assuré d’avoir le bon numéro de sujet ?
Oui, c’est activé. Laissez-moi essayer sur un autre profil. C’est peut-être parce que je suis l’administrateur.
Deuxièmement, collez-vous simplement le lien du sujet dans votre navigateur ?
Être administrateur ne fait aucune différence pour celui-ci.
Vous devrez visiter le sujet pour qu’il s’enregistre dans la table topic_views sur laquelle ce badge est basé.





