/// <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="item"></param> /// <param name="response"></param> /// <returns></returns> public BotState?addDuration(VK.UserLongPoll.Update item, AIResponse response) { // запись в память бота длительности урока string str = response.Result.Parameters["number"].ToString(); BotSession b = state[item.PeerID]; b.Durability = Convert.ToInt32(str); Storage.Lesson l = new Storage.Lesson() { ID = Guid.NewGuid(), Topic = b.Topic, BeginLesson = b.BeginLesson, EndLesson = b.BeginLesson.AddHours(b.Durability) }; // сохранение данных в базу db.Lessons.Add(l); db.SaveChanges(); // вывод сообщения api.Messages_SendMessage(Program.Cfg.CommunityID, item.PeerID, response.Result.Fulfillment.Speech); return(BotState.None); }
/// <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(); } }