public void playerBan(PlayerBanEvent ev)
        {
            ev.Allow = false;
            GameObject player = ev.BannedPlayer.characterClassManager.gameObject;

            if (ev.Duration == 0)
            {
                ServerConsole.Disconnect(player, ev.FullMessage);
            }
            else
            {
                ServerConsole.Disconnect(player, ev.FullMessage);

                Ban BanJSON = new Ban();
                BanJSON.Steamid64   = ev.BannedPlayer.characterClassManager.UserId;
                BanJSON.Ip          = ev.BannedPlayer.queryProcessor._ipAddress;
                BanJSON.BannedAt    = TimeBehaviour.CurrentTimestamp();
                BanJSON.BannedUntil = DateTime.UtcNow.AddMinutes((double)ev.Duration).Ticks;
                BanJSON.By          = ev.Issuer.characterClassManager.UserId;
                if (!String.IsNullOrEmpty(ev.Reason))
                {
                    BanJSON.Reason = ev.Reason;
                }

                String JSON         = Serialize.ToJson(BanJSON);
                String JsonResponse = Methods.Post(Plugin.BanURL, JSON);

                try
                {
                    JSON.Success.SuccessResponseJSON json = SanctionSystem.JSON.Success.SuccessResponseJSON.FromJson(JsonResponse);
                }
                catch (Exception e)
                {
                    JSON.Error.ErrorResponseJSON json = SanctionSystem.JSON.Error.ErrorResponseJSON.FromJson(JsonResponse);

                    if (!String.IsNullOrEmpty(json.Code))
                    {
                        Log.Error("Erreur durant le processus d'API (Code d'erreur répondu par l'API: " + json.Code);
                    }
                    else
                    {
                        Log.Error("Erreur durant le processus d'API (Code d'erreur plugin: " + e);
                    }
                }
            }
        }
        public void RemoteAdminCommandEvent(ref RACommandEvent ev)
        {
            string[]     args   = ev.Command.Split(' ');
            ReferenceHub sender = ev.Sender.SenderId == "SERVER CONSOLE" || ev.Sender.SenderId == "GAME CONSOLE" ? Player.GetPlayer(PlayerManager.localPlayer) : Player.GetPlayer(ev.Sender.SenderId);

            switch (args[0].ToLower())
            {
            case "oban":
                ev.Allow = false;
                if (!sender.CheckPermission("oban.use"))
                {
                    ev.Sender.RaReply("ExiledPermissions#No permission.", true, true, string.Empty);
                    return;
                }
                if (args.Length == 1)
                {
                    ev.Sender.RaReply("OBAN#Commandes:", true, true, string.Empty);
                    ev.Sender.RaReply("#- OBAN - Afficher la liste des commandes.", true, true, string.Empty);
                    ev.Sender.RaReply("#- OBAN STEAMID [SteamID@steam] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty);
                    ev.Sender.RaReply("#- OBAN IP [IP] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty);
                    ev.Sender.RaReply("#- OBAN USER [SteamID@steam] [IP] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty);
                    return;
                }
                else if (args.Length > 1)
                {
                    switch (args[1].ToLower())
                    {
                    case "steamid":
                        if (args.Length > 3)
                        {
                            string Steamid64 = args[2];
                            long   BannedAt  = TimeBehaviour.CurrentTimestamp();
                            double Expire    = (double.TryParse(args[3], out double x)) ? x : -1;
                            string By        = sender.characterClassManager.UserId;
                            string Reason    = (args.Length > 3) ? string.Join(" ", args.Skip(4)) : string.Empty;

                            Ban BanJSON = new Ban();
                            BanJSON.Steamid64   = Steamid64;
                            BanJSON.BannedAt    = BannedAt;
                            BanJSON.BannedUntil = DateTime.UtcNow.AddMinutes((double)Expire).Ticks;
                            BanJSON.By          = By;
                            if (!String.IsNullOrEmpty(Reason))
                            {
                                BanJSON.Reason = Reason;
                            }

                            String JSON         = Serialize.ToJson(BanJSON);
                            String JsonResponse = Methods.Post(Plugin.BanURL, JSON);
                            try
                            {
                                JSON.Success.SuccessResponseJSON json = SanctionSystem.JSON.Success.SuccessResponseJSON.FromJson(JsonResponse);

                                string response = "\n" +
                                                  "SteamID: " + Steamid64 + "\n" +
                                                  "Est banni pour : " + Expire + " minutes \n" +
                                                  "Par: " + By + " / " + sender.nicknameSync.MyNick;
                                ev.Sender.RaReply(args[0].ToUpper() + "#" + response, true, true, "");
                            }
                            catch (Exception e)
                            {
                                JSON.Error.ErrorResponseJSON json = SanctionSystem.JSON.Error.ErrorResponseJSON.FromJson(JsonResponse);

                                if (!String.IsNullOrEmpty(json.Code))
                                {
                                    ev.Sender.RaReply("Erreur durant le processus d'API (Code d'erreur répondu par l'API: " + json.Code, true, true, string.Empty);
                                }
                                else
                                {
                                    ev.Sender.RaReply("Erreur durant le processus d'API (Code d'erreur plugin: " + e, true, true, string.Empty);
                                }
                            }
                        }
                        else
                        {
                            ev.Sender.RaReply("#- OBAN STEAMID [SteamID@steam] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty);
                        }
                        break;

                    case "ip":
                        if (args.Length > 3)
                        {
                            string IP       = args[2];
                            long   BannedAt = TimeBehaviour.CurrentTimestamp();
                            double Expire   = (double.TryParse(args[3], out double x)) ? x : -1;
                            string By       = sender.characterClassManager.UserId;
                            string Reason   = (args.Length > 3) ? string.Join(" ", args.Skip(4)) : string.Empty;

                            Ban BanJSON = new Ban();
                            BanJSON.Ip          = IP;
                            BanJSON.BannedAt    = BannedAt;
                            BanJSON.BannedUntil = DateTime.UtcNow.AddMinutes((double)Expire).Ticks;
                            BanJSON.By          = By;
                            if (!String.IsNullOrEmpty(Reason))
                            {
                                BanJSON.Reason = Reason;
                            }

                            String JSON         = Serialize.ToJson(BanJSON);
                            String JsonResponse = Methods.Post(Plugin.BanURL, JSON);
                            try
                            {
                                JSON.Success.SuccessResponseJSON json = SanctionSystem.JSON.Success.SuccessResponseJSON.FromJson(JsonResponse);

                                string response = "\n" +
                                                  "IP: " + IP + "\n" +
                                                  "Est banni pour : " + Expire + " minutes \n" +
                                                  "Par: " + By + " / " + sender.nicknameSync.MyNick;
                                ev.Sender.RaReply(args[0].ToUpper() + "#" + response, true, true, "");
                            }
                            catch (Exception e)
                            {
                                JSON.Error.ErrorResponseJSON json = SanctionSystem.JSON.Error.ErrorResponseJSON.FromJson(JsonResponse);

                                if (!String.IsNullOrEmpty(json.Code))
                                {
                                    ev.Sender.RaReply("Erreur durant le processus d'API (Code d'erreur répondu par l'API: " + json.Code, true, true, string.Empty);
                                }
                                else
                                {
                                    ev.Sender.RaReply("Erreur durant le processus d'API (Code d'erreur plugin: " + e, true, true, string.Empty);
                                }
                            }
                        }
                        else
                        {
                            ev.Sender.RaReply("#- OBAN IP [IP] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty);
                        }
                        break;

                    case "user":
                        if (args.Length > 4)
                        {
                            string Steamid64 = args[2];
                            string IP        = args[3];
                            long   BannedAt  = TimeBehaviour.CurrentTimestamp();
                            double Expire    = (double.TryParse(args[4], out double x)) ? x : -1;
                            string By        = sender.characterClassManager.UserId;
                            string Reason    = (args.Length > 4) ? string.Join(" ", args.Skip(5)) : string.Empty;

                            Ban BanJSON = new Ban();
                            BanJSON.Steamid64   = Steamid64;
                            BanJSON.Ip          = IP;
                            BanJSON.BannedAt    = BannedAt;
                            BanJSON.BannedUntil = DateTime.UtcNow.AddMinutes((double)Expire).Ticks;
                            BanJSON.By          = By;
                            if (!String.IsNullOrEmpty(Reason))
                            {
                                BanJSON.Reason = Reason;
                            }

                            String JSON         = Serialize.ToJson(BanJSON);
                            String JsonResponse = Methods.Post(Plugin.BanURL, JSON);
                            try
                            {
                                JSON.Success.SuccessResponseJSON json = SanctionSystem.JSON.Success.SuccessResponseJSON.FromJson(JsonResponse);

                                string response = "\n" +
                                                  "SteamID: " + Steamid64 + "\n" +
                                                  "IP: " + IP + "\n" +
                                                  "Est banni pour : " + Expire + " minutes \n" +
                                                  "Par: " + By + " / " + sender.nicknameSync.MyNick;
                                ev.Sender.RaReply(args[0].ToUpper() + "#" + response, true, true, "");
                            }
                            catch (Exception e)
                            {
                                JSON.Error.ErrorResponseJSON json = SanctionSystem.JSON.Error.ErrorResponseJSON.FromJson(JsonResponse);

                                if (!String.IsNullOrEmpty(json.Code))
                                {
                                    ev.Sender.RaReply("Erreur durant le processus d'API (Code d'erreur répondu par l'API: " + json.Code, true, true, string.Empty);
                                }
                                else
                                {
                                    ev.Sender.RaReply("Erreur durant le processus d'API (Code d'erreur plugin: " + e, true, true, string.Empty);
                                }
                            }
                        }
                        else
                        {
                            ev.Sender.RaReply("#- OBAN USER [SteamID@steam] [IP] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty);
                        }
                        break;

                    default:
                        ev.Sender.RaReply("OBAN#Commandes:", true, true, string.Empty);
                        ev.Sender.RaReply("#- OBAN - Afficher la liste des commandes.", true, true, string.Empty);
                        ev.Sender.RaReply("#- OBAN STEAMID [SteamID@steam] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty);
                        ev.Sender.RaReply("#- OBAN IP [IP] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty);
                        ev.Sender.RaReply("#- OBAN USER [SteamID@steam] [IP] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty);
                        return;
                    }
                }
                break;
            }
        }
 public static string ToJson(this ErrorResponseJSON self) => JsonConvert.SerializeObject(self, SanctionSystem.JSON.Error.Converter.Settings);