/// <inheritdoc/> public async ValueTask <ChatEventResult> ProcessCommandAsync(TextDeconstructionInformation info, ChatEvent originalChatEvent, IAsyncResponder responder, IReadOnlyDictionary <string, string> settings) { Contract.Ensures(info != null, "Text deconstruction information is required!"); var sender = originalChatEvent?.Message.Sender ?? throw new ArgumentNullException(nameof(originalChatEvent)); var item = await _googleCalendarConnector .GetNextMeetingAsync(sender.Email) .ConfigureAwait(false); if (item?.Summary == null) { return(new ChatEventResult("Can not find your next event! You may have no events or the service user account do not see your calendar.")); } var link = item.ConferenceData?.EntryPoints.FirstOrDefault(); var startDate = item.Start.DateTime.HasValue ? TimeZoneInfo.ConvertTime(item.Start.DateTime.Value, _currentTimeZoneFactory()).ToString("HH:mm", CultureInfo.InvariantCulture) : null; var keyValue = new KeyValue { Content = item.Summary, ContentMultiline = false, BottomLabel = startDate, Icon = "INVITE", Button = link == null ? null : ChatEventFactory.CreateTextButton("JOIN", link.Uri) }; var card = ChatEventFactory.CreateCard(keyValue); return(new ChatEventResult(card)); }
/// <inheritdoc/> public async ValueTask <ChatEventResult> ProcessCommandAsync( TextDeconstructionInformation info, ChatEvent originalChatEvent, IAsyncResponder responder, IPluginPropertiesAccessor accessor) { var jobNames = await accessor.GetAllUserPropertyValuesAsync <string>(BuildInfoProperties.JobName); if (jobNames == null || jobNames.Count == 0) { return(new ChatEventResult("No jobs are assign to you!")); } var hosts = accessor.GetPluginPropertyGroup(BuildInfoProperties.HostsGroup).FirstOrDefault(); if (hosts == null) { return(new ChatEventResult("No jenkins hosts are configured!")); } var host = hosts.GetValue <string>(BuildInfoProperties.Host); var user = hosts.GetValue <string>(BuildInfoProperties.User); var token = hosts.GetValue <string>(BuildInfoProperties.Token); var jenkinsResults = await Task.WhenAll( jobNames.Select(jobName => _jenkinsClient.QueryAsync(jobName, host, user, token))); var widgets = jenkinsResults.Select(it => new WidgetMarkup { KeyValue = new KeyValue { TopLabel = it.DisplayName, Content = string.Join(", ", it.ChangeSet?.Items?.Select(cs => cs.Comment)), BottomLabel = it.Result, Button = ChatEventFactory.CreateTextButton("Link", it.Url), }, }).ToList(); return(new ChatEventResult( new Card { Sections = new[] { new Section { Widgets = widgets }, }, })); }