Zum Hauptinhalt springen

Allianzen (Alliances)

Das Alliances-Modul verwaltet Allianzen im Spiel Dark War Survival: Erstellung, Löschung, Mitgliedschaft mit Ranghierarchie (R1–R5), Tags, Integration mit Discord-Rollen und optional mit dem Reaction-Roles-Modul.

Modul aktivieren

  1. Dashboard → Ihr Server → Toggle Alliances
  2. Klicken Sie auf Edit, um Moduloptionen zu konfigurieren
  3. Speichern Sie die Änderungen

Konfiguration

OptionTypStandardBeschreibung
max_alliancesnumber10Maximale Anzahl von Allianzen pro Server
max_membersnumber50Maximale Mitgliederzahl pro Allianz
auto_reaction_rolebooleanfalseAutomatische Synchronisierung mit Reaction Roles
reaction_role_indexnumber / nullnullIndex des zu synchronisierenden Reaction-Roles-Panels
management_rolesListe[]Rollen, die Allianzen verwalten können (neben Admins)
r5_rolesListe[]Zusätzliche Rollen für R5-Anführer
r4_rolesListe[]Zusätzliche Rollen für R4-Offiziere

Rangsystem

RangNameBerechtigungen
R5AnführerAlles: create (wenn R5 in irgendeiner Allianz), invite, kick (alle), promote, demote, transfer
R4OffizierInvite, kick (nur R1–R3)
R3Keine Verwaltungsberechtigungen
R2Keine Verwaltungsberechtigungen
R1Keine Verwaltungsberechtigungen (Standardrang neuer Mitglieder)

Tag-System

Jede Allianz hat einen kurzen Tag (1–5 alphanumerische Zeichen):

  • Der Benutzer gibt ein: KNS
  • Das System speichert: [KNS]
  • Discord-Rolle: [KNS] Alliance Name

Tags müssen innerhalb des Servers eindeutig sein.

Dashboard — Konfiguration

Das Bearbeitungspanel von Alliances im Dashboard enthält:

  • Listenansicht — Karten aller Allianzen mit Informationen
  • Detailansicht — nach Klick auf eine Allianz: Mitgliederliste, Ränge, Aktionen
  • Konfiguration — max alliances, max members, management roles, auto-reaction-role

Befehle

/alliance create

Erstellt eine neue Allianz.

ParameterErforderlichBeschreibung
nameAllianzname (2–32 Zeichen: Buchstaben, Ziffern, Leerzeichen, Bindestriche)
tagKurztag (1–5 alphanumerische Zeichen)
colorRollenfarbe Hex (Standard #5865F2)

Voraussetzungen: Administrator, management_roles oder R5 in irgendeiner Allianz.

Ablauf:

  1. Validierung von Name und Tag
  2. Prüfung des Allianz-Limits
  3. Prüfung auf Duplikate bei Name und Tag
  4. Einfügen des Datensatzes in die DB (mit Platzhalter role_id)
  5. Erstellung der Discord-Rolle [TAG] Name mit angegebener Farbe
  6. Aktualisierung des Datensatzes mit role_id
  7. Hinzufügen des Erstellers als R5
  8. Zuweisung der Rolle an den Ersteller
  9. Optionale Synchronisierung mit Reaction Roles
  10. Log + Antwort
Rollback

Wenn die Erstellung der Discord-Rolle fehlschlägt, wird der Datenbankdatensatz automatisch gelöscht (DB-first-Ansatz mit Rollback).

/alliance delete

Löscht eine Allianz (nur Administrator).

ParameterErforderlichBeschreibung
nameName der zu löschenden Allianz

Löscht: DB-Datensatz + alliance_members (CASCADE) + Discord-Rolle + Reaction-Roles-Bereinigung.

/alliance invite

Lädt einen Benutzer in die Allianz ein (R4/R5).

ParameterErforderlichBeschreibung
memberEinzuladender Benutzer

Fügt mit Rang R1 hinzu. Der Benutzer darf nicht in einer anderen Allianz sein.

/alliance kick

Wirft einen Benutzer aus der Allianz (R4/R5).

ParameterErforderlichBeschreibung
memberZu entfernender Benutzer

R4 kann nur R1–R3 entfernen. R5 kann alle außer sich selbst entfernen.

/alliance leave

Verlässt die aktuelle Allianz.

R5 kann nicht verlassen ohne vorheriges /alliance transfer.

/alliance promote

Befördert ein Mitglied um 1 Rang (nur R5, max bis R4).

ParameterErforderlichBeschreibung
memberZu befördernder Benutzer

/alliance demote

Degradiert ein Mitglied um 1 Rang (nur R5, min R1).

ParameterErforderlichBeschreibung
memberZu degradierender Benutzer

/alliance transfer

Übergibt die Führung an ein anderes Allianz-Mitglied (nur R5).

ParameterErforderlichBeschreibung
memberNeuer Anführer

Neuer Anführer → R5, alter Anführer → R4. Wird in einer DB-Transaktion ausgeführt.

/alliance info

Zeigt Allianz-Informationen mit Mitgliederliste gruppiert nach Rängen.

ParameterErforderlichBeschreibung
nameAllianzname (Standard: eigene Allianz des Benutzers)

/alliance list

Liste aller aktiven Allianzen auf dem Server mit Mitgliederzahl und Anführer.

Überwachte Ereignisse

EreignisAktion
on_member_removeEntfernung aus Allianz + Auto-Sukzession R5
on_member_updateIntegration mit Reaction Roles (Hinzufügen/Entfernen der Allianzrolle)

Auto-Sukzession (on_member_remove)

Wenn der Anführer (R5) den Server verlässt:

  1. Wird aus alliance_members entfernt
  2. Wenn andere Mitglieder vorhanden → der höchstrangige (R4 > R3 > R2 > R1, nach Dienstalter joined_at) wird auf R5 befördert
  3. Wenn keine Mitglieder übrig → Allianz wird als is_active = FALSE markiert

Integration mit Reaction Roles (on_member_update)

Wenn auto_reaction_role = true und ein Benutzer eine Allianzrolle über Reaction Roles erhält/verliert:

Rollenzuweisung:

  • Wenn in anderer Allianz → Rolle entfernt, Log "rejected"
  • Wenn in derselben Allianz → idempotent, ignoriert
  • Wenn in keiner Allianz → als R1 hinzugefügt

Rollenentfernung:

  • Aus alliance_members entfernt

Protokollierung

Aktionen werden durch Logs unter der Kategorie alliances protokolliert:

  • ⚔️ Alliance Created
  • 🗑️ Alliance Deleted
  • ➕ Member Added / Invited
  • ➖ Member Removed / Kicked
  • ⬆️ Member Promoted
  • ⬇️ Member Demoted
  • 👑 Leadership Transferred
  • 🚪 Member Left / Departed Guild
  • 💤 Alliance Deactivated
  • 🚫 Reaction Role Rejected (Multi-Allianz-Konflikt)

Datenbank

TabelleBeschreibung
alliancesid, guild_id, name, tag, role_id, color, is_active, created_at
alliance_membersid, alliance_id, user_id, rank, joined_at

Tipps

Best Practices
  • Setzen Sie max_members passend zur Servergröße
  • Aktivieren Sie auto_reaction_role, damit Benutzer selbst Allianzen beitreten können
  • Tags sollten kurz und erkennbar sein (z.B. KNS, DWS, ARC)
  • Prüfen Sie regelmäßig, ob R5-Anführer aktiv sind — inaktive können Allianzen blockieren
warnung

Das Löschen einer Allianz ist unwiderruflich — die Discord-Rolle und alle Mitgliederdatensätze werden dauerhaft gelöscht.