주제를 "좋아요"하기 전까지 해당 카테고리에서 게시글 작성 제한

혹시 다른 분들도 이걸 해보고 싶으시다면, 제가 어떻게 했는지 간단히 정리해 보겠습니다:

  1. 먼저, Discourse 서버의 CLI를 통해 Badge SQL을 활성화해야 합니다:
./launcher enter app
rails c
SiteSetting.enable_badge_sql = true
  1. 다음으로, 멤버들이 배지를 획득하기 위해 상호작용해야 하는 토픽의 ID를 찾으세요. 제 인스턴스에서는 토픽 ID가 117입니다.

Screenshot 2026-02-27 113204

  1. 커스텀 배지를 생성합니다:
    1. Admin > Badges > New
    2. 배지 이름을 원하는 대로 지정하세요 (예: B/S/T Rule Reader)
    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. Run revocation query daily(매일 취소 쿼리 실행)와 Query targets posts(쿼리가 게시물을 대상으로 함)가 모두 체크되어 있는지 확인하세요.
    6. 트리거는 When a user acts on post(사용자가 게시물에 행동을 할 때)로 설정해야 합니다.
  2. 이제 자동화(Automation)를 생성합니다.
    1. 먼저 멤버들이 추가될 새 그룹을 생성하세요. 제 경우 bst_rules_agreed라고 이름 붙였고, 그룹 소유자와 모더레이터만 멤버십을 볼 수 있도록 설정했습니다. 어떤 신뢰 수준(Trust Level) 효과도 필요하지 않습니다.
    2. 다음으로, Plugins > Automation으로 이동합니다.
      1. 새 자동화를 추가합니다
        1. User Group Membership Through Badge(배지를 통한 사용자 그룹 멤버십)를 선택하세요
        2. 트리거: Recurring(반복)
          1. 반복 주기: 저는 1시간마다로 설정했습니다. 본인에게 적합한 주기를 선택하세요.
          2. 시작 날짜를 선택하세요
        3. 스크립트 옵션:
          1. 배지: 위에서 생성한 배지를 선택하세요
          2. 그룹: 위에서 생성한 그룹을 선택하세요

이것으로 끝입니다. 이제 카테고리에서 게시물을 작성하기 전에 멤버들이 해당 카테고리의 규칙에 동의했는지 확인하는 시스템이 갖춰졌습니다.

다음으로 탐구해 볼 것은, 해당 그룹에 속하지 않은 모든 사용자에게 규칙 토픽을 제외한 모든 토픽을 숨기는 방법이 있는지 보는 것입니다. 하지만 이 기본 시스템만으로도 지금은 충분합니다.