Создание пользовательского бейджа с пользовательскими правилами

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

Пользователь должен выполнить следующие действия/правила:

  1. Пользователь создал как минимум 2 публикации.
  2. Пользователь загрузил аватар профиля.
  3. Пользователь поставил лайк хотя бы одной публикации.

Примечание: Я видел создание некоторых значков с помощью SQL-запросов. На самом деле я очень новичок в этом, поэтому, пожалуйста, подскажите, куда нужно помещать SQL-запросы (если они требуются), чтобы реализовать вышеуказанные правила.

Может быть, это поможет?

Привет, это действительно полезно.
Я включил опцию SQL-запросов, но застрял на одном маленьком моменте, после чего буду готов к работе.

Как просмотреть базу данных, так как моё правило для пользовательских значков довольно сложное, и поэтому мне нужно несколько вещей:

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

Пожалуйста, ответьте на эти два вопроса, и тогда я смогу спокойно уснуть.

Самый простой способ — установить плагин discourse-data-explorer, который предоставит интерфейс, похожий на этот.

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

SQL-запрос —
select users.username, user_stats.user_id from user_stats Inner Join users ON user_stats.user_id = users.id where post_count = 2 AND likes_given = 1 AND uploaded_avatar_id > 0

Следую этой теме Creating triggered custom badge queries, но всё ещё не могу создать триггер, так как я совсем новичок в Discourse.

Пожалуйста, помогите мне решить эту задачу. Если я смогу сделать это один раз, то смогу создавать и другие собственные значки с меньшими трудностями.
@Lhc_fl

Это SQL-код триггера «Обновление ежедневно»:

SELECT st.user_id user_id, current_timestamp granted_at
FROM user_stats st
JOIN users u
ON st.user_id = u.id
WHERE st.post_count >= 2 AND st.likes_given >= 1 AND u.uploaded_avatar_id > 0

Остальные триггеры зависят от конкретных условий, и я не рекомендую их использовать, если вы не нашли эксперта по SQL. (Сам я не очень знаком с SQL).

Большое спасибо за это! У меня всего три простых вопроса:

  1. Что такое st и u table, для чего нужны обе эти таблицы и почему они не отображаются во вкладке плагина «Explorer»?

  2. Когда будет выполняться ежедневное обновление триггера? Если точнее, меня интересует время запуска.

  3. Для чего используется опция Run revocation query daily?

Что касается вопроса 1, это псевдонимы таблиц.

Вы видите строку FROM user_stats st? Она указывает запросу, что st — это сокращение для таблицы user_stats.

То же самое верно и для оператора JOIN, где указано users u. Это означает, что в запросе u является псевдонимом таблицы users. Псевдонимы используются для упрощения запросов, позволяя сократить количество вводимых символов, что уменьшает вероятность ошибок.

Что касается вопроса 3, если вы включите эту опцию, то если пользователь больше не соответствует критериям для получения значка на основе запроса, значок будет удален из его аккаунта.

Спасибо за разъяснение моих сомнений, теперь остался только второй пункт.

  1. Когда будет выполняться ежедневное обновление этого триггера? Если быть конкретнее, меня интересует время.

Ой. Думал, уже ответил.

Запрос выполняется каждые 24 часа в зависимости от того, в какое время суток был запущен контейнер. У меня есть один экземпляр, который запускает его примерно в 0:00 UTC, и другой экземпляр, который запускает его чуть позже 6:00 UTC.

Можно ли изменить время выполнения этого запроса или модифицировать его так, чтобы триггер срабатывал «при действии пользователя над постом» или «при редактировании или создании поста пользователем»?
Если это возможно, пожалуйста, измените запрос. Я новичок в этой системе Discourse; если вы сможете помочь мне один раз, то в следующий раз я смогу создать собственную пользовательскую значок.