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); }
/// <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); } }
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); }