Re: Quizz neutron plugin

louizlouiz
Added on 2009-02-15 02:49:40
Quizz neutron plugin - Show - Edit - Download
Re: Quizz neutron plugin - Show - Edit - Download - Differences
Re: Re: Quizz neutron plugin - Show - Edit - Download - Differences
#$ neutron_plugin 01
# -*- coding:Utf-8 -*-
#
# Quizz plugin
#
# copyright © 2009 Le Coz Florent <louizatakk@fedoraproject.org>
#
# Licensed under WTFPL Version 2 as published by Sam Hocevar 
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
# TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
#
#  0. You just DO WHAT THE FUCK YOU WANT TO.
 
# To make this plugin work properly, you need to change neutron.py
# change the main loop time from 10 to 0.1 second
# add quizz.timer() in this loop
# or ask me, if you need... It's an ugly workaround.
 
from random import randrange
import MySQLdb as mysql
 
# conf
DATABASE = 'database.txt'
ROOM = 'quizz@chat.jabberfr.org'
Q_TIME = 500 # question time
P_TIME = 180 # time between each question
 
def get_top():
    ms = ''
    conn = mysql.connect('localhost', 'root', 'CHANGEME', 'quizz')
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM users ORDER BY score DESC LIMIT 10')
    row = cursor.fetchone()
    i = 0
    while row:
        ms += str(i)+' - '+row[0]+' - '+str(row[1])+'\n'
        row = cursor.fetchone()
        i += 1
    cursor.close()
    conn.close()
    msg(ROOM, ms)
 
def add_score(name):
    conn = mysql.connect('localhost', 'root', 'CHANGEME', 'CHANGEME')
    cursor = conn.cursor()
    # is name already in base ?
    if cursor.execute('SELECT score FROM users WHERE `name` = "'+name+'"') == 0:
        cursor.execute('INSERT INTO users SET name = "'+name+'", SCORE = 1')
    else:
        cursor.execute('UPDATE users SET score = score + 1 WHERE `name` = "'+name+'"')
    cursor.close()
    conn.close()
 
def get_score(name):
    conn = mysql.connect('localhost', 'root', 'CHANGEME', 'CHANGEME')
    cursor = conn.cursor()
    # is name already in base ?
    if cursor.execute('SELECT score FROM users WHERE `name` = "'+name+'"') == 0:
        cursor.close()
        conn.close()
        return name+' n\'a aucun point'
    else:
        cursor.execute('SELECT score FROM users WHERE `name` = "'+name+'"')
    row = cursor.fetchone()
    cursor.close()
    conn.close()
    return 'Score de '+name+' : '+str(row[0])
 
class Quizz(object):
    '''quizz'''
    def __init__(self, file):
        self.answer = ''
        self.time = 0
        self.state = 'stop'
        fd = open(file, 'r')
        list = fd.readlines()
        self.db = {}
        for banana in list:
            elem = banana.split('\\')
            try:self.db[elem[0]] = elem[1]
            except:pass
        self.size = len(self.db)
 
    def say_question(self, number=False):
        if not number:
            number = randrange(0, self.size)
        self.question = self.db.keys()[number]
        self.answer = self.db[self.question]
        msg(ROOM, self.question)
        clue = ''
        for letter in self.answer.strip():
            if letter == ' ':
                clue+= '  '
            else:
                clue+= '_ '
        msg(ROOM, 'indice : '+clue)
        print 'triche :', self.answer
 
    def handler_message(self, type, source, body):
        if not body:
            return
        if type == 'public' and self.state == 'question':
            if body.lower().strip() == self.answer.lower().strip():
                message = '*'+ source[2] + '* est un winner ! La bonne reponse etait : *'+ (self.answer).strip()+'*.'
                msg(ROOM, message)
                add_score(source[2])
                self.time = 0
                self.state = 'pause'
            else:
                message = 'Fail'
        return True
 
    def timer(self):
        if self.state == 'stop':
            return
        self.time += 1
        if self.state == 'question':
            if self.time >= Q_TIME:
                ms = 'Temps ecoule. La reponse etait : '+self.answer
                msg(ROOM, ms)
                self.state = 'pause'
                self.time = 0
            elif self.time == 200:
                ms = 'Un indice : '
                clue = ''
                for letter in (self.answer).strip():
                    if letter == ' ':
                        clue+= '  '
                    elif randrange(0, 5) >= 2:
                        clue+=letter+' '
                    else:
                        clue+='_ '
                msg(ROOM, ms+clue)
        if self.state == 'pause':
            if self.time >= P_TIME:
                self.state = 'question'
                self.time = 0
                self.say_question()
        return
    def start(self, *args):
        if self.state == 'stop':
            msg(ROOM, 'Lancement du quizz. Pour l\'arreter, dites "!stop"')
            self.state = 'pause'
 
    def stop(self, type, source, body):
        msg(ROOM, 'creve, '+ source[2])
        return
        if self.state == 'question' or self.state == 'pause':
            self.state = 'stop'
            msg(ROOM, 'arrete du quizz. Relancez le avec "!quizz"')
 
    def score(self, type, source, body):
        msg(ROOM, get_score(source[2]))
 
 
quizz = Quizz(DATABASE)
register_message_handler(quizz.handler_message)
register_command_handler(quizz.start, '!quizz')
register_command_handler(quizz.stop, '!stop')
register_command_handler(quizz.score, '!score')
register_command_handler(quizz.top, '!top')