diff --git a/TShockAPI/DB/GroupManager.cs b/TShockAPI/DB/GroupManager.cs index b8d0c4a2..c817705d 100755 --- a/TShockAPI/DB/GroupManager.cs +++ b/TShockAPI/DB/GroupManager.cs @@ -110,6 +110,45 @@ namespace TShockAPI.DB return 1 == ret.Count() ? ret.ElementAt(0) : null; } + /// + /// Adds group with name and permissions if it does not exist. + /// + /// name of group + /// parent of group + /// permissions + /// chatcolor + public void AddGroup(String name, string parentname, String permissions, String chatcolor) + { + if (GroupExists(name)) + { + throw new GroupExistsException(name); + } + + var group = new Group(name, null, chatcolor); + group.Permissions = permissions; + if (!string.IsNullOrWhiteSpace(parentname)) + { + var parent = groups.FirstOrDefault(gp => gp.Name == parentname); + if (parent == null || name == parentname) + { + var error = "Invalid parent {0} for group {1}".SFormat(parentname, group.Name); + TShock.Log.ConsoleError(error); + throw new GroupManagerException(error); + } + group.Parent = parent; + } + + string query = (TShock.Config.StorageType.ToLower() == "sqlite") + ? "INSERT OR IGNORE INTO GroupList (GroupName, Parent, Commands, ChatColor) VALUES (@0, @1, @2, @3);" + : "INSERT IGNORE INTO GroupList SET GroupName=@0, Parent=@1, Commands=@2, ChatColor=@3"; + if (database.Query(query, name, parentname, permissions, chatcolor) == 1) + { + groups.Add(group); + } + else + throw new GroupManagerException("Failed to add group '" + name + ".'"); + } + /// /// Adds group with name and permissions if it does not exist. /// @@ -118,13 +157,14 @@ namespace TShockAPI.DB /// permissions /// chatcolor /// exceptions true indicates use exceptions for errors false otherwise + [Obsolete("Use AddGroup(name, parentname, permissions, chatcolor) instead.")] public String AddGroup(String name, string parentname, String permissions, String chatcolor = Group.defaultChatColor, bool exceptions = false) { if (GroupExists(name)) { if (exceptions) throw new GroupExistsException(name); - return "Error: Group already exists. Use /modgroup to change permissions."; + return "Error: Group already exists; unable to add group."; } var group = new Group(name, null, chatcolor);