Cela semble être une façon intéressante d’y parvenir, je serais intéressé d’en apprendre davantage si vous souhaitez partager plus de détails !
Bien sûr. ![]()
Essentiellement, dans sa forme la plus simple, vous choisissez une Réaction qui indique « Je pense que cela mérite un badge » que vos membres peuvent utiliser pour nommer des publications, et la requête récupère les publications qui ont reçu cette Réaction. Vous pouvez ensuite attribuer le badge manuellement à partir de la liste que la requête vous donne, attribuer en masse si vous faites entièrement confiance à la liste, ou même configurer le SQL personnalisé du badge pour que le système le fasse automatiquement. ![]()
Vous pouvez également appliquer des critères supplémentaires à la requête pour la rendre plus ciblée. Par exemple, « une publication a besoin d’un certain nombre de cette Réaction », ou « seule cette Réaction donnée par TL2+ compte ».
Cela fonctionne également avec des emojis personnalisés s’il n’y en avait pas un actuellement que vous jugiez approprié.
Merci ! J’ai cherché un peu mais je n’ai pas trouvé de requête qui corresponde exactement à cela, accepteriez-vous de partager la requête ? Je n’en ai jamais créé moi-même mais j’ai l’impression que je dois apprendre cela !
J’en ai un avec lequel je jouais, bien que je l’aie mis de côté pour le regarder avec des yeux neufs et que je n’y sois pas encore revenu, il pourrait donc nécessiter quelques ajustements. Il s’agit d’attribuer un badge basé sur l’obtention d’au moins 10 publications avec la réaction
donnée par un membre du groupe ‘data-team’ pour les publications dans la catégorie 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
Bien que je n’aie pas été satisfait de l’utilisation de MIN car elle donnait la mauvaise date d’attribution.
Il y a beaucoup de critères, et c’est automatique, ce qui, je pense, le place dans le registre des éléments plus compliqués. Je pense qu’un système plus simple pourrait être beaucoup plus réalisable sans trop d’efforts.
Merci, cela a aidé ! Il faudrait probablement déplacer cela dans un nouveau sujet puisque nous déraillons. Mais voici la requête que j’ai élaborée (avec l’aide de ChatGPT) qui renvoie simplement les utilisateurs qui ont donné/reçu la réaction, le nombre de réactions, la date de la réaction et l’URL du message spécifique. La seule chose que je n’ai pas pu faire, c’est rendre l’URL du message cliquable, il semble que ce soit limité aux URL de sujets.
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 "Utilisateur ayant donné la réaction",
'Your_Community_URL' || 't/' || rp.topic_slug || '/' || rp.topic_id || '/' || rp.post_number AS "URL du message",
rp.reaction_date AS "Date de la réaction",
COUNT(*) AS "Nombre de réactions"
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
"Nombre de réactions" DESC, "Date de la réaction" DESC
Pour que cette partie fasse sa magie, vous ajoutez _url au nom de la colonne, donc :
'Your_Community_URL' || 't/' || rp.topic_slug || '/' || rp.topic_id || '/' || rp.post_number AS post_url