Ограничить публикацию в категории, пока они не «лайкнут» тему

На случай, если кому-то ещё будет интересно это сделать, вот краткое описание того, что я сделал:

  1. Сначала вам нужно включить Badge SQL через CLI вашего сервера Discourse:
./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. Периодичность: у меня установлено каждый час. Выберите подходящий для вас вариант.
          2. Выберите дату начала
        3. Параметры скрипта:
          1. Значок: выберите созданный вами значок
          2. Группа: выберите созданную вами группу

Вот и всё. Теперь у вас должна быть система, которая гарантирует, что участники согласились с правилами категории, прежде чем смогут публиковать сообщения в ней.

Следующий шаг, который я планирую исследовать, — это возможность скрыть все темы, кроме правил, от всех, кто не входит в эту группу. Но пока этой базовой системы достаточно.

3 лайка