diff options
Diffstat (limited to 'osrc/watbot_db.py')
-rw-r--r-- | osrc/watbot_db.py | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/osrc/watbot_db.py b/osrc/watbot_db.py new file mode 100644 index 0000000..6759c3b --- /dev/null +++ b/osrc/watbot_db.py @@ -0,0 +1,143 @@ +#!/usr/bin/python + +import sqlite3 +import time + + +class WatbotDB: + """watbot database abstraction""" + + def __init__(self, config): + self.config = config + self.currency = config["currency"] + self.conn = sqlite3.connect(self.currency + ".db") + self.c = self.conn.cursor() + + self.c.execute("create table if not exists players (" + " nickname varchar(256)," + " watting integer," + " anarchy integer, " + " trickery integer, " + " coins integer, " + " health integer, " + " last_mine integer, " + " last_rest integer, " + " primary key(nickname)" + ")" + ) + + self.c.execute("create table if not exists ledger (" + " nickname varchar(256)," + " timestamp integer," + " balance integer," + " log text," + " foreign key(nickname) references coins(nickname)" + ")" + ) + + self.c.execute("create table if not exists items (" + " itemname varchar(256)," + " nickname varchar(256)," + " price integer," + " primary key(itemname)," + " foreign key(nickname) references players(nickname)" + ")" + ) + + self.c.execute("create table if not exists inventory (" + " nickname varchar(256)," + " itemname varchar(256)," + " count integer," + " foreign key(nickname) references players(nickname)," + " foreign key(itemname) references items(itemname)" + ")" + ) + + self.conn.commit() + + def get_account(self,nick): + self.c.execute("select watting, anarchy, trickery, coins, last_mine, health, last_rest from players where nickname=?", (nick.lower(),)) + data = self.c.fetchone() + + if data is None: + earlier = time.time() - ( 24 * 3600 + 1) + self.c.execute("insert into players(nickname, watting, anarchy, trickery, coins, last_mine, health, last_rest) values(?, 0, 0, 0, 0, ?, 100, ?)", (nick.lower(), earlier, earlier)) + self.c.execute("insert into ledger(nickname, timestamp, balance, log) values(?, ?, ?, ?)", (nick.lower(), earlier, 0, "created")) + self.conn.commit() + data = (0, 0, 0, 0, earlier, 100, earlier) + + return data + + def update_account(self, nick, watting, anarchy, trickery, coins, last_mine, health, last_rest, log): + now = time.time() + self.c.execute("update players set watting=?, anarchy=?, trickery=?, coins=?, last_mine=?, health=?, last_rest=? where nickname=?", (watting, anarchy, trickery, coins, last_mine, health, last_rest, nick.lower())) + self.c.execute("insert into ledger(nickname, timestamp, balance, log) values(?, ?, ?, ?)", (nick.lower(), now, coins, log)) + if not log is None: + print "log: " + log + self.conn.commit() + + def close(self): + self.conn.close() + + def topten(self): + out = "" + self.c.execute("select nickname, coins from players order by coins desc limit 10") + while True: + d = self.c.fetchone() + if d == None: + break + out += d[0] + "(" + str(d[1]) + ") " + + return out + + def items(self): + out = "" + self.c.execute("select itemname, nickname, price from items order by itemname") + while True: + d = self.c.fetchone() + if d == None: + break + out += d[0] + "(" + d[1] + ", " + str(d[2]) + ") " + + return out + + def invent_item(self, itemname, nickname, price): + try: + self.c.execute("insert into items(itemname, nickname, price) values(?, ?, ?)", (itemname.lower(), nickname.lower(), price)) + self.conn.commit() + return True + except: + return False + + def inventory(self, nickname): + out = "" + self.c.execute("select itemname, count from inventory where nickname = ? order by itemname", (nickname.lower(),)) + while True: + d = self.c.fetchone() + if d == None: + break + out += d[0] + "(" + str(d[1]) + ") " + + return out + + def get_item(self, itemname): + self.c.execute("select itemname, nickname, price from items where itemname = ?", (itemname.lower(),)) + return self.c.fetchone() + + def get_item_count(self, nickname, itemname): + self.c.execute("select count from inventory where nickname = ? and itemname = ?", (nickname.lower(), itemname.lower())) + d = self.c.fetchone() + if d == None: + return 0 + else: + return d[0] + + def set_item_count(self, nickname, itemname, count): + if count == 0: + self.c.execute("delete from inventory where nickname = ? and itemname = ?", (nickname.lower(), itemname.lower())) + else: + if self.get_item_count(nickname, itemname) != 0: + self.c.execute("update inventory set count=? where nickname = ? and itemname = ?", (count, nickname.lower(), itemname.lower())) + else: + self.c.execute("insert into inventory(nickname, itemname, count) values(?, ?, ?)", (nickname.lower(), itemname.lower(), count)) + self.conn.commit() |