Abzeichen basierend darauf, wann ein Benutzer zum ersten Mal zum Moderator befördert wurde?

Hallo Leute! Ich habe gesucht, aber nichts gefunden.

Gibt es eine Möglichkeit, einem Benutzer eine Auszeichnung zu verleihen, je nachdem, wie lange er Moderator ist?

In unserem Fall haben wir Mods, die seit vielen Jahren ein wesentlicher Bestandteil des Teams sind, und wir möchten ihnen eine besondere Auszeichnung verleihen.

Grundsätzlich sollte die Abfrage Bedingungen prüfen:
Ist der Benutzer derzeit ein Mod?
Wie viele Tage hat der Benutzer die Moderatorrolle inne?

Auf diese Weise möchten wir Auszeichnungen für Mods vergeben, die seit 1 Jahr, 3 Jahren, 5 Jahren usw. aktiv sind.

Habe noch nicht versucht, es als Badge-SQL einzurichten, aber hier ist eine Data-Explorer-Abfrage, um die Moderatortage als ihre Rolle zu erhalten:

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 „Gefällt mir“

Ich habe dies gerade als sql-triggered-badge markiert, aber ich dachte, ich frage nach, ob Sie ein automatisches suchen oder nicht? Ich gehe davon aus, dass Sie nicht viele Mods haben und dies vielleicht manuell basierend auf einer Data Explorer-Abfrage gewähren könnten?


Ich denke, eine vereinfachte Version der obigen könnte sein:

-- [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)

Diese würde als Data Explorer-Abfrage funktionieren und nicht als eine Reihe von SQL-Badges, und sie kann eine Liste von Benutzern auswählen, die die Kriterien erfüllen, damit Sie ihnen den Badge manuell gewähren können.

Es gibt eine Einschränkung, dass, wenn sie die Mod-Gruppe zu irgendeinem Zeitpunkt verlassen und wieder beigetreten sind, nur die letzte Aufnahme gezählt würde. Ich denke, es wäre möglich, die Tabelle user_histories zu verwenden, um dies zu umgehen, aber wenn es eine Ausnahme ist, ist es wahrscheinlich einfacher, dies auch manuell zu berücksichtigen.

2 „Gefällt mir“

Ja, es soll automatisch sein. Grundsätzlich möchten wir Moderatoren mehrere Abzeichen zuweisen (1 Jahr, 2 Jahre, 3 Jahre usw.), basierend darauf, wie lange sie schon Mod sind, und ihnen die Abzeichen automatisch gewähren.

1 „Gefällt mir“

Ich denke, das obige ist anpassbar, wenn Sie den Parameter entfernen und WHERE zu den unterschiedlichen Tagesgrenzen für jeden ändern, z. B.

WHERE days_as_mod > 365

(Der Trigger wäre update daily)

Danke, technisch könnten wir das tun, aber solange wir es automatisch tun können, ohne die Sicherheit zu beeinträchtigen, werden wir uns eher dafür entscheiden. :slight_smile:

Ich schätze den Code sehr und wir werden versuchen, ihn zusammen mit unserem Hoster CommuniteQ zu implementieren und hier zurückzumelden.

1 „Gefällt mir“