diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 7e952e2d..397882db 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -200,10 +200,8 @@ namespace TShockAPI add(Permissions.spawnboss, Hardcore, "hardcore"); add(Permissions.spawnmob, SpawnMob, "spawnmob", "sm"); add(Permissions.warp, Warp, "warp"); - add(Permissions.managegroup, AddGroup, "addgroup"); - add(Permissions.managegroup, DeleteGroup, "delgroup"); - add(Permissions.managegroup, ModifyGroup, "modgroup"); - add(Permissions.managegroup, ViewGroups, "group"); + add(Permissions.managegroup, Group, "group"); + add(Permissions.managegroup, GroupDeprecated, "addgroup", "delgroup", "modgroup"); add(Permissions.manageitem, AddItem, "additem", "banitem"); add(Permissions.manageitem, DeleteItem, "delitem", "unbanitem"); add(Permissions.manageitem, ListItems, "listitems", "listbanneditems"); @@ -1929,168 +1927,202 @@ namespace TShockAPI #region Group Management - private static void AddGroup(CommandArgs args) + private static void GroupDeprecated(CommandArgs args) { - if (args.Parameters.Count > 0) - { - String groupname = args.Parameters[0]; - args.Parameters.RemoveAt(0); - String permissions = String.Join(",", args.Parameters); - - String response = TShock.Groups.AddGroup(groupname, permissions); - if (response.Length > 0) - args.Player.SendSuccessMessage(response); - } - else - { - args.Player.SendErrorMessage("Incorrect format: /addgroup [optional permissions]"); - } + args.Player.SendInfoMessage("The group commands were merged into /group in TShock 4.1; check /group help."); } - private static void DeleteGroup(CommandArgs args) + private static void Group(CommandArgs args) { - if (args.Parameters.Count > 0) + if (args.Parameters.Count == 0) { - String groupname = args.Parameters[0]; - - String response = TShock.Groups.DeleteGroup(groupname); - if (response.Length > 0) - args.Player.SendSuccessMessage(response); + args.Player.SendInfoMessage("Invalid syntax. Syntax: /group [arguments]"); + args.Player.SendInfoMessage("Commands: add, addperm, del, delperm, list, listperm"); + args.Player.SendInfoMessage("Arguments: add , addperm , del "); + args.Player.SendInfoMessage("Arguments: delperm , list [page], listperm [page]"); + return; } - else + switch (args.Parameters[0].ToLower()) { - args.Player.SendErrorMessage("Incorrect format: /delgroup "); - } - } - - private static void ModifyGroup(CommandArgs args) - { - if (args.Parameters.Count > 2) - { - String com = args.Parameters[0]; - args.Parameters.RemoveAt(0); - - String groupname = args.Parameters[0]; - args.Parameters.RemoveAt(0); - - string response = ""; - if (com.Equals("add")) - { - if( groupname == "*" ) + case "add": + #region Add group { - int count = 0; - foreach( Group g in TShock.Groups ) + if (args.Parameters.Count < 2) { - response = TShock.Groups.AddPermissions(g.Name, args.Parameters); - if (!response.StartsWith("Error:")) - count++; - } - args.Player.SendSuccessMessage(String.Format("{0} groups were modified.", count )); - return; - } - response = TShock.Groups.AddPermissions(groupname, args.Parameters); - if (response.Length > 0) - args.Player.SendSuccessMessage(response); - return; - } - - if (com.Equals("del") || com.Equals("delete")) - { - if (groupname == "*") - { - int count = 0; - foreach (Group g in TShock.Groups) - { - response = TShock.Groups.DeletePermissions(g.Name, args.Parameters); - if (!response.StartsWith("Error:")) - count++; - } - args.Player.SendSuccessMessage(String.Format("{0} groups were modified.", count)); - return; - } - response = TShock.Groups.DeletePermissions(groupname, args.Parameters); - if (response.Length > 0) - args.Player.SendSuccessMessage(response); - return; - } - } - args.Player.SendErrorMessage("Incorrect format: /modgroup add|del "); - } - - private static void ViewGroups(CommandArgs args) - { - if (args.Parameters.Count > 0) - { - String com = args.Parameters[0]; - - if( com == "list" ) - { - string ret = "Groups: "; - foreach( Group g in TShock.Groups.groups ) - { - if (ret.Length > 50) - { - args.Player.SendSuccessMessage(ret); - ret = ""; - } - - if( ret != "" ) - { - ret += ", "; - } - - ret += g.Name; - } - - if (ret.Length > 0) - { - args.Player.SendSuccessMessage(ret); - } - return; - } - else if( com == "perm") - { - if (args.Parameters.Count > 1) - { - String groupname = args.Parameters[1]; - - if( TShock.Groups.GroupExists( groupname ) ) - { - string ret = String.Format("Permissions for {0}: ", groupname); - foreach (string p in TShock.Utils.GetGroup( groupname ).permissions) - { - if (ret.Length > 50) - { - args.Player.SendSuccessMessage(ret); - ret = ""; - } - - if (ret != "") - { - ret += ", "; - } - - ret += p; - } - if (ret.Length > 0) - { - args.Player.SendSuccessMessage(ret); - } - + args.Player.SendErrorMessage("Invalid syntax. Syntax: /group add [permissions]"); return; } - else + + string groupName = args.Parameters[1]; + args.Parameters.RemoveRange(0, 2); + string permissions = String.Join(",", args.Parameters); + + try { - args.Player.SendErrorMessage("Group does not exist."); - return; + string response = TShock.Groups.AddGroup(groupName, permissions); + if (response.Length > 0) + { + args.Player.SendSuccessMessage(response); + } + } + catch (GroupManagerException ex) + { + args.Player.SendErrorMessage(ex.ToString()); } } - } - } - args.Player.SendErrorMessage("Incorrect format: /group list"); - args.Player.SendErrorMessage(" /group perm "); - } + #endregion + return; + case "addperm": + #region Add permissions + { + if (args.Parameters.Count < 3) + { + args.Player.SendErrorMessage("Invalid syntax. Syntax: /group addperm "); + return; + } + string groupName = args.Parameters[1]; + args.Parameters.RemoveRange(0, 2); + if (groupName == "*") + { + foreach (Group g in TShock.Groups) + { + TShock.Groups.AddPermissions(g.Name, args.Parameters); + } + args.Player.SendSuccessMessage("Modified all groups."); + return; + } + try + { + string response = TShock.Groups.AddPermissions(groupName, args.Parameters); + if (response.Length > 0) + { + args.Player.SendSuccessMessage(response); + } + return; + } + catch (GroupManagerException ex) + { + args.Player.SendErrorMessage(ex.ToString()); + } + } + #endregion + return; + case "del": + #region Delete group + { + if (args.Parameters.Count != 2) + { + args.Player.SendErrorMessage("Invalid syntax. Syntax: /group del "); + return; + } + + try + { + string response = TShock.Groups.DeleteGroup(args.Parameters[1]); + if (response.Length > 0) + { + args.Player.SendSuccessMessage(response); + } + } + catch (GroupManagerException ex) + { + args.Player.SendErrorMessage(ex.ToString()); + } + } + #endregion + return; + case "delperm": + #region Delete permissions + { + if (args.Parameters.Count < 3) + { + args.Player.SendErrorMessage("Invalid syntax. Syntax: /group delperm "); + return; + } + + string groupName = args.Parameters[1]; + args.Parameters.RemoveRange(0, 2); + if (groupName == "*") + { + foreach (Group g in TShock.Groups) + { + TShock.Groups.DeletePermissions(g.Name, args.Parameters); + } + args.Player.SendSuccessMessage("Modified all groups."); + return; + } + try + { + string response = TShock.Groups.DeletePermissions(groupName, args.Parameters); + if (response.Length > 0) + { + args.Player.SendSuccessMessage(response); + } + return; + } + catch (GroupManagerException ex) + { + args.Player.SendErrorMessage(ex.ToString()); + } + } + #endregion + return; + case "help": + args.Player.SendInfoMessage("Invalid syntax. Syntax: /group [arguments]"); + args.Player.SendInfoMessage("Commands: add, addperm, del, delperm, list, listperm"); + args.Player.SendInfoMessage("Arguments: add , addperm , del "); + args.Player.SendInfoMessage("Arguments: delperm , list [page], listperm [page]"); + return; + case "list": + #region List groups + { + int pageNumber; + if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber)) + return; + IEnumerable groupNames = from grp in TShock.Groups.groups + select grp.Name; + PaginationTools.SendPage(args.Player, pageNumber, PaginationTools.BuildLinesFromTerms(groupNames), + new PaginationTools.Settings + { + HeaderFormat = "Groups ({0}/{1}):", + FooterFormat = "Type /group list {0} for more." + }); + } + #endregion + return; + case "listperm": + #region List permissions + { + if (args.Parameters.Count == 1) + { + args.Player.SendErrorMessage("Invalid syntax. Syntax: /group listperm [page]"); + return; + } + int pageNumber; + if (!PaginationTools.TryParsePageNumber(args.Parameters, 2, args.Player, out pageNumber)) + return; + + if (!TShock.Groups.GroupExists(args.Parameters[1])) + { + args.Player.SendErrorMessage("Invalid group."); + return; + } + Group grp = TShock.Utils.GetGroup(args.Parameters[1]); + List permissions = grp.TotalPermissions; + + PaginationTools.SendPage(args.Player, pageNumber, PaginationTools.BuildLinesFromTerms(permissions), + new PaginationTools.Settings + { + HeaderFormat = "Permissions for " + grp.Name + " ({0}/{1}):", + FooterFormat = "Type /group permlist " + grp.Name + " {0} for more.", + NothingToDisplayString = "There are currently no permissions for " + grp.Name + "." + }); + } + #endregion + return; + } + } #endregion Group Management #region Item Management