使用 Reactions 授予徽章

这听起来是一种实现此目的的有趣方式,如果你想分享更多细节,我很乐意了解更多!

3 个赞

当然可以。:slight_smile:

基本上,最简单的形式是,你选择一个Reaction,表示“我认为这值得一个徽章”,你的成员可以使用它来提名帖子,然后查询会找出哪些帖子获得了该Reaction。然后,你可以从查询提供的列表中手动授予徽章,如果你完全信任该列表,则批量授予,甚至可以设置徽章的自定义SQL,让系统自动授予。:magic_wand:

你还可以为查询应用一些额外的标准,使其更具针对性。例如,“一个帖子需要获得x个此Reaction”,或者“只有TL2+授予的Reaction才算数”。

如果当前没有你认为合适的表情符号,它也支持自定义表情符号。

2 个赞

谢谢!我搜索了一下,但找不到完全匹配的查询,您愿意分享这个查询吗?我从来没有自己创建过,但我觉得我需要学习这个!

我有一个正在尝试的,不过我把它放在一边,想用新的眼光来看待它,还没有重新开始,所以可能需要一些修改。它旨在根据“data-team”组成员在 Data & reporting 类别帖子中获得至少 10 个 :chefs_kiss: 表情符号的帖子来授予徽章:

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

不过我对使用 MIN 并不满意,因为它给出了错误的授予日期。

它有很多标准,而且是自动的,我认为这使其处于更复杂的一端。我认为一个更简单的标准可以在不费太多力气的情况下实现。

1 个赞

太好了,这有帮助!鉴于我们已经偏离主题,这可能应该移到一个新主题。但这是我(在 ChatGPT 的帮助下)提出的查询,它只返回了给出/收到表情符号的用户、表情符号数量、表情符号日期以及指向特定帖子的 URL。我唯一无法实现的是使帖子 URL 可点击,这似乎仅限于主题 URL。

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 "给出表情符号的用户",
  'Your_Community_URL' || 't/' || rp.topic_slug || '/' || rp.topic_id || '/' || rp.post_number AS "帖子 URL",
  rp.reaction_date AS "表情符号日期",
  COUNT(*) AS "表情符号数量"
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
  "表情符号数量" DESC, "表情符号日期" DESC
2 个赞

要使这部分生效,请在列名后附加 _url,例如:

'Your_Community_URL' || 't/' || rp.topic_slug || '/' || rp.topic_id || '/' || rp.post_number AS post_url
4 个赞