public static async Task <int> Cards(Activity activity, ConnectorClient connector, List <Request> requests) { foreach (var b in requests) { string card = String.Format("DATE : {0}\r\nTIME : {1}\r\nFROM : {2}\r\nTO : {3}\r\nVACANCY : {5}\r\nMEMBERS : {4}", b.date1.Value.ToShortDateString(), b.time1.ToString(), b.origin.TrimEnd(), b.destination.TrimEnd(), b.names, b.MAXNO); Activity reply = activity.CreateReply(""); reply.Attachments = new List <Attachment>(); List <CardImage> cardImages = new List <CardImage>(); List <Fact> facts = new List <Fact>(); List <CardAction> cardButtons = new List <CardAction>(); CardAction namebutton = new CardAction() { Value = "https://www.facebook.com/" + b.fbid, Type = "openUrl", Title = b.name }; cardButtons.Add(namebutton); CardAction plButton = new CardAction() { Value = JsonConvert.SerializeObject(b), Type = "postBack", Title = "Join Pool" }; cardButtons.Add(plButton); HeroCard plCard = new HeroCard() { Text = "Profile Link", Images = cardImages, Buttons = cardButtons }; try { Attachment plAttachment = plCard.ToAttachment(); reply.Attachments.Add(plAttachment); await JoinCard.show(activity, connector, card); await connector.Conversations.ReplyToActivityAsync(reply); } catch (Exception ex) { await JoinCard.show(activity, connector, ex.Message); } } return(1); }
private static async Task <int> ReplyCreate(Activity activity, ConnectorClient connector) { var x = await GetEntityFromLUIS(activity.Text); if (activity.Text == "YES" || activity.Text == "NO") { string naam = "a"; var c = JObject.Parse(activity.ChannelData.ToString()); string s = (String)c["message"]["quick_reply"]["payload"]; var results = new List <string>(); //var subjectString = "My Name is #P_NAME# and \r\n I am #P_AGE# years old"; Regex regexObj = new Regex("_.+?_"); Match matchResults = regexObj.Match(s); while (matchResults.Success) { results.Add(matchResults.ToString().Replace("_", "")); matchResults = matchResults.NextMatch(); } int i; int.TryParse(results[1], out i); using (var DB = new travelrecordEntities()) { Request match = DB.Requests.Where(b => b.id == i).FirstOrDefault(); naam = match.name; } if (results[0] == "YES") { string e = await GetUserName1(results[2]); Request match; using (var DB = new travelrecordEntities()) { match = DB.Requests.Where(b => b.id == i).FirstOrDefault(); } naam = match.name; if (match != null) { match.names = match.names + ", " + e; match.MAXNO--; } await JoinCard.show(activity, connector, match.names); try { using (var db = new travelrecordEntities()) { db.Entry(match).State = EntityState.Modified; await db.SaveChangesAsync(); } var botAccount = activity.Recipient; var f = await GetUserName1(results[2]); var userAccount = new ChannelAccount(name: f, id: results[2]); var conversationId = await connector.Conversations.CreateDirectConversationAsync(botAccount, userAccount); IMessageActivity message = Activity.CreateMessageActivity(); message.From = botAccount; message.Recipient = userAccount; message.Conversation = new ConversationAccount(id: conversationId.Id); message.Text = String.Format("The join request you sent to {0} was accepted.", naam); message.Locale = "en-Us"; await connector.Conversations.SendToConversationAsync((Activity)message); } catch (DbEntityValidationException dbEx) { foreach (var validationErrors in dbEx.EntityValidationErrors) { foreach (var validationError in validationErrors.ValidationErrors) { await JoinCard.show(activity, connector, validationError.ErrorMessage); await JoinCard.show(activity, connector, validationError.PropertyName); } } } await JoinCard.show(activity, connector, String.Format("{0} was added to your pool.", e)); } else { try { var botAccount = activity.Recipient; var e = await GetUserName1(results[2]); var userAccount = new ChannelAccount(name: e, id: results[2]); var conversationId = await connector.Conversations.CreateDirectConversationAsync(botAccount, userAccount); IMessageActivity message = Activity.CreateMessageActivity(); message.From = botAccount; message.Recipient = userAccount; message.Conversation = new ConversationAccount(id: conversationId.Id); message.Text = String.Format("The join request you sent to {0} was not accepted.", naam); message.Locale = "en-Us"; await connector.Conversations.SendToConversationAsync((Activity)message); } catch (Exception ex) { await JoinCard.show(activity, connector, ex.Message); } } return(1); } else if (x.topScoringIntent.intent == "Greeting") { string y = await GetUserName(activity); await JoinCard.show(activity, connector, "Hey " + y + "!"); return(1); } else if (x.topScoringIntent.intent == "join") { var c = JObject.Parse(activity.ChannelData.ToString()); Request request = JsonConvert.DeserializeObject <Request>(c["postback"]["payload"] + ""); var botAccount = activity.Recipient; var userAccount = new ChannelAccount(name: request.name, id: request.psid); var conversationId = await connector.Conversations.CreateDirectConversationAsync(botAccount, userAccount); IMessageActivity message = Activity.CreateMessageActivity(); message.From = botAccount; message.Recipient = userAccount; message.Conversation = new ConversationAccount(id: conversationId.Id); message.Text = String.Format("{0} wants to join your carpool. Select 'YES' or 'NO'.", activity.From.Name); message.Locale = "en-Us"; List <CardAction> cardButtons = new List <CardAction>(); CardAction namebutton = new CardAction() { Value = "https://www.facebook.com/" + request.fbid, Type = "openUrl", Title = request.name }; dynamic quickReplies = new JObject(); dynamic fbQRButtonRed = new JObject(); fbQRButtonRed.content_type = "text"; fbQRButtonRed.title = "YES"; fbQRButtonRed.payload = String.Format("_YES_a_{0}_a_{1}_", request.id.ToString(), activity.From.Id.ToString()); //fbQRButtonRed.payload = String.Format("{\r\n\"Answer\":\"YES\",\r\n\"Id\":\"{0}\",\r\n\"psid\":\"{1}\"\r\n}",request.id.ToString(),activity.From.Id.ToString()); fbQRButtonRed.image_url = "https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Button_Icon_Red.svg/300px-Button_Icon_Red.svg.png"; dynamic fbQRButtonBlue = new JObject(); fbQRButtonBlue.content_type = "text"; fbQRButtonBlue.title = "NO"; fbQRButtonBlue.payload = String.Format("_NO_a_{0}_a_{1}_", request.id.ToString(), activity.From.Id.ToString()); //fbQRButtonBlue.payload = String.Format("{\"Answer\":\"NO\",\"Id\":\"{0}\",\"psid\":\"{1}\"", request.id, activity.From.Id); fbQRButtonBlue.image_url = "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3f/Button_Icon_Blue.svg/768px-Button_Icon_Blue.svg.png"; quickReplies.quick_replies = new JArray(fbQRButtonRed, fbQRButtonBlue); message.ChannelData = quickReplies; await connector.Conversations.SendToConversationAsync((Activity)message); return(1); } else if (x.topScoringIntent.intent == "Search") { var a = await GetEntityFromLUIS(activity.Text); var y = await DBquery.Clean(a); var z = await DBquery.dataquery(y); z = z.Where(b => b.psid != activity.From.Id).ToList(); if (z.Count == 0) { await JoinCard.show(activity, connector, "Sorry. There were no matches. You can create your own pool."); } await JoinCard.Cards(activity, connector, z); return(1); } else if (x.topScoringIntent.intent == "Add") { cleandata cleaned = await DBquery.Clean(x); if ((cleaned.date == null) || (cleaned.dest == "") || (cleaned.origin == "") || (cleaned.time == default(DateTime))) { return(await JoinCard.show(activity, connector, "Please provide complete travel information.")); } else { // ask for max no. people //Activity reply = activity.CreateReply("Please specify the number of seats"); //await connector.Conversations.ReplyToActivityAsync(reply); var a = await GetUserName(activity); var b = await GetFBid(activity); string y = await DBquery.addquery(cleaned, a, activity.From.Id, b); return(await JoinCard.show(activity, connector, y)); } } else if (x.topScoringIntent.intent == "Show") { string y = await GetUserName(activity); var z = await DBquery.showdata(y); if (z.Count == 0) { await JoinCard.show(activity, connector, "You do not have any Pools. You can join or create you own."); } else { await JoinCard.ShowCards(activity, connector, y, z); } return(1); } else if (x.topScoringIntent.intent == "Delete") { string y = await GetUserName(activity); using (travelrecordEntities DB = new travelrecordEntities()) { var match = (from b in DB.Requests where (b.name == y) select b).ToList(); foreach (var b in match) { DB.Requests.Remove(b); await DB.SaveChangesAsync(); } } return(1); } else { return(1); } }