예제 #1
0
        /// <inheritdoc/>
        public async ValueTask <ChatEventResult> ProcessCommandAsync(
            TextDeconstructionInformation info,
            ChatEvent originalChatEvent,
            IAsyncResponder responder,
            IPluginPropertiesAccessor accessor)
        {
            var plugins = await _storageService.GetAllPluginsAsync();

            var results = plugins.SelectMany(it => it.Examples ?? Array.Empty <string>()).DefaultIfEmpty(string.Empty);

            return(new ChatEventResult(
                       ChatEventFactory.CreateCard(
                           new TextParagraph
            {
                Text = string.Join("<br />", results)
            })));
        }
예제 #2
0
        /// <inheritdoc/>
        public async ValueTask <ChatEventResult> ProcessCommandAsync(
            TextDeconstructionInformation info,
            ChatEvent originalChatEvent,
            IAsyncResponder responder,
            IPluginPropertiesAccessor accessor)
        {
            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));
        }
예제 #3
0
#pragma warning restore CC0021

        /// <inheritdoc/>
        public async ValueTask <ChatEventResult> ProcessCommandAsync(
            TextDeconstructionInformation info,
            ChatEvent originalChatEvent,
            IAsyncResponder responder,
            IPluginPropertiesAccessor accessor)
        {
            var userName    = info.Entities.GetValueOrDefault("Text")?.FirstOrDefault();
            var senderEmail = originalChatEvent?.Message?.Sender.Email;

            if (string.IsNullOrWhiteSpace(userName))
            {
                return(new ChatEventResult("User was not found!"));
            }

            var users = await _storageService.GetAllUsersAsync();

            var foundUsers = users
                             .Where(u => MatchUserByName(u, userName))
                             .Where(u => users.RequestorHasAccessToUserData(u, senderEmail))
                             .ToArray();

            if (foundUsers.Length == 0)
            {
                return(new ChatEventResult($"User with name {userName} was not found!"));
            }

            return(new ChatEventResult(
                       foundUsers.Select(user =>
                                         ChatEventFactory.CreateCard(
                                             new CardBody
            {
                Icon = "PERSON",
                TopLabel = user.Name,
                Content = $"{user.Email}\n_{user.Department?.Name}, {FindManagerName(users, user.Manager?.OpenAirUserId)}_",
                ContentMultiline = true,
                BottomLabel = string.Join(", ", user.Customers?.Select(it => it.Name) ?? new string[0]),
            }))
                       .ToArray()));
        }