public override void ExecuteCommand(EvtChatCommandArgs args) { List <string> arguments = args.Command.ArgumentsAsList; if (arguments.Count > 1) { QueueMessage(UsageMessage); return; } long curInputPerms = DataHelper.GetSettingInt(SettingsConstants.GLOBAL_INPUT_LEVEL, 0L); //See the permissions if (arguments.Count == 0) { QueueMessage($"Inputs are allowed for {(PermissionLevels)curInputPerms} and above. To set the permissions, add one as an argument: {CachedPermsStr}"); return; } using (BotDBContext context = DatabaseManager.OpenContext()) { User user = DataHelper.GetUserNoOpen(args.Command.ChatMessage.Username, context); //Check if this user has the ability to set this level if (user != null && user.HasEnabledAbility(PermissionConstants.SET_GLOBAL_INPUT_LEVEL_ABILITY) == false) { QueueMessage("You do not have the ability to set the global input level!"); return; } } string permsStr = arguments[0]; //Try to parse the permission level if (PermissionHelpers.TryParsePermissionLevel(permsStr, out PermissionLevels permLevel) == false) { QueueMessage($"Please enter a valid permission: {CachedPermsStr}"); return; } //The permissions are already this value if (curInputPerms == (long)permLevel) { QueueMessage($"The permissions are already {permLevel}!"); return; } using (BotDBContext context = DatabaseManager.OpenContext()) { User user = DataHelper.GetUserNoOpen(args.Command.ChatMessage.Username, context); //Check if this user is lower than this level and deny it if so if (user.Level < (long)permLevel) { QueueMessage("You cannot set the global input level greater than your own level!"); return; } Settings inputPermsSetting = DataHelper.GetSettingNoOpen(SettingsConstants.GLOBAL_INPUT_LEVEL, context); //Set new value and save inputPermsSetting.ValueInt = (long)permLevel; context.SaveChanges(); } QueueMessage($"Set input permissions to {permLevel} and above!"); }
public override void ExecuteCommand(EvtChatCommandArgs args) { List <string> arguments = args.Command.ArgumentsAsList; if (arguments.Count != 2) { QueueMessage("Usage: \"username\" \"level\""); return; } string levelUsername = arguments[0].ToLowerInvariant(); string levelStr = arguments[1].ToLowerInvariant(); string curUserName = args.Command.ChatMessage.Username.ToLowerInvariant(); if (levelUsername == curUserName) { QueueMessage("You cannot set your own level!"); return; } User levelUser = DataHelper.GetUser(levelUsername); if (levelUser == null) { QueueMessage("User does not exist in database!"); return; } User curUser = DataHelper.GetUser(curUserName); if (curUser == null) { QueueMessage("Invalid user of this command; something went wrong?!"); return; } if (levelUser.Level >= curUser.Level) { QueueMessage("You can't set the level of a user whose level is equal to or greater than yours!"); return; } //Parse the level if (PermissionHelpers.TryParsePermissionLevel(levelStr, out PermissionLevels permLvl) == false) { QueueMessage("Invalid level specified."); return; } long levelNum = (long)permLvl; //Invalid - attempting to set level higher than or equal to own if (levelNum >= curUser.Level) { QueueMessage("You cannot set a level greater than or equal to your own!"); return; } //Set level, adjust abilities, and save DataHelper.AdjustUserLvlAndAbilitiesOnLevel(levelUsername, levelNum); QueueMessage($"Set {levelUsername}'s level to {levelNum}, {permLvl}!"); }
public override void ExecuteCommand(EvtChatCommandArgs args) { List <string> arguments = args.Command.ArgumentsAsList; int argCount = arguments.Count; //Ignore with too few arguments if (argCount < 5) { QueueMessage(UsageMessage); return; } int minArgCount = argCount - 3; string commandName = arguments[0].ToLowerInvariant(); string className = arguments[1]; string valueStr = string.Empty; string levelStr = arguments[minArgCount].ToLowerInvariant(); string enabledStr = arguments[minArgCount + 1]; string displayInHelpStr = arguments[minArgCount + 2]; //Combine all the arguments in between as the value string for (int i = 2; i < minArgCount; i++) { valueStr += arguments[i]; if (i < (minArgCount - 1)) { valueStr += " "; } } //Parse the level if (PermissionHelpers.TryParsePermissionLevel(levelStr, out PermissionLevels permLevel) == false) { QueueMessage("Invalid level specified."); return; } long levelNum = (long)permLevel; if (bool.TryParse(enabledStr, out bool cmdEnabled) == false) { QueueMessage("Incorrect command enabled state specified."); return; } if (bool.TryParse(displayInHelpStr, out bool displayInHelp) == false) { QueueMessage("Incorrect command displayInHelp state specified."); return; } bool added = CmdHandler.AddCommand(commandName, className, valueStr, levelNum, cmdEnabled, displayInHelp); if (added == true) { //Add this command to the database using (BotDBContext context = DatabaseManager.OpenContext()) { //If this command already exists, remove it so it can be replaced with the new data CommandData cmdData = context.Commands.FirstOrDefault((cmd) => cmd.Name == commandName); if (cmdData != null) { //Remove command context.Commands.Remove(cmdData); } //Add the new one context.Commands.Add(new CommandData(commandName, className, levelNum, cmdEnabled, displayInHelp, valueStr)); context.SaveChanges(); } QueueMessage($"Successfully added command \"{commandName}\"!"); } else { QueueMessage($"Failed to add command \"{commandName}\"."); } }
public override void ExecuteCommand(EvtChatCommandArgs args) { List <string> arguments = args.Command.ArgumentsAsList; int argCount = arguments.Count; //Ignore with not enough arguments if (argCount != 3) { QueueMessage(UsageMessage); return; } string consoleStr = arguments[0].ToLowerInvariant(); string inputName = arguments[1].ToLowerInvariant(); long inputLevel = 0L; using (BotDBContext context = DatabaseManager.OpenContext()) { GameConsole console = context.Consoles.FirstOrDefault(c => c.Name == consoleStr); if (console == null) { QueueMessage($"No console named \"{consoleStr}\" found."); return; } //Check if the input exists InputData inputData = console.InputList.FirstOrDefault((inpData) => inpData.Name == inputName); if (inputData == null) { QueueMessage($"Input \"{inputName}\" does not exist in console \"{consoleStr}\"."); return; } inputLevel = inputData.Level; } string levelStr = arguments[2].ToLowerInvariant(); //Parse the permission level if (PermissionHelpers.TryParsePermissionLevel(levelStr, out PermissionLevels permLevel) == false) { QueueMessage("Invalid level specified."); return; } //Compare this user's level with the input's current level User user = DataHelper.GetUser(args.Command.ChatMessage.Username); long newLvlNum = (long)permLevel; if (user != null) { long curInputLvl = inputLevel; //Your level is less than the current input's level - invalid if (user.Level < curInputLvl) { QueueMessage("Cannot change this input's access level because your level is lower than it."); return; } //The new level number is higher than your level - invalid else if (user.Level < newLvlNum) { QueueMessage("Cannot change this input's access level because the new level would be higher than yours."); return; } } using (BotDBContext context = DatabaseManager.OpenContext()) { GameConsole console = context.Consoles.FirstOrDefault(c => c.Name == consoleStr); InputData inputData = console.InputList.FirstOrDefault((inpData) => inpData.Name == inputName); inputData.Level = newLvlNum; context.SaveChanges(); } QueueMessage($"Set the level of input \"{inputName}\" on \"{consoleStr}\" to {newLvlNum}, {permLevel}!"); }