Example #1
0
        private void OnIssueComment(IssueCommentEvent.RootObject obj)
        {
            //https://developer.github.com/v3/activity/events/types/#issuecommentevent
            if (obj == null)
            {
                return;
            }

            SendEventMessage(DiscordMessageFormatter.GetOnIssueCommentMessage(obj));
        }
Example #2
0
        private void OnPush(PushEvent.RootObject obj)
        {
            //https://developer.github.com/v3/activity/events/types/#pushevent
            if (obj == null)
            {
                return;
            }

            SendEventMessage(DiscordMessageFormatter.GetOnPushMessage(obj));
        }
Example #3
0
        private async void OnProjectCard(ProjectCardEvent.RootObject obj)
        {
            //https://developer.github.com/v3/activity/events/types/#projectcardevent
            if (obj == null)
            {
                return;
            }

            ProjectColumn column = await _githubClient.Repository.Project.Column.Get(obj.project_card.column_id);

            Issue issue = null;

            string contentUrl = obj.project_card.content_url;

            if (!string.IsNullOrEmpty(contentUrl))
            {
                int    pos   = contentUrl.LastIndexOf("/") + 1;
                string strId = contentUrl.Substring(pos, contentUrl.Length - pos);

                if (int.TryParse(strId, out int id))
                {
                    issue = await _githubClient.Issue.Get(obj.repository.id, id);
                }
            }

            switch (obj.action)
            {
            case "created":
                SendEventMessage(DiscordMessageFormatter.GetOnProjectCardCreatedMessage(obj, column, issue));
                break;

            case "edited":
                SendEventMessage(DiscordMessageFormatter.GetOnProjectCardEditedMessage(obj));
                break;

            case "converted":
                SendEventMessage(DiscordMessageFormatter.GetOnProjectCardConvertedMessage(obj));
                break;

            case "moved":
                SendEventMessage(DiscordMessageFormatter.GetOnProjectCardMovedMessage(obj, column, issue));
                break;

            case "deleted":
                SendEventMessage(DiscordMessageFormatter.GetOnProjectCardDeletedMessage(obj, issue));
                break;
            }
        }
Example #4
0
        private void ServerStatusTimer(Object o)
        {
            IRestResponse response         = null;
            var           watch            = Stopwatch.StartNew();
            string        exceptionMessage = string.Empty;

            try
            {
                _log.Info($"Pinging {_settings.ServerEndpointStatus} for connection status...");
                var client  = new RestClient(new Uri(_settings.ServerEndpointStatus));
                var request = new RestRequest(Method.GET);
                response = client.Execute(request);
            }
            catch (Exception ex)
            {
                exceptionMessage = ex.Message;
                _log.Error($"Failed connecting to url. Error: {ex.Message}");
            }

            watch.Stop();
            _log.Info($"Ping took {watch.ElapsedMilliseconds} ms to complete.");

            if (response != null)
            {
                _statusResponseErrors = 0;
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    _log.Info($"Server ping did not return OK, but instead {response.StatusDescription}");
                    _statusChannel.SendMessageAsync("", false, DiscordMessageFormatter.GetRestResponseMessage(response, _settings.ServerEndpointStatus, watch.ElapsedMilliseconds).Build());
                }
                else
                {
                    _log.Info($"Server ping was successful!");
                }
            }
            else
            {
                _statusResponseErrors++;
                _log.Error($"Server response was null. If this happens {3 - _statusResponseErrors} more time(s) I will notify the Discord channel.");

                if (_statusResponseErrors >= 2)
                {
                    _log.Error($"Server didn't respond 3 times in a row. I will now notify the Discord channel.");
                    _statusChannel.SendMessageAsync("", false, DiscordMessageFormatter.GetRestResponseFailedMessage(exceptionMessage, _settings.ServerEndpointStatus).Build());
                    _statusResponseErrors = 0;
                }
            }
        }
Example #5
0
        private void OnIssues(IssuesEvent.RootObject obj)
        {
            //https://developer.github.com/v3/activity/events/types/#issuesevent
            if (obj == null)
            {
                return;
            }

            switch (obj.action)
            {
            case "opened":
                SendEventMessage(DiscordMessageFormatter.GetOnIssuesOpenedMessage(obj));
                break;

            case "closed":
                SendEventMessage(DiscordMessageFormatter.GetOnIssuesClosedMessage(obj));
                break;

            case "reopened":
                SendEventMessage(DiscordMessageFormatter.GetOnIssuesReopenedMessage(obj));
                break;

            case "assigned":
                SendEventMessage(DiscordMessageFormatter.GetOnIssuesAssignedMessage(obj));
                break;

            case "unassigned":
                SendEventMessage(DiscordMessageFormatter.GetOnIssuesUnassignedMessage(obj));
                break;

            case "labeled":
                SendEventMessage(DiscordMessageFormatter.GetOnIssuesLabeledMessage(obj));
                break;

            case "unlabeled":
                SendEventMessage(DiscordMessageFormatter.GetOnIssuesUnlabeledMessage(obj));
                break;
            }
        }
Example #6
0
        public async Task StatusAsync([Summary("Name of service")] string service, [Summary("How many hours to go back for comparison stats")]  int hours = 0)
        {
            _log.Info($"{Context.User.Username} executed !stats command with parameter {service}");

            var builder = new EmbedBuilder()
            {
                Color = Const.DISCORD_EMBED_COLOR,
            };

            switch (service)
            {
            case "hookapp":
                ServerStats stats    = _stats.Where(o => string.IsNullOrEmpty(o.error)).LastOrDefault();
                ServerStats compared = null;

                if (stats == null)
                {
                    _log.Info($"Ho history of stats available. Forcefully getting one from server.");
                    stats = ApiEndpoint.GetServerStats();
                }

                var historyList = _stats.Where(o => string.IsNullOrEmpty(o.error)).Take(_stats.Count() - 1).ToList();
                if (hours.Equals(0))
                {
                    compared = historyList.LastOrDefault();
                }
                else
                {
                    _log.Info($"Getting history stats from {hours} hours ago");
                    var queryDay = DateTime.Now.Subtract(TimeSpan.FromHours(hours));
                    compared = historyList.OrderBy(o => Math.Abs((o.date.Subtract(queryDay).Ticks))).FirstOrDefault();
                }

                _log.Info($"Replying with server status for service {service}");
                await Context.Channel.SendMessageAsync("", false, DiscordMessageFormatter.GetServiceHookappMessage(stats, compared).Build());

                break;
            }
        }
Example #7
0
        private void OnLabel(LabelEvent.RootObject obj)
        {
            //https://developer.github.com/v3/activity/events/types/#labelevent
            if (obj == null)
            {
                return;
            }

            switch (obj.action)
            {
            case "created":
                SendEventMessage(DiscordMessageFormatter.GetOnLabelCreatedMessage(obj));
                break;

            case "edited":
                SendEventMessage(DiscordMessageFormatter.GetOnLabelEditedMessage(obj));
                break;

            case "deleted":
                SendEventMessage(DiscordMessageFormatter.GetOnLabelDeletedMessage(obj));
                break;
            }
        }
Example #8
0
        public EmbedBuilder GetTranslatedMessage(SocketMessage arg, string message)
        {
            _log.Info($"Getting translation from Azure service for message: {arg.Content}");

            string author       = arg.Author.Username;
            string channel      = arg.Channel.Name;
            string originalText = arg.Content;
            string translated   = TranslateText(message);

            if (translated.Length > 0)
            {
                _log.Info($"Translation successful. Returning formatted response.");
                return(DiscordMessageFormatter.GetTranslationMessage
                           (new DataHolders.Translation()
                {
                    Author = author,
                    Channel = channel,
                    OriginalText = originalText,
                    TranslatedText = translated
                }));
            }

            return(null);
        }