投稿に広告を掲載するには購読してください

カテゴリーをシンプルなマーケットプレイスとして実装し、ユーザーが広告(投稿)を購入できる方法を探しています。

サブスクリプションプラグインは、グループに有料の追加を許可し、サブスクリプションがキャンセルされると、手動またはプログラムによってユーザーを削除することを可能にするようです。

私が達成しようとしているのは、カテゴリー内に投稿できるサブスクリプションを設け、それにより投稿許可されたグループからユーザーを削除することです。

これを、サブスクリプションプラグインだけ、またはサブスクリプションと自動化を組み合わせて実現することは可能でしょうか?

簡単に言えば、個々の投稿を販売したいのです。投稿への返信は無料にしたいです。

「マーケットプレイス」がサブスクリプショングループであると仮定すると、この一連の権限で私が求めていることが可能になると考えられます。

トピックを広告カテゴリで作成するときに、それらをグループから削除するプラグインが必要だと思います。

自動化プラグインはユーザーをグループから削除しないと思います。

「いいね!」 1

えっと、自分でプログラミングできるわけではありませんし、これは概念実証のためのものであり、上司にサポートを得る前の段階なので、現時点では金銭的なサポートは提供できません。
誰か他に、これのようなものがコミュニティにとって良いと思う人はいますか?

もう一つの考慮点として、Discourseとサブスクリプションプラグインとの間に、ユーザーのサブスクリプション数を追跡できる通信はありますか?複数の投稿を一度に購入できるようにするのに役立つでしょう。一つ買って、投稿して、次のを買って、また投稿する、といった形です。

概念実証には想像力を使ってもらうしかないでしょう。

おそらく、WebhookとZapierのようなWebhookツールを使えば可能だと思います。

プラグインがより複雑になります。

確かに、しかしクールな機能になるでしょう。
とにかく、カテゴリ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

# Site setting to enable/disable the plugin
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
  # Listen for post creation events
  DiscourseEvent.on(:post_created) do |post|
    next unless SiteSetting.auto_remove_group_enabled
    next unless post&.user # Ensure post has a user
    next unless post&.topic&.category_id # Ensure post is in a category

    target_category_id = SiteSetting.auto_remove_group_category_id
    group_name = SiteSetting.auto_remove_group_name

    # Check if the post is in the configured category
    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 から始めて、それをプラグインにしてください。rb、そして Ask.discourse.com がどのように役立つかを見てください。

そして、Discourse.event の代わりに add_model_callback を使用してください。例については、all_the_plugins リポジトリを参照してください。

「いいね!」 1

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)
あなたはプラグインのエラーによりDiscourseを起動できません /var/www/discourse/plugins/discourse-auto-remove-groupで

このプラグインを削除して、再度ビルドしてください!
私、[2025-05-20T16:17:10.306025 #1]  INFO -- : 
私、[2025-05-20T16:17:10.347496 #1]  INFO -- : 非同期処理を終了しています
私、[2025-05-20T16:17:10.350251 #1]  INFO -- : 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にSIGINTを送信
私、[2025-05-20T16:17:10.351238 #1]  INFO -- : redisにTERMシグナルを送信 /usr/bin/redis-server /etc/redis/redis.conf pid: 109
2025-05-20 16:17:10.351 UTC [42] LOG:  高速シャットダウン要求を受信
109:signal-handler (1747757830) SIGTERMを受信しシャットダウンをスケジュール...
109:M 20 May 2025 16:17:10.368 # ユーザーがシャットダウンを要求...
109:M 20 May 2025 16:17:10.369 * 最終的なRDBスナップショットを保存中...
2025-05-20 16:17:10.412 UTC [42] LOG:  トランザクションを中断
2025-05-20 16:17:10.438 UTC [42] LOG:  バックグラウンドワーカー「論理レプリケーションローンチャー」(PID 56)が終了コード1で終了
2025-05-20 16:17:10.438 UTC [51] LOG:  シャットダウン中
2025-05-20 16:17:10.447 UTC [51] LOG:  チェックポイント開始: 直ちにシャットダウン
2025-05-20 16:17:10.526 UTC [51] LOG:  チェックポイント完了: バッファを書き込み(0.0%)、WALファイルも追加・削除・再利用なし; 書き込み時間=0.001秒、同期=0.001秒、合計=0.088秒; ファイル同期=0、最長=0.000秒、平均=0.000秒; 距離=0 kB、推定=4 kB
2025-05-20 16:17:10.540 UTC [42] LOG:  データベースシステムはシャットダウンされました
109:M 20 May 2025 16:17:10.947 * DBはディスクに保存されました
109:M 20 May 2025 16:17:10.947 # Redisは正常終了します、お疲れさまでした...


失敗
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'がエラーを返しました。戻り値:#Process::Status: pid 987 終了
失敗箇所: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
コマンドの実行に失敗しました {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrapに失敗しました。終了コード1
** ブートストラップに失敗しました ** 以前のエラーメッセージを確認してください。もっと多くのエラーがあるかもしれません。
./discourse-doctorが問題の診断に役立ちます。
9fed9596b10ffb4628947e678585b813813ae27a4de746feba16e89f2b9cdc51

なんてこった!Ask DiscourseとGrokとのさらに数回の会話の後、プラグインが動作するようになりました。

AIは時々本当に役に立つということですね。

見た目は悪いですが、動作することが確認できました。


「いいね!」 1

開発用のインスタンスは設定していますか?

それが何を意味するのかわからない。:にっこり:

本番環境のインストールを行っている場合は、app.ymlファイルにGithubリポジトリのURLを記載してください。

あなたが行ったクローン方法は開発用のインストールに適していますが、あなたが使用しているランチャーを考えると、それはあなたが実行しているものではないと思います。

ああ、そうです、それをやりました。
app.ymlファイルに git clone の行を追加して、物事を動かすために再構築しました。

「いいね!」 2

うまくいって良かったです!

プラグインを開発するのであれば、Docker を使用して開発用に Discourse をインストール または 開発用に Windows に Discourse をインストール または Linux や Mac を使用する方が 1000 倍高速です。

つまり、ファイルを編集してブラウザでリロードすれば、それが機能したかどうかを確認できます。リロードすら不要な場合もあります。

「いいね!」 1