Exemple #1
0
        public static ComposeExtensionResponse HandleMessageExtensionQuery(Activity activity)
        {
            var query = activity.GetComposeExtensionQueryData();

            Newtonsoft.Json.Linq.JObject data = activity.Value as Newtonsoft.Json.Linq.JObject;
            if (query == null || query.CommandId != "partyParrot")
            {
                // We only process the 'partyParrot' queries with this message extension
                return(null);
            }

            var title      = "";
            var titleParam = query.Parameters?.FirstOrDefault(p => p.Name == "searchKeyword");

            if (titleParam != null)
            {
                title = titleParam.Value.ToString();
            }


            var response = new ComposeExtensionResponse(new ComposeExtensionResult
            {
                AttachmentLayout = "list",
                Type             = "result",
                Attachments      = new List <ComposeExtensionAttachment>(),
                Text             = "Response text"
            });

            for (int i = 0; i < 5; i++)
            {
                response.ComposeExtension.Attachments.Add(GetAttachment(title));
            }

            return(response);
        }
        private ComposeExtensionResponse HandleSomeCommand(Activity activity)
        {
            ComposeExtensionResult   catResult = new ComposeExtensionResult(null, "message", null, null, "Here is a cat ┬┴┬┴┤・ω・)ノ├┬┴┬┴");
            ComposeExtensionResponse flyingCat = new ComposeExtensionResponse(catResult);

            return(flyingCat);
        }
        // Query task
        private static ComposeExtensionResponse QueryData(ConnectorClient connector, Activity activity, ComposeExtensionQuery query)
        {
            var keyword    = "";
            var titleParam = query.Parameters?.FirstOrDefault(p => p.Name == "keyword");

            if (titleParam != null)
            {
                keyword = titleParam.Value.ToString();
            }

            if (string.IsNullOrEmpty(keyword))
            {
                return(null);
            }

            var filteredItems = ItemDB.SearchItems(keyword);

            if (filteredItems == null || filteredItems.Count <= 0)
            {
                return(new ComposeExtensionResponse(new ComposeExtensionResult("list", "result")));
            }

            var attachments = new List <ComposeExtensionAttachment>();

            foreach (var item in filteredItems)
            {
                attachments.Add(GetItemAttachment(item));
            }

            var response = new ComposeExtensionResponse(new ComposeExtensionResult("list", "result"));

            response.ComposeExtension.Attachments = attachments.ToList();

            return(response);
        }
        //gavdcodeend 01

        //gavdcodebegin 02
        private static ComposeExtensionResponse CreateCard(Activity myActivity)
        {
            ComposeExtensionResponse rtnResponse = null;

            dynamic activityValue = JObject.FromObject(myActivity.Value);

            string myFirst  = activityValue.data.firstNumber;
            string mySecond = activityValue.data.secondNumber;

            int myAdd = int.Parse(myFirst) + int.Parse(mySecond);

            HeroCard myCard = new HeroCard
            {
                Title    = "Add Card",
                Subtitle = "Adding " + myFirst + " + " + mySecond,
                Text     = "The result is " + myAdd.ToString(),
                Images   = new List <CardImage>(),
                Buttons  = new List <CardAction>(),
            };

            myCard.Images.Add(new CardImage
            {
                Url = "http://wiki.opensemanticframework.org/images/0/0b/Add-72.png"
            });

            var myAttachs = new ComposeExtensionAttachment[1];

            myAttachs[0] = myCard.ToAttachment().ToComposeExtensionAttachment();

            rtnResponse = new ComposeExtensionResponse(
                new ComposeExtensionResult("list", "result"));
            rtnResponse.ComposeExtension.Attachments = myAttachs.ToList();

            return(rtnResponse);
        }
Exemple #5
0
        public virtual async Task <HttpResponseMessage> Post([FromBody] Activity activity)
        {
            // check if activity is of type message
            if (activity != null && activity.GetActivityType() == ActivityTypes.Message)
            {
                await Conversation.SendAsync(activity, () => new EchoDialog());
            }
            else if (activity != null && activity.Type == "invoke")
            {
                //await Conversation.SendAsync(activity, () => new SearchResultDialog());

                ComposeExtensionResponse invokeResponse = new ComposeExtensionResponse();
                // query.Parameters has the parameters sent by client
                var results = new ComposeExtensionResult()
                {
                    AttachmentLayout = "list",
                    Type             = "result",
                    Attachments      = new List <ComposeExtensionAttachment>(),
                };
                var query = activity.GetComposeExtensionQueryData();
                if (query.CommandId != null && query.Parameters != null && query.Parameters.Count > 0)
                {
                    var searchText = query.Parameters.First().Value;

                    using (var _client = new HttpClient())
                    {
                        var res = await _client.GetAsync("https://msopenhackeu.azurewebsites.net/api/trivia/search?k=" + searchText);

                        var responseText = await res.Content.ReadAsStringAsync();

                        var att = JsonConvert.DeserializeObject <List <SearchResultDto> >(responseText);


                        foreach (var x in att)
                        {
                            var heroCard = new HeroCard
                            {
                                Title    = x.name,
                                Subtitle = x.achievementBadge,
                                Text     = "Score: " + x.score.ToString(),
                                Images   = new List <CardImage> {
                                    new CardImage(x.achievementBadgeIcon)
                                }
                            };

                            results.Attachments.Add(heroCard.ToAttachment().ToComposeExtensionAttachment());
                        }
                        invokeResponse.ComposeExtension = results;

                        // Return the response
                        return(Request.CreateResponse <ComposeExtensionResponse>(HttpStatusCode.OK, invokeResponse));
                    }
                }
            }
            else
            {
                await HandleSystemMessage(activity);
            }
            return(new HttpResponseMessage(System.Net.HttpStatusCode.Accepted));
        }
Exemple #6
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req,
            ILogger logger,
            ExecutionContext context)
        {
            logger.LogInformation("Messages function received a request.");

            ISettings            settings            = new Settings(logger, context);
            IClippySetRepository clippySetRepository = new ClippySetRepository(logger, settings);
            IClippySetIndexer    clippySetIndexer    = new ClippySetIndexer(logger);
            ICredentialProvider  credentialProvider  = new SimpleCredentialProvider(settings.MicrosoftAppId, null);
            IChannelProvider     channelProvider     = new SimpleChannelProvider();

            Activity activity;

            try
            {
                var authorizationHeader = GetAuthorizationHeader(req);
                activity = await ParseRequestBody(req);

                await JwtTokenValidation.AuthenticateRequest(activity, authorizationHeader, credentialProvider, channelProvider);
            }
            catch (JsonReaderException e)
            {
                logger.LogDebug(e, "JSON parser failed to parse request payload.");
                return(new BadRequestResult());
            }
            catch (UnauthorizedAccessException e)
            {
                logger.LogDebug(e, "Request was not propertly authorized.");
                return(new UnauthorizedResult());
            }

            if (!activity.IsComposeExtensionQuery())
            {
                logger.LogDebug("Request payload was not a compose extension query.");
                return(new BadRequestObjectResult($"Clippy only supports compose extension query activity types."));
            }

            var queryValue = JObject.FromObject(activity.Value).ToObject <ComposeExtensionValue>();
            var query      = queryValue.GetParameterValue();

            var clippySet = await clippySetRepository.FetchClippySetAsync();

            await clippySetIndexer.IndexClippySetAsync(clippySet);

            var clippies = await clippySetIndexer.FindClippiesByQuery(query);

            var result = new ComposeExtensionResponse
            {
                ComposeExtensionResult = new ComposeExtensionResult
                {
                    Type             = "result",
                    AttachmentLayout = "grid",
                    Attachments      = clippies.Select(clippy => new ClippyComposeExtensionCard(clippy).ToAttachment()).ToArray()
                }
            };

            return(new OkObjectResult(result));
        }
Exemple #7
0
        public static ComposeExtensionResponse HandleMessageExtensionQuery(ConnectorClient connector, Activity activity)
        {
            var query = activity.GetComposeExtensionQueryData();

            if (query == null || query.CommandId != "getRandomText")
            {
                // We only process the 'getRandomText' queries with this message extension
                return(null);
            }

            var title      = "";
            var titleParam = query.Parameters?.FirstOrDefault(p => p.Name == "cardTitle");

            if (titleParam != null)
            {
                title = titleParam.Value.ToString();
            }

            var attachments = new ComposeExtensionAttachment[5];

            for (int i = 0; i < 5; i++)
            {
                attachments[i] = GetAttachment(title);
            }

            var response = new ComposeExtensionResponse(new ComposeExtensionResult("list", "result"));

            response.ComposeExtension.Attachments = attachments.ToList();

            return(response);
        }
        public static ComposeExtensionResponse HandleMessageExtensionQuery(ConnectorClient connector, Activity activity)
        {
            ComposeExtensionResponse invokeResponse = new ComposeExtensionResponse();
            // This helper method gets the query as an object.
            var query = activity.GetComposeExtensionQueryData();

            var results = new ComposeExtensionResult()
            {
                AttachmentLayout = "list",
                Type             = "result",
                Attachments      = new List <ComposeExtensionAttachment>()
            };


            if (query.CommandId != null && query.Parameters != null && query.Parameters.Count > 0)
            {
                //用户没有设置参数,而是初始化
                if (query.Parameters[0].Name.Equals("initialRun"))
                {
                    results.Attachments = GetAttachment();
                }
                else
                {
                    //根据传入的参数来返回结果的个数
                    string keyword = query.Parameters[0].Value.ToString();
                    results.Attachments = GetAttachment(keyword);
                }
            }


            invokeResponse.ComposeExtension = results;

            return(invokeResponse);
        }
        public async static Task <ComposeExtensionResponse> HandleMessageExtensionQuery(ConnectorClient connector, Activity activity, string tid, string emailId)
        {
            var query = activity.GetComposeExtensionQueryData();

            if (query == null || query.CommandId != "getMyMessages")
            {
                // We only process the 'getMyMessages' queries with this message extension
                return(null);
            }

            var searchString = string.Empty;
            var titleParam   = query.Parameters?.FirstOrDefault(p => p.Name == "title");

            if (titleParam != null)
            {
                searchString = titleParam.Value.ToString().ToLower();
            }
            var attachments   = new List <ComposeExtensionAttachment>();
            var announcements = await GetMyAnnouncements(tid, emailId, searchString);

            foreach (var item in announcements.OrderByDescending(a => a.CreatedTime))
            {
                var attachment2 = GetAttachment(item);
                attachments.Add(attachment2);
            }
            var response = new ComposeExtensionResponse(new ComposeExtensionResult("list", "result"));

            response.ComposeExtension.Attachments = attachments.ToList();
            return(response);
        }
        public async Task <HttpResponseMessage> HandleQueryAction(HttpRequestMessage request, ComposeExtensionQuery extensionQueryData, CancellationToken cancellation = default)
        {
            if (extensionQueryData.Parameters == null)
            {
                return(request.CreateResponse(HttpStatusCode.NoContent));
            }

            var isInitialRun        = false;
            var initialRunParameter = GetQueryParameterByName(extensionQueryData, "initialRun");

            // situation where the incoming payload was received from the config popup
            if (!string.IsNullOrEmpty(extensionQueryData.State))
            {
                initialRunParameter = "true";
            }

            if (string.Equals(initialRunParameter, "true", StringComparison.OrdinalIgnoreCase))
            {
                isInitialRun = true;
            }

            var maxResults = extensionQueryData.QueryOptions.Count ?? 25;

            if (isInitialRun)
            {
                maxResults = 5;
            }

            var attachments = new List <ComposeExtensionAttachment>();



            //var searchText = GetQueryParameterByName(extensionQueryData, "searchText");

            var currentUser = GetQueryParameterByName(extensionQueryData, "userId");

            var graphService = RestService.For <IGraphRestAPIService>(
                new HttpClient(new AuthenticatedHttpClientHandler(request.Headers.Authorization.Parameter))
            {
                BaseAddress = new Uri("https://graph.microsoft.com")
            });

            var events = graphService.FindCurrentEvents(currentUser, DateTime.Now);

            attachments = this.mapper.Map <List <ComposeExtensionAttachment> >(events);

            var response = new ComposeExtensionResponse
            {
                ComposeExtension = new ComposeExtensionResult
                {
                    Type             = "result",
                    Attachments      = attachments,
                    AttachmentLayout = AttachmentLayoutTypes.List
                }
            };


            return(request.CreateResponse(HttpStatusCode.OK, response));
        }
        private async Task <HttpResponseMessage> ProcessQueryAction(HttpRequestMessage request, ComposeExtensionQuery extensionQueryData, CancellationToken cancellationToken)
        {
            if (extensionQueryData.Parameters == null)
            {
                return(request.CreateResponse(HttpStatusCode.NoContent));
            }

            var isInitialRun        = false;
            var initialRunParameter = GetQueryParameterByName(extensionQueryData, "initialRun");

            // situation where the incoming payload was received from the config popup
            if (extensionQueryData.State.HasValue())
            {
                initialRunParameter = "true";
            }

            if (string.Equals(initialRunParameter, "true", StringComparison.OrdinalIgnoreCase))
            {
                isInitialRun = true;
            }

            var maxResults = extensionQueryData.QueryOptions.Count ?? 25;

            if (isInitialRun)
            {
                maxResults = 5;
            }

            var attachments = new List <ComposeExtensionAttachment>();

            var searchText = GetQueryParameterByName(extensionQueryData, MessagingExtensionCommands.SearchTextParameterName);

            switch (extensionQueryData.CommandId)
            {
            case MessagingExtensionCommands.SearchPositions:
                var positions = await _positionService.Search(searchText, maxResults, cancellationToken);

                attachments = _mapper.Map <List <ComposeExtensionAttachment> >(positions);
                break;

            case MessagingExtensionCommands.SearchCandidates:
                var candidates = await _candidateService.Search(searchText, maxResults, cancellationToken);

                attachments = _mapper.Map <List <ComposeExtensionAttachment> >(candidates);
                break;
            }

            var response = new ComposeExtensionResponse
            {
                ComposeExtension = new ComposeExtensionResult
                {
                    Type             = "result",
                    Attachments      = attachments,
                    AttachmentLayout = AttachmentLayoutTypes.List
                }
            };

            return(request.CreateResponse(HttpStatusCode.OK, response));
        }
        public async Task <HttpResponseMessage> Post([FromBody] Activity myActivity)
        {
            ComposeExtensionResponse myResponse = CreateCard(myActivity);

            return(myResponse != null
                ? Request.CreateResponse <ComposeExtensionResponse>(myResponse)
                : new HttpResponseMessage(HttpStatusCode.OK));
        }
        public static ComposeExtensionResponse HandleMessageExtensionQuery(ConnectorClient connector, Activity activity)
        {
            // GetDataHelper helper = new GetDataHelper();
            var query = activity.GetComposeExtensionQueryData();

            if (query == null)
            {
                // We only process the 'getRandomText' queries with this message extension
                return(null);
            }
            if (query.CommandId == "News")
            {
                NewsModel news       = GetDataHelper.GetNews();
                var       title      = "";
                var       titleParam = query.Parameters?.FirstOrDefault(p => p.Name == "newstitle");
                var       response   = new ComposeExtensionResponse(new ComposeExtensionResult("list", "result"));
                ComposeExtensionAttachment[] attachments = null;
                if (titleParam != null)
                {
                    title = titleParam.Value.ToString();
                    // List<string> searchtitle = news.Select(a => a.NewsTitle).Where(c => c.ToLower().Contains(title.ToLower())).Select(d => d).ToList();
                    //  List<string> searchImages = news.Where(a => a.NewsTitle.ToLower().Contains(title.ToLower())).Select(c => c.NewsThumbnailUrl).ToList();
                    //  List<string> searchDateTime = news.Where(a => a.NewsTitle.ToLower().Contains(title.ToLower())).Select(c => c.NewsDateTIme).ToList();
                    //  List<string> searchviews = news.Where(a => a.NewsTitle.ToLower().Contains(title.ToLower())).Select(c => c.NoOfViews).ToList();
                    //  List<string> searchby = news.Where(a => a.NewsTitle.ToLower().Contains(title.ToLower())).Select(c => c.NewsBy).ToList();
                    //  int attacCount = searchtitle.Count();
                    // attachments = new ComposeExtensionAttachment[attacCount];
                    // for (int i = 0; i < attacCount; i++)
                    //  {
                    //      attachments[i] = GetAttachment(searchImages[i], searchtitle[i], searchDateTime[i], searchviews[i],searchby[i]);
                    //  }


                    response.ComposeExtension.Attachments = attachments.ToList();
                }
                else
                {
                    // List<string> searchtitle = news.Select(c => c.NewsTitle).ToList();
                    // List<string> searchImages = news.Select(c => c.NewsThumbnailUrl).ToList();
                    //  List<string> searchDateTime = news.Select(c => c.NewsDateTIme).ToList();
                    //  List<string> searchviews = news.Select(c => c.NoOfViews).ToList();
                    //  List<string> searchby=news.Select(c => c.NewsBy).ToList();
                    //  attachments = new ComposeExtensionAttachment[searchtitle.Count()];
                    //  for (int i = 0; i < searchtitle.Count(); i++)
                    //  {
                    //      attachments[i] = GetAttachment(searchImages[i], searchtitle[i], searchDateTime[i], searchviews[i],searchby[i]);
                    //  }
                    response.ComposeExtension.Attachments = attachments.ToList();
                }
                return(response);
            }
            else
            {
                return(null);
            }
        }
        public static ComposeExtensionResponse GetComposeExtenionQueryResult(ComposeExtensionResponse composeExtensionResponse, List <ComposeExtensionAttachment> lstComposeExtensionAttachment)
        {
            composeExtensionResponse = new ComposeExtensionResponse();
            ComposeExtensionResult composeExtensionResult = new ComposeExtensionResult();

            composeExtensionResult.Type               = "result";
            composeExtensionResult.Attachments        = lstComposeExtensionAttachment;
            composeExtensionResult.AttachmentLayout   = "list";
            composeExtensionResponse.ComposeExtension = composeExtensionResult;

            return(composeExtensionResponse);
        }
        public ComposeExtensionResponse GetComposeExtensionQueryResult(List <ComposeExtensionAttachment> composeExtensionAttachments)
        {
            ComposeExtensionResponse composeExtensionResponse = new ComposeExtensionResponse();
            ComposeExtensionResult   composeExtensionResult   = new ComposeExtensionResult();

            composeExtensionResult.Type               = "result";
            composeExtensionResult.Attachments        = composeExtensionAttachments;
            composeExtensionResult.AttachmentLayout   = "list";
            composeExtensionResponse.ComposeExtension = composeExtensionResult;

            return(composeExtensionResponse);
        }
        //gavdcodeend 01

        //gavdcodebegin 02
        private async Task <ComposeExtensionResponse> CreateCard(Activity myActivity)
        {
            ComposeExtensionResponse rtnResponse = null;

            ComposeExtensionQuery queryData = myActivity.GetComposeExtensionQueryData();
            string myQuery = string.Empty;
            ComposeExtensionParameter queryParam = queryData.Parameters?.FirstOrDefault(
                par => par.Name == "wikipediaQuery");

            if (queryParam != null)
            {
                myQuery = queryParam.Value.ToString();
            }

            string myText = string.Empty;

            if (string.IsNullOrEmpty(myQuery) == true)
            {
                myText = "Get a query to create the card";
            }
            else
            {
                myText = myQuery;
            }

            string wikiResult = await GetWikipediaSnippet(myText);

            HeroCard myCard = new HeroCard
            {
                Title    = "Wikipedia Card",
                Subtitle = "Searching for: " + myText,
                Text     = wikiResult,
                Images   = new List <CardImage>(),
                Buttons  = new List <CardAction>(),
            };

            myCard.Images.Add(new CardImage
            {
                Url = "https://upload.wikimedia.org/wikipedia/commons/thumb/4/45/" +
                      "Orange_Icon_Pale_Wiki.png/120px-Orange_Icon_Pale_Wiki.png"
            });

            ComposeExtensionAttachment[] myAttachs = new ComposeExtensionAttachment[1];
            myAttachs[0] = myCard.ToAttachment().ToComposeExtensionAttachment();

            rtnResponse = new ComposeExtensionResponse(
                new ComposeExtensionResult("list", "result"));
            rtnResponse.ComposeExtension.Attachments = myAttachs.ToList();

            return(rtnResponse);
        }
        private ComposeExtensionResponse GetComposeExtensionResponse(Activity activity)
        {
            var composeExtensionQuery = activity.GetComposeExtensionQueryData();
            var composeExtParamValue  = composeExtensionQuery.Parameters[0].Value.ToString();
            // Process data and return the response.
            ComposeExtensionResponse          composeExtensionResponse      = new ComposeExtensionResponse();
            ComposeExtensionResult            composeExtensionResult        = new ComposeExtensionResult();
            List <ComposeExtensionAttachment> lstComposeExtensionAttachment = new List <ComposeExtensionAttachment>();
            string imageUrl    = "https://luna1.co/cae4f2.png";
            string deepLinkUrl = TemplateUtility.GetDeepLink(activity, composeExtParamValue);

            lstComposeExtensionAttachment.Add(TemplateUtility.GenerateComposeExtentionAttachments(activity));
            composeExtensionResult.Type               = "result";
            composeExtensionResult.AttachmentLayout   = "list";
            composeExtensionResult.Attachments        = lstComposeExtensionAttachment;
            composeExtensionResponse.ComposeExtension = composeExtensionResult;
            return(composeExtensionResponse);
        }
Exemple #18
0
        private ComposeExtensionResponse GetComposeExtensionResponse(Activity activity)
        {
            var composeExtensionQuery = activity.GetComposeExtensionQueryData();
            var composeExtParamValue  = composeExtensionQuery.Parameters[0].Value.ToString();
            // Process data and return the response.
            ComposeExtensionResponse          composeExtensionResponse      = new ComposeExtensionResponse();
            ComposeExtensionResult            composeExtensionResult        = new ComposeExtensionResult();
            List <ComposeExtensionAttachment> lstComposeExtensionAttachment = new List <ComposeExtensionAttachment>();
            string imageUrl    = "https://luna1.co/cae4f2.png";
            string deepLinkUrl = TemplateUtility.GetDeepLink(activity, composeExtParamValue);

            lstComposeExtensionAttachment.Add(TemplateUtility.CreateComposeExtensionCardsAttachments("Deep Link", "Clicking on the button will redirect you to the configuration tab", imageUrl, "hero", deepLinkUrl));
            composeExtensionResult.Type               = "result";
            composeExtensionResult.AttachmentLayout   = "list";
            composeExtensionResult.Attachments        = lstComposeExtensionAttachment;
            composeExtensionResponse.ComposeExtension = composeExtensionResult;
            return(composeExtensionResponse);
        }
        public IActionResult Post([FromBody] Activity activity)
        {
            if (activity.Type == ActivityTypes.Invoke)
            {
                if (activity.IsComposeExtensionQuery())
                {
                    // This is the response object that will get sent back to the messaging extension request.
                    var invokeResponse = new ComposeExtensionResponse();

                    // This helper method gets the query as an object.
                    var query = activity.GetComposeExtensionQueryData();

                    if (query.CommandId != null && query.Parameters != null && query.Parameters.Count > 0)
                    {
                        string[] cities;
                        if (query.Parameters[0].Name == "initialRun")
                        {
                            cities = s_sampleCities;
                        }
                        else
                        {
                            var keyword = query.Parameters[0].Value.ToString();
                            cities = s_sampleCities
                                     .Where(c => c.Contains(keyword, StringComparison.InvariantCultureIgnoreCase))
                                     .ToArray();
                        }

                        var results = new ComposeExtensionResult()
                        {
                            AttachmentLayout = "list",
                            Type             = "result",
                            Attachments      = BuildAttachments(cities)
                        };
                        invokeResponse.ComposeExtension = results;
                    }

                    // Return the response
                    return(Ok(invokeResponse));
                }
            }

            // Failure case catch-all.
            return(BadRequest("Invalid request! This API supports only messaging extension requests. Check your query and try again"));
        }
Exemple #20
0
        /// <summary>
        /// Help method to generate a compose extension
        ///
        /// Note that for this sample, we are returning random tasks, for illustration purposes only.
        /// </summary>
        /// <returns></returns>
        public ComposeExtensionResponse CreateComposeExtensionResponse()
        {
            ComposeExtensionResponse response = null;
            const int numResults = 10;

            var query = activity.GetComposeExtensionQueryData();

            //Check to make sure a query was actually made:
            if (query.CommandId == null || query.Parameters == null)
            {
                return(null);
            }
            else if (query.Parameters.Count > 0)
            {
                // query.Parameters has the parameters sent by client
                var results = new ComposeExtensionResult()
                {
                    AttachmentLayout = "list",
                    Type             = "result",
                    Attachments      = new List <ComposeExtensionAttachment>(),
                };

                // Generate cards for the response.
                for (var i = 0; i < numResults; i++)
                {
                    var card = GenerateResultCard();
                    // Add content to the response title.
                    if (query.Parameters[0].Name != "initialRun")
                    {
                        card.Title += " " + query.Parameters[0].Value;
                    }
                    var composeExtensionAttachment = card.ToAttachment().ToComposeExtensionAttachment();
                    results.Attachments.Add(composeExtensionAttachment);
                }

                response = new ComposeExtensionResponse()
                {
                    ComposeExtension = results
                };
            }

            return(response);
        }
        public static ComposeExtensionResponse GetSignin(ComposeExtensionResponse composeExtensionResponse)
        {
            string            configUrl     = ConfigurationManager.AppSettings["BaseUri"].ToString() + "/composeExtensionSettings.html";
            CardAction        configExp     = new CardAction(ActionTypes.OpenUrl, "Config", null, configUrl);
            List <CardAction> lstCardAction = new List <CardAction>();

            lstCardAction.Add(configExp);
            composeExtensionResponse = new ComposeExtensionResponse();
            ComposeExtensionResult composeExtensionResult = new ComposeExtensionResult();

            ComposeExtensionSuggestedAction objSuggestedAction = new ComposeExtensionSuggestedAction();

            objSuggestedAction.Actions = lstCardAction;

            composeExtensionResult.SuggestedActions   = objSuggestedAction;
            composeExtensionResult.Type               = "auth";
            composeExtensionResponse.ComposeExtension = composeExtensionResult;

            return(composeExtensionResponse);
        }
Exemple #22
0
        /// <summary>
        /// Helper method to create a task module response using an adaptive card.
        /// </summary>
        /// <returns></returns>
        private ComposeExtensionResponse CreateTaskModuleResponse()
        {
            ComposeExtensionResponse response = new ComposeExtensionResponse()
            {
                ComposeExtension = new ComposeExtensionResult("medium", "adaptivecard", new List <ComposeExtensionAttachment>())
            };
            var        card       = CardHelper.CreateExtendedCardForNewJobPosting();
            Attachment attachment = new Attachment()
            {
                ContentType = AdaptiveCard.ContentType,
                Content     = card
            };

            var composeExtensionAttachment = attachment.ToComposeExtensionAttachment();

            response.ComposeExtension.Attachments.Add(composeExtensionAttachment);
            System.Diagnostics.Debug.WriteLine(response.ToString());

            return(response);
        }
Exemple #23
0
        /// <summary>
        /// Handles compose extension queries.
        /// </summary>
        /// <param name="activity">Incoming request from Bot Framework.</param>
        /// <param name="connectorClient">Connector client instance for posting to Bot Framework.</param>
        /// <returns>Task tracking operation.</returns>
        private static async Task <HttpResponseMessage> HandleComposeExtensionQuery(Activity activity, ConnectorClient connectorClient)
        {
            // Get Compose extension query data.
            ComposeExtensionQuery composeExtensionQuery = activity.GetComposeExtensionQueryData();

            // Process data and return the response.
            ComposeExtensionResponse response = new ComposeExtensionResponse
            {
                ComposeExtension = new ComposeExtensionResult
                {
                    Attachments = new List <ComposeExtensionAttachment>
                    {
                        new HeroCard
                        {
                            Buttons = new List <CardAction>
                            {
                                new CardAction
                                {
                                    Image = "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c7/Bing_logo_%282016%29.svg/160px-Bing_logo_%282016%29.svg.png",
                                    Type  = ActionTypes.OpenUrl,
                                    Title = "Bing",
                                    Value = "https://www.bing.com"
                                },
                            },
                            Title    = "SampleHeroCard",
                            Subtitle = "BingHeroCard",
                            Text     = "Bing.com"
                        }.ToAttachment().ToComposeExtensionAttachment()
                    },
                    Type             = "result",
                    AttachmentLayout = "list"
                }
            };

            StringContent       stringContent       = new StringContent(JsonConvert.SerializeObject(response));
            HttpResponseMessage httpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK);

            httpResponseMessage.Content = stringContent;
            return(httpResponseMessage);
        }
Exemple #24
0
        public async static Task <ComposeExtensionResponse> HandleMessageExtensionQuery(Activity activity)
        {
            var query = activity.GetComposeExtensionQueryData();

            if (query == null || query.CommandId != "search")
            {
                // We only process the 'getRandomText' queries with this message extension
                return(null);
            }

            var title      = "";
            var titleParam = query.Parameters?.FirstOrDefault(p => p.Name == "searchText");

            if (titleParam != null)
            {
                title = titleParam.Value.ToString().ToLower();
            }

            var attachments = new List <ComposeExtensionAttachment>();

            var passengers = await DocumentDBRepository <Passenger> .GetItemsAsync(d => d != null && (d.Name.ToLower().Contains(title) || d.Seat.ToLower().Contains(title)));


            foreach (var passenger in passengers)
            {
                var card    = O365CardHelper.GetO365ConnectorCard(passenger);
                var preview = O365CardHelper.GetPreviewCard(passenger);

                attachments.Add(card
                                .ToAttachment()
                                .ToComposeExtensionAttachment(preview.ToAttachment()));
            }

            var response = new ComposeExtensionResponse(new ComposeExtensionResult("list", "result"));

            response.ComposeExtension.Attachments = attachments.ToList();

            return(response);
        }
        public async Task <IActionResult> Post([FromBody] Activity activity)
        {
            if (activity.Type == ActivityTypes.Invoke)
            {
                if (activity.IsComposeExtensionQuery())
                {
                    // This is the response object that will get sent back to the messaging extension request.
                    var invokeResponse = new ComposeExtensionResponse();

                    // This helper method gets the query as an object.
                    var query = activity.GetComposeExtensionQueryData();

                    if (query.CommandId != null && query.Parameters != null && query.Parameters.Count > 0)
                    {
                        var keyword = string.Empty;
                        if (query.Parameters[0].Name != "initialRun")
                        {
                            keyword = query.Parameters[0].Value.ToString();
                        }

                        var stories = await SearchStories(keyword);

                        var results = new ComposeExtensionResult()
                        {
                            AttachmentLayout = "list",
                            Type             = "result",
                            Attachments      = BuildAttachments(stories)
                        };
                        invokeResponse.ComposeExtension = results;
                    }

                    // Return the response
                    return(Ok(invokeResponse));
                }
            }

            // Failure case catch-all.
            return(BadRequest("Invalid request! This API supports only messaging extension requests. Check your query and try again"));
        }
Exemple #26
0
        public static ComposeExtensionResponse GetComposeExtensionResponse(Activity activity)
        {
            ComposeExtensionResponse composeExtensionResponse = null;
            ImageResult imageResult = null;
            List <ComposeExtensionAttachment> lstComposeExtensionAttachment = new List <ComposeExtensionAttachment>();
            StateClient stateClient = activity.GetStateClient();
            BotData     userData    = stateClient.BotState.GetUserData(activity.ChannelId, activity.From.Id);

            bool IsSettingUrl = false;

            var composeExtensionQuery = activity.GetComposeExtensionQueryData();

            if (string.Equals(activity.Name.ToLower(), Strings.ComposeExtensionQuerySettingUrl))
            {
                IsSettingUrl = true;
            }


            if (composeExtensionQuery.CommandId == null || composeExtensionQuery.Parameters == null)
            {
                return(null);
            }

            var initialRunParameter = GetQueryParameterByName(composeExtensionQuery, Strings.manifestInitialRun);
            var queryParameter      = GetQueryParameterByName(composeExtensionQuery, Strings.manifestParameterName);

            if (userData == null)
            {
                composeExtensionResponse = new ComposeExtensionResponse();
                string message = Strings.ComposeExtensionNoUserData;
                composeExtensionResponse.ComposeExtension = GetMessageResponseResult(message);
                return(composeExtensionResponse);
            }

            /**
             * Below are the checks for various states that may occur
             * Note that the order of many of these blocks of code do matter
             */

            // situation where the incoming payload was received from the config popup

            if (!string.IsNullOrEmpty(composeExtensionQuery.State))
            {
                ParseSettingsAndSave(composeExtensionQuery.State, userData, stateClient, activity);

                /**
                 * //// need to keep going to return a response so do not return here
                 * //// these variables are changed so if the word 'setting' kicked off the compose extension,
                 * //// then the word setting will not retrigger the config experience
                 **/

                queryParameter      = "";
                initialRunParameter = "true";
            }

            // this is a sitaution where the user's preferences have not been set up yet
            if (string.IsNullOrEmpty(userData.GetProperty <string>(Strings.ComposeExtensionCardTypeKeyword)))
            {
                composeExtensionResponse = GetConfig(composeExtensionResponse);
                return(composeExtensionResponse);
            }

            /**
             * // this is the situation where the user has entered the word 'reset' and wants
             * // to clear his/her settings
             * // resetKeyword for English is "reset"
             **/

            if (string.Equals(queryParameter.ToLower(), Strings.ComposeExtensionResetKeyword))
            {
                //make the userData null
                userData = null;
                composeExtensionResponse = new ComposeExtensionResponse();
                composeExtensionResponse.ComposeExtension = GetMessageResponseResult(Strings.ComposeExtensionResetText);
                return(composeExtensionResponse);
            }

            /**
             * // this is the situation where the user has entered "setting" or "settings" in order
             * // to repromt the config experience
             * // keywords for English are "setting" and "settings"
             **/

            if ((string.Equals(queryParameter.ToLower(), Strings.ComposeExtensionSettingKeyword) || string.Equals(queryParameter.ToLower(), Strings.ComposeExtensionSettingsKeyword)) || (IsSettingUrl))
            {
                composeExtensionResponse = GetConfig(composeExtensionResponse);
                return(composeExtensionResponse);
            }


            /**
             * // this is the situation where the user in on the initial run of the compose extension
             * // e.g. when the user first goes to the compose extension and the search bar is still blank
             * // in order to get the compose extension to run the initial run, the setting "initialRun": true
             * // must be set in the manifest for the compose extension
             **/

            if (initialRunParameter == "true")
            {
                //Signin Experience, please uncomment below code for Signin Experience
                //composeExtensionResponse = WikiHelper.GetSignin(composeExtensionResponse);
                //return composeExtensionResponse;

                composeExtensionResponse = new ComposeExtensionResponse();
                composeExtensionResponse.ComposeExtension = GetMessageResponseResult(Strings.ComposeExtensionInitialRunText);
                return(composeExtensionResponse);
            }


            /**
             *
             * Below here is simply the logic to call the Wikipedia API and create the response for
             *
             * a query; the general flow is to call the Wikipedia API for the query and then call the
             *
             * Wikipedia API for each entry for the query to see if that entry has an image; in order
             *
             * to get the asynchronous sections handled, an array of Promises for cards is used; each
             *
             * Promise is resolved when it is discovered if an image exists for that entry; once all
             *
             * of the Promises are resolved, the response is sent back to Teams
             *
             */

            WikiResult wikiResult = SearchWiki(queryParameter, composeExtensionQuery);

            // enumerate search results and build Promises for cards for response
            foreach (var searchResult in wikiResult.query.search)
            {
                //Get the Image result on the basis of Image Title one by one
                imageResult = SearchWikiImage(searchResult);

                //Get the Image Url from imageResult
                string imageUrl = GetImageURL(imageResult);

                //Set the Highlighter title
                string highlightedTitle = GetHighLightedTitle(searchResult.title, queryParameter);

                string cardText = searchResult.snippet + " ...";

                // create the card itself and the preview card based upon the information
                // check user preference for which type of card to create

                lstComposeExtensionAttachment.Add(TemplateUtility.CreateComposeExtensionCardsAttachments(highlightedTitle, cardText, imageUrl, userData.GetProperty <string>(Strings.ComposeExtensionCardTypeKeyword)));
            }

            composeExtensionResponse = GetComposeExtenionQueryResult(composeExtensionResponse, lstComposeExtensionAttachment);

            return(composeExtensionResponse);
        }
Exemple #27
0
        /// <summary>
        /// Helper method to generate a the messaging extension response.
        ///
        /// Note that for this sample, we are returning generated positions for illustration purposes only.
        /// </summary>
        /// <returns></returns>
        public ComposeExtensionResponse CreateResponse()
        {
            ComposeExtensionResponse response = null;

            var     query = activity.GetComposeExtensionQueryData();
            JObject data  = activity.Value as JObject;

            // Check if this is a task module invocation.
            if (data != null && data["type"] != null)
            {
                // Handle other types of Invoke activities here, e.g. CardActions
                if (data["type"].ToString() == TaskModuleCommandType && data["command"].ToString() == CreatePostingCommand)
                {
                    response = CreateTaskModuleResponse();
                }
            }
            else
            {
                //Check to make sure a query was actually made:
                if (query.CommandId == null || query.Parameters == null)
                {
                    return(null);
                }
                else if (query.Parameters.Count > 0)
                {
                    // query.Parameters has the parameters sent by client
                    var results = new ComposeExtensionResult()
                    {
                        AttachmentLayout = "list",
                        Type             = "result",
                        Attachments      = new List <ComposeExtensionAttachment>(),
                    };

                    if (query.CommandId == "searchPositions")
                    {
                        OpenPositionsDataController controller = new OpenPositionsDataController();
                        IEnumerable <OpenPosition>  positions;

                        if (query.Parameters[0].Name == "initialRun")
                        {
                            // Default query => list all
                            positions = controller.ListOpenPositions(10);
                        }
                        else
                        {
                            // Basic search.
                            string title = query.Parameters[0].Value.ToString().ToLower();
                            positions = controller.ListOpenPositions(10).Where(x => x.Title.ToLower().Contains(title));
                        }

                        // Generate cards for the response.
                        foreach (OpenPosition pos in positions)
                        {
                            var card = CardHelper.CreateCardForPosition(pos, true);

                            var composeExtensionAttachment = card.ToAttachment().ToComposeExtensionAttachment();
                            results.Attachments.Add(composeExtensionAttachment);
                        }
                    }
                    else if (query.CommandId == "searchCandidates")
                    {
                        string name = query.Parameters[0].Value.ToString();
                        CandidatesDataController controller = new CandidatesDataController();

                        foreach (Candidate c in controller.GetTopCandidates("ABCD1234"))
                        {
                            c.Name = c.Name.Split(' ')[0] + " " + CultureInfo.CurrentCulture.TextInfo.ToTitleCase(name);
                            var card = CardHelper.CreateSummaryCardForCandidate(c);

                            var composeExtensionAttachment = card.ToAttachment().ToComposeExtensionAttachment(CardHelper.CreatePreviewCardForCandidate(c).ToAttachment());
                            results.Attachments.Add(composeExtensionAttachment);
                        }
                    }

                    response = new ComposeExtensionResponse()
                    {
                        ComposeExtension = results
                    };
                }
            }
            return(response);
        }
Exemple #28
0
        /// <summary>
        /// Helper method to generate a compose extension
        ///
        /// Note that for this sample, we are returning generated positions for illustration purposes only.
        /// </summary>
        /// <returns></returns>
        public ComposeExtensionResponse CreateResponse()
        {
            try
            {
                ComposeExtensionResponse   response = null;
                ComposeExtensionAttachment composeExtensionAttachment = new ComposeExtensionAttachment();
                var query   = activity.GetComposeExtensionQueryData();
                var results = new ComposeExtensionResult()
                {
                    AttachmentLayout = "list",
                    Type             = "result",
                    Attachments      = new List <ComposeExtensionAttachment>(),
                };
                string text = "";
                //Check to make sure a query was actually made:
                if (query.CommandId == null || query.Parameters == null)
                {
                    return(null);
                }
                else if (query.Parameters.Count > 0)
                {
                    // query.Parameters has the parameters sent by client

                    string headRefName = "";

                    if (query.CommandId == "PRs")
                    {
                        var titleParam = query.Parameters?.FirstOrDefault(p => p.Name == "PRs" || p.Name == "Repos" || p.Name == "Issues");
                        if (titleParam != null)
                        {
                            headRefName = titleParam.Value.ToString().ToLower();
                        }

                        var             query3 = @"query($headRefName: String!) { 
                                      viewer { 
                                      pullRequests (first : 100, headRefName : $headRefName){
                                        edges {   
                                          node {
                                            id
                                            title
                                            body
                                            state
                                            headRefName
                                            revertUrl
                                            url
                                            repository {
                                                nameWithOwner
                                            }
                                            headRefName
                                          }
                                        }
                                      }
                                      }
                                    }";
                        var             client = new GraphQLClient();
                        string          data   = client.Query(query3, new { headRefName = headRefName });
                        RootPullRequest obj    = Newtonsoft.Json.JsonConvert.DeserializeObject <RootPullRequest>(data);


                        if (obj.data.viewer.pullRequests.edges.Count == 0)
                        {
                            text = "No  pull request exists.";
                        }
                        else
                        {
                            HeroCard card = new HeroCard
                            {
                                Title = obj.data.viewer.pullRequests.edges[0].node.headRefName,
                                Text  = "<b>Id         :</b>" + obj.data.viewer.pullRequests.edges[0].node.id + "</br>"
                                        + "<b>Body       :</b>" + obj.data.viewer.pullRequests.edges[0].node.body + "</br>"
                                        + "<b>State      :</b>" + obj.data.viewer.pullRequests.edges[0].node.state + "</br>"
                                        + "<b>RevertUrl  :</b>" + obj.data.viewer.pullRequests.edges[0].node.revertUrl + "</br>"
                                        + "<b>Repository :</b>" + obj.data.viewer.pullRequests.edges[0].node.repository.nameWithOwner,
                                Buttons = new List <CardAction> {
                                    new CardAction(ActionTypes.OpenUrl, "More Info", value: obj.data.viewer.pullRequests.edges[0].node.url)
                                }
                            };
                            composeExtensionAttachment = card.ToAttachment().ToComposeExtensionAttachment();
                        }

                        if (text != "")
                        {
                            results.Text = text;
                        }
                        else
                        {
                            results.Attachments.Add(composeExtensionAttachment);
                        }
                    }
                    else if (query.CommandId == "Repos")
                    {
                        string repository = "";
                        var    titleParam = query.Parameters?.FirstOrDefault(p => p.Name == "PRs" || p.Name == "Repos" || p.Name == "Issues");
                        if (titleParam != null)
                        {
                            repository = titleParam.Value.ToString().ToLower();
                        }
                        var    query3            = @"query($owner: String!,$name: String! ) {
                                                repository(owner: $owner, name: $name)
                                                {
                                                  id
                                                  name
                                                  homepageUrl
                                                  resourcePath
                                                  isPrivate
                                                  updatedAt
                                                  createdAt
                                                  nameWithOwner
                                                  url
                                                            }
                                                        }";
                        var    client            = new GraphQLClient();
                        string data              = client.Query(query3, new { owner = "poonam0025", name = repository });
                        RepositoryRootObject obj = Newtonsoft.Json.JsonConvert.DeserializeObject <RepositoryRootObject>(data);

                        if (obj.data.repository == null)
                        {
                            text = "No " + repository + "found.";
                        }
                        else
                        {
                            HeroCard card = new HeroCard
                            {
                                Title = repository,
                                Text  = "<b>Id : </b> " + obj.data.repository.id + "</br>"
                                        + "<b>Resource path : </b> " + obj.data.repository.resourcePath + "</br>"
                                        + "<b>IsPrivate : </b> " + obj.data.repository.isPrivate + "</br>"
                                        + "<b>CreatedAt : </b> " + Convert.ToDateTime(obj.data.repository.createdAt).ToString("dd MMM yyyy hh:mm:ss tt") + "</br>"
                                        + "<b>UpdatedAt : </b> " + Convert.ToDateTime(obj.data.repository.updatedAt).ToString("dd MMM yyyy hh:mm:ss tt") + "</br>"
                                        + "<b>Name with Owner : </b> " + obj.data.repository.nameWithOwner,
                                Buttons = new List <CardAction> {
                                    new CardAction(ActionTypes.OpenUrl, "More Info", value: obj.data.repository.url)
                                }
                            };

                            composeExtensionAttachment = card.ToAttachment().ToComposeExtensionAttachment();
                        }

                        if (text != "")
                        {
                            results.Text = text;
                        }
                        else
                        {
                            results.Attachments.Add(composeExtensionAttachment);
                        }
                    }

                    else if (query.CommandId == "Issues")
                    {
                        string repository = "";
                        var    titleParam = query.Parameters?.FirstOrDefault(p => p.Name == "PRs" || p.Name == "Repos" || p.Name == "Issues");
                        if (titleParam != null)
                        {
                            repository = titleParam.Value.ToString().ToLower();
                        }
                        var    query3 = @"query($owner:String!,$name:String!) {
                                repository(owner : $owner, name: $name)
                                  {
                                    issues(first:20) { 
                                      edges { 
                                        node { 
                                          title 
                                          url 
                                          state
                                          body
                                          createdAt
                                        } 
                                      } 
                                    } 
                                  } 
                                }";
                        var    client = new GraphQLClient();
                        string data   = client.Query(query3, new { owner = "poonam0025", name = repository });
                        RepositoryDetailRoot repositorydata = Newtonsoft.Json.JsonConvert.DeserializeObject <RepositoryDetailRoot>(data);

                        if (repositorydata.data.repository.issues.edges.Count == 0)
                        {
                            text = "No issue found.";
                        }
                        else
                        {
                            HeroCard card = new HeroCard();
                            for (int i = 0; i < repositorydata.data.repository.issues.edges.Count; i++)
                            {
                                card = new HeroCard
                                {
                                    Title = "<b>" + repositorydata.data.repository.issues.edges[i].node.title + "</b>",
                                    Text  = "<b>Description     :</b>" + repositorydata.data.repository.issues.edges[i].node.body + "</br>"
                                            + "<b>Created At  :</b>" + Convert.ToDateTime(repositorydata.data.repository.issues.edges[i].node.createdAt).ToString("dd MMM yyyy hh:mm:ss tt") + "</br>"
                                            + "<b>State :</b>" + repositorydata.data.repository.issues.edges[i].node.state,
                                    Buttons = new List <CardAction> {
                                        new CardAction(ActionTypes.OpenUrl, "More Info", value: repositorydata.data.repository.issues.edges[i].node.url)
                                    }
                                };

                                composeExtensionAttachment = card.ToAttachment().ToComposeExtensionAttachment();
                                results.Attachments.Add(composeExtensionAttachment);
                            }
                        }
                    }

                    response = new ComposeExtensionResponse()
                    {
                        ComposeExtension = results
                    };
                }
                return(response);
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
Exemple #29
0
        public static ComposeExtensionResponse HandleMessageExtensionQuery(ConnectorClient connector, Activity activity)
        {
            GetDataHelper helper = new GetDataHelper();
            List <News>   news   = helper.GetNews();


            var query = activity.GetComposeExtensionQueryData();

            if (query == null /*|| (query.CommandId != "Speakers" || query.CommandId != "Sessions")*/)
            {
                return(null);
            }

            /* if (query.CommandId == "speaker")
             * {
             *   var title = "";
             *   var titleParam = query.Parameters?.FirstOrDefault(p => p.category == "speakerTitle");
             *   var response = new ComposeExtensionResponse(new ComposeExtensionResult("list", "result"));
             *   ComposeExtensionAttachment[] attachments = null;
             *   if (titleParam != null)
             *   {
             *       title = titleParam.Value.ToString();
             *
             *       List<string> searchNames = speakers.Select(a => a.SpeakerName).Where(c => c.ToLower().Contains(title.ToLower())).Select(d => d).ToList();
             *       List<string> searchImages = speakers.Where(a => a.SpeakerName.ToLower().Contains(title.ToLower())).Select(c => c.Snap).ToList();
             *       List<string> searchBio = speakers.Where(a => a.SpeakerName.ToLower().Contains(title.ToLower())).Select(c => c.Bio).ToList();
             *       List<string> searchTitle = speakers.Where(a => a.SpeakerName.ToLower().Contains(title.ToLower())).Select(c => c.Title).ToList();
             *       int attacCount = searchNames.Count();
             *
             *       attachments = new ComposeExtensionAttachment[attacCount];
             *       for (int i = 0; i < attacCount; i++)
             *       {
             *           attachments[i] = GetAttachment(searchImages[i], searchNames[i], searchTitle[i], searchBio[i]);
             *       }
             *       response.ComposeExtension.Attachments = attachments.ToList();
             *   }
             *   else
             *   {
             *       List<string> searchNames = speakers.Select(c => c.SpeakerName).ToList();
             *       List<string> searchImages = speakers.Select(c => c.Snap).ToList();
             *       List<string> searchTitle = speakers.Select(c => c.Title).ToList();
             *       List<string> searchBio = speakers.Select(c => c.Bio).ToList();
             *       attachments = new ComposeExtensionAttachment[searchNames.Count];
             *       for (int i = 0; i < searchNames.Count; i++)
             *       {
             *           attachments[i] = GetAttachment(searchImages[i], searchNames[i], searchTitle[i], searchBio[i]);
             *       }
             *       response.ComposeExtension.Attachments = attachments.ToList();
             *   }
             *
             *   return response;
             * }*/
            else if (query.CommandId == "EventsTrainings")
            {
                List <EventsAndTrainings> eventsTrainings = helper.GetEandT();

                var title      = "";
                var titleParam = query.Parameters?.FirstOrDefault(p => p.Name == "ETTitle");
                var response   = new ComposeExtensionResponse(new ComposeExtensionResult("list", "result"));
                ComposeExtensionAttachment[] attachments = null;
                if (titleParam != null)
                {
                    title = titleParam.Value.ToString();

                    List <string> searchTitle  = eventsTrainings.Select(a => a.ETTitle).Where(c => c.ToLower().Contains(title.ToLower())).Select(d => d).ToList();
                    List <string> searchdate   = eventsTrainings.Where(a => a.ETTitle.ToLower().Contains(title.ToLower())).Select(d => d.ETStartDate).ToList();
                    List <string> searchend    = eventsTrainings.Where(a => a.ETTitle.ToLower().Contains(title.ToLower())).Select(d => d.ETEndDate).ToList();
                    List <string> searchETType = eventsTrainings.Where(a => a.ETTitle.ToLower().Contains(title.ToLower())).Select(d => d.ETType).ToList();;
                    int           attacCount   = searchTitle.Count();

                    attachments = new ComposeExtensionAttachment[attacCount];
                    for (int i = 0; i < attacCount; i++)
                    {
                        // string Type = searchSpeaker[i] + " - " + searchSessionType[i];
                        attachments[i] = GetAttachment(searchdate[i], searchend[i], searchTitle[i], searchETType[i]);
                    }
                    response.ComposeExtension.Attachments = attachments.ToList();
                }
                else
                {
                    List <string> searchTitle  = eventsTrainings.Select(c => c.ETTitle).Take(20).ToList();
                    List <string> searchdate   = eventsTrainings.Select(c => c.ETStartDate).Take(20).ToList();
                    List <string> searchend    = eventsTrainings.Select(c => c.ETEndDate).Take(20).ToList();
                    List <string> searchETType = eventsTrainings.Select(c => c.ETType).ToList();
                    attachments = new ComposeExtensionAttachment[searchTitle.Count];
                    for (int i = 0; i < searchTitle.Count; i++)
                    {
                        //string speakerAndSessionType = searchSpeaker[i] + " - " + searchSessionType[i];
                        attachments[i] = GetAttachment(searchdate[i], searchend[i], searchTitle[i], searchETType[i]);
                    }
                    response.ComposeExtension.Attachments = attachments.ToList();
                }

                return(response);
            }

            return(null);
        }
        public async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req, ILogger logger, ExecutionContext context)
        {
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            using (var scope = logger.BeginScope($"{nameof(MessagesHttpFunction.Run)}")) {
                if (req == null)
                {
                    throw new ArgumentNullException(nameof(req));
                }

                if (context == null)
                {
                    throw new ArgumentNullException(nameof(context));
                }

                logger.LogInformation("Messages function received a request.");

                // Use the configured service for tests or create ones to use.
                ISettings             settings             = this.settings ?? new Settings(logger, context);
                IStickerSetRepository stickerSetRepository = this.stickerSetRepository ?? new StickerSetRepository(logger, settings);
                IStickerSetIndexer    stickerSetIndexer    = this.stickerSetIndexer ?? new StickerSetIndexer(logger);
                ICredentialProvider   credentialProvider   = this.credentialProvider ?? new SimpleCredentialProvider(settings.MicrosoftAppId, null);
                IChannelProvider      channelProvider      = this.channelProvider ?? new SimpleChannelProvider();

                // Parse the incoming activity and authenticate the request
                Activity activity;
                try {
                    var authorizationHeader = GetAuthorizationHeader(req);
                    activity = await ParseRequestBody(req);

                    await JwtTokenValidation.AuthenticateRequest(activity, authorizationHeader, credentialProvider, channelProvider);
                } catch (JsonReaderException e) {
                    logger.LogDebug(e, "JSON parser failed to parse request payload.");
                    return(new BadRequestResult());
                } catch (UnauthorizedAccessException e) {
                    logger.LogDebug(e, "Request was not propertly authorized.");
                    return(new UnauthorizedResult());
                }

                // Log telemetry about the activity
                try {
                    this.LogActivityTelemetry(activity);
                } catch (Exception ex) {
                    logger.LogWarning(ex, "Error sending user activity telemetry");
                }

                // Reject all activity types other than those related to messaging extensions
                if (!activity.IsComposeExtensionQuery())
                {
                    logger.LogDebug("Request payload was not a messaging extension query.");
                    return(new BadRequestObjectResult($"App only supports messaging extension query activity types."));
                }

                // Get the query string. We expect exactly 1 parameter, so we take the first parameter, regardless of the name.
                var skip  = 0;
                var count = 25;
                var query = string.Empty;
                if (activity.Value != null)
                {
                    var queryValue = JObject.FromObject(activity.Value).ToObject <ComposeExtensionValue>();
                    query = queryValue.GetParameterValue();

                    if (queryValue?.QueryOptions != null)
                    {
                        skip  = queryValue.QueryOptions.Skip;
                        count = queryValue.QueryOptions.Count;
                    }
                }

                // Find matching stickers
                var stickerSet = await stickerSetRepository.FetchStickerSetAsync();

                await stickerSetIndexer.IndexStickerSetAsync(stickerSet);

                var stickers = await stickerSetIndexer.FindStickersByQuery(query, skip, count);

                var result = new ComposeExtensionResponse {
                    ComposeExtensionResult = new ComposeExtensionResult {
                        Type             = "result",
                        AttachmentLayout = "grid",
                        Attachments      = stickers.Select(sticker => new StickerComposeExtensionCard(sticker).ToAttachment()).ToArray()
                    }
                };

                return(new OkObjectResult(result));
            }
        }