/// <summary> /// Initializes a new instance of the <see cref="UStoreBot"/> class. /// </summary> /// <param name="botServices">Bot services.</param> /// <param name="accessors">Bot State Accessors.</param> public UStoreBot(BotServices services, UserState userState, ConversationState conversationState, ILoggerFactory loggerFactory, UStoreDBContext ucontext) { _services = services ?? throw new ArgumentNullException(nameof(services)); _userState = userState ?? throw new ArgumentNullException(nameof(userState)); _conversationState = conversationState ?? throw new ArgumentNullException(nameof(conversationState)); _greetingStateAccessor = _userState.CreateProperty <GreetingState>(nameof(GreetingState)); _recipeStateAccessor = _userState.CreateProperty <RecipeState>(nameof(RecipeState)); _dialogStateAccessor = _conversationState.CreateProperty <DialogState>(nameof(DialogState)); _context = ucontext; // Verify LUIS configuration. if (!_services.LuisServices.ContainsKey(LuisConfiguration)) { throw new InvalidOperationException($"The bot configuration does not contain a service type of `luis` with the id `{LuisConfiguration}`."); } Dialogs = new DialogSet(_dialogStateAccessor); Dialogs.Add(new GreetingDialog(_greetingStateAccessor, loggerFactory)); Dialogs.Add(new RecipeDialog(_recipeStateAccessor, loggerFactory, _context)); }
public RecipeDialog(IStatePropertyAccessor <RecipeState> userProfileStateAccessor, ILoggerFactory loggerFactory, UStoreDBContext context) : base(nameof(RecipeDialog)) { _context = context; UserProfileAccessor = userProfileStateAccessor ?? throw new ArgumentNullException(nameof(userProfileStateAccessor)); var waterfallSteps = new WaterfallStep[] { InitializeStateStepAsync, // dialogo de inicialização , verifica se já existe state CheckIfUserNeedsHelpWithMenu, // verificar se o utilizador quer mandar vir comida CheckPromotions, // verifica se existem ingredientes em promoção UseRecipeOfTheWeek, // dialogo em que sugerimos receita do mês mais 2 receitas random DisplayRecipeStepAsync, // dialogo que apresenta ao utilizador uma lista de recipes disponiveis NumberOfPersonForDinnerAsync, // pergunta quantas pessoas são para jantar DisplayNecessaryIngredientsListAsync, // dialogo que apresenta a lista de ingredientes necessários para uma determinada recipeLoop DisplayBillUser, // dialogo que apresenta conta final ao utilizador e pede confirmação DisplayPurchaseCompleted, // dialogo que apresenta confirmação ao utilizador que a compra foi terminada com sucesso PlanEventAsync, // pergunta data ao utilizador e marca evento ConfirmDateAsync, // confirma que a data foi bem inserida e marca o evento e envia o mail }; AddDialog(new WaterfallDialog(FluxoEscolhaReceitas, waterfallSteps)); AddDialog(new ConfirmPrompt(DialogPromptIds.OrderFoodPrompt, null)); AddDialog(new ConfirmPrompt(DialogPromptIds.UserRecipeOfTheWeekPrompt, null)); AddDialog(new TextPrompt(DialogPromptIds.RecipePrompt, ValidateRecipe)); AddDialog(new TextPrompt(DialogPromptIds.SugestedRecipePrompt, ValidateOptionRecipe)); // ValidateOption; AddDialog(new TextPrompt(DialogPromptIds.AskForUserInputIngredient, null)); AddDialog(new NumberPrompt <int>(DialogPromptIds.NumberOfPeopleForDinnerPrompt)); AddDialog(new ConfirmPrompt(DialogPromptIds.ConfirmRecipePrompt, null)); // ValidateConfirmRecipePrompt)); AddDialog(new ConfirmPrompt(DialogPromptIds.ConfirmAddStorageItemsPrompt, null)); AddDialog(new ConfirmPrompt(DialogPromptIds.ConfirmTotalPrice, null)); AddDialog(new ConfirmPrompt(DialogPromptIds.OrderPizzaPrompt, null)); AddDialog(new DateTimePrompt(DialogPromptIds.DinnerDatePrompt, DateValidatorAsync)); AddDialog(new ConfirmPrompt(DialogPromptIds.ConfirmDatePrompt, null)); AddDialog(new ConfirmPrompt(DialogPromptIds.AskUserOrderPizzaPrompt, null)); }
public UStoreDBManagement(UStoreDBContext context) { _context = context; }