private static bool Prefix(GameObject user, int duration, string reason, string issuer, bool isGlobalBan) { try { if (isGlobalBan && ConfigFile.ServerConfig.GetBool("gban_ban_ip", false)) { duration = int.MaxValue; } string userId = null; string address = user.GetComponent <NetworkIdentity>().connectionToClient.address; API.Features.Player targetPlayer = API.Features.Player.Get(user); API.Features.Player issuerPlayer = API.Features.Player.Get(issuer) ?? API.Features.Server.Host; try { if (ConfigFile.ServerConfig.GetBool("online_mode", false)) { userId = targetPlayer.UserId; } } catch { ServerConsole.AddLog("Failed during issue of User ID ban (1)!"); return(false); } string message = $"You have been {((duration > 0) ? "banned" : "kicked")}. "; if (!string.IsNullOrEmpty(reason)) { message = message + "Reason: " + reason; } if (!ServerStatic.PermissionsHandler.IsVerified || !targetPlayer.IsStaffBypassEnabled) { if (duration > 0) { var ev = new BanningEventArgs(targetPlayer, issuerPlayer, duration, reason, message); Player.OnBanning(ev); duration = ev.Duration; reason = ev.Reason; message = ev.FullMessage; if (!ev.IsAllowed) { return(false); } string originalName = string.IsNullOrEmpty(targetPlayer.Nickname) ? "(no nick)" : targetPlayer.Nickname; long issuanceTime = TimeBehaviour.CurrentTimestamp(); long banExpieryTime = TimeBehaviour.GetBanExpieryTime((uint)duration); try { if (userId != null && !isGlobalBan) { BanHandler.IssueBan( new BanDetails { OriginalName = originalName, Id = userId, IssuanceTime = issuanceTime, Expires = banExpieryTime, Reason = reason, Issuer = issuer, }, BanHandler.BanType.UserId); if (!string.IsNullOrEmpty(targetPlayer.CustomUserId)) { BanHandler.IssueBan( new BanDetails { OriginalName = originalName, Id = targetPlayer.CustomUserId, IssuanceTime = issuanceTime, Expires = banExpieryTime, Reason = reason, Issuer = issuer, }, BanHandler.BanType.UserId); } } } catch { ServerConsole.AddLog("Failed during issue of User ID ban (2)!"); return(false); } try { if (ConfigFile.ServerConfig.GetBool("ip_banning", false) || isGlobalBan) { BanHandler.IssueBan( new BanDetails { OriginalName = originalName, Id = address, IssuanceTime = issuanceTime, Expires = banExpieryTime, Reason = reason, Issuer = issuer, }, BanHandler.BanType.IP); } } catch { ServerConsole.AddLog("Failed during issue of IP ban!"); return(false); } } else if (duration == 0) { var ev = new KickingEventArgs(targetPlayer, issuerPlayer, reason, message); Player.OnKicking(ev); reason = ev.Reason; message = ev.FullMessage; if (!ev.IsAllowed) { return(false); } } } ServerConsole.Disconnect(targetPlayer.ReferenceHub.gameObject, message); return(false); } catch (Exception e) { Exiled.API.Features.Log.Error($"Exiled.Events.Patches.Events.Player.BanningAndKicking: {e}\n{e.StackTrace}"); return(true); } }
public static bool Prefix(GameObject user, int duration, string reason, string issuer, bool isGlobalBan) { if (isGlobalBan && ConfigFile.ServerConfig.GetBool("gban_ban_ip", false)) { duration = int.MaxValue; } string userId = null; string address = user.GetComponent <NetworkIdentity>().connectionToClient.address; CharacterClassManager characterClassManager = null; ReferenceHub userHub = Extensions.Player.GetPlayer(user); try { if (ConfigFile.ServerConfig.GetBool("online_mode", false)) { characterClassManager = userHub.characterClassManager; userId = characterClassManager.UserId; } } catch { ServerConsole.AddLog("Failed during issue of User ID ban (1)!"); return(false); } string message = $"You have been {((duration > 0) ? "banned" : "kicked")}. "; if (!string.IsNullOrEmpty(reason)) { message = message + "Reason: " + reason; } try { bool allow = true; Events.InvokePlayerBan(ref userHub, ref userId, ref duration, ref allow, ref message, ref reason); if (!allow) { return(false); } } catch (Exception ex) { Log.Error($"Error in OnBanPlayer event: {ex.ToString()}"); } if (duration > 0 && (!ServerStatic.PermissionsHandler.IsVerified || !userHub.serverRoles.BypassStaff)) { string originalName = string.IsNullOrEmpty(userHub.nicknameSync.MyNick) ? "(no nick)" : userHub.nicknameSync.MyNick; long issuanceTime = TimeBehaviour.CurrentTimestamp(); long banExpieryTime = TimeBehaviour.GetBanExpieryTime((uint)duration); try { if (userId != null && !isGlobalBan) { BanHandler.IssueBan(new BanDetails { OriginalName = originalName, Id = userId, IssuanceTime = issuanceTime, Expires = banExpieryTime, Reason = reason, Issuer = issuer }, BanHandler.BanType.UserId); if (!string.IsNullOrEmpty(characterClassManager.UserId2)) { BanHandler.IssueBan(new BanDetails { OriginalName = originalName, Id = characterClassManager.UserId2, IssuanceTime = issuanceTime, Expires = banExpieryTime, Reason = reason, Issuer = issuer }, BanHandler.BanType.UserId); } } } catch { ServerConsole.AddLog("Failed during issue of User ID ban (2)!"); return(false); } try { if (ConfigFile.ServerConfig.GetBool("ip_banning", false) || isGlobalBan) { BanHandler.IssueBan(new BanDetails { OriginalName = originalName, Id = address, IssuanceTime = issuanceTime, Expires = banExpieryTime, Reason = reason, Issuer = issuer }, BanHandler.BanType.IP); } } catch { ServerConsole.AddLog("Failed during issue of IP ban!"); return(false); } } List <GameObject> playersToBan = new List <GameObject>(); foreach (GameObject gameObject in PlayerManager.players) { characterClassManager = gameObject.GetComponent <CharacterClassManager>(); if ((userId != null && characterClassManager.UserId == userId) || (address != null && characterClassManager.connectionToClient.address == address)) { playersToBan.Add(characterClassManager.gameObject); } } foreach (GameObject player in playersToBan) { ServerConsole.Disconnect(player, message); } return(false); }