광고 게시를 위해 구독하세요

카테고리를 단순한 마켓플레이스로 구현하여 사용자가 광고(즉, 게시물)를 구매할 수 있는 방법을 찾고 있습니다.

구독 플러그인은 그룹에 유료 추가를 허용하고, 구독이 수동 또는 프로그래밍 방식으로 취소되면 사용자를 그룹에서 제거하는 기능을 제공하는 것 같습니다.

제가 이루고자 하는 것은 카테고리에 게시물을 게시할 수 있는 구독을 만들고, 이후 해당 사용자를 게시물을 작성할 수 있는 그룹에서 제거하는 것입니다.

이것이 구독 플러그인만으로, 혹은 구독과 자동화 플러그인을 조합하여 가능할까요?

더 간단히 말하면, 개별 게시물을 판매하고 싶고, 게시물에 대한 답글은 무료이기를 바랍니다.

'marketplace’가 구독 그룹인 경우, 이 권한 세트가 제가 요청한 작업을 허용할 수 있다고 생각합니다.

광고 카테고리에 주제를 생성할 때 해당 그룹에서 사용자를 제거하는 플러그인이 필요할 것 같습니다.

자동화 플러그인이 사용자를 그룹에서 제거하는지는 확실하지 않습니다.

글쎄요, 저는 코딩을 할 줄 모르고, 이 아이디어를 상사에게 승인받기 전에 개념 증명(PoC)을 해야 하므로, 지금은 금전적 지원을 제공할 방법이 없습니다.
이런 기능이 커뮤니티에 도움이 될 거라고 생각하시는 분은 계신가요?

한 가지 더 고려할 점이 있는데, Discourse와 구독 플러그인 사이에 사용자별 구독 수를 추적할 수 있는 통신이 가능한가요? 하나를 사고, 게시물을 올리고, 또 하나를 사고, 다시 올리는 대신 여러 게시물을 한 번에 구매할 수 있으면 유용할 것 같습니다.

개념 증명을 위해 상사의 상상력을 발휘해 보라고 말해야 할 것 같습니다.

웹훅과 Zapier 같은 웹훅 도구를 사용하면 가능할 것입니다.

그렇게 하면 플러그인이 더 복잡해질 것입니다.

물론이죠, 하지만 있으면 좋겠습니다.
어쨌든 카테고리 ID와 그룹 이름을 하드코딩하는 한 이 방식은 역할을 수행할 것 같습니다.
이 코드를 확장하여 플러그인 설정 페이지에서 해당 변수를 설정할 수 있도록 해줄 수 있는 실제 개발자가 있을까요?

# name: discourse-auto-remove-group
# version: 0.1
# authors: tknospdr
# url: https://github.com/tknospdr/discourse-auto-remove-group

enabled_site_setting :auto_remove_group_enabled

# 플러그인 활성화/비활성화를 위한 사이트 설정
register_site_setting :auto_remove_group_enabled, type: :boolean, default: false
register_site_setting :auto_remove_group_category_id, type: :integer, default: 0
register_site_setting :auto_remove_group_name, type: :string, default: ""

after_initialize do
  # 게시글 생성 이벤트 리스닝
  DiscourseEvent.on(:post_created) do |post|
    next unless SiteSetting.auto_remove_group_enabled
    next unless post&.user # 게시글에 사용자가 있는지 확인
    next unless post&.topic&.category_id # 게시글이 카테고리에 있는지 확인

    target_category_id = SiteSetting.auto_remove_group_category_id
    group_name = SiteSetting.auto_remove_group_name

    # 게시글이 설정된 카테고리에 있는지 확인
    if post.topic.category_id == target_category_id
      begin
        group = Group.find_by(name: group_name)
        unless group
          Rails.logger.error("AutoRemoveGroup: Group '#{group_name}' not found")
          next
        end

        user = post.user
        if group.users.include?(user)
          group.remove(user)
          Rails.logger.info("AutoRemoveGroup: Removed user #{user.username} from group #{group_name} after posting in category #{target_category_id}")
        else
          Rails.logger.info("AutoRemoveGroup: User #{user.username} is not in group #{group_name}, no action taken")
        end
      rescue StandardError => e
        Rails.logger.error("AutoRemoveGroup: Error removing user from group: #{e.message}")
      end
    end
  end
end

가능해 보이네요!

Discourse-plugin-skeleton을 시작점으로 삼아 plugin.rb를 만들고, Ask.discourse.com에서 도움을 받을 수 있는 방법을 찾아보세요.

Discourse.event 대신 add_model_callback를 사용하세요. all_the_plugins 저장소에서 몇 가지 예시를 참고할 수 있습니다.

grok과 ask.discourse.com 모두 플러그인을 /var/discouse/plugins/에 설치하라고 합니다.

문제는 컨테이너 안팎에서 해당 경로를 찾을 수 없다는 것입니다. 찾을 수 있는 가장 가까운 경로는 컨테이너 안의 /var/www/discourse/plugins/입니다.

여기에 설치하고 재빌드하면 플러그인이 사라집니다.

봇에 따르면 셀프 호스팅 설치 환경에서는 정상적인 동작이라고 합니다. 하지만 플러그인을 정상적인 방식으로 설치하기 위해 제대로 된 git 저장소를 설정하는 방법을 모르겠습니다. 이 부분에서 도움을 주실 수 있는 분 계신가요?

git를 실행하는 데 성공한 것 같은데, 플러그인을 설치하고 나서 몇 가지 오류가 발생했습니다. 솔직히 여기서부터는 어떻게 해야 할지 막막합니다.

/var/www/discourse/plugins/discourse-auto-remove-group/plugin.rb:9:in `activate!': undefined method `register_site_setting' for an instance of Plugin::Instance (NoMethodError)
/var/www/discourse/plugins/discourse-auto-remove-group 위치에 있는 플러그인의 오류로 인해 Discourse를 시작할 수 없습니다.

해당 플러그인을 제거한 후 다시 빌드해 보십시오!
I, [2025-05-20T16:17:10.306025 #1]  INFO -- : 
I, [2025-05-20T16:17:10.347496 #1]  INFO -- : Terminating async processes
I, [2025-05-20T16:17:10.350251 #1]  INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main pid: 42
I, [2025-05-20T16:17:10.351238 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 109
2025-05-20 16:17:10.351 UTC [42] LOG:  received fast shutdown request
109:signal-handler (1747757830) Received SIGTERM scheduling shutdown...
109:M 20 May 2025 16:17:10.368 # User requested shutdown...
109:M 20 May 2025 16:17:10.369 * Saving the final RDB snapshot before exiting.
2025-05-20 16:17:10.412 UTC [42] LOG:  aborting any active transactions
2025-05-20 16:17:10.438 UTC [42] LOG:  background worker "logical replication launcher" (PID 56) exited with exit code 1
2025-05-20 16:17:10.438 UTC [51] LOG:  shutting down
2025-05-20 16:17:10.447 UTC [51] LOG:  checkpoint starting: shutdown immediate
2025-05-20 16:17:10.526 UTC [51] LOG:  checkpoint complete: wrote 0 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.001 s, sync=0.001 s, total=0.088 s; sync files=0, longest=0.000 s, average=0.000 s; distance=0 kB, estimate=4 kB
2025-05-20 16:17:10.540 UTC [42] LOG:  database system is shut down
109:M 20 May 2025 16:17:10.947 * DB saved on disk
109:M 20 May 2025 16:17:10.947 # Redis is now ready to exit, bye bye...


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 987 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
9fed9596b10ffb4628947e678585b813813ae27a4de746feba16e89f2b9cdc51

엄청나다! Ask Discourse와 Grok를 몇 번 더 대화한 끝에 플러그인이 이제 작동합니다.

AI가 정말로 때로는 유용한 것 같네요.

아름답지는 않지만, 작동하는 것으로 확인되었습니다.


개발 인스턴스가 설정되어 있나요?

그게 무슨 뜻인지 나도 모르겠어. :slight_smile:

프로덕션 환경에서 실행 중이라면, GitHub 저장소 URL을 app.yml 파일에 입력해야 합니다.

사용하신 클로닝 방식은 개발 환경 설치에 더 적합하며, 런처를 사용 중이므로 프로덕션 환경이 아닌 것으로 보입니다.

아, 네, 제가 그렇게 했어요.
앱이 정상적으로 동작하도록 app.yml 파일에 git clone 줄을 추가하고 다시 빌드했습니다.

동작하게 되어 기쁩니다!

플러그인을 개발할 계획이라면 Docker를 사용하여 Discourse 개발 환경 설정 또는 Windows에서 Discourse 개발 환경 설정을 하거나, Linux 또는 Mac을 사용하는 것이 1000배 더 빠릅니다.

이렇게 하면 파일을 편집한 후 브라우저에서 새로고침을 눌러 작동 여부를 즉시 확인할 수 있습니다. 때로는 새로고침조차 하지 않아도 됩니다.