Vorlagen (Blueprints)
Ein Klick = komplette Struktur. Idempotent — Vorhandenes wird übersprungen.
@foreach ($blueprints as $bp)
{{ $bp->name }}
{{ $bp->description }}
{{ $bp->roleCount() }} Rollen
{{ $bp->categoryCount() }} Kategorien
{{ $bp->channelCount() }} Channels
@if ($entitled)
id }}"
class="inline-flex items-center gap-2 rounded-lg bg-blue-600 hover:bg-blue-500 text-white text-sm font-medium px-4 py-2 transition">
Anwenden
{{-- Bestätigung --}}
„{{ $bp->name }}" anwenden?
Legt {{ $bp->roleCount() }} Rollen, {{ $bp->categoryCount() }} Kategorien und {{ $bp->channelCount() }} Channels auf {{ $guild->name }} an. Bereits vorhandene bleiben unberührt.
Abbrechen
@else
Ab Pro
@endif
@endforeach
{{-- QUICK-CREATE --}}
@if ($entitled)
@php
$structRoles = collect($structure?->roles_json ?? []);
$structChannels = collect($structure?->channels_json ?? []);
$voiceChannels = $structChannels->where('type', 'voice')->values();
$editableChannels = $structChannels->whereIn('type', ['text', 'voice'])->values();
$categoryNames = $structChannels->where('type', 'category')->pluck('name')->filter()->values();
@endphp
{{-- Autovervollständigung aus dem letzten Scan --}}
@foreach ($structRoles as $r)@endforeach
@foreach ($categoryNames as $cn)@endforeach
{{-- Rolle --}}
{{-- Kategorie --}}
{{-- Channel --}}
{{-- ERWEITERTE CHANNEL-VERWALTUNG: AFK + bearbeiten --}}
{{-- AFK-Channel --}}
{{-- Channel bearbeiten --}}
@endif
{{-- JSON IMPORT / EXPORT --}}
@if ($entitled)
JSON importieren
Als JSON exportieren
{{-- IMPORT --}}
Eigene Struktur als JSON — der Bot setzt sie um (idempotent, Vorhandenes wird angepasst).
Channels können topic , slowmode , user_limit , nsfw ,
"private":true + "allow_roles":["Team"] (oder explizite permissions ).
Dazu "afk":{"channel":"AFK","timeout":300} .
{{-- EXPORT --}}
@if ($exportJson)
Aktuelle Struktur (aus dem letzten Scan) — kopieren, anpassen, oben re-importieren.
{{ $exportJson }}
copied=false,1500)"
class="mt-3 inline-flex items-center gap-2 rounded-lg border border-zinc-200 dark:border-zinc-800 bg-white dark:bg-zinc-900 hover:bg-zinc-100 dark:hover:bg-zinc-800 text-zinc-700 dark:text-zinc-200 text-sm font-medium px-4 py-2 transition">
Kopieren Kopiert ✓
@else
Noch kein Scan vorhanden. Klick oben auf „Struktur einlesen" .
@endif
@endif
Aktuelle Struktur
{{ $structure && $structure->synced_at ? $structure->synced_at->diffForHumans() : 'nie' }}
@if (! $structure)
Noch nicht eingelesen. Klick oben auf „Struktur einlesen" — der Bot schreibt Rollen & Channels hierher.
@else
@php
$roles = $structure->roles_json ?? [];
$channels = collect($structure->channels_json ?? []);
$cats = $channels->where('type', 'category');
$byParent = $channels->where('type', '!=', 'category')->groupBy('parent_id');
$uncat = $channels->filter(fn ($c) => ($c['type'] ?? '') !== 'category' && empty($c['parent_id']));
@endphp
@if ($entitled)
Zum Löschen auf das klicken. Bearbeiten (Rechte/Slowmode) über „Channel bearbeiten" links.
@endif
Rollen ({{ count($roles) }})
@foreach ($roles as $r)
{{ $r['name'] }}
@if ($entitled && empty($r['managed']))
@csrf
×
@endif
@endforeach
Channels ({{ $channels->count() }})
@foreach ($cats as $cat)
{{ $cat['name'] }}
@if ($entitled)
@csrf
@endif
@foreach ($byParent[$cat['id']] ?? [] as $ch)
@include('dashboard.partials.builder-channel-row', ['ch' => $ch])
@endforeach
@endforeach
@if ($uncat->isNotEmpty())
Ohne Kategorie
@foreach ($uncat as $ch)
@include('dashboard.partials.builder-channel-row', ['ch' => $ch])
@endforeach
@endif
@endif