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

안녕하세요. 제 사이트에는 구매/판매/거래 카테고리가 있는데, 회원들이 규칙 토픽을 '좋아요’하도록 한 후에만 게시글 작성 권한을 부여하고 싶습니다. AI 봇에게 물어보니 몇 가지 안내를 받았지만, 호스팅 플랜에서만 사용할 수 있는 Discourse Automation 기능이 필요하다고 합니다.

자체 호스팅 플랫폼에서 이 기능을 사용할 수 있는 방법이 있을까요?

안녕하세요, 실제로 커뮤니티 에디션에 무료로 포함되어 있습니다. 플러그인 탭에서 활성화할 수 있습니다.

아니면 됐어. 디스코드 자동화 플러그인을 수동으로 추가할 수 있다는 걸 알아냈어…

음, https://meta.discourse.org/t/discourse-policy/88557와 그룹 권한을 함께 사용하면 될까요?

  • add-users-to-group: 단일 그룹을 입력으로 받습니다. 정책을 수락한 사용자는 해당 그룹에 자동으로 추가됩니다(정책이 수동으로 취소되거나 정책 버전이 업데이트되면 사용자는 그룹에서 제거됨)

해결했습니다 (ask.discourse.org의 도움으로).

badge sql을 활성화한 후, 특정 게시물을 좋아하면 배지가 부여되도록 배지를 생성해야 했습니다. 그런 다음 Discord Automation이 해당 배지를 가진 사용자에게 자동으로 할당하는 그룹을 만들었습니다. “everyone” 그룹에는 카테고리 읽기 전용 접근 권한만 부여하여 이모지 반응만 가능하게 했고, 커스텀 그룹에는 전체 접근 권한을 부여했습니다.

좋아요 – 자세한 내용을 공유해 주셔서 감사합니다!
이제 여러분의 게시물을 해결책으로 표시할 수 있습니다. :grin:

집에 가서 제가 정확히 어떤 조치를 취했는지 자세히 정리해서 올리겠습니다. 혹시 다른 분들도 궁금해하실 수 있으니까요. 그리고 그 답변을 해결책으로 표시하겠습니다.

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

  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. 그룹: 위에서 생성한 그룹을 선택하세요

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

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

비공개 토픽 플러그인 관련 주제에서 대안 솔루션이 제안되었습니다. 해당 내용을 이곳으로 옮깁니다.

이 플러그인 감사합니다! 우리 커뮤니티에 기본적인 티켓 시스템을 제공하기 위한 방법을 찾고 있었거든요.

또한 이 플러그인을 구매/판매/거래 카테고리에 사용하려고도 하고 있습니다. 현재 모든 사용자가 주제를 읽을 수 있지만, 특정 그룹에 속한 사람만 답글을 달고 주제를 생성할 수 있도록 설정되어 있습니다. 현재 워크플로우는 다음과 같습니다: 회원이 게시글을 좋아요함으로써 규칙을 읽었음을 확인합니다. 게시글을 좋아요하면 사용자에 커스텀 배지가 부여됩니다. Discourse Automate는 배지를 기반으로 사용자를 해당 그룹에 추가합니다.

이 방식은 규칙을 수락하지 않은 사람이 카테고리에 게시하는 것을 막아줍니다. 하지만 여전히 모든 게시물을 보고 읽을 수는 있습니다.

그래서, 모든 사용자를 카테고리에서 제거하고 보안 탭에 해당 커스텀 그룹만 포함시켜도 될까요? 관리자 그룹의 게시물이 항상 표시되도록 설정해 두었다면, 커스텀 그룹에 속하지 않은 사용자도 규칙을 보고 좋아요를 누를 수 있을까요? 그런 다음 좋아요를 누르고 그룹에 추가되면 모든 것이 그들에게 열리게 될까요?

이 플러그인은 그렇게 사용되도록 설계된 것이 아닙니다.

귀하의 사용 사례는 이 플러그인 대신 정책을 수락한 사용자를 그룹에 추가할 수 있는 Discourse Policy 플러그인을 사용하여 구현할 수 있습니다.

그룹 멤버십을 현재처럼 할당하게 된 과정을 파고들기 전에, Policy 플러그인을 먼저 살펴보았습니다. 이 용도로 Policy를 선호하지 않는 이유는 그룹에 적용해야 하기 때문입니다. B/S/T에 참여하려는 모든 사람이 해당 내용을 볼 수 있도록 하려면 trust_level_1과 같은 대상에 적용해야 합니다. 하지만 B/S/T에 참여하려는 사람이 모두 있는 것은 아니죠. 관심이 없는 사람에게 또 다른 클릭을 강요하고 싶지 않습니다(빠른 작업이지만).

  • “BST 지원자” 그룹과 “BST 멤버” 그룹을 만듭니다
  • “BST 지원자” 그룹은 누구나 자유롭게 가입할 수 있도록 설정합니다
  • "BST 지원자"에게 적용되는 정책을 만들고, 이를 통해 "BST 멤버"에 추가되도록 합니다
  • "BST 멤버"에게 카테고리 접근 권한을 부여합니다

사람들은 "BST 지원자"에 가입하고 정책을 수락하면 "BST 멤버"가 됩니다. 다소 복잡하지만, 게시글을 좋아하기(Like)로 인해 복잡한 Rube Goldberg 기계가 작동하는 것보다는 덜 복잡한 방법입니다.

이 방법도 작동할 수 있습니다. 조사해 보겠습니다. 감사합니다!! 저는 Discourse를 처음 사용하므로 아직 배우는 중입니다.