Example #1
0
 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))
Example #2
0
 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))
Example #3
0
 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)
Example #4
0
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
Example #5
0
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
Example #6
0
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