示例#1
0
        /// <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);
        }
示例#2
0
 /// <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);
 }
示例#3
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);
        }
示例#4
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();
            }
        }