Scheduling-System
Konzept
Das Scheduling-System ist das Herzstck von Schedule-Bot. Es verwaltet taegliche Trainingsplaene und die Verfuegbarkeit aller Spieler.
Tages-Schedule
Jeder Tag hat einen eigenen Schedule-Eintrag mit:
- Datum im Format
DD.MM.YYYY - Grund (Reason) - z.B. Training, Scrims, Premier, Off-Day, VOD-Review
- Fokus (Focus) - Optionaler Detail-Text
- Spieler-Liste - Snapshot aller registrierten Spieler mit Verfuegbarkeit
Schedule-Status
Der Analyzer (src/shared/utils/analyzer.ts) ermittelt fuer jeden Tag einen Status:
| Status | Bedingung | Farbe |
|---|---|---|
OFF_DAY | Grund enthaelt "off" | Lila |
FULL_ROSTER | 5+ Main-Spieler verfuegbar | Gruen |
WITH_SUBS | 4 Mains + ausreichend Subs fuer 5 | Orange |
NOT_ENOUGH | Weniger als 5 insgesamt verfuegbar | Rot |
Prioritaet: OFF_DAY > FULL_ROSTER > WITH_SUBS > NOT_ENOUGH
Automatische Erstellung
- Beim Start werden die naechsten 14 Tage automatisch angelegt
addMissingDays()fuellt fehlende Eintraege auf- Wiederkehrende Verfuegbarkeiten werden automatisch auf leere Slots angewendet
Verfuegbarkeits-Formate
"" → Keine Antwort (❓)
"x" oder "X" → Nicht verfuegbar (❌)
"HH:MM-HH:MM" → Zeitfenster (✅), z.B. "14:00-20:00"Automatische Posts
Der Scheduler postet taeglich den aktuellen Trainingsplan in den konfigurierten Discord-Channel.
┌─────────────────────────────────────┐
│ Taeglich um 18:00 (config) │
│ │
│ 1. Schedule fuer heute laden │
│ 2. Status analysieren │
│ 3. Embed erstellen & posten │
│ 4. Ggf. Training-Poll erstellen │
└─────────────────────────────────────┘Erinnerungen
Vor dem taeglichen Post werden Erinnerungen an Spieler ohne Verfuegbarkeits-Angabe gesendet:
- 1. Erinnerung: X Stunden vor dem Post (konfigurierbar)
- 2. Erinnerung: Y Stunden vor dem Post (optional)
- Abwesende Spieler und Coaches werden uebersprungen
- DM-Nachrichten mit Aktions-Buttons
Status-Aenderungs-Benachrichtigungen
checkAndNotifyStatusChange() wird nach jeder Verfuegbarkeits-Aenderung aufgerufen:
- Aktuellen Status berechnen
- Mit letztem bekannten Status vergleichen
- Bei Aenderung: Neues Embed posten
- Nur fuer heute und nach der taeglichen Post-Zeit aktiv
Roster-Synchronisation
User Mappings (Master) Schedule Players (Snapshot)
┌──────────────────┐ ┌──────────────────┐
│ Player A (MAIN) │────sync───▶│ Player A (MAIN) │
│ Player B (MAIN) │────sync───▶│ Player B (MAIN) │
│ Player C (SUB) │────sync───▶│ Player C (SUB) │
│ [neuer Spieler] │────add────▶│ [neuer Spieler] │
└──────────────────┘ └──────────────────┘Wenn das Roster geaendert wird (Register/Unregister), synchronisiert syncUserMappingsToSchedules() alle zukuenftigen Schedule-Eintraege.
Ablauf: Verfuegbarkeit setzen
Via Discord (/set)
- Spieler fuehrt
/setaus - Interaktives Menu mit Datumsauswahl
- Zeitfenster eingeben oder "nicht verfuegbar" waehlen
- Zeitzonen-Konvertierung (User → Bot-Timezone)
- Datenbank-Update
checkAndNotifyStatusChange()pruefen
Via Dashboard
- User-Portal → Schedule-Tab
- Datum anklicken
- Verfuegbarkeit eingeben
- API-Call:
POST /api/schedule/update-availability - Automatische Benachrichtigung bei Status-Aenderung
