Exemple #1
0
def process_cakeday_message(message, reddit, database):
    log.info("Processing cakeday")

    if database.user_has_cakeday_reminder(message.author.name):
        log.info("Cakeday already exists")
        return ["It looks like you already have a cakeday reminder set."
                ], False

    next_anniversary = utils.get_next_anniversary(message.author.created_utc)

    reminder = Reminder(source=utils.message_link(message.id),
                        message=static.CAKEDAY_MESSAGE,
                        user=database.get_or_add_user(message.author.name),
                        requested_date=utils.datetime_from_timestamp(
                            message.created_utc),
                        target_date=next_anniversary,
                        recurrence="1 year",
                        defaulted=False)

    database.add_reminder(reminder)
    database.commit()

    log.info(
        f"Cakeday reminder created: {reminder.id} : {utils.get_datetime_string(reminder.target_date)}"
    )

    bldr = reminder.render_message_confirmation(
        None, pushshift_minutes=reddit.get_effective_pushshift_lag())
    return [''.join(bldr)], True
Exemple #2
0
def process_remind_me(message, reddit, database, recurring):
    log.info("Processing RemindMe message")
    trigger = static.TRIGGER_RECURRING_LOWER if recurring else static.TRIGGER_LOWER
    time = utils.find_reminder_time(message.body, trigger)

    message_text = utils.find_reminder_message(message.body, trigger)

    reminder, result_message = Reminder.build_reminder(
        source=utils.message_link(message.id),
        message=message_text,
        user=database.get_or_add_user(message.author.name),
        requested_date=utils.datetime_from_timestamp(message.created_utc),
        time_string=time,
        recurring=recurring)
    if reminder is None:
        log.debug("Reminder not valid, returning")
        return [result_message], False

    database.add_reminder(reminder)
    database.commit()

    log.info(
        f"Reminder created: {reminder.id} : {utils.get_datetime_string(reminder.target_date)}"
    )

    bldr = reminder.render_message_confirmation(
        result_message, pushshift_minutes=reddit.get_effective_pushshift_lag())
    return [''.join(bldr)], True
def test_add_reminder(database, reddit):
    created = utils.datetime_now()
    username = "******"
    keyword = "reminderstring"
    id = utils.random_id()
    message = reddit_test.RedditObject(
        body=f"[{keyword}]\n{static.TRIGGER}! 1 day",
        author=username,
        created=created,
        id=id)

    messages.process_message(message, reddit, database)
    result = message.get_first_child().body

    assert "reminderstring" in result

    assert "This time has already passed" not in result
    assert "Could not find a time in message" not in result
    assert "Could not parse date" not in result

    reminders = database.get_user_reminders(username)
    assert len(reminders) == 1
    assert reminders[0].user == username
    assert reminders[0].message == keyword
    assert reminders[0].source == utils.message_link(id)
    assert reminders[0].requested_date == created
    assert reminders[0].target_date == created + timedelta(hours=24)
    assert reminders[0].db_id is not None
def test_add_recurring_reminder(database, reddit):
    created = utils.datetime_now()
    username = "******"
    keyword = "reminderstring"
    id = reddit_test.random_id()
    message = reddit_test.RedditObject(
        body=f"[{keyword}]\n{static.TRIGGER_RECURRING}! 1 day",
        author=username,
        created=created,
        id=id)

    messages.process_message(message, reddit, database)
    result = message.get_first_child().body

    assert "reminderstring" in result
    assert "and then every `1 day`" in result

    assert "This time has already passed" not in result
    assert "Could not find a time in message" not in result
    assert "Could not parse date" not in result
    assert "Can't use a default for a recurring reminder" not in result
    assert "I got the same date rather than one after it" not in result
    assert "I got a date before that rather than one after it" not in result

    reminders = database.get_all_user_reminders(username)
    assert len(reminders) == 1
    assert reminders[0].user.name == username
    assert reminders[0].message == keyword
    assert reminders[0].source == utils.message_link(id)
    assert reminders[0].requested_date == created
    assert reminders[0].target_date == created + timedelta(hours=24)
    assert reminders[0].id is not None
    assert reminders[0].recurrence == "1 day"
Exemple #5
0
def process_remind_me(message, database):
    log.info("Processing RemindMe message")
    time = utils.find_reminder_time(message.body)

    message_text = utils.find_reminder_message(message.body)

    reminder = Reminder(
        source=utils.message_link(message.id),
        message=message_text,
        user=message.author.name,
        requested_date=utils.datetime_from_timestamp(message.created_utc),
        time_string=time,
        timezone=database.get_settings(message.author.name).timezone)
    if not reminder.valid:
        log.debug("Reminder not valid, returning")
        return [reminder.result_message]

    if not database.save_reminder(reminder):
        log.info("Something went wrong saving the reminder")
        return ["Something went wrong saving the reminder"]

    log.info(
        f"Reminder created: {reminder.db_id} : {utils.get_datetime_string(reminder.target_date)}"
    )

    return reminder.render_message_confirmation()
def test_add_reminder_no_date(database, reddit):
    created = utils.datetime_now()
    username = "******"
    id = reddit_test.random_id()
    message = reddit_test.RedditObject(
        body=f"{static.TRIGGER}! \"error test\"",
        author=username,
        created=created,
        id=id)

    messages.process_message(message, reddit, database)
    result = message.get_first_child().body

    assert "This time has already passed" not in result
    assert "Could not find a time in message, defaulting to one day" in result

    reminders = database.get_all_user_reminders(username)
    assert len(reminders) == 1
    assert reminders[0].user.name == username
    assert reminders[0].message == "error test"
    assert reminders[0].source == utils.message_link(id)
    assert reminders[0].requested_date == created
    assert reminders[0].target_date == created + timedelta(hours=24)
    assert reminders[0].id is not None