private async Task <DialogTurnResult> NameStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            var details = (ChatbotDetails)stepContext.Values["details"];

            if ((bool)stepContext.Result)
            {
                var message = "Wie soll die Landschaft heißen?" + Environment.NewLine;
                var vmName  = details.VmName;
                message = message + "Folgende Landschaften existieren in deinem Azure:" + Environment.NewLine;

                var handler = new AzureHandler(details.User.Tenant, details.User.TokenResponse.Token);
                foreach (var tag in handler.GetAllAvailableLandscapes())
                {
                    message = message + tag + Environment.NewLine;
                }
                message = message + "Bitte tippe als Antwort den Namen der Landschaft zu der die VM " + vmName + " hinzugehört" + Environment.NewLine;
                var promptMessage = MessageFactory.Text(message, message, InputHints.ExpectingInput);
                return(await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { Prompt = promptMessage }, cancellationToken));
            }
            else
            {
                details.RunWithCompleteLandscape = false;
                return(await stepContext.EndDialogAsync(details, cancellationToken));
            }
        }
        private async Task <DialogTurnResult> GetLandscapeStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            var details = (ChatbotDetails)stepContext.Options;

            details.RunWithCompleteLandscape = true;
            stepContext.Values["details"]    = details;

            if (details.LandscapeTag == null)
            {
                var message = "Welche Landschaft soll herunter gefahren werden? Bitte wähle aus." + Environment.NewLine;

                IList <Choice> choices    = new List <Choice>();
                var            handler    = new AzureHandler(details.User.Tenant, details.User.TokenResponse.Token);
                var            landscapes = handler.GetAllAvailableLandscapes();
                if (!landscapes.Any())
                {
                    await stepContext.Context.SendActivityAsync(MessageFactory.Text("Es existieren keine Landschaften in ihrem Azure Account. Diese müssen zuerst konfiguriert werden. Dies kann über das Azure Portal oder über diesen Bot geschehen."), cancellationToken);

                    return(await stepContext.EndDialogAsync(null, cancellationToken));
                }
                foreach (var tag in landscapes)
                {
                    choices.Add(new Choice(tag));
                }

                message = message + "Folgende Landschaften können von dir herunter gefahren werden:";

                var promptMessage = MessageFactory.Text(message, message, InputHints.ExpectingInput);
                return(await stepContext.PromptAsync(nameof(ChoicePrompt), new PromptOptions()
                {
                    Choices = choices, Prompt = promptMessage
                }, cancellationToken));
            }

            return(await stepContext.NextAsync(new FoundChoice()
            {
                Value = details.LandscapeTag
            }, cancellationToken));
        }
Пример #3
0
        private async Task <DialogTurnResult> AskForLandscapeStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            var details = (ChatbotDetails)stepContext.Options;

            stepContext.Values["details"] = details;
            var handler    = new AzureHandler(details.User.Tenant, details.User.TokenResponse.Token);
            var landscapes = handler.GetAllAvailableLandscapes();

            IList <Choice> choices = new List <Choice>();

            foreach (var tag in landscapes)
            {
                choices.Add(new Choice(tag));
            }

            var message = "Für welche dieser Landschaften sollen die verpflichtenden VMs konfiguriert werden?";

            var promptMessage = MessageFactory.Text(message, message, InputHints.ExpectingInput);

            return(await stepContext.PromptAsync(nameof(ChoicePrompt), new PromptOptions()
            {
                Choices = choices, Prompt = promptMessage
            }, cancellationToken));
        }
Пример #4
0
        //endRegion Steps

        #region Methods

        private static async Task <ChatbotDetails> ShowWarningForUnsupportedVms(ITurnContext context, AzureBotLuis luisResult, ChatbotDetails details, CancellationToken cancellationToken)
        {
            var unsupportedVms          = new List <string>();
            var unsupportedVmLandscapes = new List <string>();
            var azureHandler            = new AzureHandler(details.User.Tenant, details.User.TokenResponse.Token);

            if (luisResult.Entities.VmLandscapeName != null)
            {
                if (!string.IsNullOrWhiteSpace(luisResult.Entities.VmLandscapeName[0]))
                {
                    var vmsWithLuisLandscapeTag = azureHandler.GetListOfVms().Where(x => x.Tags.Any(y => y.Key == "Landschaft" && y.Value == luisResult.Entities.VmLandscapeName[0]));

                    if (vmsWithLuisLandscapeTag.Any())
                    {
                        details.LandscapeTag             = luisResult.Entities.VmLandscapeName[0];
                        details.RunWithCompleteLandscape = true;
                    }
                    else
                    {
                        unsupportedVmLandscapes.Add(luisResult.Entities.VmLandscapeName[0]);
                    }
                }
            }

            if (luisResult.Entities.VmName != null)
            {
                if (!string.IsNullOrWhiteSpace(luisResult.Entities.VmName[0]))
                {
                    var listOfVms = azureHandler.GetListOfVms().Select(x => x.Name).ToList();
                    if (listOfVms.Any(x => x == luisResult.Entities.VmName[0]))
                    {
                        details.VmName = luisResult.Entities.VmName[0];
                    }
                    else
                    {
                        unsupportedVms.Add(luisResult.Entities.VmName[0]);
                    }
                }
            }


            if (details.Intent == AzureBotLuis.Intent.StartSingleVm || details.Intent == AzureBotLuis.Intent.StartVmLandscape)
            {
                if (unsupportedVms.Any() || unsupportedVmLandscapes.Any())
                {
                    var messageText = "Du hast eine Vm oder Landschaft angegeben die nicht in deinem Azure Account zu finden war.";
                    var message     = MessageFactory.Text(messageText, messageText, InputHints.IgnoringInput);
                    await context.SendActivityAsync(message, cancellationToken);

                    foreach (var unsupportedLandscape in unsupportedVmLandscapes)
                    {
                        if (azureHandler.GetListOfVms().FirstOrDefault(x => x.Name == unsupportedLandscape) != null)
                        {
                            details.Intent = AzureBotLuis.Intent.StartSingleVm;
                            details.VmName = unsupportedLandscape;

                            var messageText2 = "Stattdessen wurde eine VM mit dem selben Namen gefunden. Ich gehen davon aus, das du diese gemeint hast.";
                            var message2     = MessageFactory.Text(messageText2, messageText2, InputHints.IgnoringInput);
                            await context.SendActivityAsync(message2, cancellationToken);
                        }
                    }

                    foreach (var unsupportedVm in unsupportedVms)
                    {
                        if (azureHandler.GetAllAvailableLandscapes().FirstOrDefault(x => x == unsupportedVm) != null)
                        {
                            details.Intent       = AzureBotLuis.Intent.StartVmLandscape;
                            details.LandscapeTag = unsupportedVm;

                            var messageText2 = "Stattdessen wurde eine Landschaft mit dem selben Namen gefunden. Ich gehen davon aus, das du diese gemeint hast.";
                            var message2     = MessageFactory.Text(messageText2, messageText2, InputHints.IgnoringInput);
                            await context.SendActivityAsync(message2, cancellationToken);
                        }
                    }
                }
            }

            if (details.Intent == AzureBotLuis.Intent.ShutDownSingleVm || details.Intent == AzureBotLuis.Intent.ShutDownVmLandscape)
            {
                if (unsupportedVms.Any() || unsupportedVmLandscapes.Any())
                {
                    var messageText = "Du hast eine Vm oder Landschaft angegeben die nicht in deinem Azure Account zu finden sind.";
                    var message     = MessageFactory.Text(messageText, messageText, InputHints.IgnoringInput);
                    await context.SendActivityAsync(message, cancellationToken);

                    foreach (var unsupportedLandscape in unsupportedVmLandscapes)
                    {
                        if (azureHandler.GetListOfVms().FirstOrDefault(x => x.Name == unsupportedLandscape) != null)
                        {
                            details.Intent = AzureBotLuis.Intent.ShutDownSingleVm;
                            details.VmName = unsupportedLandscape;

                            var messageText2 = "Stattdessen wurde eine VM mit dem selben Namen gefunden. Ich gehen davon aus, das du diese gemeint hast.";
                            var message2     = MessageFactory.Text(messageText2, messageText2, InputHints.IgnoringInput);
                            await context.SendActivityAsync(message2, cancellationToken);
                        }
                    }

                    foreach (var unsupportedVm in unsupportedVms)
                    {
                        if (azureHandler.GetAllAvailableLandscapes().FirstOrDefault(x => x == unsupportedVm) != null)
                        {
                            details.Intent       = AzureBotLuis.Intent.ShutDownVmLandscape;
                            details.LandscapeTag = unsupportedVm;

                            var messageText2 = "Stattdessen wurde eine Landschaft mit dem selben Namen gefunden. Ich gehen davon aus, das du diese gemeint hast.";
                            var message2     = MessageFactory.Text(messageText2, messageText2, InputHints.IgnoringInput);
                            await context.SendActivityAsync(message2, cancellationToken);
                        }
                    }
                }
            }

            return(details);
        }