示例#1
0
def remind(bot, event, *args):
    # TODO Implement a private chat feature. Have reminders save across reboots?
    """
    **Remind:**
    Usage: /remind <optional: date [defaults to today]> <optional: time [defaults to an hour from now]> <message> {/remind 1/1/15 2:00PM Call mom}
    Usage: /remind
    Usage /remind delete <index to delete> {/remind delete 1}
    Purpose: Will post a message on the date and time specified to the current chat. With no arguments, it'll list all the reminders."""

    # Show all reminders
    if len(args) == 0:
        segments = [
            hangups.ChatMessageSegment('Reminders:', is_bold=True),
            hangups.ChatMessageSegment('\n', hangups.SegmentType.LINE_BREAK)
        ]
        reminders = UtilBot.get_all_reminders(event.conv_id)
        if len(reminders) > 0:
            for x in range(0, len(reminders)):
                reminder = reminders[x]
                reminder_text = reminder[1]
                date_to_post = dateutil.parser.parse(reminder[2])
                segments.append(
                    hangups.ChatMessageSegment(
                        str(x + 1) + ' - ' +
                        date_to_post.strftime('%m/%d/%y %I:%M%p') + ' : ' +
                        reminder_text))
                segments.append(
                    hangups.ChatMessageSegment('\n',
                                               hangups.SegmentType.LINE_BREAK))
            segments.pop()
            bot.send_message_segments(event.conv, segments)
        if len(segments) <= 2:
            bot.send_message(event.conv, "No reminders set for this chat.")
        return

    # Delete a reminder
    if args[0] == 'delete':
        try:
            x = int(args[1])
            x -= 1
        except ValueError:
            bot.send_message(event.conv, 'Invalid integer: ' + args[1])
            return
        reminders = UtilBot.get_all_reminders(event.conv_id)
        reminder_to_delete_text = None
        if x in range(0, len(reminders)):
            to_delete_reminder = reminders[x]
            for running_reminder in currently_running_reminders:
                if running_reminder[1] == to_delete_reminder:
                    running_reminder[0].cancel()
        if reminder_to_delete_text:
            bot.send_message(
                event.conv,
                'Removed reminder: ' + str(reminder_to_delete_text))
        else:
            bot.send_message(event.conv,
                             'The reminder chosen is not currently running.')
        return

    # Set a new reminder
    args = list(args)
    reminder_text = ' '.join(args)
    c = parsedatetime.Calendar()
    result = c.nlp(reminder_text)
    if result is None:
        bot.send_message(
            event.conv,
            "Couldn't parse a valid date from {}'s message.".format(
                event.user.full_name))
        return
    reminder_time = result[0][0]
    reminder_text = reminder_text.replace(result[0][-1], '')
    if reminder_text.strip() == '':
        bot.send_message(event.conv, 'No reminder text set.')
        return

    current_time = datetime.now()
    if reminder_time < current_time:
        bot.send_message("Invalid Date: {}".format(
            reminder_time.strftime('%B %d, %Y %I:%M%p')))

    reminder_interval = (reminder_time - current_time).total_seconds()

    reminder_timer = threading.Timer(reminder_interval, send_reminder, [
        bot, event.conv, reminder_interval, reminder_text,
        asyncio.get_event_loop()
    ])
    UtilBot.add_reminder(event.conv_id, reminder_text, reminder_time)
    reminder_timer.start()
    currently_running_reminders.append(
        (reminder_timer, (event.conv_id, reminder_text, reminder_time)))
    bot.send_message(
        event.conv,
        "Reminder set for " + reminder_time.strftime('%B %d, %Y %I:%M%p'))
示例#2
0
def remind(bot, event, *args):
    # TODO Implement a private chat feature. Have reminders save across reboots?
    """
    **Remind:**
    Usage: /remind <optional: date [defaults to today]> <optional: time [defaults to an hour from now]> <message> {/remind 1/1/15 2:00PM Call mom}
    Usage: /remind
    Usage /remind delete <index to delete> {/remind delete 1}
    Purpose: Will post a message on the date and time specified to the current chat. With no arguments, it'll list all the reminders."""

    # Show all reminders
    if len(args) == 0:
        segments = [hangups.ChatMessageSegment('Reminders:', is_bold=True),
                    hangups.ChatMessageSegment('\n', hangups.SegmentType.LINE_BREAK)]
        reminders = UtilBot.get_all_reminders(event.conv_id)
        if len(reminders) > 0:
            for x in range(0, len(reminders)):
                reminder = reminders[x]
                reminder_text = reminder[1]
                date_to_post = dateutil.parser.parse(reminder[2])
                segments.append(
                    hangups.ChatMessageSegment(
                        str(x + 1) + ' - ' + date_to_post.strftime('%m/%d/%y %I:%M%p') + ' : ' + reminder_text))
                segments.append(hangups.ChatMessageSegment('\n', hangups.SegmentType.LINE_BREAK))
            segments.pop()
            bot.send_message_segments(event.conv, segments)
        if len(segments) <= 2:
            bot.send_message(event.conv, "No reminders set for this chat.")
        return

    # Delete a reminder
    if args[0] == 'delete':
        try:
            x = int(args[1])
            x -= 1
        except ValueError:
            bot.send_message(event.conv, 'Invalid integer: ' + args[1])
            return
        reminders = UtilBot.get_all_reminders(event.conv_id)
        reminder_to_delete_text = None
        if x in range(0, len(reminders)):
            to_delete_reminder = reminders[x]
            for running_reminder in currently_running_reminders:
                if running_reminder[1] == to_delete_reminder:
                    running_reminder[0].cancel()
        if reminder_to_delete_text:
            bot.send_message(event.conv, 'Removed reminder: ' + str(reminder_to_delete_text))
        else:
            bot.send_message(event.conv, 'The reminder chosen is not currently running.')
        return

    # Set a new reminder
    args = list(args)
    reminder_text = ' '.join(args)
    c = parsedatetime.Calendar()
    result = c.nlp(reminder_text)
    if result is None:
        bot.send_message(event.conv, "Couldn't parse a valid date from {}'s message.".format(event.user.full_name))
        return
    reminder_time = result[0][0]
    reminder_text = reminder_text.replace(result[0][-1], '')
    if reminder_text.strip() == '':
        bot.send_message(event.conv, 'No reminder text set.')
        return

    current_time = datetime.now()
    if reminder_time < current_time:
        bot.send_message("Invalid Date: {}".format(reminder_time.strftime('%B %d, %Y %I:%M%p')))

    reminder_interval = (reminder_time - current_time).total_seconds()

    reminder_timer = threading.Timer(reminder_interval, send_reminder,
                                     [bot, event.conv, reminder_interval, reminder_text, asyncio.get_event_loop()])
    UtilBot.add_reminder(event.conv_id, reminder_text, reminder_time)
    reminder_timer.start()
    currently_running_reminders.append((reminder_timer, (event.conv_id, reminder_text, reminder_time)))
    bot.send_message(event.conv, "Reminder set for " + reminder_time.strftime('%B %d, %Y %I:%M%p'))