예제 #1
0
def send_schedule(users, current_time, day, week_type):
    blacklist = config.get('bot', 'VK_ID_BLACKLIST').split(',')

    if users is None:
        return None
    try:
        count = 0
        for user in users:
            uid = user[0]
            tag = user[1]

            if str(uid) in blacklist:
                continue

            schedule, is_empty = create_schedule_text(tag, day, week_type)
            if is_empty:
                continue
            vkapi.send_auto_posting_message(uid, config.get('bot', 'TOKEN'),
                                            schedule)
            count += 1

            # Статистика
            track(config.get('bot', 'STATISTIC_TOKEN'), uid, current_time,
                  'auto_posting')

            if count > 20:
                count = 0
                sleep(1)
    except BaseException as e:
        vkapi.send_error_message(config.get('bot', 'ADMIN_VK_ID'),
                                 config.get('bot', 'TOKEN'), str(e))
 def test_create_schedule_text_even_week(self):
     real_schedule = [
         '>Понедельник:\n1 пара:\nma_lesson_1 cr_401 \n------------\n' +
         '2 пара:\nme_lesson_2 cr_403 \n------------\n' +
         '3 пара:\nma_lesson_3 cr_404 \n------------\n'
     ]
     schedule = scheduleCreator.create_schedule_text(self.tag, "Monday", 1)
     self.assertEqual(schedule, real_schedule)
 def test_create_schedule_text_all_week_types(self):
     real_schedule = [
         '>Понедельник:\n1 пара:\nma_lesson_1 cr_401 \n------------\n' +
         '2 пара:\nmo_lesson_2 cr_402 числ\nme_lesson_2 cr_403 знам\n------------\n'
         + '3 пара:\nma_lesson_3 cr_404 \n------------\n'
     ]
     schedule = scheduleCreator.create_schedule_text(self.tag, "Monday")
     self.assertEqual(schedule, real_schedule)
예제 #4
0
def response_msg(m):
    cid = m.chat.id
    if m.text in ScheduleType:
        # Статистика
        if config['STATISTIC_TOKEN'] != '':
            track(config['STATISTIC_TOKEN'], m.chat.id, m.text, 'schedule')
        else:
            logger.info('message: {0}'.format(m.text))

        # По умолчанию week_type равен -1 и при таком значении будут выводится все занятия,
        # т.е и для чётных и для нечётных недель
        week_type = -1

        if m.text == "Вся неделя":
            days = ScheduleType[m.text]
        elif m.text == "Сегодня":
            today = datetime.now()
            # Если запрашивается расписание на сегодняшний день,
            # то week_type равен остатку от деления на 2 номера недели в году, т.е он определяет чётная она или нечётная
            week_type = get_week_type(today)

            # Если сегодня воскресенье, то показывается расписание на понедельник следующей недели
            # Также в этом случае, как week_type используется тип следующей недели
            if datetime.weekday(today) == 6:
                today += timedelta(days=1)
                week_type = (week_type + 1) % 2

            days = [daysOfWeek[datetime.weekday(today)]]
        elif m.text == 'Завтра':
            tomorrow = datetime.now()
            tomorrow += timedelta(days=1)
            # Если запрашивается расписание на сегодняшний день,
            # то week_type равен остатку от деления на 2 номера недели в году, т.е он определяет чётная она или нечётная
            week_type = get_week_type(tomorrow)

            # Если сегодня воскресенье, то показывается расписание на понедельник следующей недели
            # Также в этом случае, как week_type используется тип следующей недели
            if datetime.weekday(tomorrow) == 6:
                tomorrow += timedelta(days=1)
                week_type = (week_type + 1) % 2

            days = [daysOfWeek[datetime.weekday(tomorrow)]]
        else:
            days = [ScheduleType[m.text]]

        for day in days:
            try:
                with ScheduleDB(config) as db:
                    user = db.find_user(cid)
                if user and user[0] is not None:
                    result = create_schedule_text(user[0], day, week_type)
                    for schedule in result:
                        bot.send_message(cid,
                                         schedule,
                                         reply_markup=get_date_keyboard())
                else:
                    bot.send_message(
                        cid,
                        "Вас ещё нет в базе данных, поэтому пройдите простую процедуру регистрации"
                    )
                    command_registration(m)
            except BaseException as e:
                logger.warning('response_msg: {0}'.format(str(e)))
                bot.send_message(
                    cid,
                    "Случилось что то странное, попробуйте ввести команду заново"
                )
    else:
        # Статистика
        if config['STATISTIC_TOKEN'] != '':
            track(config['STATISTIC_TOKEN'], m.chat.id, m.text, 'unknown')
        else:
            logger.info('unknown message: {0}'.format(m.text))

        bot.send_message(cid,
                         "Неизвестная команда",
                         reply_markup=get_date_keyboard())