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
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.
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.
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.
Ich schätze den Code sehr und wir werden versuchen, ihn zusammen mit unserem Hoster CommuniteQ zu implementieren und hier zurückzumelden.