public async Task <KnownCommenterResponse> IsKnownCommenter(string username, string email) { var response = new KnownCommenterResponse { Username = username, Email = email, }; try { var knownCommentersContents = await _github.Repository.Content.GetAllContents(_owner, _repo, _knownCommentersPath); var knownCommentersContent = knownCommentersContents.FirstOrDefault(); response.FileExists = knownCommentersContent != null; response.KnownCommenters = knownCommentersContent?.Content; response.Sha = knownCommentersContent?.Sha; var row = CreateKnownCommenterRow(username, email); response.IsKnownCommenter = response.KnownCommenters?.Contains(row, StringComparison.InvariantCultureIgnoreCase) ?? false; } catch (Octokit.NotFoundException) { } return(response); }
private void CheckKnownCommenter(KnownCommenterResponse knownCommenterResponse, StringBuilder reasonForModeration) { if (!knownCommenterResponse.IsKnownCommenter) { reasonForModeration.AppendLine( $"User '{knownCommenterResponse.Username}' hasn't commented before."); } }
private static string AddKnownCommenterToCsvContent(KnownCommenterResponse knownCommenterResponse) { var allCommenters = new StringBuilder(knownCommenterResponse.KnownCommenters); string row = CreateKnownCommenterRow(knownCommenterResponse.Username, knownCommenterResponse.Email); allCommenters.AppendLine(row); return(allCommenters.ToString()); }
private async Task CreateOrUpdateKnownCommentersFile(KnownCommenterResponse knownCommenterResponse, string branch) { var message = $"Add known commenter '{knownCommenterResponse.Username}'"; var content = AddKnownCommenterToCsvContent(knownCommenterResponse); if (knownCommenterResponse.FileExists) { var updateFileRequest = new UpdateFileRequest(message, content, knownCommenterResponse.Sha, branch); await _github.Repository.Content.UpdateFile(_owner, _repo, _knownCommentersPath, updateFileRequest); } else { var createFileRequest = new CreateFileRequest(message, content, branch); await _github.Repository.Content.CreateFile(_owner, _repo, _knownCommentersPath, createFileRequest); } }
public async Task AddComment(Comment comment, ModerationAnalysisReport report, KnownCommenterResponse knownCommenterResponse) { string yaml = CommentSerializer.SerializeToYaml(comment); var message = $"Add comment to '{comment.Slug}' by '{comment.Name}'"; var path = Path.Combine(_commentDataPath, comment.Slug, $"comment-{comment.Date.Ticks}.yml"); var branch = _branch; if (report.NeedsModeration) { branch = $"sc2g-{comment.Slug}-{comment.Date.Ticks}"; await CreateNewBranch(branch); } var createFileRequest = new CreateFileRequest(message, yaml, branch); await _github.Repository.Content.CreateFile(_owner, _repo, path, createFileRequest); if (!knownCommenterResponse.IsKnownCommenter) { await CreateOrUpdateKnownCommentersFile(knownCommenterResponse, branch); } if (report.NeedsModeration) { var newPullRequest = new NewPullRequest(message, branch, _branch); newPullRequest.Body = report.ReasonForModeration; await _github.Repository.PullRequest.Create(_owner, _repo, newPullRequest); } }
public ModerationAnalysisReport NeedsModeration(Comment comment, RecaptchaResponse recaptchaResponse, AkismetResponse akismetResponse, KnownCommenterResponse knownCommenterResponse) { var reasonForModeration = new StringBuilder(); CheckReCaptcha(recaptchaResponse, reasonForModeration); CheckAkismet(akismetResponse, reasonForModeration); CheckKnownCommenter(knownCommenterResponse, reasonForModeration); if (reasonForModeration.Length > 0) { _log.LogInformation("Comment needs moderation because: {0}", reasonForModeration.ToString()); } else { _log.LogInformation("Comment does not need moderation"); } return(new ModerationAnalysisReport { NeedsModeration = reasonForModeration.Length > 0, ReasonForModeration = reasonForModeration.ToString() }); }