Oups, add a lot of missing files
This commit is contained in:
parent
d234d83df8
commit
061e73722f
21 changed files with 937 additions and 2 deletions
26
modules/qd/DelayedTuple.py
Normal file
26
modules/qd/DelayedTuple.py
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
# coding=utf-8
|
||||
|
||||
import re
|
||||
import threading
|
||||
|
||||
class DelayedTuple:
|
||||
def __init__(self, regexp, great):
|
||||
self.delayEvnt = threading.Event()
|
||||
self.msg = None
|
||||
self.regexp = regexp
|
||||
self.great = great
|
||||
|
||||
def triche(self, res):
|
||||
if res is not None:
|
||||
return re.match(".*" + self.regexp + ".*", res.lower() + " ") is None
|
||||
else:
|
||||
return True
|
||||
|
||||
def perfect(self, res):
|
||||
if res is not None:
|
||||
return re.match(".*" + self.great + ".*", res.lower() + " ") is not None
|
||||
else:
|
||||
return False
|
||||
|
||||
def wait(self, timeout):
|
||||
self.delayEvnt.wait(timeout)
|
||||
59
modules/qd/GameUpdater.py
Normal file
59
modules/qd/GameUpdater.py
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
# coding=utf-8
|
||||
|
||||
from datetime import datetime
|
||||
import random
|
||||
import threading
|
||||
from .DelayedTuple import DelayedTuple
|
||||
|
||||
DELAYED = dict()
|
||||
|
||||
LASTQUESTION = 99999
|
||||
|
||||
class GameUpdater(threading.Thread):
|
||||
def __init__(self, msg, bfrseen):
|
||||
self.msg = msg
|
||||
self.bfrseen = bfrseen
|
||||
threading.Thread.__init__(self)
|
||||
|
||||
def run(self):
|
||||
global DELAYED, LASTQUESTION
|
||||
|
||||
if self.bfrseen is not None:
|
||||
seen = datetime.now() - self.bfrseen
|
||||
rnd = random.randint(0, int(seen.seconds/90))
|
||||
else:
|
||||
rnd = 1
|
||||
|
||||
if rnd != 0:
|
||||
QUESTIONS = CONF.getNodes("question")
|
||||
|
||||
if self.msg.channel == "#nemutest":
|
||||
quest = 9
|
||||
else:
|
||||
if LASTQUESTION >= len(QUESTIONS):
|
||||
random.shuffle(QUESTIONS)
|
||||
LASTQUESTION = 0
|
||||
quest = LASTQUESTION
|
||||
LASTQUESTION += 1
|
||||
|
||||
question = QUESTIONS[quest]["question"]
|
||||
regexp = QUESTIONS[quest]["regexp"]
|
||||
great = QUESTIONS[quest]["great"]
|
||||
self.msg.send_chn("%s: %s" % (self.msg.sender, question))
|
||||
|
||||
DELAYED[self.msg.sender] = DelayedTuple(regexp, great)
|
||||
|
||||
DELAYED[self.msg.sender].wait(20)
|
||||
|
||||
if DELAYED[self.msg.sender].triche(DELAYED[self.msg.sender].msg):
|
||||
getUser(self.msg.sender).playTriche()
|
||||
self.msg.send_chn("%s: Tricheur !" % self.msg.sender)
|
||||
elif DELAYED[self.msg.sender].perfect(DELAYED[self.msg.sender].msg):
|
||||
if random.randint(0, 10) == 1:
|
||||
getUser(self.msg.sender).bonusQuestion()
|
||||
self.msg.send_chn("%s: Correct !" % self.msg.sender)
|
||||
else:
|
||||
self.msg.send_chn("%s: J'accepte" % self.msg.sender)
|
||||
del DELAYED[self.msg.sender]
|
||||
SCORES.save(self.msg.sender)
|
||||
save()
|
||||
20
modules/qd/QDWrapper.py
Normal file
20
modules/qd/QDWrapper.py
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
# coding=utf-8
|
||||
|
||||
from wrapper import Wrapper
|
||||
from .Score import Score
|
||||
|
||||
class QDWrapper(Wrapper):
|
||||
def __init__(self, datas):
|
||||
Wrapper.__init__(self)
|
||||
self.DATAS = datas
|
||||
self.stateName = "player"
|
||||
self.attName = "name"
|
||||
|
||||
def __getitem__(self, i):
|
||||
if i in self.cache:
|
||||
return self.cache[i]
|
||||
else:
|
||||
sc = Score()
|
||||
sc.parse(Wrapper.__getitem__(self, i))
|
||||
self.cache[i] = sc
|
||||
return sc
|
||||
126
modules/qd/Score.py
Normal file
126
modules/qd/Score.py
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
# coding=utf-8
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
class Score:
|
||||
"""Manage the user's scores"""
|
||||
def __init__(self):
|
||||
#FourtyTwo
|
||||
self.ftt = 0
|
||||
#TwentyThree
|
||||
self.twt = 0
|
||||
self.pi = 0
|
||||
self.notfound = 0
|
||||
self.tententen = 0
|
||||
self.leet = 0
|
||||
self.great = 0
|
||||
self.bad = 0
|
||||
self.triche = 0
|
||||
self.last = None
|
||||
self.changed = False
|
||||
|
||||
def parse(self, item):
|
||||
self.ftt = item.getInt("fourtytwo")
|
||||
self.twt = item.getInt("twentythree")
|
||||
self.pi = item.getInt("pi")
|
||||
self.notfound = item.getInt("notfound")
|
||||
self.tententen = item.getInt("tententen")
|
||||
self.leet = item.getInt("leet")
|
||||
self.great = item.getInt("great")
|
||||
self.bad = item.getInt("bad")
|
||||
self.triche = item.getInt("triche")
|
||||
|
||||
def save(self, state):
|
||||
state.setAttribute("fourtytwo", self.ftt)
|
||||
state.setAttribute("twentythree", self.twt)
|
||||
state.setAttribute("pi", self.pi)
|
||||
state.setAttribute("notfound", self.notfound)
|
||||
state.setAttribute("tententen", self.tententen)
|
||||
state.setAttribute("leet", self.leet)
|
||||
state.setAttribute("great", self.great)
|
||||
state.setAttribute("bad", self.bad)
|
||||
state.setAttribute("triche", self.triche)
|
||||
|
||||
def merge(self, other):
|
||||
self.ftt += other.ftt
|
||||
self.twt += other.twt
|
||||
self.pi += other.pi
|
||||
self.notfound += other.notfound
|
||||
self.tententen += other.tententen
|
||||
self.leet += other.leet
|
||||
self.great += other.great
|
||||
self.bad += other.bad
|
||||
self.triche += other.triche
|
||||
|
||||
def newWinner(self):
|
||||
self.ftt = 0
|
||||
self.twt = 0
|
||||
self.pi = 1
|
||||
self.notfound = 1
|
||||
self.tententen = 0
|
||||
self.leet = 1
|
||||
self.great = -1
|
||||
self.bad = -4
|
||||
self.triche = 0
|
||||
|
||||
def isWinner(self):
|
||||
return self.great >= 42
|
||||
|
||||
def playFtt(self):
|
||||
if self.canPlay():
|
||||
self.ftt += 1
|
||||
def playTwt(self):
|
||||
if self.canPlay():
|
||||
self.twt += 1
|
||||
def playSuite(self):
|
||||
self.canPlay()
|
||||
self.twt += 1
|
||||
self.great += 1
|
||||
def playPi(self):
|
||||
if self.canPlay():
|
||||
self.pi += 1
|
||||
def playNotfound(self):
|
||||
if self.canPlay():
|
||||
self.notfound += 1
|
||||
def playTen(self):
|
||||
if self.canPlay():
|
||||
self.tententen += 1
|
||||
def playLeet(self):
|
||||
if self.canPlay():
|
||||
self.leet += 1
|
||||
def playGreat(self):
|
||||
if self.canPlay():
|
||||
self.great += 1
|
||||
def playBad(self):
|
||||
if self.canPlay():
|
||||
self.bad += 1
|
||||
self.great += 1
|
||||
def playTriche(self):
|
||||
self.triche += 1
|
||||
def oupsTriche(self):
|
||||
self.triche -= 1
|
||||
def bonusQuestion(self):
|
||||
return
|
||||
|
||||
def toTuple(self):
|
||||
return (self.ftt, self.twt, self.pi, self.notfound, self.tententen, self.leet, self.great, self.bad, self.triche)
|
||||
|
||||
def canPlay(self):
|
||||
now = datetime.now()
|
||||
ret = self.last == None or self.last.minute != now.minute or self.last.hour != now.hour or self.last.day != now.day
|
||||
self.changed = self.changed or ret
|
||||
return ret
|
||||
|
||||
def hasChanged(self):
|
||||
if self.changed:
|
||||
self.changed = False
|
||||
self.last = datetime.now()
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def score(self):
|
||||
return (self.ftt * 2 + self.great * 5 + self.leet * 13.37 + (self.pi + 1) * 3.1415 * (self.notfound + 1) + self.tententen * 10 + self.twt - (self.bad + 1) * 10 * (self.triche * 5 + 1) + 7)
|
||||
|
||||
def details(self):
|
||||
return "42: %d, 23: %d, leet: %d, pi: %d, 404: %d, 10: %d, great: %d, bad: %d, triche: %d = %d."%(self.ftt, self.twt, self.leet, self.pi, self.notfound, self.tententen, self.great, self.bad, self.triche, self.score())
|
||||
|
|
@ -6,6 +6,7 @@ from datetime import datetime
|
|||
nemubotversion = 3.0
|
||||
|
||||
from . import GameUpdater
|
||||
from .QDWrapper import QDWrapper
|
||||
|
||||
channels = "#nemutest #42sh #ykar #epitagueule"
|
||||
LASTSEEN = dict ()
|
||||
|
|
@ -210,7 +211,7 @@ def parselisten (msg):
|
|||
win(msg)
|
||||
return True
|
||||
elif getUser(msg.sender).hasChanged():
|
||||
gu = GameUpdater(msg, bfrseen)
|
||||
gu = GameUpdater.GameUpdater(msg, bfrseen)
|
||||
gu.start()
|
||||
return True
|
||||
return False
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue