public override async Task NotifyAsync(IVssRequestContext requestContext, INotification notification, BotElement bot, EventRuleElement matchingRule)
        {
            var token = bot.GetSetting("token");
            if (string.IsNullOrEmpty(token)) throw new ArgumentException("Missing token!");

            var tasks = new List<Task>();
            var slackClient = new SlackClient();

            foreach (string tfsUserName in notification.TargetUserNames)
            {
                var userId = bot.GetMappedUser(tfsUserName);

                if (userId != null)
                {
                    Message slackMessage = ToSlackMessage((dynamic)notification, bot, null, true);
                    if (slackMessage != null)
                    {
                        slackMessage.AsUser = true;
                        var t = Task.Run(async () =>
                        {
                            var response = await slackClient.SendApiMessageAsync(slackMessage, token, userId);
                            response.EnsureSuccessStatusCode();
                            var content = await response.Content.ReadAsStringAsync();
                        });
                        tasks.Add(t);
                    }
                }
            }

            await Task.WhenAll(tasks);
        }
Example #2
0
 public override string ToString(BotElement bot, Func<string, string> transform)
 {
     var formatter = new
     {
         DisplayName = transform(DisplayName), RepoUri,
         ProjectName = transform(ProjectName),
         RepoName = transform(RepoName),
         Pushed = IsForcePush ? bot.Text.ForcePushed : bot.Text.Pushed,
         UserName = transform(UserName),
         MappedUser = bot.GetMappedUser(UniqueName)
     };
     return bot.Text.PushFormat.FormatWith(formatter);
 }
        public override IList<string> ToMessage(BotElement bot, TextElement text, Func<string, string> transform)
        {
            var formatter = new
            {
                TeamProjectCollection = transform(TeamProjectCollection),
                DisplayName = transform(DisplayName),
                ProjectName = transform(ProjectName),
                RepoUri,
                RepoName = transform(RepoName),
                PrId,
                PrUrl,
                PrTitle = transform(PrTitle),
                UserName = transform(UserName),
                SourceBranchName = transform(SourceBranch.Name),
                TargetBranchName = transform(TargetBranch.Name),
                CreatorUserName = transform(CreatorUserName),
                MappedCreatorUser = bot.GetMappedUser(CreatorUniqueName),
                MappedUser = bot.GetMappedUser(UniqueName)
            };

            return new[] { text.PullRequestCommentFormat.FormatWith(formatter), Comment };
        }
        public override IList<string> ToMessage(BotElement bot, Func<string, string> transform)
        {
            var lines = new List<string>();
            var formatter = new
            {
                TeamProjectCollection = transform(TeamProjectCollection),
                DisplayName = transform(DisplayName),
                ProjectName = transform(ProjectName),
                AreaPath = transform(AreaPath),
                WiUrl,
                WiType = transform(WiType),
                WiId,
                WiTitle = transform(WiTitle),
                UserName = transform(UserName),
                Action = bot.Text.CommentedOn,
                AssignedToUserName = transform(AssignedToUserName),
                MappedAssignedToUser = bot.GetMappedUser(AssignedToUniqueName),
                MappedUser = bot.GetMappedUser(UniqueName)
            };
            lines.Add(bot.Text.WorkItemchangedFormat.FormatWith(formatter));
            lines.Add(TextHelper.Truncate(Comment, Settings.DiscussionCommentMaxLength));

            return lines;
        }
 public override IList<string> ToMessage(BotElement bot, TextElement text, Func<string, string> transform)
 {
     var formatter = new
     {
         TeamProjectCollection = transform(TeamProjectCollection),
         ProjectName = transform(ProjectName),
         ReleaseDefinition = transform(ReleaseDefinition),
         ReleaseStatus = transform(ReleaseStatus.ToString()),
         ReleaseUrl,
         ReleaseName = transform(ReleaseName),
         ReleaseReason = transform(ReleaseReason.ToString()),
         CreatedBy = transform(CreatedByUniqueName),
         CreatedByDisplayName = transform(CreatedByDisplayName),
         DisplayName = transform(CreatedByDisplayName),
         CreatedOn,
         UserName = transform(UserName),
         MappedUser = bot.GetMappedUser(CreatedByUniqueName)
     };
     return new[] { text.ReleaseCreatedFormat.FormatWith(formatter) };
 }
 public override IList<string> ToMessage(BotElement bot, Func<string, string> transform)
 {
     var formatter = new
     {
         TeamProjectCollection = transform(TeamProjectCollection),
         DisplayName = transform(DisplayName),
         ChangesetUrl,
         ChangesetId,
         Comment = transform(Comment),
         UserName = transform(UserName),
         ProjectLinks = FormatProjectLinks(bot, transform),
         MappedUser = bot.GetMappedUser(UniqueName)
     };
     return new[] { bot.Text.CheckinFormat.FormatWith(formatter) };
 }
        public override IList<string> ToMessage(BotElement bot, Func<string, string> transform)
        {
            var formatter = new
            {
                TeamProjectCollection = transform(TeamProjectCollection),
                DisplayName = transform(DisplayName),
                UserName = transform(UserName),
                ProjectName = transform(ProjectName),
                RepoUri,
                RepoName = transform(RepoName),
                MappedUser = bot.GetMappedUser(UniqueName)
            };

            return new[] { bot.Text.RepositoryCreatedFormat.FormatWith(formatter) };
        }
 public override IList<string> ToMessage(BotElement bot, Func<string, string> transform)
 {
     var formatter = new
     {
         TeamProjectCollection = transform(TeamProjectCollection),
         ProjectName = transform(ProjectName),
         BuildDefinition = transform(BuildDefinition),
         BuildStatus = transform(BuildStatus.ToString()),
         BuildUrl,
         BuildNumber = transform(BuildNumber),
         BuildReason = transform(BuildReason.ToString()),
         RequestedFor = transform(RequestedForUniqueName),
         RequestedForDisplayName = transform(RequestedForDisplayName),
         DisplayName = transform(RequestedForDisplayName),
         StartTime,
         FinishTime,
         UserName = transform(UserName),
         BuildDuration = FormatBuildDuration(bot),
         DropLocation,
         MappedUser = bot.GetMappedUser(RequestedForUniqueName)
     };
     return new[] { GetBuildFormat(bot).FormatWith(formatter), transform(BuildStatus.ToString()) };
 }
        public override IList<string> ToMessage(BotElement bot, TextElement text, Func<string, string> transform)
        {
            var lines = new List<string>();
            var formatter = new
            {
                TeamProjectCollection = transform(TeamProjectCollection),
                DisplayName = transform(DisplayName),
                ProjectName = transform(ProjectName),
                WiUrl,
                WiType = transform(WiType),
                WiId,
                WiTitle = transform(WiTitle),
                IsStateChanged,
                IsAssignmentChanged,
                AssignedTo = transform(AssignedTo),
                State = transform(State),
                UserName = transform(UserName),
                Action = FormatAction(text),
                AssignedToUserName = transform(AssignedToUserName),
                MappedAssignedToUser = bot.GetMappedUser(AssignedToUniqueName),
                MappedUser = bot.GetMappedUser(UniqueName)
            };
            lines.Add(text.WorkItemchangedFormat.FormatWith(formatter));

            var searchType = IsNew ? SearchFieldsType.Core : SearchFieldsType.Changed;
            var displayFieldsKey = IsNew ? "wiCreatedDisplayFields" : "wiChangedDisplayFields";
            var pattern = IsNew ? "{name}: {newValue}" : "{name}: " + text.WorkItemFieldTransitionFormat;

            foreach (var fieldId in bot.GetCsvSetting(displayFieldsKey, Defaults.WorkItemFields))
            {
                var field = GetUnifiedField(fieldId, searchType);
                if (field != null)
                    lines.Add(pattern.FormatWith(field));
                }

            return lines;
        }
        public override IList<string> ToMessage(BotElement bot, TextElement text, Func<string, string> transform)
        {
            var formatter = new
            {
                TeamProjectCollection = transform(TeamProjectCollection),
                DisplayName = transform(DisplayName),
                ProjectName = transform(ProjectName),
                RepoUri,
                RepoName = transform(RepoName),
                CommitId = transform(CommitId.ToHexString(Settings.HashLength)),
                CommitUri,
                Comment = transform(Comment),
                UserName = transform(UserName),
                PusherUserName = transform(PusherUserName),
                MappedPusherUser = bot.GetMappedUser(PusherUniqueName),
                MappedUser = bot.GetMappedUser(UniqueName)
            };

            return new[] { text.CommitCommentFormat.FormatWith(formatter), Comment };
        }
        public override IList<string> ToMessage(BotElement bot, TextElement text, Func<string, string> transform)
        {
            var formatter = new
            {
                TeamProjectCollection = transform(TeamProjectCollection),
                DisplayName = transform(DisplayName),
                ChangesetUrl,
                ChangesetId,
                Comment = transform(Comment),
                UserName = transform(UserName),
                ProjectName = transform(ProjectName),
                ProjectUrl,
                CreatorUserName = transform(CreatorUserName),
                MappedCreatorUser = bot.GetMappedUser(CreatorUniqueName),
                MappedUser = bot.GetMappedUser(UniqueName)
            };

            return new[] { text.ChangesetCommentFormat.FormatWith(formatter), Comment };
        }