def send_schedule(self, update, context, schedule_type): settingsrepo = UserSettingsRepo() try: settings = settingsrepo.get(update.effective_chat.id) settingsrepo.close() except ChatNotFoundError: self.send(update, context, messages.NEED_SETUP) settingsrepo.close() return log_request(schedule_type, update.effective_chat.id, settings.course_id, settings.year, settings.curricula) try: schedule = get_schedule(settings.course_id, settings.year, settings.curricula) except NotSupportedError as ex: self.send(update, context, messages.COURSE_NOT_SUPPORTED.format(ex.reason)) return except Exception as ex: logging.exception(ex) self.send(update, context, messages.SCHEDULE_FETCH_ERROR) return schedule = getattr(schedule, schedule_type)() if not schedule.has_events(): self.send(update, context, messages.NO_LESSONS) return self.send(update, context, schedule.tostring(with_date=True))
def cmd_exams(self, update, context): settingsrepo = UserSettingsRepo() try: setting = settingsrepo.get(update.effective_chat.id) settingsrepo.close() except ChatNotFoundError: self.send(update, context, messages.NEED_SETUP) settingsrepo.close() return log_request('exams', update.effective_chat.id, setting.course_id, setting.year, setting.curricula) try: subjects = get_schedule(setting.course_id, setting.year, setting.curricula).subjects() exams = get_exams(setting.course_id).of_subjects( subjects, exclude_finished=True) except NotSupportedError as ex: self.send(update, context, messages.COURSE_NOT_SUPPORTED.format(ex.reason)) return except Exception as ex: logging.exception(ex) self.send(update, context, messages.FETCH_ERROR) return if not exams.has_exams(): logging.warning( f'No exam found for course_id={setting.course_id} year={setting.year} curricula={setting.curricula}' ) self.send(update, context, messages.NO_EXAMS) return self.send(update, context, exams.tostring(limit_per_subject=3))
def cmd_lastminute(self, update, context): settingsrepo = UserSettingsRepo() try: setting = settingsrepo.get(update.effective_chat.id) settingsrepo.close() except ChatNotFoundError: self.send(update, context, messages.NEED_SETUP) settingsrepo.close() return log_request('lastminute', update.effective_chat.id, setting.course_id, setting.year, setting.curricula) course = get_courses().get(setting.course_id) if not course.has_lastminute(): self.send(update, context, messages.NOT_SUPPORTED_LASTMINUTE) return try: news = lastminute.get_news(course.url_lastminute) except Exception as ex: logging.exception(ex) self.send(update, context, messages.FETCH_ERROR) return if not news: self.send(update, context, messages.NO_NEWS) return msg = '\n\n'.join(str(n) for n in news) self.send(update, context, msg)
def step_day_select(update, context): match = REGEX_DAY.search(update.message.text) if not match: send(update, context, messages.NOREMINDME_INVALID_DAY) return STEP_DAY_SELECT day, = match.groups() day = day.lower() settingsrepo = UserSettingsRepo() settings = settingsrepo.get(update.effective_chat.id) if day == 'oggi': settings.do_remind_today = False if day == 'domani': settings.do_remind_tomorrow = False settingsrepo.update(settings) settingsrepo.close() send(update, context, messages.NOREMINDME_OFF_DAY.format(day)) return ConversationHandler.END
def step_start(update, context): settingsrepo = UserSettingsRepo() if not settingsrepo.has(update.effective_chat.id): send(update, context, messages.NEED_SETUP) settingsrepo.close() return ConversationHandler.END settings = settingsrepo.get(update.effective_chat.id) if settings.do_remind_today and settings.do_remind_tomorrow: send(update, context, messages.NOREMINDME_BOTH_ACTIVE) settingsrepo.close() return STEP_DAY_SELECT day = 'oggi' if settings.do_remind_today else 'domani' settings.do_remind_today = False settings.do_remind_tomorrow = False settingsrepo.update(settings) settingsrepo.close() send(update, context, messages.NOREMINDME_OFF_DAY.format(day)) return ConversationHandler.END
def step_time_select(update, context): match = REGEX_TIME.search(update.message.text) if not match: send(update, context, messages.REMINDME_TIME_INVALID) return STEP_TIME_SELECT remind_type_str, hour, minute = match.groups() remind_type_str = remind_type_str.lower() if remind_type_str == '': remind_type = RemindType.TODAY else: if remind_type_str not in REMIND_TYPE_DICT: send(update, context, messages.REMINDME_TIME_INVALID) return STEP_TIME_SELECT remind_type = REMIND_TYPE_DICT[remind_type_str] time = time_from_string(hour, minute) if time is None: send(update, context, messages.REMINDME_TIME_INVALID) return STEP_TIME_SELECT settingsrepo = UserSettingsRepo() setting = settingsrepo.get(update.effective_chat.id) if remind_type == RemindType.TODAY: setting.do_remind_today = True setting.remind_time_today = time term_day = messages.TERM_TODAY elif remind_type == RemindType.TOMORROW: setting.do_remind_tomorrow = True setting.remind_time_tomorrow = time term_day = messages.TERM_TOMORROW settingsrepo.update(setting) settingsrepo.close() send(update, context, messages.REMINDME_END.format(term_day, time.strftime(TIME_FORMAT))) return ConversationHandler.END