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

こんにちは。サイトに売買/交換のカテゴリがあり、メンバーがルールに関するトピックに「いいね」をするまで投稿を制限したいと考えています。AIボットに尋ねたところ、いくつかの指示は得られましたが、ホストされているプランでのみ利用可能なDiscourse Automationが必要なようです。

セルフホスト型プラットフォームでこれを実現する方法はありますか?

こんにちは、これはコミュニティエディションに無料でバンドルされています。プラグインタブで有効にできます。

「いいね!」 2

気にしないでください。Discord Automationプラグインを手動で追加できることがわかりました…

「いいね!」 1

うーん、おそらく Discourse Policy とグループの権限で解決できるかもしれませんね?

  • add-users-to-group: 単一のグループを入力として受け付けます。ポリシーに同意したユーザーは自動的にこのグループに追加されます(ポリシーが手動で取り消された場合、またはポリシーのバージョンが更新された場合、ユーザーはグループから削除されます)
「いいね!」 2

ask.discourse.org の助けを借りて、解決策を見つけました。

バッジSQLを有効にし、特定の投稿に「いいね!」が付いたときに割り当てられるバッジを作成する必要がありました。次に、Discord Automation がユーザーがバッジを所有していることに基づいて自動的に割り当てるグループを作成しました。カスタムグループには完全なアクセス権を付与しました。カテゴリーへのアクセス権は「everyone」グループに読み取り専用アクセスのみを許可するように設定し、リアクションのみができるようにしました。

「いいね!」 2

素晴らしい、詳細を共有してくれてありがとう!
これで、あなたの投稿を解決策としてマークできますね。:grin:

「いいね!」 1

帰宅したら、他の誰かが知りたい場合に備えて、私が行ったことの簡単なまとめを書くつもりです。その後、それを解決策としてマークします。

「いいね!」 3

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

  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

プライベートトピックプラグインのトピックで代替案が提案されました。こちらに移動します。

「いいね!」 1

このプラグインに感謝します!コミュニティで基本的なチケット発行システムを提供する方法を探していました。

これを私の売買カテゴリでも使用することを考えています。現在、誰もがトピックを読めるように設定していますが、返信や作成ができるのは特定のグループに属するユーザーだけです。現在のワークフローは次のとおりです。メンバーは投稿に「いいね!」をすることでルールを読んだことを認識します。いいね!をすると、カスタムバッジが付与されます。Discourse Automate がバッジに基づいてそのユーザーをグループに追加します。

これにより、ルールに同意していない人がカテゴリに投稿するのを防ぐことができます。ただし、投稿を閲覧したり読んだりすることは引き続き可能です。

そこで、カテゴリから全員を削除し、セキュリティタブにそのカスタムグループのみを設定しても機能するかどうか知りたいです。管理者グループからの投稿が常に表示されるようにしておけば、カスタムグループに属していないユーザーでもルールを閲覧したり「いいね!」をしたりできるでしょうか?そして、「いいね!」をしてグループに追加されたら、すべてが彼らに開かれるという流れになりますか?

このプラグインが意図していたことは、それではありません。

ユースケースは、このプラグインを使用せずに、Discourse Policy プラグインを使用して実装できます。このプラグインには、ポリシーに同意したユーザーをグループに追加する機能があります。

Policyプラグインを、グループメンバーシップを割り当てることになった経緯を調べる前に確認しました。私がPolicyを好まない理由は、グループに適用しなければならないからです。B/S/Tに参加したい全員がそれを見られるようにするために、trust_level_1のようなものに適用する必要があります。しかし、誰もがB/S/Tに参加したいわけではありません。興味のない人に、もう一つクリックするもの(簡単ではありますが)を追い立てたくありません。

  • 「BST応募者」というグループと「BSTメンバー」というグループを作成する
  • 「BST応募者」は自由に参加できるグループにする
  • 「BST応募者」に適用され、「BSTメンバー」に追加するポリシーを設定する
  • 「BSTメンバー」にカテゴリへのアクセスを許可する

人々は「BST応募者」に参加し、ポリシーに同意することで「BSTメンバー」のメンバーになります。投稿に「いいね!」を押すことで完全なルーブ・ゴールドバーグ・マシンを起動させるよりは、厄介ですが、まだましです。

「いいね!」 1

2 件の投稿が既存のトピックにマージされました: Private Topics Plugin

これも使えるかもしれません。調べてみます。ありがとうございます!!Discourseは本当に初心者なので、やり方を学んでいるところです。

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.