public static SlackPayload FormatFailedBuild(Build build, string slackChannel, string updateTs, SlackUserResponse pullRequestOwner)
        {
            var payloadBuilder = new SlackPayloadBuilder();
            var builder        = payloadBuilder
                                 .SendsTo(slackChannel)
                                 .PostsAsThreadIn(updateTs)
                                 .LinksNames(true)
                                 .HasPreviewText($"Build of your PR failed.");

            var buildString = !string.IsNullOrEmpty(build.Url)
                ? $"<{build.WebUrl}|the build>"
                : "the build";

            if (pullRequestOwner != null)
            {
                builder.WithSection(s =>
                                    s.HasText($"Hey <@{pullRequestOwner.SlackUser.Id}>, {buildString} of this PR failed."));
            }
            else
            {
                builder.WithSection(s =>
                                    s.HasText($"I was unable to find who to tag for this PullRequest, but {buildString} failed."));
            }

            return(builder.Build());
        }
        public static SlackPayload FormatNewPullRequest(PullRequest pr, string slackChannel)
        {
            var payloadBuilder = new SlackPayloadBuilder();

            return(payloadBuilder
                   .SendsTo(slackChannel)
                   .HasPreviewText($"New PR in {pr.RepositoryName} from {pr.AuthorName}")
                   .WithDivider()
                   .WithContext(cbb =>
                                cbb.HasText($":new: Pull-Request from {pr.AuthorName} in {pr.RepositoryName}"))
                   .WithSection(sbb =>
                                sbb.HasText($"<{pr.Url}|{pr.Title}>")
                                .HasField("Author", pr.AuthorName)
                                .HasField("Repository", pr.RepositoryName))
                   .WithDivider()
                   .Build());
        }
        public static SlackPayload FormatUpdatedPullRequest(PullRequest pr, string slackChannel, string identifier)
        {
            var payloadBuilder = new SlackPayloadBuilder();

            return(payloadBuilder
                   .SendsTo(slackChannel)
                   .UpdatesMessage(identifier)
                   .HasPreviewText($"New PR in {pr.RepositoryName} from {pr.AuthorName}")
                   .WithDivider()
                   .WithContext(cbb =>
                                cbb.HasText($":new: Pull-Request from {pr.AuthorName} in {pr.RepositoryName}"))
                   .WithSection(sbb =>
                                sbb.HasText($"<{pr.Url}|{pr.Title}>")
                                .HasField("Author", pr.AuthorName)
                                .HasField("Repository", pr.RepositoryName)
                                .HasField("Reviewers", FormatReviewersField(pr.Reviewers))
                                .HasField("State", pr.Status.ToString()))
                   .WithDivider()
                   .Build());
        }