Merge pull request #79 from blha303/patch-2

Fix issue with incomplete Steam profiles, fix to pep8 standards
This commit is contained in:
Luke Rogers 2013-07-22 12:08:10 -07:00
commit 6fdcd83491

View file

@ -1,32 +1,27 @@
from util import hook, http, web, text from util import hook, http, web, text, timesince
from urllib import urlencode from urllib import urlencode
from datetime import datetime from datetime import datetime
import re import re
def shorten(inp):
try:
url = web.isgd(inp)
except (web.ShortenError, http.HTTPError):
url = inp
return url
def db_init(db): def db_init(db):
db.execute("create table if not exists steam(nick primary key, acc)") db.execute("create table if not exists steam(nick primary key, acc)")
db.commit() 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('sc', autohelp=False)
@hook.command(autohelp=False) @hook.command(autohelp=False)
"""steamcalc [username] [currency] - Gets value of steam account and total hours played. Uses steamcommunity.com/id/<nickname>. Uses IRC nickname if none provided. """ def steamcalc(inp, nick='', db=None):
"""steamcalc <username> [currency] - Gets value of steam account and
total hours played. Uses steamcommunity.com/id/<nickname>. Uses
IRC nickname if none provided. """
currencies = {'USD': 'us', 'euro1': "de", 'euro2': 'no', currencies = {'USD': 'us', 'euro1': "de", 'euro2': 'no',
'pound': 'uk', 'rubles': 'ru', 'real': 'br', 'pound': 'uk', 'rubles': 'ru', 'real': 'br',
'yen': 'jp', 'dollars': 'us', 'german': 'de', 'yen': 'jp', 'dollars': 'us', 'german': 'de',
@ -47,15 +42,24 @@ def timesince(dt, default="just now"):
if len(inp.split(" ")) > 1: if len(inp.split(" ")) > 1:
if inp.split(" ")[1] in currencies: if inp.split(" ")[1] in currencies:
currency = currencies[inp.split(" ")[1]] currency = currencies[inp.split(" ")[1]]
dontsave = False
elif inp.split(" ")[1] == "dontsave":
dontsave = True
else: else:
return "Invalid currency!" return "Invalid currency!"
inp = inp.split(" ")[0] inp = inp.split(" ")[0]
dontsave = False if len(inp.split(" ")) > 2:
if inp.split(" ")[2] == "dontsave":
dontsave = True
urldata = urlencode({"player": inp, "currency": currency if currency else "us"}) urldata = urlencode({"player": inp, "currency": currency if currency else "us"})
soup = http.get_soup("http://steamdb.info/calculator/?" + urldata) soup = http.get_soup("http://steamdb.info/calculator/?" + urldata)
try: try:
name = soup.findAll('h1', {'class': 'header-title'})[1].text name = soup.findAll('h1', {'class': 'header-title'})[1].text
status = soup.findAll('td')[7].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, shorten("http://steamcommunity.com/id/%s" % inp), shorten("http://steamdb.info/calculator/?" + urldata))
if status == "Online": if status == "Online":
status = "\x033\x02Online\x02\x0f" status = "\x033\x02Online\x02\x0f"
elif status == "Offline": elif status == "Offline":
@ -66,19 +70,30 @@ def timesince(dt, default="just now"):
status = "\x035\x02Busy\x02\x0f" status = "\x035\x02Busy\x02\x0f"
elif "Looking to" in status: elif "Looking to" in status:
status = "\x036\x02%s\x02\x0f" % status status = "\x036\x02%s\x02\x0f" % status
try:
twdata = soup.find('h1', {'class': 'header-title pull-right'}).find('a')['data-text'].split(", ") twdata = soup.find('h1', {'class': 'header-title pull-right'}).find('a')['data-text'].split(", ")
money = twdata[0].split("My #Steam account is worth ")[1] money = twdata[0].split("My #Steam account is worth ")[1]
time = twdata[1].split("and I spent ")[1].split(" playing games!")[0] 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:
worth = ""
try:
timeonsteam = soup.findAll('i')[1].text[1:-1].split(" ") 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") timestamp = datetime.strptime(timeonsteam[0]+" "+timeonsteam[1]+" "+timeonsteam[2] + " - " + timeonsteam[4]+" "+timeonsteam[5], "%B %d, %Y - %H:%M:%S UTC")
timeonsteam = timesince(timestamp) timeonsteam = timesince.timesince(timestamp)
timeonsteam = "Their Steam account was created %s ago! " % timeonsteam
except:
timeonsteam = ""
try:
totalgames = soup.find('b').text totalgames = soup.find('b').text
notplayed = soup.findAll('b')[1].text notplayed = soup.findAll('b')[1].text
nppercent = soup.findAll('i')[3].text[1:-1] 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:
gamesplayed = ""
if not dontsave: if not dontsave:
db.execute("insert or replace into steam(nick, acc) values (?,?)", (nick.lower(), inp)) db.execute("insert or replace into steam(nick, acc) values (?,?)", (nick.lower(), inp))
db.commit() 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)) if not worth and not timeonsteam and not gamesplayed:
except Exception as e: return "I couldn't read the information for that user. %s" % shorten("http://steamdb.info/calculator/?" + urldata)
print e return u"%s (%s): %s%s%s%s" % (name, status, worth, timeonsteam, gamesplayed, shorten("http://steamdb.info/calculator/?" + urldata))
return u"\x02Unable to retrieve info for %s!\x02 Check that it's a valid Steam profile username (steamcommunity.com/id/<USERNAME>), check if your profile is private, or go here to search: %s" % (inp, web.isgd("http://steamdb.info/calculator/?"+ urldata))