コード例 #1
0
        /// <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));
        }
コード例 #2
0
        /// <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
                    },
                },
            }));
        }