Хорошо, у меня есть этот бейдж lurkers, и он сейчас работает:
-- Lurkers: пользователи, которые просматривали темы, но не отвечали в последние 30 дней,
-- но перестают получать бейдж (и лишаются его), как только получат ≥3 принятых ответа
WITH recent_readers AS (
SELECT DISTINCT user_id
FROM user_visits
WHERE visited_at > CURRENT_DATE - INTERVAL '30 days'
AND posts_read > 0
),
recent_repliers AS (
SELECT DISTINCT user_id
FROM posts
WHERE created_at > CURRENT_DATE - INTERVAL '30 days'
AND post_number > 11
AND deleted_at IS NULL
),
recent_solutions AS (
-- пользователи, чьи темы получили ≥3 принятых ответа за последние 30 дней
SELECT t.user_id
FROM posts p
JOIN post_custom_fields pc
ON pc.post_id = p.id
AND pc.name = 'is_accepted_answer'
JOIN topics t
ON t.id = p.topic_id
WHERE p.created_at > CURRENT_DATE - INTERVAL '30 days'
-- исключите самопринятие, если нужны только ответы от других:
AND p.user_id <> t.user_id
GROUP BY t.user_id
HAVING COUNT(*) >= 3
)
SELECT
u.id AS user_id,
u.username_lower AS username,
u.last_seen_at,
CURRENT_TIMESTAMP AS granted_at
FROM users u
JOIN recent_readers rr
ON rr.user_id = u.id
LEFT JOIN recent_repliers rp
ON rp.user_id = u.id
LEFT JOIN recent_solutions rs
ON rs.user_id = u.id
WHERE rp.user_id IS NULL -- не отвечал в последние 30 дней
AND rs.user_id IS NULL -- ещё не получил 3 принятых ответа за последние 30 дней
AND u.active = TRUE
ORDER BY u.last_seen_at DESC
Я уверен, что его можно улучшить, и я ещё не закончил тестирование, но моя просьба здесь — добавить ограничение по уровню доверия (до trust_level_1), и я понимаю, что для этого потребуется вызов API или плагин.
Эта инициатива ищет разработчика плагина. Пожалуйста, отправьте коммерческое предложение, я быстро его рассмотрю, оплата и разработка будут оперативными.