changeset 4:fe428af1fcaa draft

Implement high score database
author Alexander Berntsen <alexander@plaimi.net>
date Mon, 15 Apr 2013 14:22:02 +0200
parents cc0d934e20d9
children f813d6cfffba
files config.py q
diffstat 2 files changed, 35 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/config.py
+++ b/config.py
@@ -5,3 +5,4 @@
 username = nickname
 password = False
 masters = [nickname, 'my_nickname']
+hiscoresdb = 'hiscores.sql'
--- a/q
+++ b/q
@@ -19,6 +19,7 @@
 """Simple quizbot that asks questions and awards points."""
 
 import config
+import sqlite3
 
 from getpass import getpass
 from operator import itemgetter
@@ -53,6 +54,11 @@
         self.winner = ''
         self.question = ''
         self.recently_asked = []
+        self.db = sqlite3.connect(config.hiscoresdb)
+        self.dbcur = self.db.cursor()
+        self.dbcur.execute('CREATE TABLE IF NOT EXISTS hiscore (quizzer TEXT'
+                           ' unique, wins INTEGER)')
+        self.db.commit()
         irc.IRCClient.connectionMade(self)
 
     def signedOn(self):
@@ -204,6 +210,26 @@
 
     def win(self, winner):
         """Is called when target score is reached."""
+        numAnswerers = 0
+        quizzersByPoints = sorted(self.quizzers.iteritems(), key=itemgetter(1),
+                                  reverse=True)
+        for numAnswerers, (quizzer, points) in enumerate(quizzersByPoints):
+            if points < 1:
+                break
+        if numAnswerers > 1:
+            winner = quizzersByPoints[0][0]
+            self.dbcur.execute('SELECT * FROM hiscore WHERE quizzer=?',
+                               (winner,))
+            wins = 1
+            row = self.dbcur.fetchone()
+            if row is not None:
+                wins = row[1] + 1
+                sql = 'UPDATE hiscore SET wins = ? WHERE quizzer = ?'
+            else:
+                sql = 'INSERT INTO hiscore (wins,quizzer) VALUES (?,?)'
+            self.dbcur.execute(sql, (wins, winner))
+            self.db.commit()
+
         self.winner = winner
         self.msg(self.factory.channel,
                  'congratulations to %s, you\'re winner!!!' % self.winner)
@@ -257,10 +283,16 @@
                 prev_points = points
 
     def set_topic(self):
+        self.dbcur.execute('SELECT * FROM hiscore ORDER by wins DESC LIMIT 1')
+        alltime = self.dbcur.fetchone()
+        if alltime is None:
+            alltime = ["no one", 0]
         self.topic(
             self.factory.channel,
-            'happy quizzing. :-> target score: %d. previous winner: %s' %
-            (self.target_score, self.winner))
+            'happy quizzing. :-> target score: %d. previous winner: %s. '
+            'all-time winner: %s (%d).' %
+            (self.target_score, self.winner, alltime[0].encode('UTF-8'),
+             alltime[1]))
 
     def reset(self):
         """Set all quizzers' points to 0 and change topic."""