/// <summary>
 /// </summary>
 /// <param name="action">
 /// </param>
 /// <param name="nextId">
 /// </param>
 /// <returns>
 /// </returns>
 protected KnuBotActionStruct CAS(KnuBotAction action, string nextId)
 {
     return(new KnuBotActionStruct()
     {
         ActionId = action.Method.Name, BotAction = action, NextDialogId = nextId
     });
 }
        /// <summary>
        /// </summary>
        /// <param name="optionId">
        /// </param>
        /// <returns>
        /// </returns>
        public string Execute(KnuBotOptionId optionId = KnuBotOptionId.DialogStart)
        {
            string nextDialogId = string.Empty;

            if (this.Character != null)
            {
                KnuBotAction action = this.condition(optionId);
                if (action != null)
                {
                    string actionId = action.Method.Name;
                    if (actionId != string.Empty)
                    {
                        // Execute Action
                        // No checks for empty results here, since we did this all in the Validate method already
                        this.knuBotActions.Where(x => x.ActionId == actionId).Select(x => x.BotAction).First()();
                        nextDialogId = this.knuBotActions.First(x => x.ActionId == actionId).NextDialogId;
                    }
                }
            }

            return(nextDialogId);
        }
 /// <summary>
 /// </summary>
 /// <param name="action">
 /// </param>
 /// <param name="nextId">
 /// </param>
 /// <returns>
 /// </returns>
 protected KnuBotActionStruct CAS(KnuBotAction action, string nextId)
 {
     return new KnuBotActionStruct() { ActionId = action.Method.Name, BotAction = action, NextDialogId = nextId };
 }