Exemple #1
0
        private async Task <bool> EvaluateExpressionInput(ITurnContext turnContext, RequestState requestState)
        {
            var               res     = false;
            var               text    = turnContext.Activity.Text;
            var               curLink = requestState.CurrentLink;
            ActionLink        actionResult;
            ExpEvalResultType op = curLink.NeuralExp.Next(text, out actionResult);

            switch (op)
            {
            case ExpEvalResultType.Skipped:
            case ExpEvalResultType.False:
            case ExpEvalResultType.True:
            {
                if (op == ExpEvalResultType.Skipped)
                {
                    await SendNotes(curLink, turnContext);
                }
                switch (actionResult.Type)
                {
                case LinkType.NeuralLink:
                {
                    var link = await DbLinkCollection.FindOneById(actionResult.LinkId);

                    if (link != null)
                    {
                        curLink = link;
                        requestState.StepForward(curLink);
                        await SendResponseForCurrentNode(turnContext, requestState);
                    }
                    else
                    {
                        //Invalid expression evaluation link id.
                        await SendReply(turnContext, $"Invalid node information : '{actionResult.LinkId}',please report this issue to the bot administrator.", SuggestionExtension.GetCommonSuggestionActions());
                    }
                }
                break;

                case LinkType.ActionLink:
                {
                    var action = await DbActionCollection.FindOneById(actionResult.LinkId);

                    await turnContext.SendActivityAsync(action.BuildActionRespose(turnContext));

                    requestState.CurrentState = ChatStateType.RecordFeedback;
                }
                break;

                case LinkType.NeuralResource:
                {
                    var resource = await DbResourceCollection.FindOneById(actionResult.LinkId);

                    await turnContext.SendActivityAsync(resource.BuildResourceResponse(turnContext));

                    requestState.CurrentState = ChatStateType.RecordFeedback;
                }
                break;

                default:
                    break;
                }
                if (requestState.CurrentState == ChatStateType.RecordFeedback)
                {
                    await Task.Delay(1000).ContinueWith(async ct =>
                        {
                            await SendReply(turnContext, StringsProvider.TryGet(BotResourceKeyConstants.Feedback), SuggestionExtension.GetFeedbackSuggestionActions());
                        });
                }
                res = true;
            }
            break;

            case ExpEvalResultType.Exception:
            case ExpEvalResultType.Invalid:
            {
                await SendReply(turnContext, "Invalid input, please try again!", SuggestionExtension.GetCommonSuggestionActions("Exit:exit"));

                requestState.CurrentState = ChatStateType.InvalidInput;
            }
            break;

            case ExpEvalResultType.Empty:    //TODO
            {
                await SendReply(turnContext, $"Evaluated empty expression of node : '{curLink._id}',please report this issue to the bot administrator.", SuggestionExtension.GetCommonSuggestionActions());
            }
            break;

            default:

                break;
            }
            return(res);
        }
        private async Task <bool> EvaluateExpressionInput(ITurnContext turnContext, RequestState requestState)
        {
            var               res     = false;
            var               text    = turnContext.Activity.Text;
            var               curLink = requestState.CurrentLink;
            ActionLink        actionResult;
            ExpEvalResultType op = curLink.NeuralExp.Next(text, out actionResult);

            switch (op)
            {
            case ExpEvalResultType.Skipped:
            case ExpEvalResultType.False:
            case ExpEvalResultType.True:
            {
                switch (actionResult.Type)
                {
                case LinkType.NeuralLink:
                {
                    var link = await DbLinkCollection.FindOneById(actionResult.LinkId);

                    if (link != null)
                    {
                        curLink = link;
                        requestState.StepForward(curLink);
                        await SendResponseForCurrentNode(turnContext, requestState);
                    }
                    else
                    {
                        //Invalid expression evaluation link id.
                    }
                }
                break;

                case LinkType.ActionLink:
                {
                    var action = await DbActionCollection.FindOneById(actionResult.LinkId);

                    await turnContext.SendActivityAsync(action.BuildActionRespose(turnContext));

                    await Task.Delay(1000).ContinueWith(async ct =>
                            {
                                await SendReply(turnContext, StringsProvider.TryGet(BotResourceKeyConstants.Feedback), SuggestionExtension.GetFeedbackSuggestionActions());
                            });

                    requestState.CurrentState = ChatStateType.RecordFeedback;
                }
                break;

                case LinkType.NeuralResource:
                    break;

                default:
                    break;
                }
            }
                res = true;
                break;

            case ExpEvalResultType.Exception:
            case ExpEvalResultType.Invalid:
            {
                await SendReply(turnContext, "Invalid input, Try again!", SuggestionExtension.GetCommonSuggestionActions());

                requestState.CurrentState = ChatStateType.InvalidInput;
            }
            break;

            case ExpEvalResultType.Empty:    //TODO
            default:

                break;
            }
            return(res);
        }