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:
parent
cfd08ad946
commit
f6c5c0ea83
1 changed files with 243 additions and 188 deletions
|
|
@ -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
|
||||
|
|
@ -788,73 +783,19 @@ namespace TShockAPI
|
|||
|
||||
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;
|
||||
}
|
||||
if (args.Parameters[0].Length == 0)
|
||||
{
|
||||
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)
|
||||
if (args.Parameters[0].ToLower() == "list")
|
||||
{
|
||||
#region List bans
|
||||
if (TShock.Bans.GetBans().Count == 0)
|
||||
{
|
||||
args.Player.SendMessage("There are currently no players banned.");
|
||||
|
|
@ -884,7 +825,8 @@ namespace TShockAPI
|
|||
if (length + b.Name.Length >= 60)
|
||||
{
|
||||
banString += "|, " + b.Name;
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
banString += ", " + b.Name;
|
||||
}
|
||||
|
|
@ -899,27 +841,159 @@ namespace TShockAPI
|
|||
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:");
|
||||
foreach (string s in banStrings)
|
||||
{
|
||||
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);
|
||||
return;
|
||||
}
|
||||
if (args.Parameters[0].Length == 0)
|
||||
{
|
||||
args.Player.SendMessage("Missing player name", Color.Red);
|
||||
args.Player.SendMessage("There are currently no players banned.");
|
||||
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);
|
||||
if (ban != null)
|
||||
{
|
||||
|
|
@ -932,11 +1006,12 @@ namespace TShockAPI
|
|||
{
|
||||
args.Player.SendMessage(string.Format("No bans for player {0} exist", plStr), Color.Red);
|
||||
}
|
||||
return;
|
||||
#endregion Delete ban
|
||||
}
|
||||
|
||||
private static int ClearBansCode = -1;
|
||||
|
||||
private static void ClearBans(CommandArgs args)
|
||||
#region Clear bans
|
||||
if (args.Parameters[0].ToLower() == "clear")
|
||||
{
|
||||
if (args.Parameters.Count < 1 && ClearBansCode == -1)
|
||||
{
|
||||
|
|
@ -946,12 +1021,12 @@ namespace TShockAPI
|
|||
}
|
||||
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;
|
||||
}
|
||||
|
||||
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");
|
||||
return;
|
||||
|
|
@ -975,34 +1050,14 @@ namespace TShockAPI
|
|||
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;
|
||||
#endregion Clear bans
|
||||
}
|
||||
if (args.Parameters[0].Length == 0)
|
||||
{
|
||||
args.Player.SendMessage("Missing ip", Color.Red);
|
||||
return;
|
||||
args.Player.SendMessage("Invalid syntax or old command provided.", Color.Red);
|
||||
args.Player.SendMessage("Type /ban help for more information.", Color.Red);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
private static int ClearBansCode = -1;
|
||||
|
||||
public static void Whitelist(CommandArgs args)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue