예제 #1
0
 /// <summary>
 /// Зарегистрировать студента в списке
 /// </summary>
 /// <param name="msg">Сообщение</param>
 public void registerCommand(Message msg)
 {
     Storage.Student student = db.Students.Where(a => a.UserID == msg.From.Id).FirstOrDefault();
     if (student != null)
     {
         client.SendTextMessageAsync(msg.Chat.Id, string.Format("{0}, вы уже зарегистрированы, ваш E-mail: {1}. Для редактирования профиля используется команда /profile", msg.From.FirstName, student.EMail));
     }
     else
     {
         // Кнопка для регистрации с запросом номера телефона
         KeyboardButton b = new KeyboardButton("Отправить телефон")
         {
             RequestContact = true
         };
         // Панель кнопок
         KeyboardButton[] keys = new KeyboardButton[1] {
             b
         };
         // Разметка ответа
         var markup = new Telegram.Bot.Types.ReplyMarkups.ReplyKeyboardMarkup(keys, true, true);
         client.SendTextMessageAsync(msg.Chat.Id, "Для регистрации отправьте мне телефон и после него E-mail", replyMarkup: markup);
         // Переход в состояние регистрации пользователя
         SetState(msg.From.Id, BotState.Registration);
         state[msg.From.Id].PhoneNumber = null;
     }
 }
예제 #2
0
        /// <summary>
        /// Обработка текстовых сообщений
        /// </summary>
        /// <param name="msg">Сообщение</param>
        public void TextMessageProcessor(Message msg)
        {
            string message;

            // Проверка на команду
            if (msg.Text.Substring(0, 1) == "/")
            {
                CommandProcessor(msg, msg.Text.Substring(1));
            }
            else
            {
                // Селектор состояний
                switch (GetState(msg.From.Id))
                {
                case BotState.None:
                    message = string.Format("Привет, {0}!", msg.From.FirstName);
                    client.SendTextMessageAsync(msg.Chat.Id, message);
                    break;

                case BotState.Registration:
                    if (string.IsNullOrEmpty(state[msg.From.Id].PhoneNumber))
                    {
                        client.SendTextMessageAsync(msg.Chat.Id, "Отправьте, пожалуйста, Ваш номер телефона");
                        break;
                    }
                    bool emailFound = false;
                    foreach (var entity in msg.Entities)
                    {
                        if (entity.Type == Telegram.Bot.Types.Enums.MessageEntityType.Email)
                        {
                            // Регистрация пользователя
                            Storage.Student student = new Storage.Student()
                            {
                                ID          = Guid.NewGuid(),
                                UserID      = msg.From.Id,
                                Name        = msg.From.FirstName,
                                FamilyName  = msg.From.LastName,
                                UserName    = msg.From.Username,
                                EMail       = msg.Text.Substring(entity.Offset, entity.Length),
                                PhoneNumber = state[msg.From.Id].PhoneNumber
                            };
                            db.Students.Add(student);
                            db.SaveChanges();
                            // E-Mail нашелся
                            message = string.Format("Спасибо, {0}, регистрация выполнена!", msg.From.FirstName);
                            client.SendTextMessageAsync(msg.Chat.Id, message);
                            emailFound = true;
                            // Возвращение к базовому состоянию
                            SetState(msg.From.Id, BotState.None);
                            break;
                        }
                    }
                    if (!emailFound)
                    {
                        message = string.Format("{0}, для завершения регистрации отправьте, пожалуйста, E-mail", msg.From.FirstName);
                        client.SendTextMessageAsync(msg.Chat.Id, message);
                    }
                    break;
                }
            }
        }