コード例 #1
0
        public MainFunctioningDialog(string dialogId, IEnumerable <WaterfallStep> steps = null)
            : base(dialogId, steps)
        {
            var singleExpense = new SingleExpense();

            AddStep(async(stepContext, cancellationToken) =>
            {
                var channel = new Channel(stepContext.Context.Activity.ChannelId);
                singleExpense.SetChannel(channel);
                var categories = await requestSender.GetRegularCategories(channel);
                var choices    = categories.Select(category => new Choice(category)).ToList();
                return(await stepContext.PromptAsync("categoriesPrompt",
                                                     new PromptOptions
                {
                    Prompt = stepContext.Context.Activity.CreateReply("Choose category!"),
                    Choices = choices
                }));
            });

            AddStep(async(stepContext, cancellationToken) =>
            {
                var channel = new Channel(stepContext.Context.Activity.ChannelId);
                singleExpense.SetChannel(channel);
                var categories = await requestSender.GetRegularCategories(channel);
                var choices    = categories.Select(category => new Choice(category)).ToList();
                return(await stepContext.PromptAsync("categoriesPrompt",
                                                     new PromptOptions
                {
                    Prompt = stepContext.Context.Activity.CreateReply("Choose category!"),
                    Choices = choices
                }));
            });

            AddStep(async(stepContext, cancellationToken) =>
            {
                singleExpense.CreationDateTime = stepContext.Context.Activity.Timestamp;
                if (!(stepContext.Result is string category))
                {
                    await stepContext.Context
                    .SendActivityAsync(MessageFactory.Text("Invalid input! Try again"), cancellationToken);
                    return(await stepContext.BeginDialogAsync(Id));
                }
                singleExpense.Category = category;

                var promptOptions = new PromptOptions
                {
                    Prompt = MessageFactory.Text("How much $$$?")
                };
                return(await stepContext.PromptAsync("amountPrompt", promptOptions, cancellationToken));
            });

            AddStep(async(stepContext, cancellationToken) =>
            {
                singleExpense.Amount = (int)stepContext.Result;
                if (!int.TryParse(stepContext.Result.ToString(), out var amount))
                {
                    await stepContext.Context
                    .SendActivityAsync(MessageFactory.Text("Narushitel! Try again."), cancellationToken);
                    return(await stepContext.BeginDialogAsync(Id));
                }
                singleExpense.Amount = amount;
                await requestSender.AddSingleExpense(singleExpense);
                await stepContext.Context
                .SendActivityAsync(MessageFactory.Text("Ok!"), cancellationToken);
                return(await stepContext.BeginDialogAsync(Id));
            });
        }