Есть ли способ назначить бейдж в зависимости от того, как долго пользователь является модератором?
В нашем случае у нас есть модераторы, которые являются неотъемлемой частью команды уже много лет, и мы хотим вручить им специальный бейдж.
По сути, запрос должен проверять следующие условия:
Является ли пользователь в данный момент модератором?
Сколько дней пользователь занимал роль модератора?
Таким образом, мы хотим выдавать бейджи модераторам, которые активны 1 год, 3 года, 5 лет и так далее.
Я не пробовал настраивать это как SQL-бейдж, но вот запрос для Data Explorer, чтобы получить количество дней, в течение которых пользователь имеет роль модератора:
WITH moderator_role_dates AS (
SELECT
gu.user_id,
MIN(gu.created_at) AS role_granted_date
FROM
group_users gu
JOIN groups g ON gu.group_id = g.id
WHERE
g.name = 'moderators'
GROUP BY
gu.user_id
),
current_date_info AS (
SELECT
CURRENT_DATE AS today
)
SELECT
mrd.user_id,
u.username,
mrd.role_granted_date,
cdi.today,
(cdi.today - mrd.role_granted_date) AS days_in_role
FROM
moderator_role_dates mrd
JOIN users u ON mrd.user_id = u.id,
current_date_info cdi
ORDER BY
days_in_role DESC
Я только что пометил это как sql-triggered-badge, но хотел уточнить: вы ищете автоматический бейдж или нет? Предполагаю, что у вас может быть не так много модов, и, возможно, этот бейдж можно выдавать вручную на основе запроса к Data Explorer?
Думаю, упрощённая версия предыдущего запроса может выглядеть так:
-- [params]
-- int :years
WITH time_in_mod_group AS (
SELECT
user_id,
(CURRENT_DATE - created_at::date) AS days_as_mod
FROM group_users
WHERE group_id = 2 -- id группы «модераторы»
AND user_id > 0 -- исключаем системных пользователей и ботов
)
SELECT
user_id,
days_as_mod
FROM time_in_mod_group
WHERE days_as_mod > (365 * :years)
Этот запрос можно использовать в Data Explorer вместо набора SQL-бейджей. Он позволит получить список пользователей, соответствующих критериям, чтобы вы могли вручную выдать им бейдж.
Есть один нюанс: если пользователь в какой-то момент покинул группу модераторов, а затем снова вступил в неё, будет учтён только последний период нахождения в группе. Думаю, можно обойти это ограничение, используя таблицу user_histories, но если такие случаи редки, проще учесть их вручную.
Да, оно должно быть автоматическим. По сути, мы хотим назначать нескольким модераторам значки (за 1 год, 2 года, 3 года и т. д.) в зависимости от того, как долго они являются модераторами, и выдавать эти значки автоматически.
Спасибо. Технически мы могли бы это сделать, но пока существует возможность реализовать это автоматически без ущерба для безопасности, мы предпочтем именно такой вариант.
Я очень ценю предоставленный код и мы постараемся внедрить его совместно с нашим хостинг-провайдером CommuniteQ, после чего сообщим об этом здесь.