def show_definition(request, tag, index=0): index = int(index) global more_results del more_results[:] try: # if index specified try to get the item at the index if index > 0: define = Define.objects.get(tag__iexact=tag, index=index) define_text = "%s[%i]: %s" % (tag, index, define.text) more_results.append(define_text) else: defines = Define.objects.filter(tag__iexact=tag).order_by('id') count = 1 if len(defines) == 0: return IRCResponse(request.reply_recipient, "%s is not defined." % (tag)) for define in defines: define_text = "%s[%i]: %s" % (tag, define.index, define.text) more_results.append(define_text) count += 1 more_results.reverse() result = more_results.pop() return IRCResponse(request.reply_recipient, result) except: return IRCResponse(request.reply_recipient, "%s[%i] is not defined." % (tag, index))
def google(request, query): print "googling for %s " % query global more_results del more_results[:] query = urllib.urlencode({'q': query}) url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' % query search_results = urllib.urlopen(url) json = simplejson.loads(search_results.read()) try: results = json['responseData']['results'] for result in results: url = result['url'] title = clean_html(result['title']) content = clean_html(result['content']) search_result = "%s - %s: %s" % (url, title, content) more_results.append(search_result) more_results.reverse() result = more_results.pop() return IRCResponse(request.reply_recipient, "%s" % result) except: return IRCResponse(request.reply_recipient, "No results were found.")
def bitcoin(request): (c, n, m) = parse_request(request) r_usd = requests.get('http://data.mtgox.com/api/1/BTCUSD/ticker', timeout=2) if not r_usd.status_code == 200: return IRCResponse(c, 'Error fetching current bitcoin value from mtgox') r_eur = requests.get('http://data.mtgox.com/api/1/BTCEUR/ticker', timeout=2) if not r_eur.status_code == 200: return IRCResponse(c, 'Error fetching current bitcoin value from mtgox') usd_dec = r_usd.json()['return'] eur_dec = r_eur.json()['return'] info_dict = { 'usd_last': usd_dec['last']['display'], 'usd_high': usd_dec['high']['display'], 'usd_low': usd_dec['low']['display'], 'usd_vol': usd_dec['vol']['display'], 'usd_avg': usd_dec['avg']['display'], 'eur_last': eur_dec['last']['display'], 'eur_high': eur_dec['high']['display'], 'eur_low': eur_dec['low']['display'], 'eur_vol': eur_dec['vol']['display'], 'eur_avg': eur_dec['avg']['display'], } response = u'[ MtGox: {usd_last} / {eur_last} | H: {usd_high} / {eur_high} | L: {usd_low} / {eur_low} | V-USD: {usd_vol} V-EUR: {eur_vol} ]'.format(**info_dict) return IRCResponse(c, response)
def get_weather(request, location): print "getting weather at %s " % location global more_results del more_results[:] try: station = Weather.location2station(location) weather = Weather.Station(station[0]) weather.update(live=True) more_string = "Dew point: %s, Pressure: %s, Humidity: %i%%, Wind: %s " % ( weather.data['dewpoint_string'], weather.data['pressure_string'], weather.data['relative_humidity'], weather.data['wind_string']) more_results.append(more_string) return IRCResponse( request.reply_recipient, "Weather at %s: %s %s %s " % (weather.data['city'], weather.data['weather'], weather.data['temperature_string'], weather.data['observation_time'])) except: return IRCResponse(request.reply_recipient, "Weather at %s is not found." % location)
def search(request, search_str, nick=None): q = Q(tag__icontains=search_str) | Q(text__icontains=search_str) global more_results del more_results[:] try: if nick is not None: defines = Define.objects.filter(q, created_by=nick).order_by('id') else: defines = Define.objects.filter(q).order_by('id') except: return IRCResponse(request.reply_recipient, "No results found.") count = 0 search_tags = "Tags: " for define in defines: count += 1 define_text = "[%i/%i] %s[%i]: %s" % (count, len(defines), define.tag, define.index, define.text) if count > 1: search_tags += ", %s[%i]" % (define.tag, define.index) else: search_tags += "%s[%i]" % (define.tag, define.index) more_results.append(define_text) more_results.reverse() if count < 2: result = more_results.pop() return IRCResponse(request.reply_recipient, result) else: return IRCResponse(request.reply_recipient, search_tags)
def more(request): global more_results if len(more_results) > 0: result = more_results.pop() return IRCResponse(request.reply_recipient, "%s" % (result)) else: return IRCResponse(request.reply_recipient, "There is no more.")
def video(request, site=None, url=None): url = fix_url(url) p_url = parse_video_url(url) (c, n, m) = parse_request(request) if not p_url: return IRCResponse(c, 'Could not parse video URL') (c, n, m) = parse_request(request) (site, v_id) = p_url if site is 'Y': yt_service = gdata.youtube.service.YouTubeService() entry = yt_service.GetYouTubeVideoEntry(video_id=v_id) title = entry.media.title.text duration = int(entry.media.duration.seconds) duration_s = str(datetime.timedelta(seconds=duration)) view_count = entry.statistics.view_count else: discard() nsfw = True if 'nsfw' in m else False video_obj = Video.objects.create(dest_url=url, nsfw=nsfw, posted_channel=c, posted_by=n, message=m, site=site, video_id=v_id, title=title) return IRCResponse(c, 'Video: {0} [{1}]'.format(title, duration_s))
def del_quote(request, quote_id): quote_id = int(quote_id) try: quote = Quote.objects.get(index=quote_id) quote.delete() return IRCResponse(request.reply_recipient, "Quote %i deleted." % quote_id) except: return IRCResponse(request.reply_recipient, "Quote not found.")
def get_quote(request, quote_id=0): quote_id = int(quote_id) try: if quote_id > 0: quote = Quote.objects.get(index=quote_id) else: quote = Quote.objects.order_by("?")[0] return IRCResponse(request.reply_recipient, "[%i] %s" % (quote.index, quote.text)) except: return IRCResponse(request.reply_recipient, "Quote not found.")
def test_multiple_response(self): responses = [] responses.append(IRCResponse('emad', 'whoa nelly!')) responses.append(IRCResponse('#wut', 'APPLY TOPICALLY', method='TOPIC')) response = IRCResponse('', '', responses=responses, method='MULTIPLE') self.bot.sendLine('PRIVMSG emad :whoa nelly!') self.bot.sendLine('TOPIC #wut :APPLY TOPICALLY') self.mox.ReplayAll() self.bot.methods[response.method](response.recipient.encode('utf-8'), response.data.encode('utf-8'), responses=response.responses)
def forget(request, tag, index=0): index = int(index) print "forgetting %s " % tag try: if index > 0: define = Define.objects.get(tag__iexact=tag, index=index) else: define = Define.objects.filter(tag__iexact=tag).order_by('id')[0] index = 1 define.delete() return IRCResponse(request.reply_recipient, "%s[%i] forgotten." % (tag, index)) except: return IRCResponse(request.reply_recipient, "%s[%i] is not defined." % (tag, index))
def civ5(request): d = request.reply_recipient game_ids = ['10774', '10775'] base_url = 'http://multiplayerrobot.com/Game#' response = "" for i in game_ids: data = requests.post(base_url + i, headers={'Content-Length': '0'}) if data.status_code != 200: return IRCResponse(d, 'Unable to fetch game data') soup = BeautifulSoup(data.text) active_player = soup.find(class_='game-host').find( class_='avatar').attrs['title'] turn_timer = soup.find(id='turn-timer-container').find('strong').string response += "Game {0}: Active player: {1}, turn ends: {2}\n".format( i, active_player, turn_timer) return IRCResponse(d, response)
def who_set(request, tag, index=0): index = int(index) print "looking up %s [%i]" % (tag, index) try: if index > 0: define = Define.objects.get(tag__iexact=tag, index=index) else: define = Define.objects.filter(tag__iexact=tag).order_by('id')[0] index = 1 return IRCResponse( request.reply_recipient, "%s[%i] is set by %s on %s." % (tag, define.index, define.created_by, define.created.strftime("%A, %d. %B %Y %I:%M%p"))) except: return IRCResponse(request.reply_recipient, "%s[%i] is not defined." % (tag, index))
def add_quote(request, quote): try: last_quote = Quote.objects.all().order_by('index')[0] index = last_define.index + 1 except: index = 1 Quote.objects.create(text=quote, index=index, created_by=request.nick) return IRCResponse(request.reply_recipient, "Quote %i added." % index)
def track(request, tracking_number): tracking_number = parse_terms(tracking_number) if re.match(r'(?i)1Z\w+?$', tracking_number): url = "http://wwwapps.ups.com/WebTracking/processInputRequest?sort_by=status&tracknums_displayed=1&TypeOfInquiryNumber=T&loc=en_US&InquiryNumber1=%s" % tracking_number elif count_digits(tracking_number) == 12 or count_digits( tracking_number) == 15: url = "http://www.fedex.com/Tracking?tracknumbers=%s" % tracking_number #elif re.match(r'8.+?',tracking_number): # url = "http://track.dhl-usa.com/TrackByNbr.asp?ShipmentNumber=%s" % tracking_number #elif re.match(r'(?i)70.+?|03.+?|23.+?|EA.+?|RA.+?|CP.+?',tracking_number): elif count_digits(tracking_number) == 22: url = "http://trkcnfrm1.smi.usps.com/PTSInternetWeb/InterLabelInquiry.do?origTrackNum=%s" % tracking_number else: return IRCResponse(request.reply_recipient, "Unknown tracking number format.") tinyurl = tiny_url(url) return IRCResponse(request.reply_recipient, "Tracking url: %s" % tinyurl)
def dict(request, word): global more_results del more_results[:] try: my_dict = dictclient.Connection('dict.org') result = my_dict.define("wn", word)[0] result_str = ' '.join(result.getdefstr().split('\n')) result_list = re.split(r'(\d+:\D+)', result_str) for i in range(0, len(result_list)): if (i + 1) % 2 == 0: #definition = "%s defintion %i of %i: %s " % (word,(i+1)/2,len(result_list)/2,result_list[i]) more_results.append(result_list[i]) more_results.reverse() result = more_results.pop() return IRCResponse(request.reply_recipient, "%s" % result) except: return IRCResponse(request.reply_recipient, "Could not lookup %s" % word)
def learn(request, tag, definition): try: last_define = Define.objects.filter( tag__iexact=tag).order_by('index')[0] index = last_define.index + 1 except: index = 1 Define.objects.create(tag=tag, text=definition, index=index, created_by=request.nick) return IRCResponse(request.reply_recipient, "%s[%i] learned." % (tag, index))
def literal(request, key='', **kwargs): factoid = get_object_or_404(Factoid, fact__iexact=normalize_factoid_key(key)) responses = factoid.factoidresponse_set.filter(disabled__exact=None) # XXX: This *really* needs to become a template. text = key verb = '' if factoid.protected: text += ' [LOCKED] ' for response in responses.order_by('verb', 'created'): if response.verb != verb: verb = response.verb text += ' =%s= ' % verb else: text += '|' if response.tag: text += '<%s> ' % response.tag text += '%s' % response.text return IRCResponse(request.reply_recipient, text)
def magic(request, query): print "magicing for %s " % query global more_results del more_results[:] query = urllib.urlencode({'q': query}) url = "http://magiccards.info/query?%s" % query search_results = urllib.urlopen(url) soup = BeautifulSoup(search_results.read()) cards = soup.findAll("table") for card in cards[3:]: try: title = card.contents[1].contents[3].contents[1].contents[ 1].contents[0] cost = card.contents[1].contents[3].contents[3].contents[0] text = ' '.join( card.contents[1].contents[3].contents[5].contents[0].findAll( text=True)) sets = card.contents[1].contents[5].contents[1].contents[ 13].contents[0] search_result = "%s - %s: %s - %s (%s)" % (title, cost, text, sets, tiny_url(url)) search_result = search_result.replace('\n', '').strip() more_results.append(search_result) except: next more_results.reverse() try: result = more_results.pop() except: result = "Card not found" return IRCResponse(request.reply_recipient, "%s" % result)
def map(request, location): query = parse_terms(location) query = urllib.urlencode({'q': query}) url = 'http://maps.google.com/?%s' % query tinyurl = tiny_url(url) return IRCResponse(request.reply_recipient, "%s" % tinyurl)
def hoi(request): d = request.reply_recipient return IRCResponse(d, 'haai')
def discard(): return IRCResponse(None, None, method='QUIET')
def reimport(request, *args, **kwargs): return IRCResponse(request.reply_recipient, 'Reload successful.', method='RESET')
def image(request, url=None): url = fix_url(url) (c, n, m) = parse_request(request) nsfw = True if 'nsfw' in m.lower() else False img_obj = Image.objects.create(dest_url=url, nsfw=nsfw, posted_channel=c, posted_by=n, message=m) return IRCResponse('#test', 'added')