2 GrumpyTempRoles
darksoon edited this page 2026-07-11 13:15:17 +02:00

Temp Roles — Zeitlich befristete Rollen

GrumpyTempRoles vergibt eine Rolle für eine feste Dauer — nach Ablauf wird sie automatisch wieder entzogen. Unabhängig vom Tempban-System (/mod tempban), gedacht für alles, was zeitlich begrenzt sein soll: Event-Zugang, Probezeit-Rollen, temporäre Boosts, Strafen unterhalb eines echten Timeouts.


Beispiel-Szenario (Schritt für Schritt)

Sven veranstaltet ein Wochenend-Event und will allen Teilnehmern für die Dauer eine besondere Rolle @Event-Gast geben, die danach von selbst wieder verschwindet — ohne dass er sich am Montag daran erinnern muss, sie manuell zu entfernen.

  1. Rolle @Event-Gast auf dem Server anlegen (normale Discord-Server-Einstellungen, kein Bot-Schritt).
  2. Für jeden Teilnehmer:
    /temprole add user:@Jonas role:@Event-Gast duration:2d
    
    → Jonas bekommt die Rolle sofort, und der Bot merkt sich: "in 2 Tagen wieder entziehen".
  3. Zwischendurch nachsehen, wer aktuell die Rolle hat und wie lange noch:
    /temprole list
    
    → zeigt z.B. @Jonas — @Event-Gast · noch 1d 4h
  4. Event endet früher als gedacht? Rolle sofort entziehen, ohne auf den Ablauf zu warten:
    /temprole remove user:@Jonas role:@Event-Gast
    
  5. Ansonsten: nichts weiter tun. Nach 2 Tagen entfernt der Bot die Rolle automatisch — spätestens eine Minute nach Ablauf, auch wenn der Bot zwischendurch mal neu gestartet wurde.

Aktivierung

In configs/config.yml:

addons:
  temproles: true

Es gibt keine eigene temproles.yml — das Modul hat keine Einstellungen, nur den An/Aus-Schalter.


Commands

/temprole add <user> <role> <duration> [reason]

Vergibt eine Rolle befristet. Ist die Rolle bereits vorhanden, wird sie nicht doppelt vergeben — nur die Ablaufzeit gesetzt.

Option Beschreibung
user Zielmitglied
role Zu vergebende Rolle
duration Dauer, z.B. 2h, 1d, 30m, 1h30m (gleiches Format wie /mod tempban, /xp boost)
reason Optionale Begründung (max. 300 Zeichen)
/temprole add user:@Jonas role:@Event-Gast duration:1d
/temprole add user:@Jonas role:@Probezeit duration:7d reason:"Neues Teammitglied"

Verlängern: Wird /temprole add für dieselbe Kombination aus User + Rolle erneut ausgeführt, wird die bestehende Zuweisung verlängert (neue Ablaufzeit + neue Begründung überschreiben die alte) — es entsteht kein doppelter Eintrag.

Berechtigung: Rollen verwalten (Manage Roles)


/temprole list [user]

Zeigt alle aktiven befristeten Rollen, optional gefiltert auf ein Mitglied.

/temprole list
/temprole list user:@Jonas

Zeigt pro Zeile Mitglied, Rolle und verbleibende Zeit (z.B. noch 3h 12m).

Berechtigung: Rollen verwalten (Manage Roles)


/temprole remove <user> <role>

Entfernt eine befristete Rolle sofort, statt auf den Ablauf zu warten.

/temprole remove user:@Jonas role:@Event-Gast

Berechtigung: Rollen verwalten (Manage Roles)


Wie der automatische Entzug funktioniert

Ein Runner prüft jede Minute, welche befristeten Rollen abgelaufen sind (expiresAt in der Vergangenheit) — inklusive einer sofortigen Prüfung direkt beim Bot-Start, damit während einer Downtime abgelaufene Rollen nicht erst bis zu einer Minute nach dem Neustart bemerkt werden.

Minütlicher Tick
  ├─ Abgelaufene Einträge finden
  ├─ Jeden Eintrag einzeln "claimen" (verhindert Doppel-Verarbeitung
  │    bei zwei überlappenden Ticks — z.B. wenn ein Tick wegen vieler
  │    abgelaufener Rollen länger als eine Minute braucht)
  ├─ Mitglied noch auf dem Server? → Rolle entfernen
  │    ├─ Erfolg → fertig
  │    └─ Fehlschlag (Rate-Limit, fehlende Berechtigung) → Claim
  │         zurücknehmen, nächster Tick versucht es erneut
  └─ Mitglied nicht mehr da / Rolle schon manuell entfernt → nichts zu tun

Dieses Muster ist identisch zum bestehenden Tempban-Auto-Unban (/mod tempban) — bewährt, robust gegen überlappende Ticks und transiente Discord-API-Fehler.


Grenzen (bewusst)

  • Keine Rollen-Hierarchie-Umgehung: Der Bot kann nur Rollen vergeben, die unter seiner eigenen höchsten Rolle stehen, und keine von Discord/Integrationen verwalteten Rollen (z.B. Boost-Rolle, Bot-eigene Rollen).
  • Keine @everyone-Rolle — ergibt inhaltlich keinen Sinn und wird abgelehnt.
  • Kein separates Log — anders als beim Tempban-System gibt es (noch) keinen eigenen Log-Channel-Eintrag beim automatischen Entzug, nur einen internen Log-Eintrag in der Konsole. /temprole list ist die Quelle der Wahrheit für aktuell aktive Zuweisungen.

Berechtigungen

Command Berechtigung
/temprole add Manage Roles
/temprole list Manage Roles
/temprole remove Manage Roles

Discord-seitiger Default via setDefaultMemberPermissions — Server-Admins können das pro Rolle/Kanal in den Server-Integrationseinstellungen übersteuern. Alle Commands sind nur auf Servern nutzbar (kein DM-Kontext).