private static bool IsRelevant(WebHookPayload payload, HashSet <GitHubIssueId> knownIds)
        {
            if (payload.action == null || !_relevantActions.Contains(payload.action))
            {
                return(false);
            }

            if (payload.issue != null && payload.repository != null)
            {
                var idText = payload.repository.full_name + "#" + payload.issue.number;
                if (GitHubIssueId.TryParse(idText, out var issueId) && knownIds.Contains(issueId))
                {
                    return(true);
                }
            }

            if (payload.project_card != null)
            {
                if (GitHubIssueId.TryParse(payload.project_card.content_url, out var issueId) && knownIds.Contains(issueId))
                {
                    return(true);
                }
            }

            return(IsRelevant(payload.label) ||
                   IsRelevant(payload.issue));
        }
Exemplo n.º 2
0
        public async Task PostMessage(string text)
        {
            var payload = new WebHookPayload
            {
                Text = text
            };

            try
            {
                var request = new HttpRequestMessage(HttpMethod.Post, _url);

                var payloadText = JsonConvert.SerializeObject(payload);
                request.Content = new StringContent(payloadText);

                var response = await _httpClient.SendAsync(request);

                response.EnsureSuccessStatusCode();
            }
            catch (Exception e)
            {
                _logger.Error(e, $"failed to send message {text} to slack using {_url}");
            }
        }