aether-framework/resources/[aether]/aether-admin/server/module/broadcast.lua
Jerrit Fritzsche e4b82dd685 Aether-Framework: Fachmodule, Admin-Panel und Docker-Datenbank
- aether-medical: Stationen/Belegung, Intensivstation, Blutbank, Fuhrpark,
  Nachrichten/Aushänge, Berichte und Textbausteine (server + NUI)
- aether-admin: vollständiges Server-Admin-Panel als echtes FiveM-Resource,
  an aether-core gekoppelt (Rechte über aether_users.admin_group), mit
  WebRTC-Live-Kameras (Bildschirmfreigabe) und separatem Media-Server (SFU)
- Prototypen admin/ vervollständigt
- SQL-Schema aether_admin.sql
- Docker-Compose mit MariaDB und idempotenter Auto-Migration (schema_migrations)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 18:55:32 +02:00

33 lines
1.2 KiB
Lua

-- =====================================================================
-- aether-admin / Modul: Ankündigungen
--
-- Eine Nachricht an den ganzen Server. Sie wird verschickt und der
-- Verlauf bleibt nachlesbar.
-- =====================================================================
Admin = Admin or {}
Admin.Kern.Registriere('broadcast', 'laden', function(handelnder, daten)
return {
verlauf = MySQL.query.await([[
SELECT typ, nachricht, admin_name, erstellt_am
FROM aether_admin_broadcasts ORDER BY id DESC LIMIT 30
]]) or {},
}
end)
Admin.Kern.Registriere('broadcast', 'senden', function(handelnder, daten)
local typ = tostring(daten.typ or 'info')
local text = tostring(daten.nachricht or ''):sub(1, 512)
if #text < 2 then return nil, 'Bitte eine Nachricht eingeben.' end
MySQL.insert.await([[
INSERT INTO aether_admin_broadcasts (typ, nachricht, admin_name)
VALUES (?, ?, ?)
]], { typ, text, handelnder.name })
TriggerClientEvent('aether-admin:client:broadcast', -1, { typ = typ, text = text })
Admin.Log.Schreibe(handelnder, 'Ankündigung', typ, text:sub(1, 80))
return { ok = true }
end)