/// <summary> /// Регистрация пользователя /// </summary> /// <param name="item">Сообщение пользователя</param> /// <param name="response">Ответ AI</param> public BotState?RegisterUser(VK.UserLongPoll.Update item, AIResponse response) { // Определение E-mail string email = response.Result.Parameters["email"].ToString(); // Сообщаем пользователю api.Messages_SendMessage(Program.Cfg.CommunityID, item.PeerID, string.Format("Начинаю регистрацию пользователя с адресом {0}", email)); // Поиск студента в базе данных if (db.Students.Where(a => a.Email == email).FirstOrDefault() != null) { api.Messages_SendMessage(Program.Cfg.CommunityID, item.PeerID, string.Format("Пользователь с таким E-mail уже зарегистрирован")); return(null); } // Запрос информации о пользователе VK.Users.Get.Response user = api.Users_Get(Program.Cfg.CommunityID, item.PeerID); // Создание нового объекта var s = new Storage.Student() { ID = Guid.NewGuid(), VKID = item.PeerID, FirstName = user.FirstName, LastName = user.LastName, Email = email }; db.Students.Add(s); // Сохраняем изменение в базе данных db.SaveChanges(); api.Messages_SendMessage(Program.Cfg.CommunityID, item.PeerID, string.Format("Пользователь успешно зарегистрирован")); return(null); }
/// <summary> /// Проверка наличия регистрации пользователя /// </summary> /// <param name="item">Сообщение пользователя</param> /// <param name="response">Ответ AI</param> public BotState?CheckUser(VK.UserLongPoll.Update item, AIResponse response) { Storage.Student s = db.Students.Where(a => a.VKID == item.PeerID).FirstOrDefault(); if (s != null) { api.Messages_SendMessage(Program.Cfg.CommunityID, item.PeerID, string.Format("{0} {1}, Вы уже зарегистрированы, E-mail: {2}", s.FirstName, s.LastName, s.Email)); // Отмена регистрации пользователя return(BotState.None); } // Вывод сообщения в соответствии с распознанным действием api.Messages_SendMessage(Program.Cfg.CommunityID, item.PeerID, response.Result.Fulfillment.Speech); // Переход к регистрации пользователя return(null); }
/// <summary> /// Отметка пользователя /// </summary> /// <param name="item">Сообщение пользователя</param> /// <param name="response">Ответ AI</param> /// <returns></returns> public BotState?CheckinUser(VK.UserLongPoll.Update item, AIResponse response) { // время отправки запроса DateTime now = DateTime.Now; // проверка на прошедших регистрацию Storage.Student s = db.Students.Where(a => a.VKID == item.PeerID).FirstOrDefault(); if (s == null) { api.Messages_SendMessage(Program.Cfg.CommunityID, item.PeerID, "Вас нет в списке"); return(BotState.None); } // проверка на время занятий Storage.Lesson l = db.Lessons.Where(n => now > n.BeginLesson && now < n.EndLesson).FirstOrDefault(); if (l == null) { api.Messages_SendMessage(Program.Cfg.CommunityID, item.PeerID, "Сейчас не идут занятия"); return(BotState.None); } // проверка на повторное отмечание Storage.Attendance att = db.Attendances.Where(x => x.Lesson.ID == l.ID && x.Attendant.ID == s.ID).FirstOrDefault(); if (att != null) { api.Messages_SendMessage(Program.Cfg.CommunityID, item.PeerID, "Вы уже отметились на занятии!"); return(BotState.None); } // заполнение отметки студентов Storage.Attendance at = new Storage.Attendance() { ID = Guid.NewGuid(), timestamp = now, Attendant = s, Lesson = l }; // сохранение данных в базу db.Attendances.Add(at); db.SaveChanges(); // Вывод сообщения в соответствии с распознанным действием api.Messages_SendMessage(Program.Cfg.CommunityID, item.PeerID, response.Result.Fulfillment.Speech); return(null); }
/// <summary> /// Событие срабатывания таймера по предупреждению о занятии /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void LessonWarning(object sender, System.Timers.ElapsedEventArgs e) { // Текущий момент времени DateTime now = DateTime.Now; // Время начала лекции, при котором необходимо выполнять оповещение DateTime ts = now + TimeSpan.FromHours(Program.Cfg.HoursBeforeLesson); // Поиск лекции для оповещения Storage.Lesson l = db.Lessons.Where(a => a.BeginLesson.Second == ts.Second && a.BeginLesson.Minute == ts.Minute && a.BeginLesson.Hour == ts.Hour && a.BeginLesson.Day == ts.Day && a.BeginLesson.Month == ts.Month).FirstOrDefault(); // Проверка на наличие такой лекции if (l == null) { return; } // Находим самый маленький ID в бд Storage.Student s = db.Students.OrderBy(a => a.VKID).FirstOrDefault(); // Есди лекция найдена, выполнить оповещение всех зарегистрированных студентов for (int counter = 0; counter < db.Students.Where(a => a.VKID != 0).Count(); counter++) { api.Messages_SendMessage(Program.Cfg.CommunityID, s.VKID, s.FirstName + ", занятие " + l.Topic + " состоится " + l.BeginLesson + " и будет длиться " + (l.EndLesson - l.BeginLesson).TotalHours + " часа. Не забудьте"); // Переходим к следующему студенту s = db.Students.OrderBy(a => a.VKID).Where(a => a.VKID > s.VKID).FirstOrDefault(); } }