From f6c5c0ea83631179692789178ae4bd2ac23502dc Mon Sep 17 00:00:00 2001 From: Lucas Nicodemus Date: Sun, 27 May 2012 22:11:35 -0600 Subject: [PATCH] All ban commands are now under the ban command For the first release of 4.x, all previous commands will point to the new command. Added list and listip to the ban command to easily detect when a player is or isn't banned. Unbanning is no longer case sensitive. --- TShockAPI/Commands.cs | 431 ++++++++++++++++++++++++------------------ 1 file changed, 243 insertions(+), 188 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 21a41669..b896aa15 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -123,12 +123,7 @@ namespace TShockAPI { AddChatCommand add = (p, c, n) => ChatCommands.Add(new Command(p, c, n)); add(Permissions.kick, Kick, "kick"); - add(Permissions.ban, Ban, "ban"); - add(Permissions.ban, BanIP, "banip"); - add(Permissions.ban, UnBan, "unban"); - add(Permissions.ban, UnBanIP, "unbanip"); - add(Permissions.ban, ListBans, "listbans"); - add(Permissions.maintenance, ClearBans, "clearbans"); + add(Permissions.ban, Ban, "ban", "banip", "listbans", "unban", "unbanip", "clearbans"); add(Permissions.whitelist, Whitelist, "whitelist"); add(Permissions.maintenance, Off, "off", "exit"); add(Permissions.maintenance, Restart, "restart"); //Added restart command @@ -786,224 +781,284 @@ namespace TShockAPI } } - private static void Ban(CommandArgs args) - { - if (args.Parameters.Count < 1) - { - args.Player.SendMessage("Invalid syntax! Proper syntax: /ban [reason]", Color.Red); - return; - } - if (args.Parameters[0].Length == 0) - { - args.Player.SendMessage("Missing player name", Color.Red); - return; - } + private static void Ban(CommandArgs args) + { - string plStr = args.Parameters[0]; - var players = TShock.Utils.FindPlayer(plStr); - if (players.Count == 0) - { - args.Player.SendMessage("Invalid player!", Color.Red); - } - else if (players.Count > 1) - { - var plrMatches = ""; - foreach (TSPlayer plr in players) + if (args.Parameters[0].ToLower() == "help") + { + args.Player.SendMessage("All ban commands were merged into one in TShock 4.0.", Color.Yellow); + args.Player.SendMessage("Syntax: /ban [option] [arguments]", Color.Green); + args.Player.SendMessage("Options: list, listip, clear, add, addip, del, delip", Color.Green); + args.Player.SendMessage("Arguments: list, listip, clear [code], add [name], addip [ip], del [name], delip [name]", Color.Green); + args.Player.SendMessage("In addition, a reason may be provided for all new bans after the arguments.", Color.Green); + return; + } + if (args.Parameters[0].ToLower() == "list") + { + #region List bans + if (TShock.Bans.GetBans().Count == 0) { - if (plrMatches.Length != 0) + args.Player.SendMessage("There are currently no players banned."); + return; + } + + string banString = ""; + foreach (Ban b in TShock.Bans.GetBans()) + { + + if (b.Name.Trim() == "") { - plrMatches += ", " + plr.Name; + continue; + } + + if (banString.Length == 0) + { + banString = b.Name; } else { - plrMatches += plr.Name; + int length = banString.Length; + while (length > 60) + { + length = length - 60; + } + if (length + b.Name.Length >= 60) + { + banString += "|, " + b.Name; + } + else + { + banString += ", " + b.Name; + } } } - args.Player.SendMessage("More than one player matched! Matches: " + plrMatches, Color.Red); - } - else - { - string reason = args.Parameters.Count > 1 - ? String.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1)) - : "Misbehaviour."; - if (!TShock.Utils.Ban(players[0], reason, !args.Player.RealPlayer, args.Player.Name)) - { - args.Player.SendMessage("You can't ban another admin!", Color.Red); - } - } - } - private static void BanIP(CommandArgs args) - { - if (args.Parameters.Count < 1) - { - args.Player.SendMessage("Syntax: /banip [reason]", Color.Red); - return; - } - if (args.Parameters[0].Length == 0) - { - args.Player.SendMessage("Missing IP address", Color.Red); - return; - } + String[] banStrings = banString.Split('|'); - string ip = args.Parameters[0]; - string reason = args.Parameters.Count > 1 - ? String.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1)) - : "Manually added IP address ban."; - TShock.Bans.AddBan(ip, "", reason); - } + if (banStrings.Length == 0) + { + args.Player.SendMessage("There are currently no players with valid names banned."); + return; + } - private static void ListBans(CommandArgs args) - { - if (TShock.Bans.GetBans().Count == 0) - { - args.Player.SendMessage("There are currently no players banned."); + if (banStrings[0].Trim() == "") + { + args.Player.SendMessage("There are currently no bans with valid names found."); + return; + } + + args.Player.SendMessage("List of banned players:"); + foreach (string s in banStrings) + { + args.Player.SendMessage(s, Color.Yellow); + } return; + #endregion List bans } - string banString = ""; - foreach (Ban b in TShock.Bans.GetBans()) + if (args.Parameters[0].ToLower() == "listip") { - - if (b.Name.Trim() == "") + #region List ip bans + if (TShock.Bans.GetBans().Count == 0) { - continue; + args.Player.SendMessage("There are currently no players banned."); + return; } - if (banString.Length == 0) + string banString = ""; + foreach (Ban b in TShock.Bans.GetBans()) { - banString = b.Name; - } - else - { - int length = banString.Length; - while (length > 60) + + if (b.IP.Trim() == "") { - length = length - 60; + continue; } - if (length + b.Name.Length >= 60) + + if (banString.Length == 0) { - banString += "|, " + b.Name; - } else + banString = b.IP; + } + else { - banString += ", " + b.Name; + int length = banString.Length; + while (length > 60) + { + length = length - 60; + } + if (length + b.Name.Length >= 60) + { + banString += "|, " + b.IP; + } + else + { + banString += ", " + b.IP; + } } } - } - String[] banStrings = banString.Split('|'); + String[] banStrings = banString.Split('|'); - if (banStrings.Length == 0) - { - args.Player.SendMessage("There are currently no players with valid names banned."); + if (banStrings.Length == 0) + { + args.Player.SendMessage("There are currently no players with valid IPs banned."); + return; + } + + if (banStrings[0].Trim() == "") + { + args.Player.SendMessage("There are currently no bans with valid IPs found."); + return; + } + + args.Player.SendMessage("List of IP banned players:"); + foreach (string s in banStrings) + { + args.Player.SendMessage(s, Color.Yellow); + } return; + #endregion List ip bans } - args.Player.SendMessage("List of banned players:"); - foreach (string s in banStrings) + if (args.Parameters.Count >= 2) { - args.Player.SendMessage(s, Color.Yellow); + if (args.Parameters[0].ToLower() == "add") + { + #region Add ban + string plStr = args.Parameters[1]; + var players = TShock.Utils.FindPlayer(plStr); + if (players.Count == 0) + { + args.Player.SendMessage("Invalid player!", Color.Red); + } + else if (players.Count > 1) + { + var plrMatches = ""; + foreach (TSPlayer plr in players) + { + if (plrMatches.Length != 0) + { + plrMatches += ", " + plr.Name; + } + else + { + plrMatches += plr.Name; + } + } + args.Player.SendMessage("More than one player matched! Matches: " + plrMatches, Color.Red); + } + else + { + string reason = args.Parameters.Count > 2 + ? String.Join(" ", args.Parameters.GetRange(2, args.Parameters.Count - 2)) + : "Misbehavior."; + if (!TShock.Utils.Ban(players[0], reason, !args.Player.RealPlayer, args.Player.Name)) + { + args.Player.SendMessage("You can't ban another admin!", Color.Red); + } + } + return; + #endregion Add ban + } + else if (args.Parameters[0].ToLower() == "addip") + { + #region Add ip ban + string ip = args.Parameters[1]; + string reason = args.Parameters.Count > 2 + ? String.Join(" ", args.Parameters.GetRange(2, args.Parameters.Count - 2)) + : "Manually added IP address ban."; + TShock.Bans.AddBan(ip, "", reason); + args.Player.SendMessage(ip + " banned.", Color.Green); + return; + #endregion Add ip ban + } + else if (args.Parameters[0].ToLower() == "delip") + { + #region Delete ip ban + var ip = args.Parameters[1]; + var ban = TShock.Bans.GetBanByIp(ip); + if (ban != null) + { + if (TShock.Bans.RemoveBan(ban.IP)) + args.Player.SendMessage(string.Format("Unbanned {0} ({1})!", ban.Name, ban.IP), Color.Red); + else + args.Player.SendMessage(string.Format("Failed to unban {0} ({1})!", ban.Name, ban.IP), Color.Red); + } + else + { + args.Player.SendMessage(string.Format("No bans for ip {0} exist", ip), Color.Red); + } + return; + #endregion Delete ip ban + } + else if (args.Parameters[0].ToLower() == "del") + { + #region Delete ban + string plStr = args.Parameters[1]; + var ban = TShock.Bans.GetBanByName(plStr, false); + if (ban != null) + { + if (TShock.Bans.RemoveBan(ban.Name, true)) + args.Player.SendMessage(string.Format("Unbanned {0} ({1})!", ban.Name, ban.IP), Color.Red); + else + args.Player.SendMessage(string.Format("Failed to unban {0} ({1})!", ban.Name, ban.IP), Color.Red); + } + else + { + args.Player.SendMessage(string.Format("No bans for player {0} exist", plStr), Color.Red); + } + return; + #endregion Delete ban + } + + #region Clear bans + if (args.Parameters[0].ToLower() == "clear") + { + if (args.Parameters.Count < 1 && ClearBansCode == -1) + { + ClearBansCode = new Random().Next(0, short.MaxValue); + args.Player.SendMessage("ClearBans Code: " + ClearBansCode, Color.Red); + return; + } + if (args.Parameters.Count < 1) + { + args.Player.SendMessage("Invalid syntax! Proper syntax: /ban clear "); + return; + } + + int num; + if (!int.TryParse(args.Parameters[1], out num)) + { + args.Player.SendMessage("Invalid syntax! Expecting number"); + return; + } + + if (num == ClearBansCode) + { + ClearBansCode = -1; + if (TShock.Bans.ClearBans()) + { + Log.ConsoleInfo("Bans cleared"); + args.Player.SendMessage("Bans cleared"); + } + else + { + args.Player.SendMessage("Failed to clear bans"); + } + } + else + { + args.Player.SendMessage("Incorrect clear code"); + } + } + return; + #endregion Clear bans } + args.Player.SendMessage("Invalid syntax or old command provided.", Color.Red); + args.Player.SendMessage("Type /ban help for more information.", Color.Red); } - private static void UnBan(CommandArgs args) - { - if (args.Parameters.Count < 1) - { - args.Player.SendMessage("Invalid syntax! Proper syntax: /unban ", Color.Red); - return; - } - if (args.Parameters[0].Length == 0) - { - args.Player.SendMessage("Missing player name", Color.Red); - return; - } - - string plStr = args.Parameters[0]; - var ban = TShock.Bans.GetBanByName(plStr, false); - if (ban != null) - { - if (TShock.Bans.RemoveBan(ban.Name, true)) - args.Player.SendMessage(string.Format("Unbanned {0} ({1})!", ban.Name, ban.IP), Color.Red); - else - args.Player.SendMessage(string.Format("Failed to unban {0} ({1})!", ban.Name, ban.IP), Color.Red); - } - else - { - args.Player.SendMessage(string.Format("No bans for player {0} exist", plStr), Color.Red); - } - } - private static int ClearBansCode = -1; - private static void ClearBans(CommandArgs args) - { - if (args.Parameters.Count < 1 && ClearBansCode == -1) - { - ClearBansCode = new Random().Next(0, short.MaxValue); - args.Player.SendMessage("ClearBans Code: " + ClearBansCode, Color.Red); - return; - } - if (args.Parameters.Count < 1) - { - args.Player.SendMessage("Invalid syntax! Proper syntax: /clearbans "); - return; - } - - int num; - if (!int.TryParse(args.Parameters[0], out num)) - { - args.Player.SendMessage("Invalid syntax! Expecting number"); - return; - } - - if (num == ClearBansCode) - { - ClearBansCode = -1; - if (TShock.Bans.ClearBans()) - { - Log.ConsoleInfo("Bans cleared"); - args.Player.SendMessage("Bans cleared"); - } - else - { - args.Player.SendMessage("Failed to clear bans"); - } - } - else - { - args.Player.SendMessage("Incorrect clear code"); - } - } - - private static void UnBanIP(CommandArgs args) - { - if (args.Parameters.Count < 1) - { - args.Player.SendMessage("Invalid syntax! Proper syntax: /unbanip ", Color.Red); - return; - } - if (args.Parameters[0].Length == 0) - { - args.Player.SendMessage("Missing ip", Color.Red); - return; - } - - var ip = args.Parameters[0]; - var ban = TShock.Bans.GetBanByIp(ip); - if (ban != null) - { - if (TShock.Bans.RemoveBan(ban.IP)) - args.Player.SendMessage(string.Format("Unbanned {0} ({1})!", ban.Name, ban.IP), Color.Red); - else - args.Player.SendMessage(string.Format("Failed to unban {0} ({1})!", ban.Name, ban.IP), Color.Red); - } - else - { - args.Player.SendMessage(string.Format("No bans for ip {0} exist", ip), Color.Red); - } - } - public static void Whitelist(CommandArgs args) { if (args.Parameters.Count == 1)