diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 7837af80..ec378ae0 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -910,28 +910,36 @@ namespace TShockAPI { var user = new User(); - try + if (args.Parameters.Count == 4) { - if (args.Parameters.Count == 4) + user.Name = args.Parameters[1]; + user.Password = args.Parameters[2]; + user.Group = args.Parameters[3]; + + try { - user.Name = args.Parameters[1]; - user.Password = args.Parameters[2]; - user.Group = args.Parameters[3]; - - args.Player.SendSuccessMessage("Account " + user.Name + " has been added to group " + user.Group + "!"); TShock.Users.AddUser(user); TShock.CharacterDB.SeedInitialData(TShock.Users.GetUser(user)); + args.Player.SendSuccessMessage("Account " + user.Name + " has been added to group " + user.Group + "!"); Log.ConsoleInfo(args.Player.Name + " added Account " + user.Name + " to group " + user.Group); } - else + catch (GroupNotExistsException e) { - args.Player.SendErrorMessage("Invalid syntax. Try /user help."); + args.Player.SendErrorMessage("Group " + user.Group + " does not exist!"); + } + catch (UserExistsException e) + { + args.Player.SendErrorMessage("User " + user.Name + " already exists!"); + } + catch (UserManagerException e) + { + args.Player.SendErrorMessage("User " + user.Name + " could not be added, check console for details."); + Log.ConsoleError(e.ToString()); } } - catch (UserManagerException ex) + else { - args.Player.SendErrorMessage(ex.Message); - Log.ConsoleError(ex.ToString()); + args.Player.SendErrorMessage("Invalid syntax. Try /user help."); } } // User deletion requires a username @@ -946,60 +954,77 @@ namespace TShockAPI args.Player.SendSuccessMessage("Account removed successfully."); Log.ConsoleInfo(args.Player.Name + " successfully deleted account: " + args.Parameters[1] + "."); } + catch (UserNotExistException e) + { + args.Player.SendErrorMessage("The user " + user.Name + " does not exist! Deleted nobody!"); + } catch (UserManagerException ex) { args.Player.SendMessage(ex.Message, Color.Red); Log.ConsoleError(ex.ToString()); } } - // Password changing requires a username, and a new password to set + + // Password changing requires a username, and a new password to set else if (subcmd == "password") { var user = new User(); user.Name = args.Parameters[1]; - try + if (args.Parameters.Count == 3) { - if (args.Parameters.Count == 3) + try { - args.Player.SendSuccessMessage("Password change succeeded for " + user.Name + "."); TShock.Users.SetUserPassword(user, args.Parameters[2]); Log.ConsoleInfo(args.Player.Name + " changed the password of account " + user.Name); + args.Player.SendSuccessMessage("Password change succeeded for " + user.Name + "."); } - else + catch (UserNotExistException e) { - args.Player.SendErrorMessage("Invalid user password syntax. Try /user help."); + args.Player.SendErrorMessage("User " + user.Name + " does not exist!"); + } + catch (UserManagerException e) + { + args.Player.SendErrorMessage("Password change for " + user.Name + " failed! Check console!"); + Log.ConsoleError(e.ToString()); } } - catch (UserManagerException ex) + else { - args.Player.SendErrorMessage(ex.Message); - Log.ConsoleError(ex.ToString()); + args.Player.SendErrorMessage("Invalid user password syntax. Try /user help."); } } - // Group changing requires a username or IP address, and a new group to set + // Group changing requires a username or IP address, and a new group to set else if (subcmd == "group") { - var user = new User(); - user.Name = args.Parameters[1]; + var user = new User(); + user.Name = args.Parameters[1]; - try + if (args.Parameters.Count == 3) { - if (args.Parameters.Count == 3) + try { - args.Player.SendSuccessMessage("Account " + user.Name + " has been changed to group " + args.Parameters[2] + "!"); TShock.Users.SetUserGroup(user, args.Parameters[2]); Log.ConsoleInfo(args.Player.Name + " changed account " + user.Name + " to group " + args.Parameters[2] + "."); + args.Player.SendSuccessMessage("Account " + user.Name + " has been changed to group " + args.Parameters[2] + "!"); } - else + catch (GroupNotExistsException e) { - args.Player.SendErrorMessage("Invalid user group syntax. Try /user help."); + args.Player.SendErrorMessage("That group does not exist!"); } + catch (UserNotExistException e) + { + args.Player.SendErrorMessage("User " + user.Name + " does not exist!"); + } + catch (UserManagerException e) + { + args.Player.SendErrorMessage("User " + user.Name + " could not be added. Check console for details."); + } + } - catch (UserManagerException ex) + else { - args.Player.SendMessage(ex.Message, Color.Green); - Log.ConsoleError(ex.ToString()); + args.Player.SendErrorMessage("Invalid user group syntax. Try /user help."); } } else if (subcmd == "help") diff --git a/TShockAPI/DB/GroupManager.cs b/TShockAPI/DB/GroupManager.cs index cd0f6d87..41c96534 100644 --- a/TShockAPI/DB/GroupManager.cs +++ b/TShockAPI/DB/GroupManager.cs @@ -47,34 +47,35 @@ namespace TShockAPI.DB db.GetSqlType() == SqlType.Sqlite ? (IQueryBuilder) new SqliteQueryCreator() : new MysqlQueryCreator()); - creator.EnsureExists(table); + if (creator.EnsureExists(table)) + { + // Add default groups if they don't exist + AddDefaultGroup("guest", "", + string.Join(",", Permissions.canbuild, Permissions.canregister, Permissions.canlogin, Permissions.canpartychat, + Permissions.cantalkinthird, Permissions.canchat)); + + AddDefaultGroup("default", "guest", + string.Join(",", Permissions.warp, Permissions.canchangepassword)); + + AddDefaultGroup("newadmin", "default", + string.Join(",", Permissions.kick, Permissions.editspawn, Permissions.reservedslot)); + + AddDefaultGroup("admin", "newadmin", + string.Join(",", Permissions.ban, Permissions.whitelist, "tshock.world.time.*", Permissions.spawnboss, + Permissions.spawnmob, Permissions.managewarp, Permissions.time, Permissions.tp, Permissions.slap, + Permissions.kill, Permissions.logs, + Permissions.immunetokick, Permissions.tpothers)); + + AddDefaultGroup("trustedadmin", "admin", + string.Join(",", Permissions.maintenance, "tshock.cfg.*", "tshock.world.*", Permissions.butcher, Permissions.item, + Permissions.heal, Permissions.immunetoban, Permissions.usebanneditem)); + + AddDefaultGroup("vip", "default", string.Join(",", Permissions.reservedslot)); + } // Load Permissions from the DB LoadPermisions(); - // Add default groups if they don't exist - AddDefaultGroup("guest", "", - string.Join(",", Permissions.canbuild, Permissions.canregister, Permissions.canlogin, Permissions.canpartychat, - Permissions.cantalkinthird, Permissions.canchat)); - - AddDefaultGroup("default", "guest", - string.Join(",", Permissions.warp, Permissions.canchangepassword)); - - AddDefaultGroup("newadmin", "default", - string.Join(",", Permissions.kick, Permissions.editspawn, Permissions.reservedslot)); - - AddDefaultGroup("admin", "newadmin", - string.Join(",", Permissions.ban, Permissions.whitelist, "tshock.world.time.*", Permissions.spawnboss, - Permissions.spawnmob, Permissions.managewarp, Permissions.time, Permissions.tp, Permissions.slap, - Permissions.kill, Permissions.logs, - Permissions.immunetokick, Permissions.tpothers)); - - AddDefaultGroup("trustedadmin", "admin", - string.Join(",", Permissions.maintenance, "tshock.cfg.*", "tshock.world.*", Permissions.butcher, Permissions.item, - Permissions.heal, Permissions.immunetoban, Permissions.usebanneditem)); - - AddDefaultGroup("vip", "default", string.Join(",", Permissions.reservedslot)); - Group.DefaultGroup = GetGroupByName(TShock.Config.DefaultGuestGroupName); } diff --git a/TShockAPI/DB/SqlTable.cs b/TShockAPI/DB/SqlTable.cs index 7fb62ed9..b7a77b91 100644 --- a/TShockAPI/DB/SqlTable.cs +++ b/TShockAPI/DB/SqlTable.cs @@ -52,7 +52,8 @@ namespace TShockAPI.DB creator = provider; } - public void EnsureExists(SqlTable table) + // Returns true if the table was created; false if it was not. + public bool EnsureExists(SqlTable table) { var columns = GetColumns(table); if (columns.Count > 0) @@ -66,7 +67,9 @@ namespace TShockAPI.DB else { database.Query(creator.CreateTable(table)); + return true; } + return false; } public List GetColumns(SqlTable table) diff --git a/TShockAPI/UpdateManager.cs b/TShockAPI/UpdateManager.cs index bfb96740..5448fb35 100755 --- a/TShockAPI/UpdateManager.cs +++ b/TShockAPI/UpdateManager.cs @@ -32,7 +32,7 @@ namespace TShockAPI /// /// Check once every X minutes. /// - private readonly int CheckXMinutes = 30; + private int CheckXMinutes = 30; public UpdateManager() { @@ -44,11 +44,12 @@ namespace TShockAPI try { UpdateCheck(state); + CheckXMinutes = 30; } catch (Exception) { - //swallow the exception - return; + // Skip this run and check more frequently... + CheckXMinutes = 5; } Thread.Sleep(CheckXMinutes * 60 * 1000);