예제 #1
0
        /// <summary>
        /// Поменять состояние.
        /// </summary>
        /// <param name="bot"></param>
        /// <param name="state"></param>
        /// <param name="hop"></param>
        public static async void ChangeCurrentStateAndMakeHop(TelegramBotClient bot, long chatId, State state, Hop hop)
        {
            if (bot == null ||
                hop == null ||
                string.IsNullOrEmpty(hop.NextStateName))
            {
                return;
            }

            //Отправить AnswerOnSuccess.
            if (state != null && string.IsNullOrEmpty(state.AnswerOnSuccess) == false)
            {
                await bot.SendTextMessageAsync(chatId, state.AnswerOnSuccess);
            }

            //Поменяем текущее состояние
            ChangeCurrentChatState(chatId, hop.Type, hop.NextStateName);

            //Когда состояние в базе поменяли, тогда нужно выслать приветствие в новом состоянии и клавиатуру нового состояния.
            State st = InitStates.GetStateByName(hop.NextStateName);

            //Формируем приветственное сообщение (не забываем подключить клавиатуру)
            OutboxMessage outMes = new OutboxMessage(st.IntroductionString);

            if (st.ReplyKeyboard != null)
            {
                outMes.ReplyMarkup = st.ReplyKeyboard;
            }
            else
            {
                outMes.ReplyMarkup = new ReplyKeyboardRemove();
            }

            bot.SendOutboxMessage(chatId, outMes);
        }
예제 #2
0
        /// <summary>
        /// Метод получения текущего состояния чата по ChatId
        /// </summary>
        /// <param name="chatId"></param>
        /// <returns></returns>
        public static State GetCurrentUserState(long chatId)
        {
            if (InitStates.BotStates?.Count == 0)
            {
                return(null);
            }

            using (BotDbContext db = new BotDbContext(HelperDataBase.DB_OPTIONS))
            {
                //Выбираем состояние чата.
                ChatState chatState =
                    (from state in db.ChatState
                     where state.ChatId == chatId
                     select state).FirstOrDefault();

                string stateString = chatState.State;

                //Если состояние чата равно null
                if (string.IsNullOrEmpty(stateString?.Trim(' ')) == true)
                {
                    //То записать в пустую ячейку состояния имя первого состояния.
                    //ToDo Пока берем просто первый элемент из состояний, но нужно самому определять первый элемент.
                    stateString = InitStates.BotStates.FirstOrDefault().Name;

                    //ToDo изменить состояние(установить первое состояние, отправить приветствие, отправить клавиатуру через метод ChangeCurrentStateAndMakeHop
                    //Изменить состояние в базе данных и сохранить изменения
                    ChangeCurrentChatState(chatId, HopType.RootLevelHope, stateString);
                    //chatState.State = stateString;
                    //db.SaveChanges();
                }
                //Найти в общем пуле состояний состояние с таким же именем.
                StateController stateCtrl = new StateController(stateString);
                return(InitStates.GetStateByName(stateCtrl.GetCurrentStateName()));
            }
        }