Exemple #1
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);
        }
        //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);
        }
        //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 List <ComposeExtensionAttachment> BuildAttachments(IList <string> cities)
        {
            var attachments = new List <ComposeExtensionAttachment>();

            foreach (var city in cities)
            {
                var attachment = new ComposeExtensionAttachment
                {
                    ContentType = ThumbnailCard.ContentType,
                    Content     = CreateSampleThumbnailCard(city, false),
                    Preview     = new Attachment()
                    {
                        ContentType = ThumbnailCard.ContentType,
                        Content     = CreateSampleThumbnailCard(city, true),
                    }
                };
                attachments.Add(attachment);
            }
            return(attachments);
        }
        private List <ComposeExtensionAttachment> BuildAttachments(IList <StoryDocument> stories)
        {
            var attachments = new List <ComposeExtensionAttachment>();

            foreach (var story in stories)
            {
                var attachment = new ComposeExtensionAttachment
                {
                    ContentType = HeroCard.ContentType,
                    Content     = CreateCard(story),
                    Preview     = new Attachment()
                    {
                        ContentType = ThumbnailCard.ContentType,
                        Content     = CreatePreviewCard(story),
                    }
                };
                attachments.Add(attachment);
            }
            return(attachments);
        }
        internal static List <ComposeExtensionAttachment> GetAttachment(string keyword = "")
        {
            XNamespace ns       = "http://www.w3.org/2005/Atom";
            var        document = XDocument.Load("http://feed.cnblogs.com/blog/u/12626/rss");
            var        result   = document.Root.Elements(ns + "entry").Where(x =>
            {
                if (string.IsNullOrEmpty(keyword))
                {
                    return(true);
                }
                else
                {
                    return(x.Element(ns + "title").Value.ToLower().Contains(keyword.ToLower()));
                }
            }).Select(x =>
            {
                var item = new ComposeExtensionAttachment()
                {
                    Content = new ThumbnailCard(
                        title: x.Element(ns + "title").Value,
                        text: x.Element(ns + "summary").Value,
                        images: new[] { new CardImage("http://lorempixel.com/640/480?rand=" + DateTime.Now.Ticks.ToString()) },
                        tap: new CardAction()
                    {
                        Type  = "OpenUrl",
                        Value = x.Element(ns + "id").Value
                    }
                        ),
                    ContentUrl  = x.Element(ns + "id").Value,
                    ContentType = "application/vnd.microsoft.card.thumbnail",
                    Name        = "result",
                    Preview     = new ThumbnailCard(title: x.Element(ns + "title").Value, text: x.Element(ns + "summary").Value, images: new[] { new CardImage("http://lorempixel.com/640/480?rand=" + DateTime.Now.Ticks.ToString()) }).ToAttachment()
                };
                return(item);
            }).ToList();



            return(result);
        }
Exemple #7
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 #8
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 static ComposeExtensionResponse HandleMessageExtensionQuery(ConnectorClient connector, Activity activity)
        {
            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.news.Select(a => a.NewsTitle).Where(c => c.ToLower().Contains(title.ToLower())).Select(d => d).ToList();
                    List <string> searchImages   = news.news.Where(a => a.NewsTitle.ToLower().Contains(title.ToLower())).Select(c => c.NewsThumbnailUrl).ToList();
                    List <string> searchDateTime = news.news.Where(a => a.NewsTitle.ToLower().Contains(title.ToLower())).Select(c => c.NewsDateTIme).ToList();
                    List <string> searchdetail   = news.news.Where(a => a.NewsTitle.ToLower().Contains(title.ToLower())).Select(c => c.DetailedNews).ToList();
                    List <string> searchby       = news.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] = GetNewsAttachment(searchImages[i], searchtitle[i], searchby[i], searchdetail[i]);
                    }

                    response.ComposeExtension.Attachments = attachments.ToList();
                }
                else
                {
                    List <string> searchtitle    = news.news.Select(c => c.NewsTitle).Take(20).ToList();
                    List <string> searchImages   = news.news.Select(c => c.NewsThumbnailUrl).Take(20).ToList();
                    List <string> searchDateTime = news.news.Select(c => c.NewsDateTIme).Take(20).ToList();
                    List <string> searchdetail   = news.news.Select(c => c.DetailedNews).Take(20).ToList();
                    List <string> searchby       = news.news.Select(c => c.NewsBy).Take(20).ToList();
                    attachments = new ComposeExtensionAttachment[searchtitle.Count()];
                    for (int i = 0; i < searchtitle.Count(); i++)
                    {
                        attachments[i] = GetNewsAttachment(searchImages[i], searchtitle[i], searchby[i], searchdetail[i]);
                    }
                    response.ComposeExtension.Attachments = attachments.ToList();
                }
                return(response);
            }
            else if (query.CommandId == "Task")
            {
                SpfxPurchaseOrder task = GetDataHelper.GetPOs();
                var title      = "";
                var titleParam = query.Parameters?.FirstOrDefault(p => p.Name == "tasktitle");
                var response   = new ComposeExtensionResponse(new ComposeExtensionResult("list", "result"));
                ComposeExtensionAttachment[] attachments = null;
                if (titleParam != null)
                {
                    title = titleParam.Value.ToString();
                    //List<string> description = task.PurchaseOrder.Select(a => a.Description).Where(c => c.ToLower().Contains(title.ToLower())).Select(d => d).ToList();
                    //List<string> totamount = task.PurchaseOrder.Where(a => a.Description.ToLower().Contains(title.ToLower())).Select(c => c.TotalAmount).ToList();
                    List <string> description = task.value.Select(a => a.Description).Where(c => c.ToLower().Contains(title.ToLower())).Select(d => d).ToList();
                    List <string> totamount   = task.value.Where(a => a.Description.ToLower().Contains(title.ToLower())).Select(c => c.TotalAmount).ToList();

                    int attacCount = description.Count();
                    attachments = new ComposeExtensionAttachment[attacCount];
                    for (int i = 0; i < attacCount; i++)
                    {
                        attachments[i] = GetTaskAttachments(description[i], totamount[i]);
                    }

                    response.ComposeExtension.Attachments = attachments.ToList();
                }
                else
                {
                    List <string> description = task.value.Where(b => b.PoStatus == "pending").Select(c => c.Description).Take(20).ToList();
                    List <string> totamount   = task.value.Where(b => b.PoStatus == "pending").Select(c => c.TotalAmount).Take(20).ToList();
                    attachments = new ComposeExtensionAttachment[description.Count()];
                    for (int i = 0; i < description.Count(); i++)
                    {
                        attachments[i] = GetTaskAttachments(description[i], totamount[i]);
                    }
                    response.ComposeExtension.Attachments = attachments.ToList();
                }
                return(response);
            }
            else if (query.CommandId == "EventsAndTrainings")

            {
                EandTModel eventsTrainings = GetDataHelper.GetEandT();
                var        title           = "";
                var        titleParam      = query.Parameters?.FirstOrDefault(p => p.Name == "EventsAndTrainingstitle");
                var        response        = new ComposeExtensionResponse(new ComposeExtensionResult("list", "result"));
                ComposeExtensionAttachment[] attachments = null;

                if (titleParam != null)
                {
                    title = titleParam.Value.ToString();
                    List <string> searchTitle   = eventsTrainings.EventsAndtraining.Select(a => a.ETTitle).Where(c => c.ToLower().Contains(title.ToLower())).Select(d => d).ToList();
                    List <string> searchdetails = eventsTrainings.EventsAndtraining.Select(a => a.ETDetails).Where(c => c.ToLower().Contains(title.ToLower())).Select(d => d).ToList();
                    List <string> searchdate    = eventsTrainings.EventsAndtraining.Where(a => a.ETTitle.ToLower().Contains(title.ToLower())).Select(d => d.ETStartDate).ToList();
                    List <string> searchimage   = eventsTrainings.EventsAndtraining.Where(a => a.ETTitle.ToLower().Contains(title.ToLower())).Select(d => d.ETThumbnailUrl).ToList();
                    List <string> searchETType  = eventsTrainings.EventsAndtraining.Where(a => a.ETTitle.ToLower().Contains(title.ToLower())).Select(d => d.ETType).ToList();
                    List <string> searchETid    = eventsTrainings.EventsAndtraining.Where(a => a.ETTitle.ToLower().Contains(title.ToLower())).Select(d => d.ETID).ToList();
                    List <bool>   searchETar    = eventsTrainings.EventsAndtraining.Where(a => a.ETTitle.ToLower().Contains(title.ToLower())).Select(d => d.UserAdded).ToList();

                    int attacCount = searchTitle.Count();

                    attachments = new ComposeExtensionAttachment[attacCount];

                    for (int i = 0; i < attacCount; i++)
                    {
                        attachments[i] = GetEventsAttachment(searchimage[i], searchTitle[i] + ',' + searchETType[i], searchdate[i], searchdetails[i], searchETid[i], searchETar[i]);
                    }

                    response.ComposeExtension.Attachments = attachments.ToList();
                }
                else
                {
                    List <string> searchTitle   = eventsTrainings.EventsAndtraining.Select(c => c.ETTitle).ToList();
                    List <string> searchdetails = eventsTrainings.EventsAndtraining.Select(c => c.ETDetails).ToList();
                    List <string> searchdate    = eventsTrainings.EventsAndtraining.Select(c => c.ETStartDate).ToList();
                    List <string> searchimage   = eventsTrainings.EventsAndtraining.Select(c => c.ETThumbnailUrl).ToList();
                    List <string> searchETType  = eventsTrainings.EventsAndtraining.Select(c => c.ETType).ToList();
                    List <string> searchETid    = eventsTrainings.EventsAndtraining.Select(c => c.ETID).ToList();
                    List <bool>   searchETar    = eventsTrainings.EventsAndtraining.Select(c => c.UserAdded).ToList();
                    attachments = new ComposeExtensionAttachment[searchTitle.Count];
                    for (int i = 0; i < searchTitle.Count; i++)
                    {
                        attachments[i] = GetEventsAttachment(searchimage[i], searchTitle[i] + ',' + searchETType[i], searchdate[i], searchdetails[i], searchETid[i], searchETar[i]);
                    }

                    response.ComposeExtension.Attachments = attachments.ToList();
                }
                return(response);
            }
            else
            {
                return(null);
            }
        }
        public static ComposeExtensionResponse HandleMessageExtensionQuery(ConnectorClient connector, Activity activity, Dictionary <int, StudentValues> results)
        {
            Helperr            helper   = new Helperr();
            List <SpeakerBios> speakers = helper.SpeakerInformation();


            var query = activity.GetComposeExtensionQueryData();

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

            if (query.CommandId == "Speakers")
            {
                var title      = "";
                var titleParam = query.Parameters?.FirstOrDefault(p => p.Name == "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 == "Sessions")
            {
                List <SessionList> sessions = helper.SessionInformation();

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

                    List <string> searchSessionNames    = sessions.Select(a => a.Session).Where(c => c.ToLower().Contains(title.ToLower())).Select(d => d).ToList();
                    List <string> searchSpeaker         = sessions.Where(a => a.Session.ToLower().Contains(title.ToLower())).Select(d => d.Speaker).ToList();
                    List <string> searchSessionAbstract = sessions.Where(a => a.Session.ToLower().Contains(title.ToLower())).Select(d => d.Abstract).ToList();
                    List <string> searchSessionType     = sessions.Where(a => a.Session.ToLower().Contains(title.ToLower())).Select(d => d.SessionType).ToList();;
                    int           attacCount            = searchSessionNames.Count();

                    attachments = new ComposeExtensionAttachment[attacCount];
                    for (int i = 0; i < attacCount; i++)
                    {
                        string speakerAndSessionType = searchSpeaker[i] + " - " + searchSessionType[i];
                        attachments[i] = GetAttachments(searchSessionNames[i], speakerAndSessionType, searchSessionAbstract[i]);
                    }
                    response.ComposeExtension.Attachments = attachments.ToList();
                }
                else
                {
                    List <string> searchSessionNames    = sessions.Select(c => c.Session).Take(20).ToList();
                    List <string> searchSpeaker         = sessions.Select(c => c.Speaker).Take(20).ToList();
                    List <string> searchSessionAbstract = sessions.Select(c => c.Abstract).Take(20).ToList();
                    List <string> searchSessionType     = sessions.Select(c => c.SessionType).ToList();
                    attachments = new ComposeExtensionAttachment[searchSessionNames.Count];
                    for (int i = 0; i < searchSessionNames.Count; i++)
                    {
                        string speakerAndSessionType = searchSpeaker[i] + " - " + searchSessionType[i];
                        attachments[i] = GetAttachments(searchSessionNames[i], speakerAndSessionType, searchSessionAbstract[i]);
                    }
                    response.ComposeExtension.Attachments = attachments.ToList();
                }

                return(response);
            }

            return(null);
        }