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.
- Rolle
@Event-Gastauf dem Server anlegen (normale Discord-Server-Einstellungen, kein Bot-Schritt). - Für jeden Teilnehmer:
→ Jonas bekommt die Rolle sofort, und der Bot merkt sich: "in 2 Tagen wieder entziehen"./temprole add user:@Jonas role:@Event-Gast duration:2d - Zwischendurch nachsehen, wer aktuell die Rolle hat und wie lange noch:
→ zeigt z.B./temprole list@Jonas — @Event-Gast · noch 1d 4h - Event endet früher als gedacht? Rolle sofort entziehen, ohne auf den Ablauf zu warten:
/temprole remove user:@Jonas role:@Event-Gast - 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 listist 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).
GrumpyCore Wiki
⚙️ Setup
🔧 Core-Module
🆕 Neue Module
🔔 Benachrichtigungen & Utility
💬 Commands
👥 Staff
GrumpyCore Wiki (English)
⚙️ Setup
🔧 Core Modules
🆕 New Modules
🔔 Notifications & Utility
💬 Commands
👥 Staff