Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
            }
        }