public static void ToggleTestModePrivateCommandCallback(object s, OnWhisperCommandReceivedArgs e,
                                                                CommandCallbackArgs args)
        {
            var channelBotInfo = args.DbContext.ChannelInfos.SingleOrDefault(c =>
                                                                             EF.Functions.ILike(c.ChannelUsername, e.Command.ArgumentsAsString));

            if (channelBotInfo == null)
            {
                return;
            }

            channelBotInfo.IsTestMode = !channelBotInfo.IsTestMode;
        }
        public static string WaitingStreamCommandCallback(object s, OnChatCommandReceivedArgs e, CommandCallbackArgs args)
        {
            var command        = e.Command;
            var currentOption  = args.Option;
            var isAnyArguments = !string.IsNullOrEmpty(command.ArgumentsAsString);
            var channelName    = isAnyArguments
                ? command.ArgumentsAsString.TrimStart('@').ToLower()
                : args.ChannelInfo.ChannelUsername;
            var channelBotInfo = args.ChannelInfo;

            var isThisChannel =
                string.Equals(channelName, args.ChannelInfo.ChannelUsername, BotService.StringComparison);
            var channelId = isThisChannel
                ? channelBotInfo.ChannelUserId
                : BotService.BotTwitchHelpers.GetIdByUsername(channelName);

            string answer;

            if (channelId is null)
            {
                answer = currentOption.ChildOptions.Single(n => n.Name == "nickname_not_found").GetAnswer(s, e, args);
                return(answer);
            }

            var isStreamUp = BotService.BotTwitchHelpers.IsStreamUp(channelId).Result;

            if (isStreamUp)
            {
                answer = currentOption.ChildOptions.Single(n => n.Name == "stream_on").GetAnswer(s, e, args);
                return(answer);
            }

            var result = BotService.BotTwitchHelpers.GetElapsedTimeFromLastStream(channelId);

            if (result is not null)
            {
                var timespan     = result.Value;
                var timespanPart = UtilityFunctions.FormatTimespan(timespan);
                answer = currentOption.ChildOptions.Single(n => n.Name == "waiting_for_stream").GetAnswer(s, e, args);
                answer = string.Format(answer, channelName, timespanPart);
            }
            else
            {
                answer = currentOption.ChildOptions.Single(n => n.Name == "not_streamer").GetAnswer(s, e, args);
            }

            return(answer);
        }
        public static string GetCommandsCommandCallback(object s, OnChatCommandReceivedArgs e, CommandCallbackArgs args)
        {
            var currentOption = args.Option;
            var baseUrl       = BotService.CurrentEnvironment.IsProduction()
                ? "https://nortages-twitch-bot.herokuapp.com"
                : "http://localhost:5000";
            var multiLangAnswer = currentOption.GetMultiLangAnswer(args);

            return(string.Format(multiLangAnswer, baseUrl, args.ChannelInfo.ChannelUsername.ToLower()));
        }
 public static void RefreshChannelInfosPrivateCommandCallback(object s, OnWhisperCommandReceivedArgs e, CommandCallbackArgs args)
 {
     args.ChannelBot.ChannelInfo = BotService.LoadChannelInfos(args.DbContext, args.ChannelBot.ChannelInfo.Id).GetAwaiter().GetResult().Single();
     args.Logger.LogInformation("ChannelInfo was refreshed");
 }
        public static void ChangeLangPrivateCommandCallback(object s, OnWhisperCommandReceivedArgs e, CommandCallbackArgs args)
        {
            var commandArgs    = e.Command.ArgumentsAsList;
            var channelBotInfo = args.DbContext.ChannelInfos.SingleOrDefault(c =>
                                                                             EF.Functions.ILike(c.ChannelUsername, commandArgs[1]));

            if (channelBotInfo == null)
            {
                return;
            }

            channelBotInfo.Lang = Enum.TryParse <Lang>(commandArgs[0], out var result) ? result : Lang.ru;
        }
        // Translates gibberish written in Russian in English layout into Russian layout.
        public static string FixCommandCallback(object s, OnChatCommandReceivedArgs e, CommandCallbackArgs args)
        {
            var inputString     = e.Command.ArgumentsAsString;
            var outputString    = "";
            var isNickname      = false;
            var latinToCyrillic = JsonConvert.DeserializeObject <Dictionary <char, char> >(args.Option.AdditionalData);

            var inputStringCases = new bool[inputString.Length];

            for (var i = 0; i < inputString.Length; i++)
            {
                inputStringCases[i] = char.IsUpper(inputString[i]);
            }
            var inputStringLower = inputString.ToLower();

            for (var i = 0; i < inputStringLower.Length; i++)
            {
                var ch = inputStringLower[i];
                if (ch == '@')
                {
                    isNickname    = true;
                    outputString += ch;
                    continue;
                }

                if (isNickname)
                {
                    outputString += ch;
                    if (new[] { ' ', ',' }.Contains(ch))
                    {
                        isNickname = false;
                    }
                    continue;
                }

                var charToAdd = latinToCyrillic.TryGetValue(ch, out var fixedChar) ? fixedChar : ch;
                if (inputStringCases[i])
                {
                    charToAdd = char.ToUpper(charToAdd);
                }
                outputString += charToAdd;
            }

            return(outputString);
        }
 public static void ToggleUkrainianStreamCommandCallback(object s, OnChatCommandReceivedArgs e,
                                                         CommandCallbackArgs args)
 {
     args.ChannelInfo.Lang = Lang.ua;
 }
        public static string CardCommandCallback(object s, OnChatCommandReceivedArgs e, CommandCallbackArgs args)
        {
            var chatCommand   = e.Command;
            var currentOption = args.Option;

            Option childOption;

            if (args.ChannelInfo.IsTestMode)
            {
                childOption = currentOption.ChildOptions.SingleOrDefault(n => n.Name == chatCommand.ArgumentsAsString);
                if (childOption == null)
                {
                    return("карты с таким id не существует");
                }
            }
            else
            {
                childOption = currentOption.ChildOptions.GetRandProbableOption();
            }

            args.Option = childOption;
            var cardDescription = childOption.GetAnswer(s, e, args);

            if (childOption.Name == "59935")
            {
                UtilityFunctions.TimeoutCommandUser(e.Command, args, TimeSpan.FromMinutes(10));
            }

            return(cardDescription);
        }
        public static string ManulCommandCallback(object s, OnChatCommandReceivedArgs e, CommandCallbackArgs args)
        {
            var multiLangAnswerId = args.Option.MultiLangAnswer.Single(a => a.Lang == Lang.ru).Id;
            var multiLangAnswer   = args.DbContext.MultiLangAnswers.Single(mla => mla.Id == multiLangAnswerId);
            var manulsNum         = int.Parse(multiLangAnswer.Text);

            manulsNum++;
            multiLangAnswer.Text = manulsNum.ToString();
            args.DbContext.Update(multiLangAnswer);

            var manulWord = e.Command.CommandText;

            manulWord += UtilityFunctions.GetRussianWordEnding(manulsNum, new[] { "", "а", "ов" });
            var answer = $"{manulsNum} {manulWord}";

            return(answer);
        }
예제 #10
0
        public static string RadishDetonatorOptionCallback(object s, OnChatCommandReceivedArgs e, CommandCallbackArgs args)
        {
            var chatCommand    = e.Command;
            var currentOption  = args.Option;
            var currentCommand = args.Command;

            Option optionInfo;
            var    username = chatCommand.ChatMessage.Username;

            if (currentOption.UsageFrequency.ContainsKey(username))
            {
                if (args.UserChannelCommand.LastOption == currentOption)
                {
                    optionInfo = currentOption.ChildOptions.GetRandProbableOption();
                }
                else
                {
                    optionInfo = currentOption.ChildOptions.Single(co => co.Name == "radish_detonator_option1");
                }
            }
            else
            {
                currentOption.UsageFrequency.Add(username, 0);
                optionInfo = currentOption.ChildOptions.ElementAt(0);
            }

            currentOption.UsageFrequency[username]++;
            var answer = optionInfo.GetAnswer(s, e, args);

            return(answer);
        }
예제 #11
0
        public static string RadishTransformsOptionCallback(object s, OnChatCommandReceivedArgs e, CommandCallbackArgs args)
        {
            var command       = e.Command;
            var currentOption = args.Option;

            Option childOption;
            var    username = command.ChatMessage.Username;

            currentOption.UsageFrequency.GetValueAndSetIfNotExists(username);

            if (currentOption.UsageFrequency[username] >= 5)
            {
                childOption = currentOption.ChildOptions.GetRandProbableOption();
                if (childOption == currentOption.ChildOptions.Single(c => c.Name == "into_golden_strawberry"))
                {
                    currentOption.UsageFrequency[username] = 0;
                }
            }
            else
            {
                childOption = currentOption.ChildOptions.Single(c => c.Name == "into_plain_strawberry");
            }

            currentOption.UsageFrequency[username]++;
            var answer = childOption.GetAnswer(s, e, args);

            return(answer);
        }
예제 #12
0
        public static string FactCommandCallback(object s, OnChatCommandReceivedArgs e, CommandCallbackArgs args)
        {
            var currentOption = args.Option;
            var answer        = currentOption.GetAnswerFromOptions(s, e, args);

            if (e.Command.CommandText is not("кирафакт" or "кирофакт"))
            {
                return(answer + " OSFrog");
            }
            ;

            var frogWordToKira =
                JsonConvert.DeserializeObject <Dictionary <string, string> >(currentOption.AdditionalData);

            foreach (var frogWord in frogWordToKira !.Keys)
            {
                answer = answer.Replace(frogWord, frogWordToKira[frogWord], StringComparison.OrdinalIgnoreCase);
            }

            return(answer + " PETTHEkupa");
        }
예제 #13
0
        public static string RadishTiredOptionCallback(object s, OnChatCommandReceivedArgs e, CommandCallbackArgs args)
        {
            var command       = e.Command;
            var currentOption = args.Option;
            var username      = command.ChatMessage.Username;
            var channel       = command.ChatMessage.Channel;
            var childOption   = currentOption.ChildOptions.GetRandProbableOption();
            var answer        = childOption.GetAnswer(s, e, args);
            var numOfUsing    = currentOption.ParentOption.UsageFrequency.GetValueAndSetIfNotExists(username);

            var timesWord = "раз";
            var endings   = args.ChannelInfo.Lang == Lang.ua ? new[] { "", "и", "iв" } : new[] { "", "а", "" };

            timesWord += UtilityFunctions.GetRussianWordEnding(numOfUsing, endings);
            answer     = string.Format(answer, numOfUsing, timesWord);
            currentOption.ParentOption.UsageFrequency[username]++;

            if (childOption.Name == "timeout")
            {
                var timeoutTime = TimeSpan.FromMinutes(1);
                if (command.ChatMessage.IsModerator)
                {
                    args.ChannelBot.ChannelTwitchClient.TimeoutModer(channel, username, timeoutTime);
                }
                else
                {
                    BotService.BotTwitchClient.TimeoutUser(channel, username, timeoutTime);
                }
            }

            return(answer);
        }
예제 #14
0
        public static string BoatCommandCallback(object s, OnChatCommandReceivedArgs e, CommandCallbackArgs args)
        {
            var command  = e.Command;
            var answer   = "";
            var channel  = command.ChatMessage.Channel;
            var username = command.ChatMessage.Username;

            var assessmentOptions = new List <string> {
                "слабовато чел...", "а ты скилловый Jebaited"
            };
            var    pirates = new List <MinionInfo>();
            string assessment;

            MinionInfo specialPirate = null;
            var        allPirates    = BotService.HearthstoneApiClient
                                       .GetBattlegroundsMinions(MinionType.Pirate, notImplemented: true).ToList();

            if (command.ArgumentsAsList.Count != 0 && command.ArgumentsAsList[0] == "триплет" &&
                e.Command.ChatMessage.IsMeOrBroadcaster())
            {
                specialPirate = command.ArgumentsAsList[1] switch
                {
                    "элизы" => allPirates.Single(n => n.Id == 61047),
                    "амальгадона" => allPirates.Single(n => n.Id == 61444),
                    _ => allPirates[Program.Rand.Next(0, allPirates.Count)]
                }
            }
            ;

            for (var i = 0; i < 3; i++)
            {
                var pirate = specialPirate ?? allPirates[Program.Rand.Next(0, allPirates.Count)];
                pirates.Add(pirate);
                answer += $"{pirate}, ";
            }

            answer = answer.TrimEnd(' ', ',');
            if (pirates.All(n => pirates[0].Id == n.Id))
            {
                switch (pirates[0].Id)
                {
                // Check for Elisa
                case 61047:
                    assessment = "ТРИ ЭЛИЗЫ ЭТ КОНЕЧНО ПРИКОЛ, ДО ВСТРЕЧИ ЧЕРЕЗ ПОЛЧАСА LUL";
                    UtilityFunctions.TimeoutCommandUser(e.Command, args, TimeSpan.FromMinutes(30),
                                                        "Выпало 3 Элизы с команды !лодка");
                    break;

                // Check for Amalgadon
                case 61444:
                    assessment = "777, ЛОВИ ВИПКУ";
                    if (!command.ChatMessage.IsModerator)
                    {
                        args.ChannelBot.ChannelTwitchClient.SendMessage(channel, $"/vip {username}");
                    }
                    break;

                // Just triple
                default:
                    assessment = "найс триплет с лодки, жаль все равно отъедешь BloodTrail";
                    break;
                }
            }
            else
            {
                const int maxMark = 57; // Elisa x3
                // Assess pirates
                var mark     = pirates.Sum(pirate => pirate.Attack + pirate.Health + pirate.Battlegrounds.Tier);
                var quotient = (double)mark / maxMark;
                assessment = assessmentOptions[quotient > 0.6 ? 1 : 0];
            }

            return($"YEP {answer} YEP , {assessment}");
        }