Re: Quizz neutron plugin
| Added on 2009-02-15 02:49:40 |
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#$ 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')

