@extends('layouts.dashboard') @section('title', 'Admin · Bots · TacForce Pro') @php // Masked token preview: ••••••••{last4}. Never expose the real token. $maskToken = function ($bot) { try { $plain = $bot->discord_token; // decrypted by the model cast } catch (\Throwable $e) { $plain = null; } $last4 = $plain ? substr($plain, -4) : '····'; return '••••••••' . $last4; }; @endphp @section('content')
{{-- Kopf --}}

Multi-Bot-Registry

Discord-Bots verwalten. Der Bot-Worker liest diese Tabelle und startet je aktivem Eintrag eine Client-Instanz.

{{-- Info-Panel (ARCHITECTURE.md §4) --}}

So bindest du einen neuen Bot ein

  1. Discord-App anlegen auf discord.com/developers/applications → Bot-Tab → Token, Client-ID und Public Key kopieren.
  2. Hier „Bot hinzufügen" klicken und die Werte eintragen. Das Token wird via Crypt::encryptString() verschlüsselt gespeichert.
  3. Speichern → der Bot-Worker erkennt den Eintrag beim nächsten Start und startet automatisch eine weitere Client-Instanz.
  4. Slash-Commands registrieren: npm run register -- --bot <id>

Tokens werden verschlüsselt gespeichert (AES-256, Key aus APP_KEY) und erscheinen nie im Klartext.

{{-- Bot-Karten --}} @if ($bots->isEmpty())

Noch kein Bot registriert

Lege deinen ersten Discord-Bot an, um loszulegen.

@else
@foreach ($bots as $bot)
{{-- Akzentstreifen --}}
@include('admin.partials.avatar', ['url' => $bot->avatar_url, 'name' => $bot->name, 'size' => 'h-11 w-11', 'rounded' => 'rounded-xl'])
{{ $bot->name }}
{{ $bot->owner ? ($bot->owner->global_name ?: $bot->owner->username) : 'TacForce (intern)' }}
@if ($bot->is_active && $bot->isOnline()) Online @elseif ($bot->is_active) Offline @else Inaktiv @endif
{{-- Detail-Zeilen --}}
Client-ID
{{ $bot->discord_client_id }}
Token
{{ $maskToken($bot) }}
Server
{{ $bot->guilds_count }}
Verwaltung
@if ($bot->isExternal()) Eigener Prozess · Supervisor @else Bot-Worker @endif
Heartbeat
{{ $bot->last_heartbeat_at ? $bot->last_heartbeat_at->diffForHumans() : '—' }}
Akzent
{{ $bot->accent_color }}
{{-- Aktionen --}}
@endforeach
@endif {{-- ============ MODAL: Bot anlegen / bearbeiten ============ --}}
{{-- Header --}}

@csrf {{-- Name --}}
{{-- Client-ID --}}
{{-- Token --}}

Wird verschlüsselt gespeichert. Nur ausfüllen, um es zu ersetzen.

{{-- Public Key --}}
{{-- Owner + Accent --}}
{{-- Verwaltung --}}

Läuft als eigener Prozess. In supervisor/processes.json eintragen und Supervisor neu starten.

{{-- Avatar URL --}}
{{-- Aktiv-Toggle --}}
Aktiv
Der Worker startet nur aktive Bots.
{{-- verstecktes Feld = 0, Toggle setzt 1 --}}
{{-- Footer --}}
{{-- ============ MODAL: Löschen bestätigen ============ --}}

Bot löschen?

wird dauerhaft entfernt. Der Worker beendet diese Client-Instanz beim nächsten Reload. Diese Aktion kann nicht rückgängig gemacht werden.

@csrf @method('DELETE')
@endsection