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