Esempio n. 1
0
    def nano(self):
        print "[Nano] called"

        now = time.time()

        then = time.mktime(
            datetime.datetime(
                datetime.datetime.now().year,
                11,
                1,
                00,
                00).timetuple())

        delta = now - then

        target = 50000.0
        month = 2592000.0

        end = then + month

        if now > then + month:
            return "You should have finished by now"

        if delta < 0:
            delta = math.fabs(delta)
            return "You should start Nanowrimo in %s" % tools.niceTimeDelta(
                delta,
                "decimal")

        persec = target / month

        current = delta * persec

        return "You should be at %d words by now, %s left" % (
            current, tools.niceTimeDelta(month - delta))
Esempio n. 2
0
    def nano(self):
        self.logger.info("[Nano] called")

        now = time.time()

        then = time.mktime(
            datetime.datetime(
                datetime.datetime.now().year,
                11,
                1,
                00,
                00).timetuple())

        delta = now - then

        target = 50000.0
        month = 2592000.0

        end = then + month

        if now > then + month:
            return "You should have finished by now"

        if delta < 0:
            delta = math.fabs(delta)
            return "You should start Nanowrimo in %s" % tools.niceTimeDelta(
                delta,
                "decimal")

        persec = target / month

        current = delta * persec

        return "You should be at %d words by now, %s left" % (
            current, tools.niceTimeDelta(month - delta))
Esempio n. 3
0
    def lastquit(self, lasttime, searchingfor):
        cursor = self.dbconnection.cursor()
        cursor.execute(
            'SELECT last_quit, reason from lastquit where username LIKE %s and last_quit > %s',
            (searchingfor, lasttime))

        quitresult = cursor.fetchone()
        if quitresult == None:
            print "No quit for %s after %s" % (searchingfor, lasttime)

            return ""
        else:
            print "Quit result"

            print quitresult

            quittime = time.localtime(quitresult[0])
            timedelta = time.mktime(quittime) - lasttime

            print quittime

            print "Localtime of %s is %s" % (quitresult[0],
                                             time.localtime(quitresult[0]))

            if (timedelta < 60):
                deltastring = "seconds"
            else:
                deltastring = tools.niceTimeDelta(timedelta)

            if (timedelta > 86400):
                timefmt = "%a %d/%b/%Y %H:%M"
            else:
                timefmt = "%H:%M"

            quittime = datetime.datetime.fromtimestamp(
                quitresult[0]).strftime(timefmt)
            #quittime = datetime.datetime.fromtimestamp(quitresult[0]).strftime("%H:%M")

            return ", they quit %s later (%s) with the message '%s'" % (
                deltastring, quittime, quitresult[1])

        return message
Esempio n. 4
0
    def fetch_title(self, url):
        parsedurl = urlparse.urlparse(url)
        [yt_type, yt_id] = self.url_to_ID(parsedurl)

        if yt_type == 'video':

            item = self.youtube.videos().list(part="snippet,contentDetails", id=yt_id).execute()
            self.logger.info(item)

            video = item['items'][0]

            duration = isodate.parse_duration(
                video['contentDetails']['duration'])
            title = video['snippet']['title']
            description = video['snippet']['description']

            self.logger.info(title)
            deltastring = tools.niceTimeDelta(duration.total_seconds())
            #deltastring = entry.media.duration.seconds
            self.logger.info(title)
            return "Youtube video: %s (%s)" % (
                title, deltastring)
Esempio n. 5
0
    def fetch_title(self, url):
        parsedurl = urlparse.urlparse(url)
        [yt_type, yt_id] = self.url_to_ID(parsedurl)

        if yt_type == 'video':

            item = self.youtube.videos().list(part="snippet,contentDetails", id=yt_id).execute()
            self.logger.info(item)

            video = item['items'][0]

            duration = isodate.parse_duration(
                video['contentDetails']['duration'])
            title = video['snippet']['title']
            description = video['snippet']['description']

            self.logger.info(title)
            deltastring = tools.niceTimeDelta(duration.total_seconds())
            #deltastring = entry.media.duration.seconds
            self.logger.info(title)
            return "Youtube video: %s (%s)" % (
                title, deltastring)
Esempio n. 6
0
    def lastquit(self, lasttime, searchingfor):
        cursor = self.dbconnection.cursor()
        cursor.execute(
            'SELECT last_quit, reason from lastquit where username LIKE %s and last_quit > %s',
            (searchingfor,
             lasttime))

        quitresult = cursor.fetchone()
        if quitresult is None:
            self.logger.info("[WHOWAS] No quit for %s after %s" %
                             (searchingfor, lasttime))

            return ""
        else:

            quittime = time.localtime(quitresult[0])
            timedelta = time.mktime(quittime) - lasttime

            self.logger.info("[WHOWAS] Quit result: %s @ %s" %
                             (quitresult, quittime))

            if(timedelta < 60):
                deltastring = "seconds"
            else:
                deltastring = tools.niceTimeDelta(timedelta)

            if (timedelta > 86400):
                timefmt = "%a %d/%b/%Y %H:%M"
            else:
                timefmt = "%H:%M"

            quittime = datetime.datetime.fromtimestamp(
                quitresult[0]).strftime(timefmt)

            return ", they quit %s later (%s) with the message '%s'" % (
                deltastring, quittime, quitresult[1])

        return message
Esempio n. 7
0
	def lastquit(self, lasttime, searchingfor):
		cursor = self.dbconnection.cursor()
		cursor.execute('SELECT last_quit, reason from lastquit where username LIKE %s and last_quit > %s', (searchingfor, lasttime ) )


		quitresult = cursor.fetchone();
		if quitresult == None:
			print "No quit for %s after %s" % (searchingfor, lasttime)

			return "";
		else:
			print "Quit result"
			
			print quitresult
			
			quittime = time.localtime(quitresult[0])
			timedelta = time.mktime(quittime) - lasttime;

			print quittime
			
			print "Localtime of %s is %s" % (quitresult[0], time.localtime(quitresult[0]))

			if(timedelta < 60):
				deltastring = "seconds"
			else:
				deltastring = tools.niceTimeDelta(timedelta);

			if (timedelta > 86400):
				timefmt = "%a %d/%b/%Y %H:%M"
			else:
				timefmt = "%H:%M";			

			quittime = datetime.datetime.fromtimestamp(quitresult[0]).strftime(timefmt)
			#quittime = datetime.datetime.fromtimestamp(quitresult[0]).strftime("%H:%M")			

			return ", they quit %s later (%s) with the message '%s'" % (deltastring, quittime, quitresult[1])

		return message;
Esempio n. 8
0
    def lastseen(self, searchingfor, after_timestamp=0, depth=0):

        self.logger.info("[WHOWAS] Looking for %s after %s" %
                         (searchingfor, after_timestamp))

        if depth > 4:
            return ' ... and at that point I gave up'

        cursor = self.dbconnection.cursor()
        cursor.execute(
            'SELECT username, last_seen, last_words, channel FROM lastseen where username LIKE %s and last_seen > %s order by last_seen desc',
            (searchingfor,
             int(after_timestamp)))

        result = cursor.fetchone()
        if result is None:
            message = "I haven't seen %s say anything" % searchingfor
            self.logger.info("[WHOWAS] Looking for a quit for %s after %s" % (
                searchingfor, after_timestamp))
            return "%s%s" % (message,
                             self.lastquit(
                                 after_timestamp,
                                 searchingfor))
        elif (result[2][0] == ">"):
            # Last action is a rename

            deltadesc = "ago"

            if (after_timestamp == 0):
                self.logger.info("[WHOWAS] No after timestamp for %s, Now %s, Lastseen %s" % (
                    result[1], time.localtime(), time.localtime(result[1])))
                now = time.mktime(time.localtime())
                deltadiff = now - result[1]
            else:
                self.logger.info("[WHOWAS After timestamp %s" %
                                 after_timestamp)
                now = after_timestamp
                deltadesc = "later"
                deltadiff = result[1] - after_timestamp

            deltastring = tools.niceTimeDelta(deltadiff)

            if ((now - result[1]) > 86400):
                timefmt = "%a %d/%b/%Y %H:%M"
            else:
                timefmt = "%H:%M"
            #timefmt = "%a %d/%b/%Y %H:%M"

            timechanged = datetime.datetime.fromtimestamp(
                result[1]).strftime(timefmt)

            message = "I last saw %s %s %s (%s) relabeling themselves as \"%s\". %s" % (
                result[0], deltastring, deltadesc, timechanged, result[2][1:], self.lastseen(result[2][1:], int(result[1]), depth + 1))

        else:
            # Last action is a phrase
            self.logger.info("[WHOWAS] Found a last phrase:")
            deltadesc = "ago"

            if (after_timestamp == 0):
                now = time.mktime(time.localtime())
                deltastring = tools.niceTimeDelta(now - result[1])
            else:
                now = time.mktime(time.localtime(result[1]))

                deltadesc = "later"
                deltastring = tools.niceTimeDelta(result[1] - after_timestamp)

            if ((now - result[1]) > 86400):
                timefmt = "%a %d/%b/%Y %H:%M"
            else:
                timefmt = "%H:%M"

            timechanged = datetime.datetime.fromtimestamp(
                result[1]).strftime(timefmt)

            if (result[3] != self.channel):
                message = "I last saw %s %s %s (%s) on %s" % (
                    result[0], deltastring, deltadesc, timechanged, result[3])
            else:
                message = "I last saw %s %s %s (%s) saying \"%s\"" % (
                    result[0], deltastring, deltadesc, timechanged, result[2])

        return "%s%s" % (message, self.lastquit(result[1], searchingfor))
Esempio n. 9
0
    def lastseen(self, searchingfor, after_timestamp=0, depth=0):

        print "Looking for %s after %s" % (searchingfor, after_timestamp)

        if depth > 4:
            return ' ... and at that point I gave up'

        cursor = self.dbconnection.cursor()
        cursor.execute(
            'SELECT username, last_seen, last_words, channel FROM lastseen where username LIKE %s and last_seen > %s order by last_seen desc',
            (searchingfor, int(after_timestamp)))

        print 'SELECT username, last_seen, last_words, channel FROM lastseen where username LIKE %s and last_seen > %s order by last_seen desc limit 1' % (
            searchingfor, after_timestamp)

        result = cursor.fetchone()
        if result == None:
            message = "I haven't seen %s say anything" % searchingfor
            print "Looking for a quit for %s after %s" % (searchingfor,
                                                          after_timestamp)
            return "%s%s" % (message,
                             self.lastquit(after_timestamp, searchingfor))
        elif (result[2][0] == ">"):
            # Last action is a rename

            deltadesc = "ago"

            if (after_timestamp == 0):
                print "No after timestamp"
                print result[1]
                print "Now"
                print time.localtime()
                print "Lastseen"
                print time.localtime(result[1])
                now = time.mktime(time.localtime())
                deltadiff = now - result[1]
            else:
                print "After timestamp %s" % after_timestamp
                print time.localtime()
                now = after_timestamp
                deltadesc = "later"
                deltadiff = result[1] - after_timestamp

            deltastring = tools.niceTimeDelta(deltadiff)

            if ((now - result[1]) > 86400):
                timefmt = "%a %d/%b/%Y %H:%M"
            else:
                timefmt = "%H:%M"
            #timefmt = "%a %d/%b/%Y %H:%M"

            timechanged = datetime.datetime.fromtimestamp(
                result[1]).strftime(timefmt)

            message = "I last saw %s %s %s (%s) relabeling themselves as \"%s\". %s" % (
                result[0], deltastring, deltadesc, timechanged, result[2][1:],
                self.lastseen(result[2][1:], int(result[1]), depth + 1))

        else:
            # Last action is a phrase
            print "Found a last phrase:"
            print result
            deltadesc = "ago"

            if (after_timestamp == 0):
                print "No after timestamp"
                print result[1]
                print "Now is %s" % time.localtime()
                print "Localtime of %s is %s" % (result[1],
                                                 time.localtime(result[1]))
                now = time.mktime(time.localtime())
                deltastring = tools.niceTimeDelta(now - result[1])
            else:
                #print "After timestamp %s" % after_timestamp
                #print time.localtime()
                #print "Localtime of %s is %s" % (result[1], time.localtime(result[1]))
                #now = after_timestamp

                now = time.mktime(time.localtime(result[1]))

                deltadesc = "later"
                deltastring = tools.niceTimeDelta(result[1] - after_timestamp)
                print "Happening after %s" % after_timestamp
                print "Event happened  %s" % result[1]

            if ((now - result[1]) > 86400):
                timefmt = "%a %d/%b/%Y %H:%M"
            else:
                timefmt = "%H:%M"

            timechanged = datetime.datetime.fromtimestamp(
                result[1]).strftime(timefmt)

            if (result[3] != self.channel):
                message = "I last saw %s %s %s (%s) on %s" % (
                    result[0], deltastring, deltadesc, timechanged, result[3])
            else:
                message = "I last saw %s %s %s (%s) saying \"%s\"" % (
                    result[0], deltastring, deltadesc, timechanged, result[2])

        return "%s%s" % (message, self.lastquit(result[1], searchingfor))
Esempio n. 10
0
	def channelAction(self, connection, user, channel, message, matchindex):

		print "[WEBLINK] Activated, matchindex is %d" % matchindex

		if matchindex == 3: # Weblink
			print "[WEBLINK] That looks like a weblink : %s" % message

			links = self.grabUrls(message)
		
			print links
			now = time.time()
			
			for url in links:
				urlp = urlparse.urlparse(url)
				print url
				if "youtube" in urlp.netloc.split("."):
					print "That's a Youtube Link"
					query = urlparse.parse_qs(urlp.query)
					if "v" in query.keys():
						print "That's a Youtube Link with a v! %s " % query['v'][0]
						entry = self.yt_service.GetYouTubeVideoEntry(video_id=query['v'][0])
						print entry
						deltastring = tools.niceTimeDelta(int(entry.media.duration.seconds))
						#deltastring = entry.media.duration.seconds
						output = "Youtube video: %s (%s)" % (entry.media.title.text, deltastring)
						print output
						connection.msg(channel,output.encode("utf-8"))

			cursor = self.dbconnection.cursor()
			cursor.execute('insert into urllist (time, username, message, channel) values (%s, %s, %s, %s)', (now, user, message, channel) )

			self.lastlink[channel] = {'id': cursor.lastrowid, 'url': links[0] }

			self.dbconnection.commit()

		elif matchindex == 0: # Shorten That
			print "[WEBLINK] Shortening URL"

			print self.lastlink
			surl = self.bitly.shorten(self.lastlink[channel]['url'])
			
			url_split = urlparse.urlparse(self.lastlink[channel]['url'])
			output = "%s: %s link shortened to %s" % (user, url_split[1], surl['url'])
			connection.msg(channel,output.encode("utf-8"))

			cursor = self.dbconnection.cursor()
			cursor.execute('update urllist set shorturl = %s where id = %s', ( surl['url'], self.lastlink[channel]['id'] ) )
			self.dbconnection.commit()

		elif matchindex == 1: # SHorten user's url
	                for module in connection.channelModules:
	                        if module.__name == "Memory":
	                                memory = module;
			
			matches = self.channelMatch[matchindex].findall(message)[0]
			print matches
			result = memory.search(channel, matches[0], "http");
			print result

			if len(result) == 0:
				output = "%s: I've no idea which link you mean" % user
				connection.msg(channel,output.encode("utf-8"))
			else:
				links = self.grabUrls(result[-1]['message'])

				for link in links:
					surl = self.bitly.shorten(link)
					url_split = urlparse.urlparse(link)
					output = "%s: %s link shortened to %s" % (user, url_split[1], surl['url'])
					connection.msg(channel,output.encode("utf-8"))
				

		elif matchindex == 2: # Shorten this URL
			print "[WEBLINK] Shortening requested URL : %s" % message
			links = self.grabUrls(message)

			if len(links) == 0:
				print "[WEBLINK] No links found"
				connection.msg(channel, "%s: I see no links in that" % user)
				return

			print links

			cursor = self.dbconnection.cursor()
			for link in links:
				print link
				now = time.time()
				surl = self.bitly.shorten(link)
				cursor.execute('insert into urllist (time, username, message, channel, shorturl) values (%s, %s, %s, %s, %s)', (now, user, message, channel, surl['url']) )
				url_split = urlparse.urlparse(link)
				output = "%s: %s link shortened to %s" % (user, url_split[1], surl['url'])
				connection.msg(channel,output.encode("utf-8"))
Esempio n. 11
0
	def lastseen(self, searchingfor, after_timestamp = 0, depth = 0):
	
		print "Looking for %s after %s" % (searchingfor, after_timestamp)
		
		if depth > 4:
			return ' ... and at that point I gave up';

		cursor = self.dbconnection.cursor()
		cursor.execute('SELECT username, last_seen, last_words, channel FROM lastseen where username LIKE %s and last_seen > %s order by last_seen desc', (searchingfor, int(after_timestamp)) )
		
		
		print 'SELECT username, last_seen, last_words, channel FROM lastseen where username LIKE %s and last_seen > %s order by last_seen desc limit 1' % ( searchingfor, after_timestamp) 
				
		result = cursor.fetchone()
		if result == None:
			message = "I haven't seen %s say anything" % searchingfor
			print "Looking for a quit for %s after %s" % (searchingfor, after_timestamp)
			return "%s%s" % (message, self.lastquit(after_timestamp, searchingfor))
		elif (result[2][0] == ">"): 
			# Last action is a rename
		
			deltadesc = "ago"
			
			if (after_timestamp == 0):
				print "No after timestamp"
				print result[1]
				print "Now"
				print time.localtime()
				print "Lastseen"
				print time.localtime(result[1])
				now = time.mktime(time.localtime())
				deltadiff = now - result[1]
			else:
				print "After timestamp %s" % after_timestamp
				print time.localtime()
				now = after_timestamp
				deltadesc = "later"
				deltadiff = result[1] - after_timestamp
			
			deltastring = tools.niceTimeDelta(deltadiff)
		
			if ((now - result[1]) > 86400):
				timefmt = "%a %d/%b/%Y %H:%M"
			else:
				timefmt = "%H:%M";			
			#timefmt = "%a %d/%b/%Y %H:%M"

			timechanged = datetime.datetime.fromtimestamp(result[1]).strftime(timefmt)
		
			message = "I last saw %s %s %s (%s) relabeling themselves as \"%s\". %s" % (result[0], deltastring, deltadesc, timechanged, result[2][1:], self.lastseen(result[2][1:], int(result[1]), depth +1 ))
		
		else:
			# Last action is a phrase
			print "Found a last phrase:"
			print result
			deltadesc = "ago"
			
			if (after_timestamp == 0):
				print "No after timestamp"
				print result[1]
				print "Now is %s" % time.localtime()
				print "Localtime of %s is %s" % (result[1], time.localtime(result[1]))
				now = time.mktime(time.localtime())
				deltastring = tools.niceTimeDelta(now - result[1])
			else:
				#print "After timestamp %s" % after_timestamp
				#print time.localtime()
				#print "Localtime of %s is %s" % (result[1], time.localtime(result[1]))
				#now = after_timestamp
				
				now = time.mktime(time.localtime(result[1]))
				
				deltadesc = "later"
				deltastring = tools.niceTimeDelta(result[1] - after_timestamp)
				print "Happening after %s" % after_timestamp
				print "Event happened  %s" % result[1]

			

			if ((now - result[1]) > 86400):
				timefmt = "%a %d/%b/%Y %H:%M"
			else:
				timefmt = "%H:%M";			

			timechanged = datetime.datetime.fromtimestamp(result[1]).strftime(timefmt)

			if (result[3] != self.channel):
				message = "I last saw %s %s %s (%s) on %s" % (result[0], deltastring, deltadesc, timechanged, result[3])
			else:
				message = "I last saw %s %s %s (%s) saying \"%s\"" % (result[0], deltastring, deltadesc, timechanged, result[2])

		return "%s%s" % (message, self.lastquit(result[1], searchingfor))
Esempio n. 12
0
	def howLong(self, match):

		print "[How Long] called with '%s'" % match[0][1]
		
		eventSearch = match[0][1]
		eventName = match[0][1]
	
		if eventName.lower() == "downtime opens":
			return "FOIP."

		#aliases = { 'cunts do christmas' : 'Havocstan Midwinter Festival', "cdc" : 'Havocstan Midwinter Festival'}
		#if aliases.has_key(eventName.lower()):
		#	print "found alias"
		#	eventSearch = aliases[eventName.lower()]


		if (match[0][0] == "until"):
			print "Until match"
			firstTry = (">", "asc")
			thenTry = ("<", "desc")
			tiswas = "is"
		else:
			print "since match: %s " % match
			firstTry = ("<", "desc")
			thenTry = (">", "asc")
			tiswas = "was"

		cursor = self.dbconnection.cursor()
			
		# First, try direct description matches. First in the future (past if it's since)...	
		rawquery = 'SELECT datetime, description, class, datetime_end, UNIX_TIMESTAMP(datetime) as datetime_epoch, UNIX_TIMESTAMP(datetime_end) as datetime_end_epoch FROM events where (description LIKE %%s or aliases LIKE %%s) and datetime %s now() order by datetime %s'

		try:
			result = dateutil.parser.parse(eventSearch)
			event = (result,eventSearch,"",None,time.mktime(result.timetuple()),None)
		except ValueError: 		

			query = rawquery % (firstTry[0], firstTry[1])
		
			cursor.execute(query, (eventSearch, "%%%s%%" % eventSearch) )
			event = cursor.fetchone()
	
			print query % (eventSearch, "%%%s%%" % eventSearch)
		
			# Second, try Description matches in the past (future if it's since)...
			if event == None:
				query = rawquery % (thenTry[0], thenTry[1])
				cursor.execute(query, (eventSearch, "%%%s%%" % eventSearch) )
				event = cursor.fetchone()
				if tiswas == "was":
					tiswas = "is"
				else:
					tiswas = "was"

			# Now set up the class query:
			rawquery =	'SELECT datetime, description, class, datetime_end, UNIX_TIMESTAMP(datetime) as datetime_epoch, UNIX_TIMESTAMP(datetime_end) as datetime_end_epoch FROM events where class LIKE %%s and datetime %s now() order by datetime %s'

			# Third, try Class matches in the future (past if it's since)...
			if event == None:
				query = rawquery % (firstTry[0], firstTry[1]) 
				cursor.execute(query, (eventSearch, ) )
				event = cursor.fetchone()
			
			# Fourth, try Class matches in the past (future if it's since)...
			if event == None:
				query = rawquery % (thenTry[0], thenTry[1]) 
				cursor.execute(query, (eventSearch, ) )
				event = cursor.fetchone()


		# Aborted attempt to handle arbitary dates
		#if event == None:
		#	print "Attempting to parse %s as date" % eventSearch
		#	try:
		#		cmd = "'echo strtotime(\"%s\")\;'" % eventSearch
		#		#print cmd
		#		#sysres = subprocess.Popen(["/usr/bin/php",cmd ], stdout=subprocess.PIPE).communicate()
		#		output = Popen(["/usr/bin/php", "-r", cmd], stdout=PIPE).communicate()[0]
		#		print output
		#		#sysres = os.system(cmd);
		#		print "Sysres: %s " % sysres;
		#		if not sysres == 0:
		#			eventDate = datetime.datetime.fromtimestamp(sysres);
		#			#epoch = time.mktime(eventDate.timetuple();
		#			event = (eventDate, eventDate.isoformat(" "), "Time", None, epoch, None)
		#	except ValueError:
		#		pass
		
		print event
	
		# Then give up
		if event == None:
			return "No idea, sorry. There's a list of stuff I know about at http://www.maelfroth.org/events.php"
			
		print event
		eventName  = event[1]

		# 0 datetime, 1 description, 2 class, 3 date_end, 4 date_epoch, 5 date_end_epoch
		
		current_time = time.time()

		if(event[5] == None):
			print "Using is (No time out data)"
			timing_position = "i"
			eventTime = int(event[4])
		elif (int(event[4]) > current_time):
			print "Using time in"
			timing_position = "start"
			eventTime = int(event[4])
		elif event[5]:
			print "Using time out"
			timing_position = "end"
			eventTime = int(event[5])
		else:
			print "Using time in (No time out data)"
			timing_position = "i"
			eventTime = int(event[4])

		#eventName = event[1]
		eventClass = event[2]
		
		if (eventTime < current_time):
			swap = current_time
			current_time = eventTime
			eventTime = swap
			returnformat = "%s %s %s ago"
			if timing_position == 'i':
				timing_position = 'was'
			else:
				timing_position = "%sed" % timing_position
		else:
			returnformat = "%s %ss in %s"


		timedelta = (eventTime - current_time)


		deltastring = tools.niceTimeDelta(timedelta, self.timein)

		print returnformat % (eventName, timing_position, deltastring)

		return returnformat % (eventName, timing_position,deltastring)
Esempio n. 13
0
    def getTitle(self, url):
        title = False

        urlp = urlparse.urlparse(url)
        print url

        if "twitter" in urlp.netloc.split("."):
            path = urlp.path.split("/")
            id = path[-1]
            tweet = self.twitter.statuses.show(id=id)
            print tweet
            title = "@%s (%s): %s" % (
                tweet['user']['name'], tweet['user']['screen_name'], tweet['text'])
        elif "youtube" in urlp.netloc.split("."):
            print "That's a Youtube Link"
            query = urlparse.parse_qs(urlp.query)
            if "v" in query.keys():
                print "That's a Youtube Link with a v! %s " % query['v'][0]
                entry = self.yt_service.GetYouTubeVideoEntry(
                    video_id=query['v'][0])
                print entry
                deltastring = tools.niceTimeDelta(
                    int(entry.media.duration.seconds))
                #deltastring = entry.media.duration.seconds
                title = "Youtube video: %s (%s)" % (
                    entry.media.title.text, deltastring)
                print title
                # connection.message(channel,title)
        else:
            headers = {
                'User-agent': 'Lampstand IRC Bot (contact [email protected])'}
            try:
                req = requests.get(url, headers=headers, timeout=30)
            except requests.exceptions.Timeout:
                return "That link timed out"
            k = len(req.content) / 1024
            if req.status_code != 200:
                title = "That link returned an error %s" % (req.status_code)
            elif req.headers['content-type'].find("text/html") != -1 or req.headers['content-type'].find("application/xhtml+xml") != -1:
                soup = BeautifulSoup.BeautifulSoup(
                    req.text,
                    convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
                title = soup.title.string
            else:
                if req.headers['content-type'].find("image/") == 0:
                    image_file = StringIO.StringIO(req.content)
                    #color = most_colour.most_colour(image_file)

                    image_file.seek(0)
                    im = Image.open(image_file)
                    try:
                        im.seek(1)
                        title = "An animation, %dx%d (%dk)" % (
                            im.size[0], im.size[1], k)
                    except:
                        title = "An image, %dx%d (%dk)" % (
                            im.size[0], im.size[1], k)
                else:
                    title = "A %s file (%dk)" % (
                        req.headers['content-type'], k)

        return title.strip()
Esempio n. 14
0
    def lastseen(self, searchingfor, after_timestamp=0, depth=0):

        self.logger.info("[WHOWAS] Looking for %s after %s" %
                         (searchingfor, after_timestamp))

        if depth > 4:
            return ' ... and at that point I gave up'

        cursor = self.dbconnection.cursor()
        cursor.execute(
            'SELECT username, last_seen, last_words, channel FROM lastseen where username LIKE %s and last_seen > %s order by last_seen desc',
            (searchingfor, int(after_timestamp)))

        result = cursor.fetchone()
        if result is None:
            message = "I haven't seen %s say anything" % searchingfor
            self.logger.info("[WHOWAS] Looking for a quit for %s after %s" %
                             (searchingfor, after_timestamp))
            return "%s%s" % (message,
                             self.lastquit(after_timestamp, searchingfor))
        elif (result[2][0] == ">"):
            # Last action is a rename

            deltadesc = "ago"

            if (after_timestamp == 0):
                self.logger.info(
                    "[WHOWAS] No after timestamp for %s, Now %s, Lastseen %s" %
                    (result[1], time.localtime(), time.localtime(result[1])))
                now = time.mktime(time.localtime())
                deltadiff = now - result[1]
            else:
                self.logger.info("[WHOWAS After timestamp %s" %
                                 after_timestamp)
                now = after_timestamp
                deltadesc = "later"
                deltadiff = result[1] - after_timestamp

            deltastring = tools.niceTimeDelta(deltadiff)

            if ((now - result[1]) > 86400):
                timefmt = "%a %d/%b/%Y %H:%M"
            else:
                timefmt = "%H:%M"
            #timefmt = "%a %d/%b/%Y %H:%M"

            timechanged = datetime.datetime.fromtimestamp(
                result[1]).strftime(timefmt)

            message = "I last saw %s %s %s (%s) relabeling themselves as \"%s\". %s" % (
                result[0], deltastring, deltadesc, timechanged, result[2][1:],
                self.lastseen(result[2][1:], int(result[1]), depth + 1))

        else:
            # Last action is a phrase
            self.logger.info("[WHOWAS] Found a last phrase:")
            deltadesc = "ago"

            if (after_timestamp == 0):
                now = time.mktime(time.localtime())
                deltastring = tools.niceTimeDelta(now - result[1])
            else:
                now = time.mktime(time.localtime(result[1]))

                deltadesc = "later"
                deltastring = tools.niceTimeDelta(result[1] - after_timestamp)

            if ((now - result[1]) > 86400):
                timefmt = "%a %d/%b/%Y %H:%M"
            else:
                timefmt = "%H:%M"

            timechanged = datetime.datetime.fromtimestamp(
                result[1]).strftime(timefmt)

            if (result[3] != self.channel):
                message = "I last saw %s %s %s (%s) on %s" % (
                    result[0], deltastring, deltadesc, timechanged, result[3])
            else:
                message = "I last saw %s %s %s (%s) saying \"%s\"" % (
                    result[0], deltastring, deltadesc, timechanged, result[2])

        return "%s%s" % (message, self.lastquit(result[1], searchingfor))