Badge basato sulla prima promozione a moderatore?

Ciao ragazzi! Ho provato a cercare, ma non ho trovato nulla.

C’è un modo per assegnare un badge in base a quanto tempo un utente è stato moderatore?

Nel nostro caso, abbiamo moderatori che sono stati una parte essenziale del team per molti anni e vogliamo dare loro un badge speciale.

Fondamentalmente la query dovrebbe verificare le condizioni:
L’utente è attualmente un moderatore?
Da quanti giorni l’utente ricopre il ruolo di moderatore?

In questo modo vogliamo distribuire badge per i moderatori che sono stati attivi per 1 anno, 3 anni, 5 anni, ecc.

Non ho provato a configurarlo come badge sql, ma ecco una query di esplorazione dati per ottenere i giorni da moderatore come ruolo:

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
3 Mi Piace

Ho appena taggato questo come sql-triggered-badge, ma ho pensato di verificare se stai cercando uno automatico o meno? Presumo che tu non abbia un gran numero di mod e potresti magari concedere questo badge manualmente in base a una query del data explorer?


Penso che una versione semplificata di quella sopra potrebbe essere:

-- [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 -- group id of the 'moderator' group
  AND user_id > 0 -- exclude system users and bots

)

SELECT
    user_id,
    days_as_mod
FROM time_in_mod_group
WHERE days_as_mod > (365 * :years)

Questa funzionerebbe come una query del data explorer piuttosto che come un set di badge SQL, e può selezionare un elenco di utenti che soddisfano i criteri in modo da poter concedere loro manualmente il badge.

C’è un’unica avvertenza: se hanno lasciato il gruppo mod in qualsiasi momento e si sono riuniti, conterebbe solo l’ultima inclusione. Penso che sarebbe possibile utilizzare la tabella user_histories per aggirare questo problema, ma se è un’eccezione, è probabile che sia più facile tenerne conto manualmente.

2 Mi Piace

Sì, dovrebbe essere automatico. In pratica, vogliamo solo impostare badge multipli per i moderatori (1 anno, 2 anni, 3 anni, ecc.) in base a quanto tempo sono stati moderatori e assegnare loro i badge automaticamente.

1 Mi Piace

Penso che quello sopra sia adattabile se rimuovi il parametro e cambi il WHERE per essere le diverse soglie di giorni per ciascuno, ad esempio.

WHERE days_as_mod > 365

(Il trigger sarebbe update daily)

Grazie, tecnicamente potremmo farlo, ma finché potremo farlo automaticamente in un modo che non comprometta la sicurezza, preferiremo optare per quello. :slight_smile:

Apprezzo molto il codice e proveremo a implementarlo insieme al nostro hoster CommuniteQ e vi faremo sapere qui.

1 Mi Piace