リアクションを使用してバッジを付与する

それは興味深い達成方法のように聞こえます。もしよろしければ、もっと詳しい情報を共有していただけると嬉しいです!

「いいね!」 3

もちろんです。:slight_smile:

基本的に、最も簡単な形では、バッジに値すると「思う」ことを示すリアクションを選択し、メンバーが投稿を指名するために使用できます。クエリは、そのリアクションを獲得した投稿を拾い上げます。次に、クエリが提供するリストからバッジを手動で付与するか、リストを完全に信頼している場合は一括付与するか、バッジのカスタムSQLを設定してシステムが自動的に処理するようにすることもできます。:magic_wand:

また、クエリにいくつかの追加基準を適用して、より的を絞ったものにすることもできます。たとえば、「投稿にはこのリアクションがx回必要」とか、「TL2以上のユーザーが付与したリアクションのみカウントする」などです。

現在適していると思われる絵文字がない場合は、カスタム絵文字でも機能します。

「いいね!」 2

ありがとうございます!いくつか検索してみましたが、これに完全に一致するクエリが見つかりませんでした。クエリを共有していただけませんか?自分で作成したことはありませんが、これを学ぶ必要があると感じています!

試しているものがありますが、新鮮な目で見るために脇に置いておいたので、まだ手をつけていません。そのため、いくつかの作業が必要になるかもしれません。これは、Data & reporting カテゴリの投稿に対して ‘data-team’ グループのメンバーから :chefs_kiss: リアクションを少なくとも 10 件獲得したことに基づいてバッジを付与するものです。

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