Ejemplo n.º 1
0
        public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> msg)
        {
            try
            {
                IMessageActivity message = await msg;
                string           tag     = "@Fineas";
                message.Text = message.Text.IndexOf(tag) >= 0 ?
                               message.Text.Remove(message.Text.IndexOf(tag), tag.Length).Trim() :
                               message.Text.Trim();

                if (string.Equals(message.Text, "help", StringComparison.OrdinalIgnoreCase))
                {
                    // Give list of options
                    // Post response and end this dialog
                    await context.PostAsync(string.Format("Ask me a question about your budget, and I will do my best to give you the answer you need. {0}", INSTRUCTIONS));

                    context.Wait(MessageReceivedAsync);
                }
                else if (string.Equals(message.Text, "logout", StringComparison.OrdinalIgnoreCase))
                {
                    // Make sure nothing is "cached"
                    DataRetriever.DeleteAllData();

                    // Logout and end this dialog
                    await context.Logout();

                    context.Wait(MessageReceivedAsync);
                }
                else if (string.Equals(message.Text, "login", StringComparison.OrdinalIgnoreCase))
                {
                    // Check to see if user token is filled, meaning they're logged in
                    string userToken = await context.GetAccessToken(AuthSettings.Scopes);

                    if (string.IsNullOrEmpty(userToken))
                    {
                        // Take user to login thread
                        await context.Forward(new AzureAuthDialog(AuthSettings.Scopes), ResumeAfterAuth, message, CancellationToken.None);
                    }
                    else
                    {
                        // Can't login if already logged in
                        // Post response and end this dialog
                        await context.PostAsync("You are already logged in.");

                        context.Wait(MessageReceivedAsync);
                    }
                }
                else if (string.Equals(message.Text, "who", StringComparison.OrdinalIgnoreCase))
                {
                    // context is handled inside this method
                    await TryGiveUsername(context, message.Text);
                }
                else if (string.Equals(message.Text, "query", StringComparison.OrdinalIgnoreCase))
                {
                    timeRange = DateTime.Parse("June, 2016");

                    // context is handled inside this method
                    await TryQueryDatabase(context, message);
                }
                else if (message.Text.StartsWith("query", StringComparison.OrdinalIgnoreCase))
                {
                    if (!DateTime.TryParse(message.Text.Substring(message.Text.IndexOf(' ')), out timeRange))
                    {
                        timeRange = DateTime.Now;
                    }

                    // context is handled inside this method
                    await TryQueryDatabase(context, message);
                }
                else if (string.Equals(message.Text, "refresh", StringComparison.OrdinalIgnoreCase))
                {
                    await Refresh(context, message.ToString(), true);

                    // End this dialog
                    context.Wait(MessageReceivedAsync);
                }
                else if (IsPreviousButton(message.Text))
                {
                    // That request is out of date, try starting a new query
                    await context.PostAsync(string.Format("Sorry, that question is outdated. Try querying again.", INSTRUCTIONS));

                    context.Wait(MessageReceivedAsync);
                }
                else
                {
                    //await PrintCards(context, (Activity)message);

                    // TODO: LUIS GOES HERE

                    // Tell user we don't know what to do here, and end this dialog
                    await context.PostAsync(string.Format("Sorry, '{0}' is not a choice. {1}", message.Text, INSTRUCTIONS));

                    context.Wait(MessageReceivedAsync);
                }
            }
            catch (Exception e)
            {
                // Tell user something broke, and end this dialog
                await context.PostAsync(string.Format("My life is in shambles. Something crashed. Hint: {0}", e.Message));

                context.Wait(MessageReceivedAsync);
            }
        }