Usando Reações para conceder emblemas

Parece uma maneira interessante de conseguir isso, eu estaria interessado em aprender mais se você quiser compartilhar mais detalhes!

3 curtidas

Claro. :slight_smile:

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. :magic_wand:

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.

2 curtidas

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 :chefs_kiss: 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.

1 curtida

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
2 curtidas

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
4 curtidas