public async Task NotifyAsync(TeamFoundationRequestContext requestContext, INotification notification, BotElement bot, EventRuleElement matchingRule) { var channels = bot.GetCsvSetting("channels"); var tasks = new List <Task>(); var slackClient = new SlackClient(); foreach (string channel in channels) { Message slackMessage = ToSlackMessage((dynamic)notification, bot, channel); if (slackMessage != null) { tasks.Add(slackClient.SendMessageAsync(slackMessage, bot.GetSetting("webhookUrl")).ContinueWith(t => t.Result.EnsureSuccessStatusCode())); } } await Task.WhenAll(tasks); }
public Message ToSlackMessage(WorkItemChangedNotification notification, BotElement bot, string channel) { string header = notification.ToMessage(bot, s => s).First(); var fields = new List <AttachmentField>(); var searchType = notification.IsNew ? SearchFieldsType.Core : SearchFieldsType.Changed; var displayFieldsKey = notification.IsNew ? "wiCreatedDisplayFields" : "wiChangedDisplayFields"; foreach (var fieldId in bot.GetCsvSetting(displayFieldsKey, Defaults.WorkItemFields)) { var field = notification.GetUnifiedField(fieldId, searchType); if (field != null) { var fieldrep = notification.IsNew ? field.NewValue : bot.Text.WorkItemFieldTransitionFormat.FormatWith(field); fields.Add(new AttachmentField(field.Name, fieldrep, true)); } } return(SlackHelper.CreateSlackMessage(header, fields, bot, channel, bot.GetSetting("standardColor"))); }
internal static Message CreateMsTeamsMessage(WorkItemChangedNotification notification, BotElement bot) { string heading = notification.ToMessage(bot, s => s).First(); var facts = new List <Fact>(); var searchType = notification.IsNew ? SearchFieldsType.Core : SearchFieldsType.Changed; var displayFieldsKey = notification.IsNew ? "wiCreatedDisplayFields" : "wiChangedDisplayFields"; foreach (var fieldId in bot.GetCsvSetting(displayFieldsKey, Defaults.WorkItemFields)) { var field = notification.GetUnifiedField(fieldId, searchType); if (field != null) { var fieldrep = notification.IsNew ? field.NewValue : bot.Text.WorkItemFieldTransitionFormat.FormatWith(field); facts.Add(new Fact(field.Name, fieldrep)); } } return(CreateMsTeamsMessage(heading, facts, bot.GetSetting("standardColor"))); }
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), WiUrl, WiType = transform(WiType), WiId, WiTitle = transform(WiTitle), IsStateChanged, IsAssignmentChanged, AssignedTo = transform(AssignedTo), State = transform(State), UserName = transform(UserName), Action = FormatAction(bot), AssignedToUserName = transform(AssignedToUserName), MappedAssignedToUser = bot.GetMappedUser(AssignedToUniqueName), MappedUser = bot.GetMappedUser(UniqueName) }; lines.Add(bot.Text.WorkItemchangedFormat.FormatWith(formatter)); var searchType = IsNew ? SearchFieldsType.Core : SearchFieldsType.Changed; var displayFieldsKey = IsNew ? "wiCreatedDisplayFields" : "wiChangedDisplayFields"; var pattern = IsNew ? "{name}: {newValue}" : "{name}: " + bot.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); }