Esempio n. 1
0
        public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e)
        {
            List <string> args = e.Command.ArgumentsAsList;

            if (args.Count > 1)
            {
                BotProgram.QueueMessage("Usage: \"username\"");
                return;
            }

            string username = string.Empty;

            //If no arguments are specified, use the name of the user who performed the command
            if (args.Count == 0)
            {
                username = e.Command.ChatMessage.Username;
            }
            else
            {
                username = args[0];
            }

            User user = BotProgram.GetUser(username, false);

            if (user == null)
            {
                BotProgram.QueueMessage($"User does not exist in database!");
                return;
            }

            //Print the user's information
            BotProgram.QueueMessage($"User: {user.Name} | Level: {user.Level} | Total Inputs: {user.ValidInputs} | Total Messages: {user.TotalMessages}");
        }
        public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e)
        {
            List <string> args = e.Command.ArgumentsAsList;

            //If a username was specified, view that user's silenced state
            if (args.Count == 1)
            {
                string username = args[0].ToLowerInvariant();
                User   user     = BotProgram.GetUser(username);

                if (user == null)
                {
                    BotProgram.QueueMessage($"User does not exist in database!");
                }
                else
                {
                    if (user.Silenced == false)
                    {
                        BotProgram.QueueMessage($"User {username} is not currently silenced and can perform inputs.");
                    }
                    else
                    {
                        BotProgram.QueueMessage($"User {username} is currently silenced and cannot perform inputs.");
                    }
                }

                return;
            }

            //No arguments, so print all users who are silenced
            if (BotProgram.BotData.SilencedUsers.Count == 0)
            {
                BotProgram.QueueMessage("No users are silenced. Hurray!");
                return;
            }

            //Copy for safety in case this gets modified during iteration
            string[] silencedNames = new string[BotProgram.BotData.SilencedUsers.Count];
            BotProgram.BotData.SilencedUsers.CopyTo(silencedNames);

            StrBuilder.Clear();

            StrBuilder.Append("Currently silenced users: ");

            for (int i = 0; i < silencedNames.Length; i++)
            {
                StrBuilder.Append(silencedNames[i]).Append(", ");
            }

            //Remove trailing comma
            StrBuilder.Remove(StrBuilder.Length - 2, 2);

            string silencedStr = StrBuilder.ToString();

            BotProgram.QueueMessage(silencedStr);
        }
        public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e)
        {
            List <string> args = e.Command.ArgumentsAsList;

            if (args == null || args.Count != 2)
            {
                BotProgram.QueueMessage("Please specify a single user followed by the amount of credits you wish to transfer!");
                return;
            }

            string giver        = e.Command.ChatMessage.DisplayName;
            string giverToLower = giver.ToLower();

            string receiver        = args[0];
            string receiverToLower = receiver.ToLower();

            if (giverToLower == receiverToLower)
            {
                BotProgram.QueueMessage("You cannot transfer points to yourself!");
                return;
            }

            //If the user transferring points isn't in the database, add them
            User giverUser    = BotProgram.GetOrAddUser(giverToLower);
            User receiverUser = BotProgram.GetUser(receiverToLower);

            if (receiverUser == null)
            {
                BotProgram.QueueMessage($"{receiver} is not in the database!");
                return;
            }

            long transferAmount = -1L;
            bool success        = long.TryParse(args[1], out transferAmount);

            if (success == false || transferAmount <= 0)
            {
                BotProgram.QueueMessage("Please specify a positive whole number of credits greater than 0!");
                return;
            }

            if (giverUser.Credits < transferAmount)
            {
                BotProgram.QueueMessage("The transfer amount is greater than your credits!");
                return;
            }

            giverUser.Credits    -= transferAmount;
            receiverUser.Credits += transferAmount;
            BotProgram.SaveBotData();

            BotProgram.QueueMessage($"{giver} has transferred {transferAmount} points to {receiver} :D !");
        }
        public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e)
        {
            List <string> args = e.Command.ArgumentsAsList;

            if (args.Count != 1)
            {
                BotProgram.QueueMessage("Usage: \"username\"");
                return;
            }

            string unsilencedName = args[0].ToLowerInvariant();
            string selfName       = e.Command.ChatMessage.Username.ToLowerInvariant();

            if (unsilencedName == selfName)
            {
                BotProgram.QueueMessage("Nice try.");
                return;
            }

            User user = BotProgram.GetUser(unsilencedName);

            if (user == null)
            {
                BotProgram.QueueMessage($"User does not exist in database!");
                return;
            }

            if (user.Silenced == false)
            {
                BotProgram.QueueMessage($"User {unsilencedName} is not silenced!");
                return;
            }

            //Make sure the user you're silencing is a lower level than you
            User selfUser = BotProgram.GetUser(selfName);

            if (selfUser.Level <= user.Level)
            {
                BotProgram.QueueMessage($"Cannot unsilence a user at or above your access level!");
                return;
            }

            user.Silenced = false;
            BotProgram.BotData.SilencedUsers.Remove(unsilencedName);
            BotProgram.SaveBotData();

            BotProgram.QueueMessage($"User {unsilencedName} has been unsilenced and can perform inputs once again.");
        }
Esempio n. 5
0
        public override void ExecuteCommand(object sender, OnChatCommandReceivedArgs e)
        {
            List <string> args = e.Command.ArgumentsAsList;

            if (args.Count != 1)
            {
                BotProgram.QueueMessage("Usage: \"username\"");
                return;
            }

            string silencedName = args[0].ToLowerInvariant();
            string selfName     = e.Command.ChatMessage.Username.ToLowerInvariant();

            if (silencedName == selfName)
            {
                BotProgram.QueueMessage("No use in silencing yourself, silly!");
                return;
            }

            User user = BotProgram.GetUser(silencedName);

            if (user == null)
            {
                BotProgram.QueueMessage($"User does not exist in database!");
                return;
            }

            if (user.Silenced == true)
            {
                BotProgram.QueueMessage($"User {silencedName} is already silenced!");
                return;
            }

            //Make sure the user you're silencing is a lower level than you
            User selfUser = BotProgram.GetUser(selfName);

            if (selfUser.Level <= user.Level)
            {
                BotProgram.QueueMessage($"Cannot silence a user at or above your access level!");
                return;
            }

            user.Silenced = true;
            BotProgram.BotData.SilencedUsers.Add(silencedName);
            BotProgram.SaveBotData();

            BotProgram.QueueMessage($"User {silencedName} has been silenced and thus prevented from performing inputs.");
        }
        public override void ExecuteCommand(EvtChatCommandArgs e)
        {
            string name        = e.Command.ChatMessage.DisplayName;
            string nameToLower = name.ToLower();

            User user = BotProgram.GetUser(nameToLower);

            if (ConfirmClearedStatsUsers.Contains(nameToLower) == false)
            {
                BotProgram.MsgHandler.QueueMessage($"WARNING {name}: this clears all miscellaneous user stats, such as credits and message/input counts. If you're sure, retype this command with \"{ConfirmClearStr}\" as an argument to clear or \"{ConfirmStopStr}\" to ignore.");
                ConfirmClearedStatsUsers.Add(nameToLower);
                return;
            }
            else
            {
                //Check for an argument
                List <string> args = e.Command.ArgumentsAsList;

                //Only accept the exact argument
                if (args.Count != 1)
                {
                    return;
                }

                string confirmation = args[0];

                //Confirm - clear stats
                if (confirmation == ConfirmClearStr)
                {
                    ClearUserStats(user);

                    BotProgram.SaveBotData();
                    ConfirmClearedStatsUsers.Remove(nameToLower);
                    BotProgram.MsgHandler.QueueMessage("Successfully cleared stats!");
                }
                //Ignore
                else if (confirmation == ConfirmStopStr)
                {
                    ConfirmClearedStatsUsers.Remove(nameToLower);
                    BotProgram.MsgHandler.QueueMessage("Cancelled clearing stats!");
                }
            }
        }
Esempio n. 7
0
        public override void ExecuteCommand(EvtChatCommandArgs e)
        {
            List <string> args = e.Command.ArgumentsAsList;

            if (args.Count > 1)
            {
                BotProgram.MsgHandler.QueueMessage($"{Globals.CommandIdentifier}level usage: \"username (optional)\"");
                return;
            }

            string levelUsername = (args.Count == 1) ? args[0].ToLowerInvariant() : e.Command.ChatMessage.Username.ToLowerInvariant();
            User   levelUser     = BotProgram.GetUser(levelUsername, true);

            if (levelUser == null)
            {
                BotProgram.MsgHandler.QueueMessage($"User does not exist in database!");
                return;
            }

            BotProgram.MsgHandler.QueueMessage($"{levelUsername} is level {levelUser.Level}, {((AccessLevels.Levels)levelUser.Level)}!");
        }
Esempio n. 8
0
        public override void ExecuteCommand(EvtChatCommandArgs e)
        {
            string logMessage = e.Command.ArgumentsAsString;

            if (string.IsNullOrEmpty(logMessage) == true)
            {
                BotProgram.MsgHandler.QueueMessage("Please enter a message for the log.");
                return;
            }

            DateTime curTime = DateTime.UtcNow;

            User user = BotProgram.GetUser(e.Command.ChatMessage.Username, false);

            string username = string.Empty;

            //Add a new log
            GameLog newLog = new GameLog();

            newLog.LogMessage = logMessage;

            //If the user exists and isn't opted out of bot stats, add their name
            if (user != null && user.OptedOut == false)
            {
                username = e.Command.ChatMessage.Username;
            }

            newLog.User = username;

            string date = curTime.ToShortDateString();
            string time = curTime.ToLongTimeString();

            newLog.DateTimeString = $"{date} at {time}";

            BotProgram.BotData.Logs.Add(newLog);
            BotProgram.SaveBotData();

            BotProgram.MsgHandler.QueueMessage("Successfully logged message!");
        }
Esempio n. 9
0
        public override void ExecuteCommand(EvtChatCommandArgs e)
        {
            string userName = e.Command.ChatMessage.DisplayName;

            //Allow inspiring another user
            List <string> args = e.Command.ArgumentsAsList;

            if (args.Count == 1)
            {
                //Check if the name is in the database
                User user = BotProgram.GetUser(args[0], false);
                if (user != null)
                {
                    userName = user.Name;
                }
            }

            int randinspiration = Rand.Next(0, RandomInspiration.Length);

            string message = RandomInspiration[randinspiration].Replace("{name}", userName);

            BotProgram.MsgHandler.QueueMessage(message);
        }
Esempio n. 10
0
        public override void ExecuteCommand(EvtChatCommandArgs e)
        {
            List <string> args     = e.Command.ArgumentsAsList;
            string        userName = e.Command.ChatMessage.DisplayName.ToLowerInvariant();

            User user = BotProgram.GetUser(userName);

            if (user == null)
            {
                Console.WriteLine($"User {e.Command.ChatMessage.DisplayName} not in database.");
                return;
            }

            if (args.Count == 0)
            {
                ExecuteNoArgs(user);
                return;
            }

            //If "new" is specified, generate a new input sequence
            if (args.Count == 1 && args[0] == GenerateNewArg)
            {
                ExecuteNewArg(user);
                return;
            }

            //Make sure the user has an exercise - if not, output the same message
            if (UserExercises.ContainsKey(user.Name) == false)
            {
                ExecuteNoArgs(user);
                return;
            }

            //There's more than one argument and the user has an exercise; so it has to be the input
            //Let's validate it!
            ExecuteValidateInput(user, e.Command.ArgumentsAsString, InputGlobals.CurrentConsole);
        }
        private User DummyUserSetup()
        {
            //Set name
            string line = string.Empty;

            while (string.IsNullOrEmpty(line) == true)
            {
                Console.WriteLine("Please choose a valid name for your user. This can be a valid user in your BotData.");
                line = Console.ReadLine();
            }

            User user = BotProgram.GetUser(line, false);

            if (user != null)
            {
                return(user);
            }

            string userName = line;

            //Set level
            int level = -1;

            line = string.Empty;

            while (level < 0)
            {
                Console.WriteLine("Please choose an access level for your user.");
                line = Console.ReadLine();

                AccessLevels.Levels[] levelArray = EnumUtility.GetValues <AccessLevels.Levels> .EnumValues;

                if (int.TryParse(line, out int levelNum) == false)
                {
                    Console.WriteLine("Invalid level specified.");
                    continue;
                }

                bool   found   = false;
                string lvlName = string.Empty;

                for (int i = 0; i < levelArray.Length; i++)
                {
                    if (levelNum == (int)levelArray[i])
                    {
                        found   = true;
                        lvlName = levelArray[i].ToString();
                        break;
                    }
                }

                if (found == false)
                {
                    Console.WriteLine("Invalid level specified.");
                    continue;
                }

                level = levelNum;
            }

            //Return new user
            user       = new User();
            user.Name  = userName;
            user.Level = level;

            return(user);
        }
        public override void ExecuteCommand(EvtChatCommandArgs e)
        {
            string name        = e.Command.ChatMessage.DisplayName;
            string nameToLower = name.ToLower();

            if (DuelCommand.DuelRequests.ContainsKey(nameToLower) == true)
            {
                DuelCommand.DuelData data = DuelCommand.DuelRequests[nameToLower];
                DuelCommand.DuelRequests.Remove(nameToLower);

                TimeSpan diff = DateTime.Now - data.CurDuelTime;

                if (diff.TotalMinutes >= DuelCommand.DUEL_MINUTES)
                {
                    BotProgram.MsgHandler.QueueMessage("You are not in a duel or your duel has expired!");
                    return;
                }

                long   betAmount     = data.BetAmount;
                string dueled        = data.UserDueling;
                string dueledToLower = dueled.ToLower();

                User duelerUser = BotProgram.GetUser(nameToLower);
                User dueledUser = BotProgram.GetUser(dueledToLower);

                //First confirm both users have enough credits for the duel, as they could've lost some in that time
                if (duelerUser.Credits < betAmount || dueledUser.Credits < betAmount)
                {
                    BotProgram.MsgHandler.QueueMessage("At least one user involved in the duel no longer has enough points for the duel! The duel is off!");
                    return;
                }

                //50/50 chance of either user winning
                int val = Rand.Next(0, 2);

                string message = string.Empty;

                if (val == 0)
                {
                    duelerUser.AddCredits(betAmount);
                    dueledUser.SubtractCredits(betAmount);

                    message = $"{name} won the bet against {dueled} for {betAmount} credit(s)!";
                }
                else
                {
                    duelerUser.SubtractCredits(betAmount);
                    dueledUser.AddCredits(betAmount);

                    message = $"{dueled} won the bet against {name} for {betAmount} credit(s)!";
                }

                BotProgram.SaveBotData();

                BotProgram.MsgHandler.QueueMessage(message);
            }
            else
            {
                BotProgram.MsgHandler.QueueMessage("You are not in a duel or your duel has expired!");
            }
        }
Esempio n. 13
0
        public override void ExecuteCommand(EvtChatCommandArgs e)
        {
            List <string> args = e.Command.ArgumentsAsList;

            if (args == null || args.Count != 2)
            {
                BotProgram.MsgHandler.QueueMessage("Please specify a single user to duel followed by the bet amount!");
                return;
            }

            string dueler        = e.Command.ChatMessage.DisplayName;
            string duelerToLower = dueler.ToLower();

            string user        = args[0];
            string usertoLower = user.ToLower();

            if (duelerToLower == usertoLower)
            {
                BotProgram.MsgHandler.QueueMessage("You cannot duel yourself!");
                return;
            }

            //If the user dueling isn't in the database, add them
            User duelerUser = BotProgram.GetOrAddUser(duelerToLower);

            User cmdUser = BotProgram.GetUser(usertoLower);

            if (cmdUser == null)
            {
                BotProgram.MsgHandler.QueueMessage($"{user} is not in the database!");
                return;
            }

            if (duelerUser.OptedOut == true)
            {
                BotProgram.MsgHandler.QueueMessage("You can't duel if you're opted out of bot stats!");
                return;
            }

            if (cmdUser.OptedOut == true)
            {
                BotProgram.MsgHandler.QueueMessage("The one you're attempting to duel is opted out of bot stats!");
                return;
            }

            //Check if the duel expired and replace it with this one if so
            if (DuelRequests.ContainsKey(usertoLower) == true)
            {
                DuelData data = DuelRequests[usertoLower];
                TimeSpan diff = DateTime.Now - data.CurDuelTime;
                if (diff.TotalMinutes >= DUEL_MINUTES)
                {
                    DuelRequests.Remove(usertoLower);
                }
                else
                {
                    BotProgram.MsgHandler.QueueMessage($"You're still waiting on a duel response from {user}!");
                    return;
                }
            }

            long betAmount = -1L;
            bool success   = long.TryParse(args[1], out betAmount);

            if (success == false || betAmount <= 0)
            {
                BotProgram.MsgHandler.QueueMessage("Please specify a positive whole number of credits greater than 0!");
                return;
            }

            if (duelerUser.Credits < betAmount || cmdUser.Credits < betAmount)
            {
                BotProgram.MsgHandler.QueueMessage("Either you or the one you're dueling does not have enough credits for this duel!");
                return;
            }

            //Add to the duel requests
            DuelRequests.Add(usertoLower, new DuelData(dueler, betAmount, DateTime.Now));

            BotProgram.MsgHandler.QueueMessage($"{dueler} has requested to duel {user} for {betAmount} credit(s)! Type {Globals.CommandIdentifier}accept to duel or {Globals.CommandIdentifier}deny to refuse. The duel expires in {DUEL_MINUTES} minute(s)!");
        }
Esempio n. 14
0
        public override void ExecuteCommand(EvtChatCommandArgs e)
        {
            List <string> args = e.Command.ArgumentsAsList;

            if (args.Count != 2)
            {
                BotProgram.MsgHandler.QueueMessage($"{Globals.CommandIdentifier}setlevel usage: \"username\" \"level\"");
                return;
            }

            string levelUsername = args[0].ToLowerInvariant();
            string levelStr      = args[1];

            string curUserName = e.Command.ChatMessage.Username.ToLowerInvariant();

            if (levelUsername == curUserName)
            {
                BotProgram.MsgHandler.QueueMessage("You cannot set your own level!");
                return;
            }

            User levelUser = BotProgram.GetUser(levelUsername, true);

            if (levelUser == null)
            {
                BotProgram.MsgHandler.QueueMessage($"User does not exist in database!");
                return;
            }

            User curUser = BotProgram.GetUser(e.Command.ChatMessage.Username, true);

            if (curUser == null)
            {
                BotProgram.MsgHandler.QueueMessage("Invalid user of this command; something went wrong?!");
                return;
            }

            if (levelUser.Level >= curUser.Level)
            {
                BotProgram.MsgHandler.QueueMessage("You can't set the level of a user with a level equal to or greater than yours!");
                return;
            }

            if (int.TryParse(levelStr, out int levelNum) == false)
            {
                BotProgram.MsgHandler.QueueMessage("Invalid level specified.");
                return;
            }

            AccessLevels.Levels[] levelArray = EnumUtility.GetValues <AccessLevels.Levels> .EnumValues;

            bool   found   = false;
            string lvlName = string.Empty;

            for (int i = 0; i < levelArray.Length; i++)
            {
                if (levelNum == (int)levelArray[i])
                {
                    found   = true;
                    lvlName = levelArray[i].ToString();
                    break;
                }
            }

            if (found == false)
            {
                BotProgram.MsgHandler.QueueMessage("Invalid level specified.");
                return;
            }

            if (levelNum > curUser.Level)
            {
                BotProgram.MsgHandler.QueueMessage("You cannot set a level greater than your own!");
                return;
            }

            levelUser.SetLevel(levelNum);

            BotProgram.SaveBotData();

            BotProgram.MsgHandler.QueueMessage($"Set {levelUsername}'s level to {levelNum}, {lvlName}!");
        }
Esempio n. 15
0
        public override void ExecuteCommand(EvtChatCommandArgs e)
        {
            //Console.WriteLine("Executed");
            List <string> args = e.Command.ArgumentsAsList;

            if (args.Count > 1)
            {
                BotProgram.MsgHandler.QueueMessage("Usage: \"controller number\"");
                return;
            }

            int controllerIndex = 0;

            //Default to the user's controller port
            User user = BotProgram.GetUser(e.Command.ChatMessage.DisplayName, false);

            if (user != null)
            {
                controllerIndex = user.Team;
            }

            //Parse the controller port if we have another argument
            if (args.Count == 1)
            {
                //Console.WriteLine("Found arg");
                string arg = args[0];

                //Couldn't parse
                if (int.TryParse(arg, out int value) == false)
                {
                    BotProgram.MsgHandler.QueueMessage("Usage: \"controller number\"");
                    return;
                }

                //Subtract 1 for consistency (Ex. player 1 is controller index 0)
                controllerIndex = value - 1;
                //Console.WriteLine($"Arg val set to {controllerIndex}");
            }
            else
            {
                //Console.WriteLine("No arg found");
            }

            //Console.WriteLine("CONTROLLER INDEX: " + controllerIndex);

            //Check if the controller port is out of range
            if (controllerIndex < 0 || controllerIndex >= InputGlobals.ControllerMngr.ControllerCount)
            {
                BotProgram.MsgHandler.QueueMessage($"controller port is out of the 1 to {InputGlobals.ControllerMngr.ControllerCount} range.");
                return;
            }

            //Get the controller
            IVirtualController controller = InputGlobals.ControllerMngr.GetController(controllerIndex);

            if (controller.IsAcquired == false)
            {
                BotProgram.MsgHandler.QueueMessage($"Controller at index {controllerIndex} is not acquired.");
                return;
            }

            //Console.WriteLine("Found controller and acquired");

            StringBuilder stringBuilder = new StringBuilder(500);
            string        startString   = $"Pressed inputs for controller {controllerIndex + 1}: ";

            stringBuilder.Append(startString);

            //Check which inputs are pressed
            string[] validInputs = InputGlobals.ValidInputs;
            for (int i = 0; i < validInputs.Length; i++)
            {
                string       inputName = validInputs[i];
                ButtonStates btnState  = controller.GetInputState(inputName);
                if (btnState == ButtonStates.Pressed)
                {
                    stringBuilder.Append(inputName).Append(',').Append(' ');
                }
            }

            //If the controller doesn't have any pressed inputs, mention it
            if (stringBuilder.Length == startString.Length)
            {
                stringBuilder.Append("None!");
            }
            else
            {
                stringBuilder.Remove(stringBuilder.Length - 2, 2);
            }

            string finalStr = stringBuilder.ToString();

            BotProgram.MsgHandler.QueueMessage(finalStr);
        }