Exemple #1
0
 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()));
 }
Exemple #2
0
        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");
        }
Exemple #3
0
        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));
        }