From ebc36a5adaa228345959682da51d419d3f70e26a Mon Sep 17 00:00:00 2001 From: MarioE Date: Sun, 10 Nov 2013 23:03:12 -0500 Subject: [PATCH] Add temp banning, remove /ban clear, fix temp ban check --- TShockAPI/Commands.cs | 451 ++++++++++++++++--------------------- TShockAPI/DB/BanManager.cs | 21 +- TShockAPI/TShock.cs | 22 +- TShockAPI/Utils.cs | 46 +++- 4 files changed, 258 insertions(+), 282 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index e8007ff4..2f3d6db6 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)) + { + 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()); @@ -1091,260 +1080,200 @@ namespace TShockAPI args.Player.SendInfoMessage("In addition, a reason may be provided for all new bans after the arguments."); return; } - if (args.Parameters[0].ToLower() == "list") + + string subcmd = args.Parameters[0].ToLower(); + switch (subcmd) { - #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() == "") + case "add": { - continue; - } - - if (banString.Length == 0) - { - banString = b.Name; - } - else - { - int length = banString.Length; - while (length > 60) + #region Add ban + if (args.Parameters.Count < 2) { - length = length - 60; - } - if (length + b.Name.Length >= 60) - { - banString += "|, " + b.Name; + 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 { - banString += ", " + b.Name; + 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); } + #endregion } - } - - 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() == "") + case "addip": { - continue; - } - - if (banString.Length == 0) - { - banString = b.IP; - } - else - { - int length = banString.Length; - while (length > 60) + #region Add IP ban + if (args.Parameters.Count < 2) { - length = length - 60; + args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /ban addip [reason]"); + return; } - 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") - { - #region Add ban - string plStr = args.Parameters[1]; - var players = TShock.Utils.FindPlayer(plStr); - 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 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