Автоматическое присвоение титулов в зависимости от уровня доверия в Discourse

Всем привет,

Я настроил систему ранжирования с пользовательскими титулами, но, как вы знаете, в Discourse нет встроенного способа назначать титул по умолчанию всем новым пользователям. Поэтому я придумал обходной путь, при котором:

  • Новые участники состоят в Группе 1
  • Активные участники состоят в Группе 2
  • И так далее…

Использованный мной метод следующий:

cd /var/discourse
./launcher enter app
rails c

User.where(trust_level: 0).update_all(title: "Новый участник")
User.where(trust_level: 1).update_all(title: "Новый участник")
User.where(trust_level: 2).update_all(title: "Участник")
User.where(trust_level: 3).update_all(title: "Творческий участник")

Проблема

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

Я пытался автоматизировать это с помощью Ruby-скрипта и вызова его через crontab, но получаю ошибку.

Я спросил ChatGPT, и он ответил:

«Модель User не загружается, когда вы запускаете скрипт напрямую с помощью Ruby вне среды Discourse».

Проблема в том, что у меня нет правильной настройки config/environment внутри файлов Discourse.

Я добавил это, но это не помогло.

Мой вопрос

Есть ли способ автоматизировать это без использования crontab? Или как правильно выполнить скрипт, обновляющий титулы пользователей, без ручного ввода в консоль Rails каждый раз?

Заранее спасибо!

Какая-нибудь помощь?

Возможно, это можно сделать, создав пользовательскую автоматизацию по ссылкам Discourse Automation и Create custom Automations, но я не знаю, как это работает.

Вы можете реализовать это с помощью пользовательского скрипта автоматизации, используя триггеры «Событие пользователя» и «Событие повышения пользователя». Когда создается новый пользователь («Событие пользователя») или изменяется его уровень доверия («Событие повышения пользователя»), можно запустить скрипт, который автоматически присвоит ему заголовок в зависимости от уровня доверия.

Спасибо @jahan_gagan! Нужна помощь в создании этого скрипта?

Вау! Отличная работа с автоматизацией! :clap:

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

Вы можете попробовать реализовать это через систему значков. Создайте значок, который выдается, когда участник достигает нужного уровня доверия, а затем включите опцию «Разрешить использовать значок в качестве заголовка».

Затем создайте автоматизацию с помощью скрипта «Членство в группе пользователей через значок», который будет запускаться каждый день и обновлять заголовок и flair пользователя.

Было бы более гибким добавить эту информацию в карточку поста/пользователя через компонент темы? Тогда пользователи смогут использовать поле заголовка по назначению — для бейджей, идентификаторов групп или чего-то ещё, что вы захотите добавить. А если это будет реализовано через компонент темы, то они не смогут изменить или удалить эту информацию.

Здравствуйте,

Я пытаюсь реализовать это с помощью автоматизации системы значков, но столкнулся с ограничением.

Для запуска скрипта user_group_membership_through_badge необходимо указать группу. Однако я уже использую группы системы по умолчанию: Trust Level 1, 2, 3, 4. Эти группы являются встроенными и не могут быть выбраны в инструменте автоматизации.

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

Ниже приведён скриншот, показывающий ошибку при оставлении поля группы пустым:

Есть ли способ обновлять заголовки на основе значков без требования указания группы?
Или существует обходной путь для прямого таргетинга групп Trust Level в рамках этой автоматизации?

@xkhalid Я собрал быстрый плагин (это тоже мой первый!), который:

  • Присваивает заголовок новым пользователям
  • Меняет заголовок на соответствующий их уровню доверия. Например, УД1 → УД2: пользователи теперь получают заголовок УД2 вместо заголовка УД1.
  • Обновляет заголовки пользователей каждые 12 часов (планируется сделать частоту настраиваемой)

Все заголовки настраиваются через параметры :slightly_smiling_face:.

Спасибо!

После того как я добавил это в app.yml

- git clone https://github.com/NateDhaliwal/add-title-based-on-trust-level.git

и пересобрал, я столкнулся с ошибкой 502 Bad Gateway. Есть ли решение?
Пока я удалил это из app.yml, и всё работает нормально.

Хм, странно. Насколько я помню, эта ошибка иногда появляется после пересборки, но если подождать, она исчезнет (или поможет другая пересборка).

Да, я знаю, но эта проблема возникла только после того, как я добавил репозиторий Git и пересобрал проект. Выдалась эта ошибка.

Однако я попробую ещё раз позже.


А как насчёт этой проблемы? Может, они связаны?

Я ещё раз посмотрю на это, спасибо, что сообщили.

@xkhalid, не мог бы ты попробовать сейчас? Только что обновил.

Спасибо! Теперь всё работает.

Но это изменение ещё не применилось ко всем пользователям. Например, этот пользователь имеет уровень доверия 1 и является новым, но заголовок ему не присвоен.

Это займёт время или нет?

@xkhalid Я внес исправление. Пожалуйста, проверьте, работает ли теперь.
Спасибо!

Хочу поблагодарить @NateDhaliwal за его плагин!

Он оказался очень полезным! Заголовок обновляется каждые 12 часов.

Привет, спасибо за отличный плагин!

У меня есть более сложная задача:
Я хочу автоматически назначать заголовки пользователям на основе комбинации членства в группе (например, группа A или группа B) и уровня доверия (например, TL2, TL3 и т. д.). Например, пользователь из группы A с уровнем TL2 должен получить заголовок «A - TL2» и так далее.

Возможно ли расширить ваш плагин для поддержки этой функции или у вас есть какие-либо советы по её реализации?
Сам я не имею опыта программирования, поэтому буду очень благодарен за любые предложения или помощь.

Спасибо большое!

@joo Являются ли эти группы основными группами пользователя?

Да, я хочу использовать основную группу пользователя для определения заголовка.