Beispiel #1
0
        public override void ExecuteCommand(EvtChatCommandArgs e)
        {
            string[] validInputs = InputGlobals.CurrentConsole.ValidInputs;

            if (validInputs == null || validInputs.Length == 0)
            {
                BotProgram.MsgHandler.QueueMessage($"Interesting! There are no valid inputs for the {InputGlobals.CurrentConsoleVal} console!");
                return;
            }

            StrBuilder.Clear();

            StrBuilder.Append("Valid inputs for ").Append(InputGlobals.CurrentConsoleVal.ToString()).Append(": ");

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

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

            string validInputsStr = StrBuilder.ToString();

            BotProgram.MsgHandler.QueueMessage(validInputsStr);
        }
        public override void ExecuteCommand(EvtChatCommandArgs e)
        {
            string displayLower = e.Command.ChatMessage.DisplayName.ToLower();

            if (GroupBetCommand.UsersInBet.ContainsKey(displayLower) == false)
            {
                BotProgram.MsgHandler.QueueMessage("You're not in the group bet!");
                return;
            }
            else
            {
                long betAmt = GroupBetCommand.UsersInBet[displayLower];
                GroupBetCommand.UsersInBet.Remove(displayLower);

                BotProgram.MsgHandler.QueueMessage($"{e.Command.ChatMessage.DisplayName} has backed out of the group bet and retained their {betAmt} credit(s)!");

                //Check for ending the group bet if there are no longer enough participants
                if (GroupBetCommand.BetStarted == true && GroupBetCommand.UsersInBet.Count < GroupBetCommand.MinUsersForBet)
                {
                    GroupBetCommand.StopGroupBet();

                    int count = GroupBetCommand.UsersInBet.Count;

                    BotProgram.MsgHandler.QueueMessage($"Oh no! The group bet has ended since there are no longer enough participants. {GroupBetCommand.MinUsersForBet - count} more is/are required to start it up again!");
                }
            }
        }
Beispiel #3
0
        public override void ExecuteCommand(EvtChatCommandArgs e)
        {
            List <string> args = e.Command.ArgumentsAsList;

            if (args.Count != 1)
            {
                BotProgram.MsgHandler.QueueMessage($"{Globals.CommandIdentifier}removemacro usage: \"#macroname\"");
                return;
            }

            string macroName = args[0].ToLowerInvariant();

            if (BotProgram.BotData.Macros.ContainsKey(macroName) == true)
            {
                char macroFirstChar = macroName[1];

                //Remove from the parser macro list
                List <string> parserMacroList = BotProgram.BotData.ParserMacroLookup[macroFirstChar];
                parserMacroList.Remove(macroName);
                if (parserMacroList.Count == 0)
                {
                    BotProgram.BotData.ParserMacroLookup.Remove(macroFirstChar);
                }

                BotProgram.BotData.Macros.TryRemove(macroName, out string removedMacro);
                BotProgram.SaveBotData();

                BotProgram.MsgHandler.QueueMessage($"Removed macro {macroName}.");
            }
            else
            {
                BotProgram.MsgHandler.QueueMessage($"Macro \"{macroName}\" could not be found.");
            }
        }
        public override void ExecuteCommand(EvtChatCommandArgs args)
        {
            string logMessage = args.Command.ArgumentsAsString;

            if (string.IsNullOrEmpty(logMessage) == true)
            {
                QueueMessage(UsageMessage);
                return;
            }

            string username = args.Command.ChatMessage.Username.ToLowerInvariant();

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

            newLog.LogMessage  = logMessage;
            newLog.User        = username;
            newLog.LogDateTime = DateTime.UtcNow;

            //Add the game log to the database
            using (BotDBContext context = DatabaseManager.OpenContext())
            {
                context.GameLogs.Add(newLog);
                context.SaveChanges();
            }

            QueueMessage("Successfully logged message!");
        }
Beispiel #5
0
        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;
                }

                BotProgram.MsgHandler.QueueMessage($"{name} has denied to duel with {data.UserDueling} and miss out on a potential {data.BetAmount} credit(s)!");
            }
            else
            {
                BotProgram.MsgHandler.QueueMessage("You are not in a duel or your duel has expired!");
            }
        }
        public override void ExecuteCommand(EvtChatCommandArgs args)
        {
            List <string> arguments = args.Command.ArgumentsAsList;

            //Ignore with too few arguments
            if (arguments.Count > 1)
            {
                QueueMessage(UsageMessage);
                return;
            }

            if (arguments.Count == 0)
            {
                long maxRecentInputCount = DataHelper.GetSettingInt(SettingsConstants.MAX_USER_RECENT_INPUTS, 0L);

                QueueMessage($"The max number of recent inputs stored per user is {maxRecentInputCount}. To change this number, pass an integer as an argument.");
                return;
            }

            //Check for sufficient permissions
            using (BotDBContext context = DatabaseManager.OpenContext())
            {
                User user = DataHelper.GetUserNoOpen(args.Command.ChatMessage.Username, context);
                if (user == null || user.HasEnabledAbility(PermissionConstants.SET_MAX_USER_RECENT_INPUTS_ABILITY) == false)
                {
                    QueueMessage("You do not have the ability to set the number of recent inputs stored per user!");
                    return;
                }
            }

            string recentInputCountStr = arguments[0].ToLowerInvariant();

            if (int.TryParse(recentInputCountStr, out int newRecentInputCount) == false)
            {
                QueueMessage("That's not a valid number!");
                return;
            }

            if (newRecentInputCount < MIN_VALUE)
            {
                QueueMessage($"Value cannot be lower than {MIN_VALUE}!");
                return;
            }

            using (BotDBContext context = DatabaseManager.OpenContext())
            {
                Settings userMaxRecentInputs = DataHelper.GetSettingNoOpen(SettingsConstants.MAX_USER_RECENT_INPUTS, context);
                if (userMaxRecentInputs == null)
                {
                    userMaxRecentInputs = new Settings(SettingsConstants.MAX_USER_RECENT_INPUTS, string.Empty, 0L);
                    context.SettingCollection.Add(userMaxRecentInputs);
                }

                userMaxRecentInputs.ValueInt = newRecentInputCount;

                context.SaveChanges();
            }

            QueueMessage($"Set the max number of recent inputs stored per user to {newRecentInputCount}!");
        }
        public override void ExecuteCommand(EvtChatCommandArgs args)
        {
            if (string.IsNullOrEmpty(ValueStr) == true)
            {
                QueueMessage("Invalid file defined.");
                return;
            }

            //First try to read the file as an absolute path
            string codeText = FileHelpers.ReadFromTextFile(ValueStr);

            //If that wasn't found, try a relative path
            if (string.IsNullOrEmpty(codeText) == true)
            {
                codeText = FileHelpers.ReadFromTextFile(DataConstants.DataFolderPath, ValueStr);
            }

            if (string.IsNullOrEmpty(codeText) == true)
            {
                QueueMessage("Invalid source file. Double check its location.");
                return;
            }

            //Execute the code
            ExecuteCSharpScript(codeText);
        }
        public override void ExecuteCommand(EvtChatCommandArgs args)
        {
            List <string> arguments = args.Command.ArgumentsAsList;

            if (arguments.Count == 0)
            {
                QueueMessage(UsageMessage);
                return;
            }

            char[] msgArr = args.Command.ArgumentsAsString.ToCharArray();
            Array.Reverse(msgArr);

            string msg = new string(msgArr);

            ClientServiceTypes clientServiceType = DataHelper.GetClientServiceType();

            //Ignore any output starting with a "/" to avoid exploiting Twitch chat commands
            if (clientServiceType == ClientServiceTypes.Twitch && msg.StartsWith('/') == true)
            {
                QueueMessage("!uoy rof sdnammoc tahc hctiwT oN");
                return;
            }

            QueueMessage(msg);
        }
Beispiel #9
0
        public override void ExecuteCommand(EvtChatCommandArgs args)
        {
            StringBuilder strBuilder = null;

            using (BotDBContext context = DatabaseManager.OpenContext())
            {
                //No abilities
                if (context.PermAbilities.Count() == 0)
                {
                    QueueMessage("There are no permission abilities!");
                    return;
                }

                //Order alphabetically
                IOrderedQueryable<PermissionAbility> permAbilities = context.PermAbilities.OrderBy(p => p.Name);

                strBuilder = new StringBuilder(250);
                strBuilder.Append("Hi, ").Append(args.Command.ChatMessage.Username);
                strBuilder.Append(", here's a list of all permission abilities: ");

                foreach (PermissionAbility pAbility in permAbilities)
                {
                    strBuilder.Append(pAbility.Name);
                    strBuilder.Append(',').Append(' ');
                }
            }

            strBuilder.Remove(strBuilder.Length - 2, 2);

            int maxCharCount = (int)DataHelper.GetSettingInt(SettingsConstants.BOT_MSG_CHAR_LIMIT, 500L);

            QueueMessageSplit(strBuilder.ToString(), maxCharCount, ", ");
        }
        public override void ExecuteCommand(EvtChatCommandArgs args)
        {
            List <string> arguments = args.Command.ArgumentsAsList;

            long curResMode = DataHelper.GetSettingInt(SettingsConstants.DEMOCRACY_RESOLUTION_MODE, 0L);
            DemocracyResolutionModes resMode = (DemocracyResolutionModes)curResMode;

            //See the virtual controller
            if (arguments.Count == 0)
            {
                QueueMessage($"The current Democracy resolution mode is {resMode}. To set the resolution mode, add one as an argument: {CachedResolutionModesStr}");
                return;
            }

            //Invalid number of arguments
            if (arguments.Count > 1)
            {
                QueueMessage(UsageMessage);
                return;
            }

            using (BotDBContext context = DatabaseManager.OpenContext())
            {
                //Check if the user has the ability to set the mode
                User user = DataHelper.GetUserNoOpen(args.Command.ChatMessage.Username, context);

                if (user != null && user.HasEnabledAbility(PermissionConstants.SET_DEMOCRACY_RESOLUTION_MODE_ABILITY) == false)
                {
                    QueueMessage("You don't have the ability to set the Democracy resolution mode!");
                    return;
                }
            }

            string resModeStr = arguments[0];

            //Parse
            if (EnumUtility.TryParseEnumValue(resModeStr, out DemocracyResolutionModes parsedResMode) == false)
            {
                QueueMessage($"Please enter a resolution mode: {CachedResolutionModesStr}");
                return;
            }

            //Same mode
            if (parsedResMode == resMode)
            {
                QueueMessage($"The current resolution mode is already {resMode}!");
                return;
            }

            using (BotDBContext context = DatabaseManager.OpenContext())
            {
                //Set the value and save
                Settings resModeSetting = DataHelper.GetSettingNoOpen(SettingsConstants.DEMOCRACY_RESOLUTION_MODE, context);
                resModeSetting.ValueInt = (long)parsedResMode;

                context.SaveChanges();
            }

            QueueMessage($"Changed the Democracy resolution mode from {resMode} to {parsedResMode}!");
        }
        public void HandleCommand(EvtChatCommandArgs e)
        {
            if (e == null || e.Command == null || e.Command.ChatMessage == null)
            {
                Console.WriteLine($"{nameof(EvtChatCommandArgs)} or its Command or ChatMessage is null! Not parsing command");
                return;
            }

            string userToLower = e.Command.ChatMessage.DisplayName.ToLower();

            //Don't handle certain users (Ex. MrMacroBot)
            if (ExemptUsers.Contains(userToLower) == true)
            {
                Console.WriteLine($"User {e.Command.ChatMessage.DisplayName} is exempt and I won't take commands from them");
                return;
            }

            User user = BotProgram.GetOrAddUser(userToLower);

            string commandToLower = e.Command.CommandText.ToLower();

            if (CommandDict.TryGetValue(commandToLower, out BaseCommand command) == true)
            {
                //Handle permissions
                if (user.Level >= command.AccessLevel)
                {
                    command.ExecuteCommand(e);
                }
                else
                {
                    BotProgram.MsgHandler.QueueMessage(INVALID_ACCESS_MESSAGE);
                }
            }
        }
Beispiel #12
0
        public override void ExecuteCommand(EvtChatCommandArgs args)
        {
            List <string> arguments = args.Command.ArgumentsAsList;

            if (arguments.Count < 2)
            {
                QueueMessage(UsageMessage);
                return;
            }

            string memeName  = arguments[0];
            string memeValue = arguments[1];

            if (memeName.ElementAt(0) == '/' || memeValue.ElementAt(0) == '/')
            {
                QueueMessage("Memes cannot start with Twitch chat commands!");
                return;
            }

            if (memeName.StartsWith(Parser.DEFAULT_PARSER_REGEX_MACRO_INPUT) == true)
            {
                QueueMessage($"Memes cannot start with \"{Parser.DEFAULT_PARSER_REGEX_MACRO_INPUT}\".");
                return;
            }

            if (memeName.ElementAt(0) == DataConstants.COMMAND_IDENTIFIER)
            {
                QueueMessage($"Memes cannot start with \'{DataConstants.COMMAND_IDENTIFIER}\'.");
                return;
            }

            if (memeName.Length > MAX_MEME_NAME_LENGTH)
            {
                QueueMessage($"Memes may have up to a max of {MAX_MEME_NAME_LENGTH} characters in their name!");
                return;
            }

            string memeToLower = memeName.ToLowerInvariant();

            using (BotDBContext context = DatabaseManager.OpenContext())
            {
                Meme meme = context.Memes.FirstOrDefault(m => m.MemeName == memeToLower);

                string actualMemeValue = args.Command.ArgumentsAsString.Remove(0, memeName.Length + 1);

                if (meme != null)
                {
                    meme.MemeValue = actualMemeValue;

                    QueueMessage("Meme overwritten!");
                }
                else
                {
                    Meme newMeme = new Meme(memeToLower, actualMemeValue);
                    context.Memes.Add(newMeme);
                }

                context.SaveChanges();
            }
        }
Beispiel #13
0
        public override void ExecuteCommand(EvtChatCommandArgs args)
        {
            string username = args.Command.ChatMessage.Username.ToLowerInvariant();

            GroupBetRoutine groupBetRoutine = RoutineHandler.FindRoutine <GroupBetRoutine>();

            if (groupBetRoutine == null ||
                groupBetRoutine.TryGetParticipant(username, out GroupBetRoutine.ParticipantData participantData) == false)
            {
                QueueMessage("You're not in the group bet!");
                return;
            }

            groupBetRoutine.RemoveParticipant(username);

            string creditsName = DataHelper.GetCreditsName();

            QueueMessage($"{username} has backed out of the group bet and retained their {participantData.ParticipantBet} {creditsName.Pluralize(false, participantData.ParticipantBet)}!");

            int participantCount = groupBetRoutine.ParticipantCount;
            int minParticipants  = groupBetRoutine.MinParticipants;

            //Check for ending the group bet if there are no longer enough participants
            if (participantCount < minParticipants)
            {
                //If no one is in the group bet, end it entirely
                if (participantCount == 0)
                {
                    RoutineHandler.RemoveRoutine(groupBetRoutine);
                }

                QueueMessage($"Oh no! The group bet has ended since there are no longer enough participants. {minParticipants - participantCount} more is/are required to start it up again!");
            }
        }
Beispiel #14
0
        public override void ExecuteCommand(EvtChatCommandArgs e)
        {
            string msg = e.Command.ArgumentsAsString;

            if (msg == null)
            {
                msg = string.Empty;
            }

            BotProgram.BotData.GameMessage = msg;

            //Always save the message to a file so it updates on OBS

            /*For reading from this file on OBS:
             * 1. Create Text (GDI+)
             * 2. Check the box labeled "Read from file"
             * 3. Browse and select the file
             */
            if (Globals.SaveToTextFile(Globals.GameMessageFilename, BotProgram.BotData.GameMessage) == false)
            {
                BotProgram.MsgHandler.QueueMessage($"Unable to save message to file");
            }

            BotProgram.SaveBotData();
        }
        public override void ExecuteCommand(EvtChatCommandArgs args)
        {
            string creditsName = DataHelper.GetCreditsName();

            long median = 0;

            using (BotDBContext context = DatabaseManager.OpenContext())
            {
                if (context.Users.Count() == 0)
                {
                    QueueMessage("There are no users in the database!");
                    return;
                }

                List <User> orderedCredits = context.Users.OrderByDescending(u => u.Stats.Credits).ToList();

                int medianIndex = orderedCredits.Count / 2;

                if (medianIndex >= orderedCredits.Count)
                {
                    QueueMessage("Sorry, there's not enough data available in the database!");
                    return;
                }

                median = orderedCredits[medianIndex].Stats.Credits;
            }

            QueueMessage($"The median number of {creditsName.Pluralize(false, 0)} in the database is {median}!");
        }
        public override void ExecuteCommand(EvtChatCommandArgs args)
        {
            List <string> arguments = args.Command.ArgumentsAsList;

            if (arguments.Count > 1)
            {
                QueueMessage(UsageMessage);
                return;
            }

            string infoUsername = (arguments.Count == 1) ? arguments[0].ToLowerInvariant() : args.Command.ChatMessage.Username.ToLowerInvariant();

            using (BotDBContext context = DatabaseManager.OpenContext())
            {
                User infoUser = DataHelper.GetUserNoOpen(infoUsername, context);

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

                if (infoUser.IsOptedOut == true)
                {
                    QueueMessage($"User: {infoUser.Name} | Level: {infoUser.Level} ({(PermissionLevels)infoUser.Level}) | Controller Port: {infoUser.ControllerPort}");
                    return;
                }

                //Print the user's information
                QueueMessage($"User: {infoUser.Name} | Level: {infoUser.Level} ({(PermissionLevels)infoUser.Level}) | Controller Port: {infoUser.ControllerPort} | Total Inputs: {infoUser.Stats.ValidInputCount} | Total Messages: {infoUser.Stats.TotalMessageCount}");
            }
        }
Beispiel #17
0
        public override void ExecuteCommand(EvtChatCommandArgs e)
        {
            List <string> args = e.Command.ArgumentsAsList;

            if (args == null || args.Count <= 0)
            {
                BotProgram.MsgHandler.QueueMessage("Choose one or more people to high five!");
                return;
            }

            string highFive = string.Empty;

            for (int i = 0; i < args.Count; i++)
            {
                int nextInd = i + 1;

                if (i > 0)
                {
                    highFive += ", ";
                    if (nextInd == args.Count)
                    {
                        highFive += "and ";
                    }
                }

                highFive += args[i];
            }

            BotProgram.MsgHandler.QueueMessage($"{e.Command.ChatMessage.DisplayName} high fives {highFive}!");
        }
Beispiel #18
0
        public override void ExecuteCommand(EvtChatCommandArgs args)
        {
            QueueMessage("Checking to initialize default values for missing database entries.");

            int entriesAdded = 0;

            using (BotDBContext context = DatabaseManager.OpenContext())
            {
                //Tell it to force initialize defaults
                Settings forceInitSetting = DataHelper.GetSettingNoOpen(SettingsConstants.FORCE_INIT_DEFAULTS, context);
                if (forceInitSetting != null)
                {
                    forceInitSetting.ValueInt = 1;
                    context.SaveChanges();
                }
            }

            entriesAdded = DataHelper.InitDefaultData();

            if (entriesAdded > 0)
            {
                QueueMessage($"Added {entriesAdded} additional entries to the database. Make sure to reload data if you're expecting new commands.");
            }
            else
            {
                QueueMessage("No new entries added.");
            }
        }
        public override void ExecuteCommand(EvtChatCommandArgs args)
        {
            StringBuilder strBuilder = null;

            using (BotDBContext context = DatabaseManager.OpenContext())
            {
                int memeCount = context.Memes.Count();

                if (memeCount == 0)
                {
                    QueueMessage("There are no memes!");
                    return;
                }

                //The capacity is the estimated average number of characters for each meme multiplied by the number of memes
                strBuilder = new StringBuilder(memeCount * 20);

                foreach (Meme meme in context.Memes)
                {
                    strBuilder.Append(meme.MemeName).Append(',').Append(' ');
                }
            }

            strBuilder.Remove(strBuilder.Length - 2, 2);

            int maxCharCount = (int)DataHelper.GetSettingInt(SettingsConstants.BOT_MSG_CHAR_LIMIT, 500L);

            QueueMessageSplit(strBuilder.ToString(), maxCharCount, ", ");
        }
        public override void ExecuteCommand(EvtChatCommandArgs args)
        {
            List <string> arguments = args.Command.ArgumentsAsList;

            if (arguments.Count != 1)
            {
                QueueMessage(UsageMessage);
                return;
            }

            string macroName = arguments[0].ToLowerInvariant();

            using (BotDBContext context = DatabaseManager.OpenContext())
            {
                InputMacro macro = context.Macros.FirstOrDefault(m => m.MacroName == macroName);

                if (macro == null)
                {
                    QueueMessage($"Input macro \"{macroName}\" could not be found.");
                    return;
                }

                context.Macros.Remove(macro);
                context.SaveChanges();
            }

            QueueMessage($"Removed input macro \"{macroName}\".");
        }
        public override void ExecuteCommand(EvtChatCommandArgs args)
        {
            List <string> arguments = args.Command.ArgumentsAsList;

            //Soft reload with no arguments
            if (arguments.Count == 0)
            {
                SoftReload();
                return;
            }

            if (arguments.Count > 1)
            {
                QueueMessage(UsageMessage);
                return;
            }

            string arg1 = arguments[0].ToLowerInvariant();

            //Soft reloads
            if (arg1 == SOFT_RELOAD_ARG)
            {
                SoftReload();
            }
            else if (arg1 == HARD_RELOAD_ARG)
            {
                HardReload();
            }
            else
            {
                QueueMessage(UsageMessage);
            }
        }
Beispiel #22
0
        public override void ExecuteCommand(EvtChatCommandArgs e)
        {
            string args = e.Command.ArgumentsAsString.ToLower();

            if (BotProgram.BotData.Achievements.AchievementDict.TryGetValue(args, out Achievement achievement) == false)
            {
                BotProgram.MsgHandler.QueueMessage("There are no achievements with that name!");
                return;
            }

            //string name = e.Command.ChatMessage.DisplayName;
            //string nameToLower = name.ToLower();

            //User user = BotProgram.GetUser(nameToLower);
            //if (user == null)
            //{
            //    return;
            //}
            string achStr = achievement.Description.ToString();

            if (achievement.CreditReward > 0)
            {
                achStr += " | " + achievement.CreditReward.ToString() + " credit reward.";
            }

            BotProgram.MsgHandler.QueueMessage(achStr);
        }
        public override void ExecuteCommand(EvtChatCommandArgs args)
        {
            List <string> arguments = args.Command.ArgumentsAsList;

            if (arguments.Count != 1)
            {
                QueueMessage(UsageMessage);
                return;
            }

            string consoleName       = arguments[0].ToLowerInvariant();
            int    consoleID         = 1;
            string actualConsoleName = string.Empty;

            using (BotDBContext context = DatabaseManager.OpenContext())
            {
                GameConsole console = context.Consoles.FirstOrDefault(c => c.Name == consoleName);

                //Check if a valid console is specified
                if (console == null)
                {
                    QueueMessage($"\"{consoleName}\" is not a valid console.");
                    return;
                }

                consoleID = console.ID;
            }

            StringBuilder stringBuilder = null;

            using (BotDBContext context = DatabaseManager.OpenContext())
            {
                IQueryable <InputSynonym> synonyms = context.InputSynonyms.Where(syn => syn.ConsoleID == consoleID);

                int count = synonyms.Count();

                if (count == 0)
                {
                    QueueMessage($"The {consoleName} console does not have any input synonyms.");
                    return;
                }

                stringBuilder = new StringBuilder(count * 15);

                stringBuilder.Append("Synonyms for ").Append(consoleName).Append(':').Append(' ');

                //Show all input synonyms for this console
                foreach (InputSynonym synonym in synonyms)
                {
                    stringBuilder.Append('{').Append(' ').Append(synonym.SynonymName).Append(',').Append(' ');
                    stringBuilder.Append(synonym.SynonymValue).Append(' ').Append('}').Append(',').Append(' ');
                }
            }

            stringBuilder.Remove(stringBuilder.Length - 2, 2);

            int maxCharCount = (int)DataHelper.GetSettingInt(SettingsConstants.BOT_MSG_CHAR_LIMIT, 500L);

            QueueMessageSplit(stringBuilder.ToString(), maxCharCount, ", ");
        }
        public override void ExecuteCommand(EvtChatCommandArgs args)
        {
            List <string> arguments = args.Command.ArgumentsAsList;

            if (arguments.Count != 1)
            {
                QueueMessage(UsageMessage);
                return;
            }

            string macroName = arguments[0].ToLowerInvariant();
            string message   = string.Empty;

            using (BotDBContext context = DatabaseManager.OpenContext())
            {
                InputMacro macro = context.Macros.FirstOrDefault(m => m.MacroName == macroName);

                if (macro == null)
                {
                    message = $"Input macro \"{macroName}\" not found. For dynamic input macros, use the generic form (Ex. \"#test(*)\").";
                }
                else
                {
                    message = $"{macro.MacroName} = {macro.MacroValue}";
                }
            }

            QueueMessage(message);
        }
Beispiel #25
0
        public override void ExecuteCommand(EvtChatCommandArgs args)
        {
            List <string> arguments = args.Command.ArgumentsAsList;

            if (arguments.Count > 1)
            {
                QueueMessage(UsageMessage);
                return;
            }

            string creditsUsername = (arguments.Count == 1) ? arguments[0].ToLowerInvariant() : args.Command.ChatMessage.Username.ToLowerInvariant();
            long   creditsCount    = 0L;

            using (BotDBContext context = DatabaseManager.OpenContext())
            {
                User creditsUser = DataHelper.GetUserNoOpen(creditsUsername, context);

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

                creditsCount = creditsUser.Stats.Credits;
            }

            string creditsName = DataHelper.GetCreditsName();

            QueueMessage($"{creditsUsername} has {creditsCount} {creditsName.Pluralize(false, creditsCount)}!");
        }
Beispiel #26
0
        public override void ExecuteCommand(EvtChatCommandArgs args)
        {
            List <string> arguments = args.Command.ArgumentsAsList;

            if (arguments.Count != 2)
            {
                QueueMessage(UsageMessage);
                return;
            }

            //Parse the numbers
            if (int.TryParse(arguments[0], out int num1) == true && int.TryParse(arguments[1], out int num2) == true)
            {
                //Get the true min and max values
                int min = Math.Min(num1, num2);
                int max = Math.Max(num1, num2);

                int randNum = Rand.Next(min, max);

                QueueMessage($"The random number between {min} and {max} is: {randNum}! Play again!");
            }
            else
            {
                QueueMessage(UsageMessage);
            }
        }
Beispiel #27
0
        public override void ExecuteCommand(EvtChatCommandArgs e)
        {
            string name        = e.Command.ChatMessage.DisplayName;
            string nameToLower = name.ToLower();

            User user = BotProgram.GetOrAddUser(nameToLower);

            if (user == null)
            {
                return;
            }

            if (user.OptedOut == false)
            {
                user.SetOptOut(true);

                BotProgram.SaveBotData();
                BotProgram.MsgHandler.QueueMessage("Opted out of bot stats!");
                return;
            }
            else if (user.OptedOut == true)
            {
                user.SetOptOut(false);

                BotProgram.SaveBotData();
                BotProgram.MsgHandler.QueueMessage("Opted back into bot stats!");
                return;
            }
        }
        public override void ExecuteCommand(EvtChatCommandArgs e)
        {
            //Reload settings and bot data
            BotProgram.LoadSettingsAndBotData();

            BotProgram.MsgHandler.QueueMessage("Reloaded bot settings and data!");
        }
Beispiel #29
0
        public override void ExecuteCommand(EvtChatCommandArgs args)
        {
            string versionString = DataHelper.GetSettingString(SettingsConstants.DATA_VERSION_NUM, "Unknown??");

            ValueStr = $"This bot is running TRBot version {Application.VERSION_NUMBER} with data version {versionString}!";

            base.ExecuteCommand(args);
        }
Beispiel #30
0
        public override void ExecuteCommand(EvtChatCommandArgs e)
        {
            List <string> args = e.Command.ArgumentsAsList;

            if (args.Count < 2)
            {
                BotProgram.MsgHandler.QueueMessage($"{Globals.CommandIdentifier}addmeme usage: memename memevalue");
                return;
            }

            if (args[0].ElementAt(0) == '/' || args[1].ElementAt(0) == '/')
            {
                BotProgram.MsgHandler.QueueMessage("Memes cannot start with Twitch chat commands!");
                return;
            }

            if (args[0].ElementAt(0) == Globals.CommandIdentifier)
            {
                BotProgram.MsgHandler.QueueMessage($"Memes cannot start with \'{Globals.CommandIdentifier}\'");
                return;
            }

            if (args[0].ElementAt(0) == Globals.MacroIdentifier)
            {
                BotProgram.MsgHandler.QueueMessage($"Memes cannot start with \'{Globals.MacroIdentifier}\'");
                return;
            }

            if (args[0].Length > MAX_MEME_LENGTH)
            {
                BotProgram.MsgHandler.QueueMessage($"The max meme length is {MAX_MEME_LENGTH} characters!");
                return;
            }

            string memeToLower     = args[0].ToLower();
            bool   sendOverwritten = false;

            if (BotProgram.BotData.Memes.ContainsKey(memeToLower) == true)
            {
                BotProgram.BotData.Memes.TryRemove(memeToLower, out string meme);
                sendOverwritten = true;
            }

            string actualMeme = e.Command.ArgumentsAsString.Remove(0, args[0].Length + 1);

            BotProgram.BotData.Memes.TryAdd(memeToLower, actualMeme);

            BotProgram.SaveBotData();

            if (sendOverwritten == true)
            {
                BotProgram.MsgHandler.QueueMessage("Meme overwritten!");
            }
            else
            {
                MemesCommand.CacheMemesString();
            }
        }