Exemplo n.º 1
0
        public DialogsProvider(Config.RawData.DialogsContainer root)
        {
            Dialogs      = new List <Dialog>();
            DialogsTable = new Dictionary <string, Dialogs.Dialog>();

            // fill support buttons
            SupportButtons = new Dictionary <string, Button>();
            foreach (var btn in root.SupportButtons)
            {
                try
                {
                    var    type   = Type.GetType(btn.Type);
                    Button button = Activator.CreateInstance(type, btn) as Button;
                    SupportButtons.Add(btn.Id, button);
                }
                catch (Exception e)
                {
                    BotManager.Core?.LogController?.LogWarning(new DebugMessage($"Couldn't convert support button '{btn.Id}'", "DialogsProvider()", e));
                }
            }

            // create root dialog
            try
            {
                RootDialog = new RootDialog(root as Config.RawData.Dialog);
                RootDialog.GetEditable().SupportButtons = GetButtons(root.Buttons);

                RegistrationDialog = new RegistrationDialog(root.RegistrationDialog, null);
                RegistrationDialog.GetEditable().SupportButtons = GetButtons(root.RegistrationDialog.Buttons);

                DialogsTable.Add(RootDialog.Id, RootDialog);
                Dialogs.Add(RootDialog);
                DialogsTable.Add(RegistrationDialog.Id, RegistrationDialog);
                Dialogs.Add(RegistrationDialog);
            }
            catch (Exception e)
            {
                BotManager.Core?.LogController?.LogCritical(new DebugMessage($"Couldn't initialize root dialog!", "DialogsProvider()", e));
                throw e;
            }

            // fill other dialogs and bind supportButtons
            RootDialog.GetEditable().Dialogs         = DialogInitializer(root, RootDialog);
            RegistrationDialog.GetEditable().Dialogs = DialogInitializer(root.RegistrationDialog, RegistrationDialog);
        }