Linked Roles: Rollen, die an geprueften Werten haengen
Neues Modul, standardmaessig aus. Ein Mitglied klickt in Discord auf "Rolle holen", landet auf /linked-roles, bestaetigt den OAuth-Dialog — und der Bot schiebt ihm drei Kennzahlen zu, die Discord dann gegen die Rollen-Einstellung prueft: level Zahl >= eingestelltem Wert dabei_seit Datum <= "vor X Tagen", also Mitglied seit mindestens X Tagen playtester Wahrheitswert Der Bot vergibt dabei keine Rollen. Er liefert nur die Zahlen; was daraus wird, entscheidet die Rollen-Einstellung im Server. Die Daten kommen aus dem, was ohnehin da ist: Level-Tabelle, Playtester-Liste, Discords Beitrittsdatum. Eigener OAuth-Weg statt /auth/login, weil die Berechtigungen andere sind — role_connections.write hat der normale Login nicht. Die Tokens werden gespeichert, und das ist keine Bequemlichkeit: ohne Refresh-Token bliebe jede Rolle auf dem Stand des Verknuepfungs-Tages stehen, ein Level-Up kaeme nie an. Discords eigene Anleitung sagt dasselbe. Der Umfang ist eng (nur identify + role_connections.write), beim Widerruf oder Entkoppeln fliegt der Datensatz sofort raus. Steht so auch als Kommentar an der Tabelle. Abgeglichen wird alle 6 Stunden, einstellbar. Dafuer kann everyTuned jetzt auch Stunden — und wirft bei einer unbekannten Einheit, statt den Abstand still um Faktor 60 oder 3600 danebenzulegen. Beim Bauen gefunden: moduleEnabled fehlte im Import von client.js. Der Bot waere beim ClientReady mit ReferenceError gestorben. Geprueft: alle drei Kennzahlen gegen Discords Formatgrenzen (Schluessel-Regex, Laengen, gueltige Typ-Codes), Modul- und Stellwert-Register, die Stunden-Umrechnung (6 h = 21600000 ms), Speichern und Loeschen einer Verknuepfung, dazu 186 SQL-Abfragen und alle Routen auf Rechtepruefung. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -291,6 +291,8 @@ export default {
|
||||
'feat.alpha_keys.desc': 'A pool of keys handed out by direct message.',
|
||||
'feat.role_menus': 'Role menus',
|
||||
'feat.role_menus.desc': 'Self-service roles at the press of a button — on Discord and in the profile.',
|
||||
'feat.linked_roles': 'Linked roles',
|
||||
'feat.linked_roles.desc': 'Roles tied to verified numbers — level, playtester, how long someone has been around.',
|
||||
'feat.applications': 'Applications',
|
||||
'feat.applications.desc': 'Forms as input dialogs, review with accept and reject.',
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ export const MODULE_ICONS = {
|
||||
events: IconEvents, playtester: IconGame, alpha_keys: IconKey,
|
||||
role_menus: IconRoles, applications: IconApplications,
|
||||
moderation: IconShield, anti_raid: IconLock, modlog: IconArchive, modmail: IconMail,
|
||||
linked_roles: IconLink,
|
||||
tickets: IconSupport, welcome: IconMagic, autorole: IconTeam,
|
||||
sticky_roles: IconRefresh, bug_reports: IconWarning,
|
||||
server_monitor: IconServer, watchdog: IconMonitor, temp_voice: IconVoice,
|
||||
|
||||
Reference in New Issue
Block a user