-- ===================================================================== -- aether-admin / Modul: Bans & Verwarnungen -- -- Die Durchsetzung der Bans liegt in aether_users (der Core sperrt -- darüber beim Connect). Dieses Modul liest den Verlauf, hebt Bans auf -- und erlaubt manuelle Sperren — auch für Offline-Spieler. -- ===================================================================== Admin = Admin or {} Admin.Kern.Registriere('moderation', 'laden', function(handelnder, daten) local bans = Admin.DB.AktiveBans() local warns = MySQL.query.await([[ SELECT id, name, grund, admin_name, erstellt_am FROM aether_admin_warns ORDER BY id DESC LIMIT 100 ]]) or {} return { bans = bans, warns = warns, rechte = Admin.Kern.RechteAbbild(handelnder.quelle), } end) Admin.Kern.Registriere('moderation', 'unban', function(handelnder, daten) local banId = tonumber(daten.id) if not banId then return nil, 'Ungültige Kennung.' end if not Admin.DB.Entsperre(banId, handelnder.name) then return nil, 'Bann nicht gefunden oder bereits aufgehoben.' end Admin.Log.Schreibe(handelnder, 'Entbannt', nil, 'Ban #' .. banId) return { ok = true } end) Admin.Kern.Registriere('moderation', 'warnWeg', function(handelnder, daten) local warnId = tonumber(daten.id) if not warnId then return nil, 'Ungültige Kennung.' end MySQL.update.await('DELETE FROM aether_admin_warns WHERE id = ?', { warnId }) Admin.Log.Schreibe(handelnder, 'Verwarnung gelöscht', nil, 'Warn #' .. warnId) return { ok = true } end) Admin.Kern.Registriere('moderation', 'banManuell', function(handelnder, daten) local name = tostring(daten.name or ''):sub(1, 64) if #name < 2 then return nil, 'Bitte Name oder Kennung angeben.' end local grund = tostring(daten.grund or 'Regelbruch'):sub(1, 255) local dauer = tostring(daten.dauer or 'permanent') local bis = Admin.BerechneBanEnde(dauer) -- Sieht die Kennung wie eine Lizenz aus, wird direkt gesperrt (greift beim Connect) local lizenz = daten.lizenz and tostring(daten.lizenz) or nil if not lizenz and name:match('^%x%x%x%x%x%x%x%x') and #name >= 32 then lizenz = name end Admin.DB.Sperre(lizenz, name, grund, bis, handelnder.lizenz, handelnder.name) Admin.Log.Schreibe(handelnder, 'Manueller Ban (' .. dauer .. ')', name, grund) return { ok = true } end)