2025-05-28 01:21:24 +02:00

70 lines
2.5 KiB
C#

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($"<color=#002DB3FF>{ev.Player.Nickname} reported {ev.Target.Nickname} for {ev.Reason}</color>", 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}");
}
}