public NewInsultQnADialog(BastardBrain brain) : base(nameof(NewInsultQnADialog)) { _brain = brain; AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[] { NewInsult, PromptReplyToInsult, AddInsultResponse, MoreResponses, ConfirmNewInsultQnA })); AddDialog(new TextPrompt(nameof(TextPrompt), InsultResponseValidator)); AddDialog(new ConfirmPrompt(nameof(ConfirmPrompt))); AddDialog(new AddMoreInsultsForResponseDialog(_brain.GetBastardDBContext())); }
private async Task <DialogTurnResult> ActStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) { // Hard-coded responses bool abortDialogue = await HandleHardCodedResponses(stepContext, cancellationToken); if (abortDialogue) { return(await stepContext.EndDialogAsync(null, cancellationToken)); } // Call LUIS and gather any potential booking details. (Note the TurnContext has the response to the prompt.) var luisResult = await _luisRecognizer.RecognizeAsync <BastardTalk>(stepContext.Context, cancellationToken); switch (luisResult.TopIntent().intent) { case BastardTalk.Intent.InsultMe: await stepContext.Context.SendActivityAsync( MessageFactory.Text("Oh, an insult! Here's one someone taught me..."), cancellationToken); await GenerateInsultFromQnA(stepContext, cancellationToken); return(await GetQnAResponseFromInput(stepContext, cancellationToken)); case BastardTalk.Intent.ComplementInsult: var likedResponse = await PhraseGenerator.GetPhrase(BotConstants.CHAT_CATEGORY_INSULT_LIKED, _brain.GetBastardDBContext()); return(await stepContext.NextAsync(likedResponse, cancellationToken)); case BastardTalk.Intent.DismissInsult: var dislikedResponse = await PhraseGenerator.GetPhrase(BotConstants.CHAT_CATEGORY_INSULT_LIKED, _brain.GetBastardDBContext()); return(await stepContext.NextAsync(dislikedResponse, cancellationToken)); default: // Handle with QnA return(await GetQnAResponseFromInput(stepContext, cancellationToken)); } // Should never arrive here throw new Exception("wtf"); }
private async Task <DialogTurnResult> NewInsult(WaterfallStepContext stepContext, CancellationToken cancellationToken) { NewInsultQnA newInsultQnA = (NewInsultQnA)stepContext.Options; // Save new QnA to session stepContext.Values.Add(BotConstants.STEP_VALUES_NEW_INSULT_KEY, newInsultQnA); var askToHelp = await PhraseGenerator.GetPhrase(BotConstants.CHAT_CATEGORY_NEW_INSULT_START, _brain.GetBastardDBContext()); return(await stepContext.PromptAsync(nameof(ConfirmPrompt), new PromptOptions { Prompt = MessageFactory.Text(string.Format(askToHelp, newInsultQnA.Insults.First())), RetryPrompt = MessageFactory.Text("Need some actual text here") }, cancellationToken)); }