public static SlackMessageBuilder MentionBlock(this SlackMessageBuilder builder, SlackLogMention mention)
        {
            var mentions = new List <string>();

            if (mention.Channel.HasValue)
            {
                mentions.Add(SlackMessageTextHelper.ChannelMention(mention.Channel.Value));
            }

            if (mention.Users?.Any() == true)
            {
                mentions.AddRange(mention.Users.Select(SlackMessageTextHelper.UserMention));
            }

            if (mention.UserGroups?.Any() == true)
            {
                mentions.AddRange(mention.UserGroups.Select(SlackMessageTextHelper.UserGroupMention));
            }

            if (mentions.Any())
            {
                builder.MessageBlock(string.Join(", ", mentions));
            }

            return(builder);
        }
        public Task Invoke(string channel, string[] args)
        {
            var id          = args[0];
            var application = _applicationService.GetApplication(id);
            var result      = _applicationImageInstanceService.GetAllCurrentTagsForPrimary(application)
                              .ToDictionary(
                x => x.Key.TagProperty.Path,
                x => x.Key.TagProperty.ValueFormat == TagPropertyValueFormat.TagOnly ? $"{x.Key.Repository}:{x.Value}" : $"{x.Value}"
                );

            var builder = new SlackMessageBuilder($"The services for application '{id}' have the following tags:")
                          .AddDivider();

            var allFields  = result.Select(x => $"*{x.Key}*\n {x.Value}").ToList();
            var startIndex = 0;

            do
            {
                var fields = allFields.Skip(startIndex).Take(10).ToList();
                builder.AddSection(fields: fields);
                startIndex += fields.Count;
            } while (startIndex < allFields.Count);

            var message = builder.Build();

            return(_slackClient.PostMessageAsync(channel, message));
        }
        public static SlackMessageBuilder AttachmentProperties(this SlackMessageBuilder builder, LogEvent logEvent, Dictionary <string, string> properties, string message = null)
        {
            var attachmentBlocks = new List <BlockBase>();

            if (message != null)
            {
                var messageBlock = CreateMessageBlock(SlackMessageTextHelper.Italic(logEvent.Level.ToString("G")), message);
                attachmentBlocks.Add(messageBlock);
            }

            if (properties != null && properties.Any())
            {
                var propertyBlocks = properties.Select(property => CreateMessageBlock(SlackMessageTextHelper.Bold(property.Key), property.Value));
                attachmentBlocks.AddRange(propertyBlocks);
            }

            if (attachmentBlocks.Any())
            {
                var attachment = new Attachment
                {
                    Color  = GetAttachmentColor(logEvent.Level),
                    Blocks = attachmentBlocks,
                };

                builder.Attachments(attachment);
            }

            return(builder);
        }
示例#4
0
        public void ComposeMessageBuildsExceptionMessage()
        {
            var message = new SlackMessageBuilder(_slackConfiguration, _exception, _notifierOptions, null).ComposeMessage();

            Assert.IsType <SlackMessage>(message);
            Assert.Equal("the chicken channel", message.Channel);
            Assert.Equal("achicken", message.Username);
            Assert.Contains("[Fried Chicken - Development] EXCEPTION!", message.Text);
            Assert.Contains("This is an exception!", message.Text);
        }
 public static SlackMessageBuilder CreateMessageBuilder(string channel, LogEvent logEvent, string message, string replayTimespan = null)
 => SlackMessageBuilder.CreateBuilder(channel)
 .Text(message)
 .LineBreak()
 .Reply(replayTimespan)
 .Blocks(
     new SectionBlock
 {
     Text = (MarkdownTextObject)SlackMessageTextHelper.Date(logEvent.Timestamp.ToUnixTimeSeconds(), "{date_num} {time_secs}", "LogDate"),
 });
        public static SlackMessageBuilder MessageBlock(this SlackMessageBuilder builder, params string[] messages)
        {
            var notEmptyMessages = messages.Where(message => !string.IsNullOrWhiteSpace(message)).ToArray();

            if (notEmptyMessages.Any())
            {
                builder.Blocks(CreateMessageBlock(notEmptyMessages));
            }

            return(builder);
        }
示例#7
0
        private async Task AttachExceptionAsync(SlackClient slackClient, SlackMessageBuilder threadMessageBuilder, Exception exception)
        {
            if (_logOptions.SendExceptionAsFile)
            {
                var exceptionType      = exception.GetType().Name;
                var fileObjectResponse = await slackClient.Files.UploadContentAsync(
                    exception.ToString(),
                    title : exceptionType,
                    filename : $"{exceptionType}.cs");

                threadMessageBuilder.Text(fileObjectResponse.File.Permalink.ToString());
            }
            else
            {
                threadMessageBuilder
                .MessageBlock(SlackMessageTextHelper.CodeBlock(exception.ToString()));
            }
        }
示例#8
0
        public IMessage BuildNotification(Deployment deployment)
        {
            var builder = new SlackMessageBuilder($"A new image of *{deployment.ImageRepository}* was detected (tag *{deployment.TargetTag}*).");
            var messageConfiguration = builder
                                       .AddDivider()
                                       .AddSection(fields: new []
            {
                $"*From*\n{deployment.CurrentTag}",
                $"*To*\n{deployment.TargetTag}",
                $"*Application*\n{deployment.ApplicationId}",
                $"*Status*\n{deployment.Status}"
            }
                                                   );

            if (deployment.Status == DeploymentStatus.Pending)
            {
                messageConfiguration.AddActions(
                    blockBuilder => blockBuilder
                    .AddButton("deploy", "Deploy", $"{deployment.Id:D}", style: "primary")
                    );
            }

            return(messageConfiguration.Build());
        }
 public SlackMessageBuilderTests()
 {
     _messageBuilder = new SlackMessageBuilder();
 }
示例#10
0
                                      SendMessageResponse MessageWithBlocksResponse)> SendMessagesWithBuilderAsync(SlackClient slackClient, string channelName, string userId)
        {
            const string SampleUrl    = "https://api.slack.com/";
            var          now          = DateTime.Now;
            var          nowTimestamp = UnixTimeHelper.ToUnixTime(now);
            var          channelId    = await ConversationsClientMethods.GetChannelIdAsync(slackClient, channelName);

            var messageWithTextHelper = new SlackMessageBuilder(channelName)
                                        .Text($"Channel mention by {nameof(SlackMessageTextHelper)}: {SlackMessageTextHelper.ChannelMention(SlackMention.Channel)}")
                                        .LineBreak()
                                        .Text($"Users mention by {nameof(SlackMessageTextHelper)}: {SlackMessageTextHelper.UserMentions(new[] { userId, userId })}")
                                        .LineBreak()
                                        .Text($"Public channel mention by {nameof(SlackMessageTextHelper)}: {SlackMessageTextHelper.PublicChannelMention(channelId)}")
                                        .LineBreak()
                                        .Text($"{SlackMessageTextHelper.Bold("bold text")} by {nameof(SlackMessageTextHelper)}")
                                        .LineBreak()
                                        .Text($"{SlackMessageTextHelper.InlineCode("inline code")} by {nameof(SlackMessageTextHelper)}")
                                        .LineBreak()
                                        .Text($"{SlackMessageTextHelper.Strike("strike text")} by {nameof(SlackMessageTextHelper)}")
                                        .LineBreak()
                                        .Text($"{SlackMessageTextHelper.Italic("italic text")} by {nameof(SlackMessageTextHelper)}")
                                        .LineBreak()
                                        .Text($"Link by {nameof(SlackMessageTextHelper)}: {SlackMessageTextHelper.Link(SampleUrl)}")
                                        .LineBreak()
                                        .Text($"Link by {nameof(SlackMessageTextHelper)}: {SlackMessageTextHelper.Link(new Uri(SampleUrl))}")
                                        .LineBreak()
                                        .Text($"Link by {nameof(SlackMessageTextHelper)}: {SlackMessageTextHelper.EmailLink("*****@*****.**")}")
                                        .LineBreak()
                                        .LineBreak()
                                        .Text($"Code block by {nameof(SlackMessageTextHelper)}:{SlackMessageTextHelper.CodeBlock("code line #1\ncode line #2")}")
                                        .LineBreak()
                                        .LineBreak()
                                        .Text($"Unquoted text by {nameof(SlackMessageTextHelper)}:{SlackMessageTextHelper.Quoted("quoted text #1\nquoted text #2")}Unquoted text again")
                                        .LineBreak()
                                        .LineBreak()
                                        .Text($"List by {nameof(SlackMessageTextHelper)}:{SlackMessageTextHelper.List("list item #1", "list item #2")}")
                                        .LineBreak()
                                        .LineBreak()
                                        .Text($"User mention by {nameof(SlackMessageTextHelper)}: {SlackMessageTextHelper.UserMention(userId)}")
                                        .LineBreak()
                                        .Text(SlackMessageTextHelper.Date(nowTimestamp, $"Date by {nameof(SlackMessageTextHelper)}: {{date_num}} {{time}}", now.ToString("yyyy-MM-dd hh:mm")));

            var messageWithTextBuilder = new SlackMessageBuilder(channelId)
                                         .ChannelMention(SlackMention.Here)
                                         .UserMentions(new[] { userId, userId }, "\n")
                                         .PublicChannelMention(channelId, "\n")
                                         .BoldText("bold text", "\n")
                                         .InlineCodeText("inline code", "\n")
                                         .StrikeText("strike text", SlackMessageTextHelper.LineBreak)
                                         .ItalicText("italic text", SlackMessageTextHelper.LineBreak)
                                         .CodeBlock("code block", SlackMessageTextHelper.LineBreak)
                                         .LinkText(SampleUrl, "Slack api url", SlackMessageTextHelper.LineBreak)
                                         .LinkText(new Uri(SampleUrl), "Slack api url", SlackMessageTextHelper.LineBreak)
                                         .EmailLinkText("*****@*****.**", "Test email", SlackMessageTextHelper.LineBreak)
                                         .QuotedText("quoted text #1")
                                         .QuotedText("quoted text #2")
                                         .ListText(new[] { "list item #1", "list item #2" })
                                         .UserMention(userId)
                                         .Date(nowTimestamp, "{date_num} {time}", now.ToString("yyyy-MM-dd hh:mm"), new Uri(SampleUrl), SlackMessageTextHelper.LineBreak);

            var userGroupListResponse = await slackClient.UserGroups.ListAsync();

            var userGroup = userGroupListResponse.UserGroups.FirstOrDefault();

            if (userGroup != null)
            {
                var userGroupId = userGroup.Id;
                messageWithTextHelper = messageWithTextHelper
                                        .LineBreak()
                                        .Text($"User group mention by {nameof(SlackMessageTextHelper)}: {SlackMessageTextHelper.UserGroupMention(userGroupId)}");

                messageWithTextBuilder = messageWithTextBuilder.UserGroupMention(userGroupId, SlackMessageTextHelper.LineBreak);
            }

            var messageWithTextHelperResponse = await slackClient.Chat.PostMessageAsync(messageWithTextHelper);

            var messageWithTextBuilderResponse = await slackClient.Chat.PostMessageAsync(messageWithTextBuilder);

            var messageWithBlocks = SlackMessageBuilder.CreateBuilder(channelName)
                                    .Reply(messageWithTextBuilderResponse.Timestamp, true)
                                    .Blocks(CreateHeaderBlock())
                                    .Blocks(CreateActionBlock(), CreateContextBlock())
                                    .Attachments(new Attachment("#000099", "Attachment1"))
                                    .Attachments(new Attachment("#009900", "Attachment2"), new Attachment("#990000", "Attachment3"))
                                    .CreateMessage();

            var messageWithBlocksResponse = await slackClient.Chat.PostMessageAsync(messageWithBlocks);

            return(messageWithTextHelperResponse, messageWithTextBuilderResponse, messageWithBlocksResponse);
        }