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));
|
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)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue