コード例 #1
0
        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!");
        }
コード例 #2
0
        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}!");
        }
コード例 #3
0
        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}\".");
            }
        }
コード例 #4
0
        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}!");
        }