Pull-System
Discord Pull-System 🚀
Das KiroCloud Pull-System ist eines der mächtigsten Werkzeuge für Community-Manager. Es ermöglicht Administratoren, Benutzer automatisch oder manuell zu ihrem primären Discord-Server hinzuzufügen, sofern diese Benutzer die entsprechende Berechtigung erteilt haben.
Dies ist besonders nützlich für:
- Community-Wachstum: Nutze KiroCloud als Gatekeeper oder Giveaway-Portal und leite Benutzer nahtlos in deinen Server weiter.
- Backup-Server: Im Falle einer Server-Löschung können alle Benutzer, die jemals auf KiroCloud angemeldet waren, per Knopfdruck auf einen neuen Server "gepullt" werden.
Wie funktioniert das System?
Das Pull-System basiert auf der Discord OAuth2 API und dem Scope guilds.join.
1. Benutzer-Autorisierung (Der Opt-In)
Wenn sich ein Benutzer auf KiroCloud anmeldet, wird er zu Discord weitergeleitet. Die URL, die dabei aufgerufen wird, enthält den Scope identify email guilds.join.
- Wenn der Benutzer auf "Autorisieren" klickt, gewährt er KiroCloud die Erlaubnis, seinen Account zu Servern hinzuzufügen.
- KiroCloud erhält dafür ein Access Token und ein Refresh Token. Diese Tokens werden via AES-256 (GCM) verschlüsselt in der Datenbank (
users-Tabelle) gespeichert.
2. Auto-Pull (Beim Login)
Wenn die Auto-Pull-Funktion im Dashboard aktiviert ist, passiert Folgendes bei jedem Login:
- Das System prüft die konfigurierten
pullConfigs. - Befindet sich der Haupt-Server (
discordMainGuildId) in der Konfiguration und ist Auto-Pull aktiviert? - Wenn ja, wird im Hintergrund ein API-Call an die Discord-API gesendet:
PUT /guilds/{guild.id}/members/{user.id} - Der Benutzer ist nun Mitglied des Servers, falls er es nicht ohnehin schon war.
!NOTE Das Auto-Pull läuft asynchron ab. Der Login-Prozess des Benutzers wird nicht verzögert, selbst wenn der Pull fehlschlägt oder Discord langsam antwortet.
3. Manueller Bulk-Pull
Administratoren können im Admin-Bereich einen "Bulk-Pull" starten. Dies ist die oben erwähnte Backup-Funktion.
- Der Admin wählt den Ziel-Server aus.
- Das System startet einen Background-Worker (implementiert über Nitro-Tasks).
- Der Worker iteriert über alle Benutzer in der Datenbank, die ein gültiges Access-Token haben.
- Für jeden Benutzer wird der Pull-Request gesendet.
Sicherheit & Limits
Discord setzt strikte Rate-Limits für das Hinzufügen von Benutzern über API.
- Rate-Limiting: Das Bulk-Pull-System baut eine künstliche Verzögerung (1000ms bis 1500ms) zwischen jedem Pull ein. Dies verhindert, dass dein Bot von Discord wegen Spam markiert wird.
- Verschlüsselung: Alle OAuth-Tokens (
discordAccessTokenEnc,discordRefreshTokenEnc) sind in der Datenbank asymmetrisch verschlüsselt. Wenn jemand die Datenbank kopiert, sind die Tokens unbrauchbar, da der Entschlüsselungs-Key im Environment-File des Servers liegt. - Verfallene Tokens: Ein Access Token ist nur begrenzt gültig. Das System nutzt das Refresh-Token, um im Hintergrund stumm ein neues Access Token anzufordern, kurz bevor der Pull ausgeführt wird, falls das alte abgelaufen ist.
- Audit Logging: Jeder manuelle Bulk-Pull wird unveränderbar in der Audit-Log-Tabelle gespeichert, inklusive der IP-Adresse des Admins.