From 963f512d1ea4817dc9441e2cb024183da97f8568 Mon Sep 17 00:00:00 2001 From: Steven Smith Date: Tue, 23 Jul 2013 02:53:17 +0800 Subject: [PATCH] Fix issue with incomplete Steam profiles, fix to pep8 standards (except line length) --- plugins/steam.py | 110 +++++++++++++++++++++++++---------------------- 1 file changed, 58 insertions(+), 52 deletions(-) diff --git a/plugins/steam.py b/plugins/steam.py index 92143a7..f75bd81 100644 --- a/plugins/steam.py +++ b/plugins/steam.py @@ -1,32 +1,20 @@ -from util import hook, http, web, text +from util import hook, http, web, text, timesince from urllib import urlencode from datetime import datetime import re + def db_init(db): db.execute("create table if not exists steam(nick primary key, acc)") db.commit() -def timesince(dt, default="just now"): - now = datetime.utcnow() - diff = now - dt - periods = ( - (diff.days / 365, "year", "years"), - (diff.days / 30, "month", "months"), - (diff.days / 7, "week", "weeks"), - (diff.days, "day", "days"), - (diff.seconds / 3600, "hour", "hours"), - (diff.seconds / 60, "minute", "minutes"), - (diff.seconds, "second", "seconds"), - ) - for period, singular, plural in periods: - if period: - return "%d %s ago" % (period, singular if period == 1 else plural) - return default @hook.command('sc', autohelp=False) @hook.command(autohelp=False) - """steamcalc [username] [currency] - Gets value of steam account and total hours played. Uses steamcommunity.com/id/. Uses IRC nickname if none provided. """ +def steamcalc(inp, nick='', db=None): + """steamcalc [currency] - Gets value of steam account and + total hours played. Uses steamcommunity.com/id/. Uses + IRC nickname if none provided. """ currencies = {'USD': 'us', 'euro1': "de", 'euro2': 'no', 'pound': 'uk', 'rubles': 'ru', 'real': 'br', 'yen': 'jp', 'dollars': 'us', 'german': 'de', @@ -37,48 +25,66 @@ def timesince(dt, default="just now"): currency = None dontsave = False if not inp: - user = db.execute("select acc from steam where nick=lower(?)", (nick,)).fetchone() - if not user: - inp = nick - else: - inp = user[0] - dontsave = True - else: - if len(inp.split(" ")) > 1: - if inp.split(" ")[1] in currencies: - currency = currencies[inp.split(" ")[1]] + user = db.execute("select acc from steam where nick=lower(?)", (nick,)).fetchone() + if not user: + inp = nick else: - return "Invalid currency!" - inp = inp.split(" ")[0] - dontsave = False + inp = user[0] + dontsave = True + else: + if len(inp.split(" ")) > 1: + if inp.split(" ")[1] in currencies: + currency = currencies[inp.split(" ")[1]] + else: + return "Invalid currency!" + inp = inp.split(" ")[0] + dontsave = False urldata = urlencode({"player": inp, "currency": currency if currency else "us"}) soup = http.get_soup("http://steamdb.info/calculator/?" + urldata) try: - name = soup.findAll('h1', {'class': 'header-title'})[1].text - status = soup.findAll('td')[7].text - if status == "Online": + name = soup.findAll('h1', {'class': 'header-title'})[1].text + status = soup.findAll('td')[7].text + except Exception as e: + print e + return u"\x02Unable to retrieve info for %s!\x02 Is it a valid SteamCommunity profile username (%s)? " \ + "Check if your profile is private, or go here to search: %s" % (inp, web.isgd("http://steamcommunity.com/id/%s" % inp), web.isgd("http://steamdb.info/calculator/?" + urldata)) + if status == "Online": status = "\x033\x02Online\x02\x0f" - elif status == "Offline": + elif status == "Offline": status = "\x034\x02Offline\x02\x0f" - elif status == "Away": + elif status == "Away": status = "\x038\x02Away\x02\x0f" - elif status == "Busy": + elif status == "Busy": status = "\x035\x02Busy\x02\x0f" - elif "Looking to" in status: + elif "Looking to" in status: status = "\x036\x02%s\x02\x0f" % status - twdata = soup.find('h1', {'class': 'header-title pull-right'}).find('a')['data-text'].split(", ") - money = twdata[0].split("My #Steam account is worth ")[1] - time = twdata[1].split("and I spent ")[1].split(" playing games!")[0] - timeonsteam = soup.findAll('i')[1].text[1:-1].split(" ") - timestamp = datetime.strptime(timeonsteam[0]+" "+timeonsteam[1]+" "+timeonsteam[2] + " - " + timeonsteam[4]+" "+timeonsteam[5], "%B %d, %Y - %H:%M:%S UTC") - timeonsteam = timesince(timestamp) - totalgames = soup.find('b').text - notplayed = soup.findAll('b')[1].text - nppercent = soup.findAll('i')[3].text[1:-1] - if not dontsave: + worth = None + timeonsteam = None + gamesplayed = None + try: + twdata = soup.find('h1', {'class': 'header-title pull-right'}).find('a')['data-text'].split(", ") + money = twdata[0].split("My #Steam account is worth ")[1] + time = twdata[1].split("and I spent ")[1].split(" playing games!")[0] + worth = "This Steam account is worth \x02%s\x02, and they've spent \x02%s\x02 playing games! " % (money, time) + except: + pass + try: + timeonsteam = soup.findAll('i')[1].text[1:-1].split(" ") + timestamp = datetime.strptime(timeonsteam[0]+" "+timeonsteam[1]+" "+timeonsteam[2] + " - " + timeonsteam[4]+" "+timeonsteam[5], "%B %d, %Y - %H:%M:%S UTC") + timeonsteam = timesince.timesince(timestamp) + timeonsteam = "Their Steam account was created %s ago! " % timeonsteam + except: + pass + try: + totalgames = soup.find('b').text + notplayed = soup.findAll('b')[1].text + nppercent = soup.findAll('i')[3].text[1:-1] + gamesplayed = "They have \x02%s games in their Steam library\x02, but \x02%s of them haven't been touched\x02! That's \x02%s\x02! " % (totalgames, notplayed, nppercent) + except: + pass + if not dontsave: db.execute("insert or replace into steam(nick, acc) values (?,?)", (nick.lower(), inp)) db.commit() - return u"%s (%s): This Steam account is worth \x02%s\x02, and they've spent \x02%s\x02 playing games! Their Steam account was created %s! They have \x02%s games in their Steam library\x02, but \x02%s of them haven't been touched\x02! That's %s! %s" % (name, status, money, time, timeonsteam, totalgames, notplayed, nppercent, web.isgd("http://steamdb.info/calculator/?"+ urldata)) - except Exception as e: - print e - return u"\x02Unable to retrieve info for %s!\x02 Check that it's a valid Steam profile username (steamcommunity.com/id/), check if your profile is private, or go here to search: %s" % (inp, web.isgd("http://steamdb.info/calculator/?"+ urldata)) + if not worth and not timeonsteam and not gamesplayed: + return "I couldn't read the information for that user. %s" % web.isgd("http://steamdb.info/calculator/?" + urldata) + return u"%s (%s): %s%s%s%s" % (name, status, worth if worth else "", timeonsteam if timeonsteam else "", gamesplayed if gamesplayed else "", web.isgd("http://steamdb.info/calculator/?" + urldata))