Parece uma maneira interessante de conseguir isso, eu estaria interessado em aprender mais se você quiser compartilhar mais detalhes!
Claro. ![]()
Basicamente, em sua forma mais simples, você escolhe uma Reação que indica ‘Acho que isso merece um distintivo’, que seus membros podem usar para nomear postagens, e a consulta capta quais postagens receberam essa Reação. Você pode então conceder o distintivo manualmente a partir da lista que a consulta fornece, conceder em massa se você confiar totalmente na lista, ou até mesmo configurar o SQL personalizado do distintivo para que o sistema o faça automaticamente. ![]()
Você também pode aplicar alguns critérios extras à consulta para torná-la mais direcionada. Por exemplo, ‘uma postagem precisa de x número dessa Reação’, ou ‘apenas essa Reação dada por TL2+ conta’.
Ele também funciona com emojis personalizados, caso não houvesse um atual que você achasse adequado.
Obrigado! Pesquisei um pouco, mas não consegui encontrar uma consulta que corresponda exatamente a isso, você estaria disposto a compartilhar a consulta? Eu nunca criei uma, mas sinto que preciso aprender isso!
Eu tenho um com o qual estava brincando, embora o tenha deixado de lado para analisá-lo com novos olhos e ainda não voltei a ele, então pode precisar de algum trabalho. É para conceder um distintivo com base em obter pelo menos 10 postagens com a reação
dada por um membro do grupo ‘data-team’ para postagens na 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
Embora eu não estivesse satisfeito com o uso de MIN, pois ele fornecia a data incorreta de concessão.
Há muitos critérios para isso, e é automático, o que acho que o empurra para o lado mais complicado. Acho que um mais simples poderia ser muito mais alcançável sem muito esforço.
Obrigado, isso ajudou! Provavelmente deveríamos mover isso para um novo tópico, já que estamos saindo do assunto. Mas aqui está a consulta que criei (com a ajuda do ChatGPT) que simplesmente retorna os usuários que deram/receberam a reação, quantas reações, a data da reação e o URL para a postagem específica. A única coisa que não consegui fazer foi tornar o URL da postagem clicável, parece que isso é limitado a URLs de tópicos.
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 "Usuário Que Deu a Reação",
'Your_Community_URL' || 't/' || rp.topic_slug || '/' || rp.topic_id || '/' || rp.post_number AS "URL da Postagem",
rp.reaction_date AS "Data da Reação",
COUNT(*) AS "Número de Reações"
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
"Número de Reações" DESC, "Data da Reação" DESC
Para fazer esta parte funcionar, você anexa _url ao nome da coluna, então:
'Your_Community_URL' || 't/' || rp.topic_slug || '/' || rp.topic_id || '/' || rp.post_number AS post_url