using LabApi.Events.Arguments.PlayerEvents; using LabApi.Events.Handlers; using LabApi.Features; using LabApi.Features.Console; using LabApi.Features.Permissions; using LabApi.Features.Wrappers; namespace ReportNotifier; public class Plugin: LabApi.Loader.Features.Plugins.Plugin { public override string Name => "ModTools"; public override string Author => "Code002Lover"; public override Version Version { get; } = new(1, 0, 0); public override string Description => "Various tools for moderation, including report notification and extra logs."; public override Version RequiredApiVersion { get; } = new(LabApiProperties.CompiledVersion); public string LogFile { get; set; } = "ModTools.log"; private static FileStream _logFileHandler; public override void Enable() { PlayerEvents.ReportedPlayer += OnReport; PlayerEvents.Banned += OnBan; PlayerEvents.Kicked += OnKick; _logFileHandler = File.Open(LogFile, FileMode.Append); } public override void Disable() { PlayerEvents.ReportedPlayer -= OnReport; PlayerEvents.Banned -= OnBan; PlayerEvents.Kicked -= OnKick; _logFileHandler = null; } private static void OnReport(PlayerReportedPlayerEventArgs ev) { Log($"Received Report from {ev.Player.Nickname} for {ev.Target.Nickname} with the reason: {ev.Reason}"); foreach (var player in Player.List) { Logger.Debug($"Player {player.Nickname} has permissions: {player.GetPermissions()}"); if (player.HasPermissions("AdminChat")) { player.SendBroadcast($"{ev.Player.Nickname} reported {ev.Target.Nickname} for {ev.Reason}", 3, Broadcast.BroadcastFlags.AdminChat, true); } } } private static void Log(string message) { Logger.Debug(message); var now = DateTime.Now; var bytes = System.Text.Encoding.UTF8.GetBytes($"[{now:dd.MM.yyyy : HH:mm:ss}] - {message}"); _logFileHandler.Write(bytes, 0, bytes.Length); } private static void OnBan(PlayerBannedEventArgs ev) { Log($"Player {ev.Player?.Nickname} ({ev.PlayerId}) got banned by {ev.Issuer.Nickname} ({ev.Issuer.PlayerId}) with reason: {ev.Reason}"); } private static void OnKick(PlayerKickedEventArgs ev) { Log($"Player {ev.Player.Nickname} ({ev.Player.PlayerId}) got kicked by {ev.Issuer.Nickname} ({ev.Issuer.PlayerId}) with reason: {ev.Reason}"); } }