@extends('layouts.dashboard') @section('title', 'Server-Aufbau · '.$guild->name.' · TacForce Pro') @section('content')
// Server-Aufbau @unless ($entitled) PRO @endunless

Server bauen & konfigurieren

Rollen, Kategorien und Channels per Klick — TacForce Operator setzt es auf {{ $guild->name }} um.

@csrf
@if ($pending > 0)
{{ $pending }} Auftrag(e) in Bearbeitung — die Seite kurz später neu laden.
@endif @unless ($entitled) {{-- MONETARISIERUNG: Upsell --}}

Server Builder freischalten

Komplette Server-Strukturen per Klick anlegen, Rollen & Channels verwalten und fertige Blueprints anwenden — ab dem Pro-Plan. Monatlich mietbar, jederzeit kündbar.

Jetzt upgraden
@endunless
{{-- BLUEPRINTS --}}

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) {{-- 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.

@csrf
@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) @foreach ($categoryNames as $cn)
{{-- Rolle --}}
@csrf

Rolle anlegen

{{-- Kategorie --}}
@csrf

Kategorie anlegen

{{-- Channel --}}
@csrf

Channel anlegen

{{-- ERWEITERTE CHANNEL-VERWALTUNG: AFK + bearbeiten --}}
{{-- AFK-Channel --}}
@csrf

AFK-Channel

Voice-Channel, in den inaktive Mitglieder verschoben werden.

@if ($voiceChannels->isNotEmpty()) @else @endif
{{-- Channel bearbeiten --}}
@csrf

Channel bearbeiten

@if ($editableChannels->isNotEmpty()) @else @endif
@endif {{-- JSON IMPORT / EXPORT --}} @if ($entitled)
{{-- 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}.

@csrf
{{-- EXPORT --}}
@if ($exportJson)

Aktuelle Struktur (aus dem letzten Scan) — kopieren, anpassen, oben re-importieren.

@else

Noch kein Scan vorhanden. Klick oben auf „Struktur einlesen".

@endif
@endif
{{-- IST-STRUKTUR --}}

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
@endsection