public async Task <bool> ContinueSubject(V4ReferenceContext context)
        {
            var conversation = ConversationState <ConversationData> .Get(context);

            var luisResult = context.Services.Get <RecognizerResult>(LuisRecognizerMiddleware.LuisRecognizerResultKey);

            (string key, double score)topItem = luisResult.GetTopScoringIntent();

            switch (context.Activity.Type)
            {
            case ActivityTypes.Message:
                switch (topItem.key)
                {
                case "GuessingGame":
                    conversation.CurrentSubject = new GuessingGameSubject(this);
                    await conversation.CurrentSubject.StartSubject(context);

                    break;

                case "Help":
                    // show help
                    await GamesSubjectResponses.ReplyWithHelp(context);

                    break;

                case "MainMenu":
                    // show Main Menu
                    conversation.CurrentSubject = conversation.MainMenuSubject;
                    await conversation.MainMenuSubject.ContinueSubject(context);

                    break;

                case "Quit":
                    // show Main Menu
                    conversation.CurrentSubject = ParentSubject;
                    await ParentSubject.ContinueSubject(context);

                    break;

                default:
                    // show our confusion
                    await GamesSubjectResponses.ReplyWithConfused(context);

                    break;
                }

                break;

            default:
                await context.SendActivity($"Not setup yet");

                break;
            }

            return(true);
        }
        public async Task <bool> StartSubject(V4ReferenceContext context)
        {
            switch (context.Activity.Type)
            {
            case ActivityTypes.Message:

                await GamesSubjectResponses.ReplyWithGreeting(context);

                break;

            default:
                break;
            }
            return(true);
        }