Пример #1
0
        public async Task TrendRandom([Remainder] string randomSearchString)
        {
            var match = await _FunctionWrapper.GetJobConfigAsync(Context.Channel.Id);

            var maxLength           = _Config.GetValue <int>("RandomSearchStringMaxLength");
            var isValidSearchString = !string.IsNullOrEmpty(randomSearchString) && randomSearchString.Length <= maxLength;

            if (!isValidSearchString)
            {
                await TryReplyAsync($"Please provide a random gif filter that is at most {maxLength} characters long.");
            }
            else
            {
                string newRandomSearchString;
                var    shouldTurnCommandOff = _TrendHelper.ShouldTurnCommandOff(randomSearchString);
                if (shouldTurnCommandOff)
                {
                    newRandomSearchString = null;
                }
                else
                {
                    newRandomSearchString = randomSearchString;
                }
                var container = new JobConfigContainer(match, randomSearchString);
                var result    = await _FunctionWrapper.PostJobConfigAsync(Context.Channel.Id, container);
                await ReplyWithJobConfig(result);
            }
        }
Пример #2
0
        public async Task <JobConfigContainer> PostJobConfigAsync(decimal channelId, JobConfigContainer jobConfigContainer)
        {
            var requestUri = $"{_JobConfigEndpoint}/{channelId}";
            var response   = await _HttpClient.PostObjectWithHeaderAsync(requestUri, jobConfigContainer, _FunctionsKeyHeaderName, _PostJobConfigFunctionKey);

            return(await ProcessJobConfigResponse(channelId, response));
        }
Пример #3
0
        public void BuildEmbed()
        {
            var          context     = new Mock <ICommandContext>();
            const string channelName = "Apex Legends Pog";

            context.Setup(s => s.Channel.Name).Returns(channelName);
            const string guildIconUrl = "https://asdf.com/icon";

            context.Setup(s => s.Guild.IconUrl).Returns(guildIconUrl);
            const string helpText = "Here is some help text to help you out.";

            _Config.Setup(s => s["GetConfigHelpFieldText"]).Returns(helpText);
            var config = new JobConfigContainer();
            var result = _TrendHelper.BuildEmbed(config, context.Object);

            context.VerifyAll();
            _Config.VerifyAll();
            var expectedAuthorName = $"Setup for Channel # {channelName}";

            Assert.That(result.Author.Value.Name, Is.EqualTo(expectedAuthorName));
            Assert.That(result.Author.Value.IconUrl, Is.EqualTo(guildIconUrl));
            Assert.That(result.Fields[0].Inline, Is.True);
            Assert.That(result.Fields[0].Name, Is.EqualTo("How Often?"));
            Assert.That(result.Fields[0].Value, Is.EqualTo("```less\nnever```"));
            Assert.That(result.Fields[1].Inline, Is.True);
            Assert.That(result.Fields[1].Name, Is.EqualTo("Random Gifs?"));
            Assert.That(result.Fields[1].Value, Is.EqualTo("```yaml\nno```"));
            Assert.That(result.Fields[2].Inline, Is.True);
            Assert.That(result.Fields[2].Name, Is.EqualTo("Trend When?"));
            Assert.That(result.Fields[2].Value, Is.EqualTo("```fix\nall the time```"));
            Assert.That(result.Fields[3].Inline, Is.False);
            Assert.That(result.Fields[3].Name, Is.EqualTo("Need Help?"));
            Assert.That(result.Fields[3].Value, Is.EqualTo(helpText));
        }
 static string DetermineQuietHoursFieldValue(JobConfigContainer jobConfig)
 {
     if (jobConfig.MinQuietHour.HasValue && jobConfig.MaxQuietHour.HasValue)
     {
         return($"between {jobConfig.MaxQuietHour.Value} and {jobConfig.MinQuietHour.Value} o'clock");
     }
     return("all the time");
 }
 static string DetermineRandomFieldValue(JobConfigContainer config)
 {
     if (!string.IsNullOrEmpty(config.RandomSearchString))
     {
         return($"yes, of \"{config.RandomSearchString}\"");
     }
     return("no");
 }
        public async Task <IActionResult> RunAsync(JobConfigContainer container, decimal channelId)
        {
            _Log.LogInformation($"Channel {channelId} posting job config.");
            var result = await _Context.SetJobConfig(channelId, container);

            _Log.LogInformation($"Channel {channelId} posted job config.");
            return(new OkObjectResult(result));
        }
 public JobConfigContainer(JobConfigContainer basedOn, short?minQuietHour, short?maxQuietHour)
 {
     ChannelId          = basedOn.ChannelId;
     Interval           = basedOn.Interval;
     Time               = basedOn.Time;
     RandomSearchString = basedOn.RandomSearchString;
     MinQuietHour       = minQuietHour;
     MaxQuietHour       = maxQuietHour;
 }
 public JobConfigContainer(JobConfigContainer basedOn, short?interval, string time)
 {
     ChannelId          = basedOn.ChannelId;
     Interval           = interval;
     Time               = time;
     RandomSearchString = basedOn.RandomSearchString;
     MinQuietHour       = basedOn.MinQuietHour;
     MaxQuietHour       = basedOn.MaxQuietHour;
 }
 public JobConfigContainer(JobConfigContainer basedOn, string randomSearchString)
 {
     ChannelId          = basedOn.ChannelId;
     Interval           = basedOn.Interval;
     Time               = basedOn.Time;
     RandomSearchString = randomSearchString;
     MinQuietHour       = basedOn.MinQuietHour;
     MaxQuietHour       = basedOn.MaxQuietHour;
 }
 public static EmbedBuilder WithHowOften(this EmbedBuilder embedBuilder, JobConfigContainer config)
 {
     if (config.Interval.HasValue && !string.IsNullOrEmpty(config.Time))
     {
         var every = $"```less\n{config.Interval} {config.Time.ToLower()}```";
         return(embedBuilder.AddInlineField("How Often?", every));
     }
     return(embedBuilder.AddInlineField("How Often?", "```less\nnever```"));
 }
        public async Task RunAsync()
        {
            const decimal channelId = 123;

            _Log.Setup(s => s.LogInformation($"Channel {channelId} deleting job config."));
            var container = new JobConfigContainer();

            _Context.Setup(s => s.DeleteJobConfig(channelId)).Returns(Task.CompletedTask);
            _Log.Setup(s => s.LogInformation($"Channel {channelId} deleted job config."));
            var result = await _DeleteJobConfigHelper.RunAsync(channelId);

            _Log.VerifyAll();
            _Context.VerifyAll();
            Assert.That(result, Is.Not.Null);
            Assert.That(result, Is.InstanceOf <NoContentResult>());
        }
Пример #12
0
        public async Task Every(short interval, Time time)
        {
            var errorMessage = _TrendHelper.DetermineErrorMessage(interval, time);

            if (string.IsNullOrEmpty(errorMessage))
            {
                var match = await _FunctionWrapper.GetJobConfigAsync(Context.Channel.Id);

                var container = new JobConfigContainer(match, interval, time.ToString());
                var result    = await _FunctionWrapper.PostJobConfigAsync(Context.Channel.Id, container);
                await ReplyWithJobConfig(result);
            }
            else
            {
                await TryReplyAsync(errorMessage);
            }
        }
Пример #13
0
        public async Task RunAsync()
        {
            const decimal channelId = 123;

            _Log.Setup(s => s.LogInformation($"Channel {channelId} getting job config."));
            var container = new JobConfigContainer();

            _Context.Setup(s => s.GetJobConfig(channelId)).ReturnsAsync(container);
            _Log.Setup(s => s.LogInformation($"Channel {channelId} got job config."));
            var result = await _GetJobConfigHelper.RunAsync(channelId);

            _Log.VerifyAll();
            _Context.VerifyAll();
            var okObjectResult = result as OkObjectResult;

            Assert.That(okObjectResult, Is.Not.Null);
            Assert.That(okObjectResult.Value, Is.EqualTo(container));
        }
Пример #14
0
        public Embed BuildEmbed(JobConfigContainer config, ICommandContext context)
        {
            var author = new EmbedAuthorBuilder()
                         .WithName($"Setup for Channel # {context.Channel.Name}")
                         .WithIconUrl(context.Guild.IconUrl);
            var helpFieldText = _Config["GetConfigHelpFieldText"];
            var helpField     = new EmbedFieldBuilder()
                                .WithName("Need Help?")
                                .WithValue(helpFieldText);
            var embedBuilder = new EmbedBuilder()
                               .WithAuthor(author)
                               .WithHowOften(config)
                               .WithRandomConfigFields(config)
                               .WithQuietHourFields(config)
                               .AddField(helpField);

            return(embedBuilder.Build());
        }
Пример #15
0
        public async Task Between([Remainder] string trendBetweenString)
        {
            var match = await _FunctionWrapper.GetJobConfigAsync(Context.Channel.Id);

            var split = trendBetweenString.Split(_ArgsSplit, StringSplitOptions.RemoveEmptyEntries);

            if (split.Length != 3)
            {
                await TryReplyAsync(_Config["InvalidQuietHoursInputFormat"]);
            }
            else
            {
                var minInRange = _TrendHelper.IsInRange(split[2], out var minQuietHour);
                var maxInRange = _TrendHelper.IsInRange(split[0], out var maxQuietHour);
                if (!(minInRange && maxInRange) || minQuietHour == maxQuietHour)
                {
                    await TryReplyAsync(_Config["InvalidQuietHoursRangeMessage"]);
                }
                else
                {
                    short?newMinQuietHour;
                    short?newMaxQuietHour;
                    var   shouldTurnCommandOff = _TrendHelper.ShouldTurnCommandOff(trendBetweenString);
                    if (shouldTurnCommandOff)
                    {
                        newMinQuietHour = null;
                        newMaxQuietHour = null;
                    }
                    else
                    {
                        newMinQuietHour = minQuietHour;
                        newMaxQuietHour = maxQuietHour;
                    }
                    var container = new JobConfigContainer(match, minQuietHour, maxQuietHour);
                    var result    = await _FunctionWrapper.PostJobConfigAsync(Context.Channel.Id, container);
                    await ReplyWithJobConfig(result);
                }
            }
        }
        public static EmbedBuilder WithQuietHourFields(this EmbedBuilder embedBuilder, JobConfigContainer jobConfig)
        {
            var fieldValue = DetermineQuietHoursFieldValue(jobConfig);

            return(embedBuilder.AddInlineField("Trend When?", $"```fix\n{fieldValue}```"));
        }
Пример #17
0
        async Task ReplyWithJobConfig(JobConfigContainer config)
        {
            var embed = _TrendHelper.BuildEmbed(config, Context);

            await TryReplyAsync(embed);
        }
        public static EmbedBuilder WithRandomConfigFields(this EmbedBuilder embedBuilder, JobConfigContainer config)
        {
            var fieldValue = DetermineRandomFieldValue(config);

            return(embedBuilder.AddInlineField("Random Gifs?", $"```yaml\n{fieldValue}```"));
        }