diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index f30ba1ff..16e848c6 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -598,47 +598,36 @@ namespace TShockAPI { char c = str[i]; - if (instr) + if (c == '\\' && ++i < str.Length) { - if (c == '\\') - { - if (i + 1 >= str.Length) - break; - c = GetEscape(str[++i]); - } - else if (c == '"') + if (str[i] != '"' && str[i] != ' ' && str[i] != '\\') + sb.Append('\\'); + sb.Append(str[i]); + } + else if (c == '"') + { + instr = !instr; + if (!instr) + { + ret.Add(sb.ToString()); + sb.Clear(); + } + else if (sb.Length > 0) + { + ret.Add(sb.ToString()); + sb.Clear(); + } + } + else if (IsWhiteSpace(c) && !instr) + { + if (sb.Length > 0) { ret.Add(sb.ToString()); sb.Clear(); - instr = false; - continue; } - sb.Append(c); } else - { - if (IsWhiteSpace(c)) - { - if (sb.Length > 0) - { - ret.Add(sb.ToString()); - sb.Clear(); - } - } - else if (c == '"') - { - if (sb.Length > 0) - { - ret.Add(sb.ToString()); - sb.Clear(); - } - instr = true; - } - else - { - sb.Append(c); - } - } + sb.Append(c); } if (sb.Length > 0) ret.Add(sb.ToString()); @@ -1083,267 +1072,226 @@ namespace TShockAPI private static void Ban(CommandArgs args) { - if (args.Parameters.Count == 0 || args.Parameters[0].ToLower() == "help") + string subcmd = args.Parameters.Count == 0 ? "help" : args.Parameters[0].ToLower(); + switch (subcmd) { - args.Player.SendInfoMessage("Syntax: /ban [option] [arguments]"); - args.Player.SendInfoMessage("Options: list, listip, clear, add, addip, del, delip"); - args.Player.SendInfoMessage("Arguments: list, listip, clear [code], add [name], addip [ip], del [name], delip [name]"); - args.Player.SendInfoMessage("In addition, a reason may be provided for all new bans after the arguments."); - return; - } - if (args.Parameters[0].ToLower() == "list") - { - #region List bans - if (TShock.Bans.GetBans().Count == 0) - { - args.Player.SendErrorMessage("There are currently no players banned."); - return; - } - - string banString = ""; - foreach (Ban b in TShock.Bans.GetBans()) - { - - if (b.Name.Trim() == "") - { - continue; - } - - if (banString.Length == 0) - { - banString = b.Name; - } - else - { - int length = banString.Length; - while (length > 60) - { - length = length - 60; - } - if (length + b.Name.Length >= 60) - { - banString += "|, " + b.Name; - } - else - { - banString += ", " + b.Name; - } - } - } - - String[] banStrings = banString.Split('|'); - - if (banStrings.Length == 0) - { - args.Player.SendErrorMessage("There are currently no players with valid names banned."); - return; - } - - if (banStrings[0].Trim() == "") - { - args.Player.SendErrorMessage("There are currently no bans with valid names found."); - return; - } - - args.Player.SendInfoMessage("List of banned players:"); - foreach (string s in banStrings) - { - args.Player.SendInfoMessage(s); - } - return; - #endregion List bans - } - - if (args.Parameters[0].ToLower() == "listip") - { - #region List ip bans - if (TShock.Bans.GetBans().Count == 0) - { - args.Player.SendWarningMessage("There are currently no players banned."); - return; - } - - string banString = ""; - foreach (Ban b in TShock.Bans.GetBans()) - { - - if (b.IP.Trim() == "") - { - continue; - } - - if (banString.Length == 0) - { - banString = b.IP; - } - else - { - 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('|'); - - if (banStrings.Length == 0) - { - args.Player.SendErrorMessage("There are currently no players with valid IPs banned."); - return; - } - - if (banStrings[0].Trim() == "") - { - args.Player.SendErrorMessage("There are currently no bans with valid IPs found."); - return; - } - - args.Player.SendInfoMessage("List of IP banned players:"); - foreach (string s in banStrings) - { - args.Player.SendInfoMessage(s); - } - return; - #endregion List ip bans - } - - if (args.Parameters.Count >= 2) - { - if (args.Parameters[0].ToLower() == "add") - { + case "add": #region Add ban - string plStr = args.Parameters[1]; - var players = TShock.Utils.FindPlayer(plStr); - if (players.Count == 0) { - args.Player.SendErrorMessage("Invalid player!"); + if (args.Parameters.Count < 2) + { + args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /ban add [reason]"); + return; + } + + List players = TShock.Utils.FindPlayer(args.Parameters[1]); + if (players.Count == 0) + args.Player.SendErrorMessage("Invalid player!"); + else if (players.Count > 1) + TShock.Utils.SendMultipleMatchError(args.Player, players.Select(p => p.Name)); + 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.UserAccountName)) + args.Player.SendErrorMessage("You can't ban {0}!", players[0].Name); + } } - else if (players.Count > 1) - { - TShock.Utils.SendMultipleMatchError(args.Player, players.Select(p => p.Name)); - } - else + #endregion + return; + case "addip": + #region Add IP ban { + if (args.Parameters.Count < 2) + { + args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /ban addip [reason]"); + return; + } + + string ip = args.Parameters[1]; 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.UserAccountName)) + : "Manually added IP address ban."; + TShock.Bans.AddBan(ip, "", "", reason, false, args.Player.UserAccountName); + args.Player.SendSuccessMessage("Banned IP {0}.", ip); + } + #endregion + return; + case "addtemp": + #region Add temp ban + { + if (args.Parameters.Count < 3) { - args.Player.SendErrorMessage("You can't ban another admin!"); + args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /ban addtemp