private void Refresh(object sender, ElapsedEventArgs ea) { var json = httpSender.SendGet(ApiUrl); var events = Newtonsoft.Json.JsonConvert.DeserializeObject <List <Event> >(json) .Where(e => (e.type == "IssuesEvent" || e.type == "PullRequestEvent") && e.created_at.Ticks > lastReceivedTime) .ToList(); foreach (var item in events.OrderBy(e => e.created_at)) { lastReceivedTime = item.created_at.Ticks; if (item.type == "IssuesEvent") { IssuesEvent.Invoke(item); } if (item.type == "PullRequestEvent") { PullRequestEvent.Invoke(item); } } }
private object ConvertPayload() { switch (Event) { case PingEvent.EventString: return(PingEvent.FromJson(PayloadText)); case CommitCommentEvent.EventString: return(CommitCommentEvent.FromJson(PayloadText)); case CreateEvent.EventString: return(CreateEvent.FromJson(PayloadText)); case DeleteEvent.EventString: return(DeleteEvent.FromJson(PayloadText)); case DeploymentEvent.EventString: return(DeploymentEvent.FromJson(PayloadText)); case DeploymentStatusEvent.EventString: return(DeploymentStatusEvent.FromJson(PayloadText)); case ForkEvent.EventString: return(ForkEvent.FromJson(PayloadText)); case GollumEvent.EventString: return(GollumEvent.FromJson(PayloadText)); case InstallationEvent.EventString: return(InstallationEvent.FromJson(PayloadText)); case InstallationRepositoriesEvent.EventString: return(InstallationRepositoriesEvent.FromJson(PayloadText)); case IssueCommentEvent.EventString: return(IssueCommentEvent.FromJson(PayloadText)); case IssuesEvent.EventString: return(IssuesEvent.FromJson(PayloadText)); case LabelEvent.EventString: return(LabelEvent.FromJson(PayloadText)); case MemberEvent.EventString: return(MemberEvent.FromJson(PayloadText)); case MembershipEvent.EventString: return(MembershipEvent.FromJson(PayloadText)); case MilestoneEvent.EventString: return(MilestoneEvent.FromJson(PayloadText)); case OrganizationEvent.EventString: return(OrganizationEvent.FromJson(PayloadText)); case OrgBlockEvent.EventString: return(OrgBlockEvent.FromJson(PayloadText)); case PageBuildEvent.EventString: return(PageBuildEvent.FromJson(PayloadText)); case ProjectCardEvent.EventString: return(ProjectCardEvent.FromJson(PayloadText)); case ProjectColumnEvent.EventString: return(ProjectColumnEvent.FromJson(PayloadText)); case ProjectEvent.EventString: return(ProjectEvent.FromJson(PayloadText)); case PublicEvent.EventString: return(PublicEvent.FromJson(PayloadText)); case PullRequestEvent.EventString: return(PullRequestEvent.FromJson(PayloadText)); case PullRequestReviewEvent.EventString: return(PullRequestReviewEvent.FromJson(PayloadText)); case PullRequestReviewCommentEvent.EventString: return(PullRequestReviewCommentEvent.FromJson(PayloadText)); case PushEvent.EventString: return(PushEvent.FromJson(PayloadText)); case ReleaseEvent.EventString: return(ReleaseEvent.FromJson(PayloadText)); case RepositoryEvent.EventString: return(RepositoryEvent.FromJson(PayloadText)); case StatusEvent.EventString: return(StatusEvent.FromJson(PayloadText)); case WatchEvent.EventString: return(WatchEvent.FromJson(PayloadText)); default: throw new NotImplementedException( $"Event Type: `{Event}` is not implemented. Want it added? Open an issue at https://github.com/promofaux/GithubWebhooks"); } }
private static MattermostMessage GetMessageIssues(IssuesEvent payload) { var retVal = BaseMessageForRepo(payload.repository.full_name); MattermostAttachment att = null; var repoMd = $"[{payload.repository.full_name}]({payload.repository.html_url})"; var titleMd = $"[#{payload.issue.number} {payload.issue.title}]({payload.issue.html_url})"; var userMd = $"[{payload.sender.login}]({payload.sender.html_url})"; switch (payload.action) { case "opened": retVal.Text = $"{userMd} opened a [new issue]({payload.issue.html_url}) in {repoMd}"; if (!string.IsNullOrEmpty(payload.issue.body)) { att = new MattermostAttachment { Title = $"#{payload.issue.number} {payload.issue.title}", TitleLink = new Uri(payload.issue.html_url), Text = payload.issue.body } } ; break; case "closed": retVal.Text = $"{userMd} closed issue {titleMd} in {repoMd}"; break; case "reopened": retVal.Text = $"{userMd} reopened issue {titleMd} in {repoMd}"; break; case "labeled": retVal.Text = $"{userMd} added label: `{payload.label.name}` to {titleMd} in {repoMd}"; break; case "unlabeled": retVal.Text = $"{userMd} removed label: `{payload.label.name}` from {titleMd} in {repoMd}"; break; case "assigned": var asignMd = $"[{payload.assignee.login}]({payload.assignee.html_url})"; retVal.Text = $"{userMd} assigned {asignMd} to {titleMd} in {repoMd}"; break; case "unassigned": var unasignMd = $"[{payload.assignee.login}]({payload.assignee.html_url})"; retVal.Text = $"{userMd} unassigned {unasignMd} from {titleMd} in {repoMd}"; break; default: throw new NotImplementedException($"Unhandled Event action: {payload.action}"); } if (att != null) { retVal.Attachments = new List <MattermostAttachment> { att } } ; return(retVal); }