Example #1
0
def next(lrrbot, conn, event, respond_to):
    """
	Command: !next
	Command: !nextstream
	Command: !sched
	Command: !schedule

	Gets the next scheduled stream from the calendar
	"""
    if lrrbot.calendar_override == None:
        event_name, event_time, event_wait = googlecalendar.get_next_event()
        if event_time:
            nice_time = event_time = event_time.astimezone(
                config["timezone"]).strftime("%a %I:%M %p %Z")
            if event_wait < 0:
                nice_duration = utils.nice_duration(-event_wait, 1) + " ago"
            else:
                nice_duration = utils.nice_duration(event_wait,
                                                    1) + " from now"
            conn.privmsg(
                respond_to, "Next scheduled stream: %s at %s (%s)" %
                (event_name, nice_time, nice_duration))
        else:
            conn.privmsg(
                respond_to,
                "There don't seem to be any upcoming scheduled streams")
    else:
        now = datetime.datetime.now(config["timezone"])

        conn.privmsg(
            respond_to, "(Overwritten) %s, current moonbase time %s" %
            (lrrbot.calendar_override, now.strftime("%I:%M %p")))
Example #2
0
def next(lrrbot, conn, event, respond_to):
	event_name, event_time, event_wait = googlecalendar.get_next_event()
	if event_time:
		nice_time = event_time = event_time.astimezone(config["timezone"]).strftime("%a %I:%M %p %Z")
		if event_wait < 0:
			nice_duration = utils.nice_duration(-event_wait, 1) + " ago"
		else:
			nice_duration = utils.nice_duration(event_wait, 1) + " from now"
		conn.privmsg(respond_to, "Next scheduled stream: %s at %s (%s)" % (event_name, nice_time, nice_duration))
	else:
		conn.privmsg(respond_to, "There don't seem to be any upcoming scheduled streams")
Example #3
0
def get_next_event_text(calendar, after=None, include_current=None, tz=None, verbose=True):
	"""
	Build the actual human-readable response to the !next command.

	The tz parameter can override the timezone used to display the event times.
	This can be an actual timezone object, or a string timezone name.
	Defaults to moonbase time.
	"""
	if after is None:
		after = datetime.datetime.now(datetime.timezone.utc)
	if not tz:
		tz = config['timezone']
	elif isinstance(tz, str):
		tz = tz.strip()
		try:
			tz = utils.get_timezone(tz)
		except pytz.exceptions.UnknownTimeZoneError:
			return "Unknown timezone: %s" % tz

	events = get_next_event(calendar, after=after, include_current=include_current)
	if not events:
		return "There don't seem to be any upcoming scheduled streams"

	strs = []
	for i, ev in enumerate(events):
		# If several events are at the same time, just show the time once after all of them
		if i == len(events) - 1 or ev['start'] != events[i+1]['start']:
			if verbose:
				if ev['location'] is not None:
					title = "%(title)s (%(location)s)" % ev
				else:
					title = ev['title']
				if ev['start'] < after:
					nice_duration = utils.nice_duration(after - ev['start'], 1) + " ago"
				else:
					nice_duration = utils.nice_duration(ev['start'] - after, 1) + " from now"
				strs.append("%s at %s (%s)" % (title, ev['start'].astimezone(tz).strftime(DISPLAY_FORMAT), nice_duration))
			else:
				strs.append("%s at %s" % (ev['title'], ev['start'].astimezone(tz).strftime(DISPLAY_FORMAT)))
		else:
			strs.append(ev['title'])
	response = ', '.join(strs)

	if verbose:
		if calendar == CALENDAR_LRL:
			response = "Next scheduled stream: " + response
		elif calendar == CALENDAR_FAN:
			response = "Next scheduled fan stream: " + response

	return utils.shorten(response, 450) # For safety
Example #4
0
def next(lrrbot, conn, event, respond_to):
	"""
	Command: !next
	Command: !nextstream
	Command: !sched
	Command: !schedule

	Gets the next scheduled stream from the calendar
	"""
	if lrrbot.calendar_override == None:
		event_name, event_time, event_wait = googlecalendar.get_next_event()
		if event_time:
			nice_time = event_time = event_time.astimezone(config["timezone"]).strftime("%a %I:%M %p %Z")
			if event_wait < 0:
				nice_duration = utils.nice_duration(-event_wait, 1) + " ago"
			else:
				nice_duration = utils.nice_duration(event_wait, 1) + " from now"
			conn.privmsg(respond_to, "Next scheduled stream: %s at %s (%s)" % (event_name, nice_time, nice_duration))
		else:
			conn.privmsg(respond_to, "There don't seem to be any upcoming scheduled streams")
	else:
		now = datetime.datetime.now(config["timezone"])

		conn.privmsg(respond_to, "(Overwritten) %s, current moonbase time %s" % (lrrbot.calendar_override, now.strftime("%I:%M %p")))
Example #5
0
def uptime(lrrbot, conn, event, respond_to):
	"""
	Command: !uptime

	Post the duration the stream has been live.
	"""

	stream_info = twitch.get_info()
	if stream_info and stream_info.get("stream_created_at"):
		start = dateutil.parser.parse(stream_info["stream_created_at"])
		now = datetime.datetime.now(datetime.timezone.utc)
		conn.privmsg(respond_to, "The stream has been live for %s" % utils.nice_duration(now-start, 0))
	elif stream_info:
		conn.privmsg(respond_to, "Twitch won't tell me when the stream went live.")
	else:
		conn.privmsg(respond_to, "The stream is not live.")
Example #6
0
def notifications(conn, cur, session):
	row_data = get_notifications(cur)
	for row in row_data:
		if row['time'] is None:
			row['duration'] = None
		else:
			row['duration'] = utils.nice_duration(time.time() - row['time'], 2)
	row_data.reverse()

	if row_data:
		maxkey = row_data[0]['key']
	else:
		cur.execute("SELECT MAX(NOTIFICATIONKEY) FROM NOTIFICATION")
		maxkey = cur.fetchone()[0]
		if maxkey is None:
			maxkey = -1

	return flask.render_template('notifications.html', row_data=row_data, maxkey=maxkey, session=session)
Example #7
0
def notifications(conn, cur, session):
    row_data = get_notifications(cur)
    for row in row_data:
        if row['time'] is None:
            row['duration'] = None
        else:
            row['duration'] = utils.nice_duration(time.time() - row['time'], 2)
    row_data.reverse()

    if row_data:
        maxkey = row_data[0]['key']
    else:
        cur.execute("SELECT MAX(NOTIFICATIONKEY) FROM NOTIFICATION")
        maxkey = cur.fetchone()[0]
        if maxkey is None:
            maxkey = -1

    return flask.render_template('notifications.html',
                                 row_data=row_data,
                                 maxkey=maxkey,
                                 session=session)