カテゴリでの投稿を、トピックに「いいね」するまで制限する

もし他にこれを試したい方がいらっしゃる場合に備えて、私が実行したことの簡単なまとめを以下に示します。

  1. まず、DiscourseサーバーのCLIを通じてバッジSQLを有効にする必要があります。
./launcher enter app
rails c
SiteSetting.enable_badge_sql = true
  1. 次に、メンバーがバッジを取得するために操作したいトピックのIDを見つけます。私のインスタンスでは、トピックIDは117です。

Screenshot 2026-02-27 113204

  1. カスタムバッジを作成します。
    1. 管理者 > バッジ > 新規
    2. バッジに好きな名前を付けます(例:B/S/Tルールリーダー)
    3. バッジタイプ、アイコンを選択し、説明を付けます。
    4. ステップ1を実行した場合、SQLクエリを入力できるクエリボックスが表示されます。このクエリを貼り付けます(p.topic_id = 117 を希望のトピックIDに変更してください)。
      1. SELECT DISTINCT ON (pa.user_id)
          pa.user_id,
          pa.post_id,
          pa.created_at granted_at
        FROM post_actions pa
        JOIN posts p ON pa.post_id = p.id AND p.post_number = 1
        WHERE pa.post_action_type_id = 2
          AND p.topic_id = 117
          AND (:backfill OR pa.post_id IN (:post_ids))
        
    5. 日次失効クエリを実行クエリが投稿を対象とするの両方がチェックされていることを確認します。
    6. トリガーはユーザーが投稿に対してアクションを実行したときに設定する必要があります。
  2. 次に、オートメーションを作成します。
    1. まず、メンバーが追加される新しいグループを作成します。私のものは単に bst_rules_agreed という名前で、グループオーナーとモデレーターのみがメンバーシップを確認できるように設定されています。信頼レベルへの影響は必要ありません。
    2. 次に、プラグイン > オートメーションに移動します。
      1. 新しいオートメーションを追加します。
        1. バッジによるユーザーグループメンバーシップを選択します。
        2. トリガー: 繰り返し
          1. 再発間隔: 私は1時間ごとに設定しています。ご自身に適したものを選択してください。
          2. 開始日を選択します。
        3. スクリプトオプション:
          1. バッジ: 上記で作成したバッジを選択します。
          2. グループ: 上記で作成したグループを選択します。

これで完了です。これで、メンバーがカテゴリに投稿できるようになる前に、カテゴリのルールに同意していることを保証するシステムができました。

私の次の探求は、そのグループに属していないすべての人に対して、ルール以外のトピックをすべて非表示にする方法があるかどうかを確認することです。しかし、この基本的なシステムは今のところ十分です。

「いいね!」 3