Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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();
            }
        }