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.
This commit is contained in:
Lucas Nicodemus 2012-05-27 22:11:35 -06:00
parent cfd08ad946
commit f6c5c0ea83

View file

@ -123,12 +123,7 @@ namespace TShockAPI
{ {
AddChatCommand add = (p, c, n) => ChatCommands.Add(new Command(p, c, n)); AddChatCommand add = (p, c, n) => ChatCommands.Add(new Command(p, c, n));
add(Permissions.kick, Kick, "kick"); add(Permissions.kick, Kick, "kick");
add(Permissions.ban, Ban, "ban"); add(Permissions.ban, Ban, "ban", "banip", "listbans", "unban", "unbanip", "clearbans");
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.whitelist, Whitelist, "whitelist"); add(Permissions.whitelist, Whitelist, "whitelist");
add(Permissions.maintenance, Off, "off", "exit"); add(Permissions.maintenance, Off, "off", "exit");
add(Permissions.maintenance, Restart, "restart"); //Added restart command add(Permissions.maintenance, Restart, "restart"); //Added restart command
@ -788,73 +783,19 @@ namespace TShockAPI
private static void Ban(CommandArgs args) private static void Ban(CommandArgs args)
{ {
if (args.Parameters.Count < 1)
if (args.Parameters[0].ToLower() == "help")
{ {
args.Player.SendMessage("Invalid syntax! Proper syntax: /ban <player> [reason]", Color.Red); 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; return;
} }
if (args.Parameters[0].Length == 0) if (args.Parameters[0].ToLower() == "list")
{
args.Player.SendMessage("Missing player name", Color.Red);
return;
}
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 (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 > 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 <ip> [reason]", Color.Red);
return;
}
if (args.Parameters[0].Length == 0)
{
args.Player.SendMessage("Missing IP address", Color.Red);
return;
}
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);
}
private static void ListBans(CommandArgs args)
{ {
#region List bans
if (TShock.Bans.GetBans().Count == 0) if (TShock.Bans.GetBans().Count == 0)
{ {
args.Player.SendMessage("There are currently no players banned."); args.Player.SendMessage("There are currently no players banned.");
@ -884,7 +825,8 @@ namespace TShockAPI
if (length + b.Name.Length >= 60) if (length + b.Name.Length >= 60)
{ {
banString += "|, " + b.Name; banString += "|, " + b.Name;
} else }
else
{ {
banString += ", " + b.Name; banString += ", " + b.Name;
} }
@ -899,27 +841,159 @@ namespace TShockAPI
return; return;
} }
if (banStrings[0].Trim() == "")
{
args.Player.SendMessage("There are currently no bans with valid names found.");
return;
}
args.Player.SendMessage("List of banned players:"); args.Player.SendMessage("List of banned players:");
foreach (string s in banStrings) foreach (string s in banStrings)
{ {
args.Player.SendMessage(s, Color.Yellow); args.Player.SendMessage(s, Color.Yellow);
} }
return;
#endregion List bans
} }
private static void UnBan(CommandArgs args) if (args.Parameters[0].ToLower() == "listip")
{ {
if (args.Parameters.Count < 1) #region List ip bans
if (TShock.Bans.GetBans().Count == 0)
{ {
args.Player.SendMessage("Invalid syntax! Proper syntax: /unban <player>", Color.Red); args.Player.SendMessage("There are currently no players banned.");
return;
}
if (args.Parameters[0].Length == 0)
{
args.Player.SendMessage("Missing player name", Color.Red);
return; return;
} }
string plStr = args.Parameters[0]; 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.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
}
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.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); var ban = TShock.Bans.GetBanByName(plStr, false);
if (ban != null) if (ban != null)
{ {
@ -932,11 +1006,12 @@ namespace TShockAPI
{ {
args.Player.SendMessage(string.Format("No bans for player {0} exist", plStr), Color.Red); args.Player.SendMessage(string.Format("No bans for player {0} exist", plStr), Color.Red);
} }
return;
#endregion Delete ban
} }
private static int ClearBansCode = -1; #region Clear bans
if (args.Parameters[0].ToLower() == "clear")
private static void ClearBans(CommandArgs args)
{ {
if (args.Parameters.Count < 1 && ClearBansCode == -1) if (args.Parameters.Count < 1 && ClearBansCode == -1)
{ {
@ -946,12 +1021,12 @@ namespace TShockAPI
} }
if (args.Parameters.Count < 1) if (args.Parameters.Count < 1)
{ {
args.Player.SendMessage("Invalid syntax! Proper syntax: /clearbans <code>"); args.Player.SendMessage("Invalid syntax! Proper syntax: /ban clear <code>");
return; return;
} }
int num; int num;
if (!int.TryParse(args.Parameters[0], out num)) if (!int.TryParse(args.Parameters[1], out num))
{ {
args.Player.SendMessage("Invalid syntax! Expecting number"); args.Player.SendMessage("Invalid syntax! Expecting number");
return; return;
@ -975,34 +1050,14 @@ namespace TShockAPI
args.Player.SendMessage("Incorrect clear code"); 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 <ip>", Color.Red);
return; return;
#endregion Clear bans
} }
if (args.Parameters[0].Length == 0) args.Player.SendMessage("Invalid syntax or old command provided.", Color.Red);
{ args.Player.SendMessage("Type /ban help for more information.", Color.Red);
args.Player.SendMessage("Missing ip", Color.Red);
return;
} }
var ip = args.Parameters[0]; private static int ClearBansCode = -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);
}
}
public static void Whitelist(CommandArgs args) public static void Whitelist(CommandArgs args)
{ {