/// <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; } }
/// <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; } } }