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)
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())