]> gitweb.pimeys.fr Git - bots/historien.git/blobdiff - historien.py
Des évènements foireux
[bots/historien.git] / historien.py
index 350668bdc18ba57ff0dd0773a0ac6bf7d87c9be1..d48cd067a3233c35a82f4131413369b854faf433 100755 (executable)
@@ -76,24 +76,37 @@ def log(serveur,channel,auteur=None,message=None):
     f.close()
 
 
+config_score_annee=1
+config_score_mois=3
+config_score_jour=4
+
+config_noscore=["[20-100]","[20-100]_"] # parce que 20-100 est nul en histoire
+
+class GoodCentury(Exception):
+    pass
+
 def reussi(message,answer,auteur):
-    print message, "#?#", answer
     if auteur in config_level3:
         return answer in message
     if auteur in config_level2:
         return answer in message
     else:
         try:
-            date=cast_as_date(message.lower())
-            print tuple(date)
+            date=cast_as_date(message.lower().strip())
         except ThisIsNotADate:
             return False
-        as_string="%02d/%02d/%d"%(date[2],date[1],date[0])
-        print as_string
-        if as_string==answer:
-            return True
-        else:
-            return False
+        realdate=map(lambda x:int(x), answer.split('/'))
+        realdate.reverse()
+        score=0
+        if date[0]==realdate[0]:
+            score=config_score_annee
+            if date[1]==realdate[1]:
+                score+=config_score_mois
+                if date[2]==realdate[2]:
+                    score+=config_score_jour
+        elif date[0]/100 == realdate[0]/100:
+            raise GoodCentury
+        return score
 
 def is_something(chain,matches,avant=u".*(?:^| )",apres=u"(?:$|\.| |,|;).*",case_sensitive=False,debug=False):
     if case_sensitive:
@@ -111,7 +124,7 @@ def is_tag(chain):
 class RefuseError(Exception):
     pass
 
-class Deconnaisseur(ircbot.SingleServerIRCBot):
+class Historien(ircbot.SingleServerIRCBot):
     def __init__(self,serveur,debug=False):
         temporary_pseudo=config_pseudo+str(random.randrange(10000,100000))
         ircbot.SingleServerIRCBot.__init__(self, [(serveur, 6667)],
@@ -163,7 +176,8 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
                 log(self.serveur,channel,u"$Date$".encode("utf8"),("%s : %s"%(date, evenement)).encode("utf8"))
                 serv.privmsg(channel,evenement.encode("utf8"))
                 token=time.time()
-                self.play_status[channel]=[1,date,evenement,token]
+                # le 0 est le flag "bon siècle" n' pas encore été dit
+                self.play_status[channel]=[1,date,evenement,0,token]
                 serv.execute_delayed(random.randrange(ttrig*3,ttrig*5),self.give_indice,(serv,channel,token))
             elif ok=="refuse":
                 raise RefuseError
@@ -549,10 +563,25 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
         if tryother:
             if self.play_status.get(canal,[-1])[0] in [1,2]:
                 answer=self.play_status[canal][1]
-                if reussi(message.decode("utf8"),answer,auteur):
-                    serv.privmsg(canal,(u"%s: bravo ! (C'était le %s)"%(auteur,answer)).encode("utf8"))
+                flag_century=self.play_status[canal][3]
+                try:
+                    score_obtenu=reussi(message.decode("utf8"),answer,auteur)
+                except GoodCentury:
+                    if not flag_century:
+                        serv.privmsg(canal,"%s: C'est le bon siècle, mais pas la bonne année, cherche encore ;)"%(auteur))
+                        self.play_status[canal][3]=1
+                    return
+                if score_obtenu:
+                    if self.play_status[canal][0]==1:
+                        bonusmsg=u" [+bonus_mois"*(score_obtenu>config_score_annee)+u"+bonus_jour"*(score_obtenu>config_score_annee+config_score_mois)+u"]"
+                    else:
+                        bonusmsg=""
+                        score_obtenu=1
+                    serv.privmsg(canal,(u"%s: bravo ! (C'était le %s)%s"%(auteur,answer,bonusmsg)).encode("utf8"))
                     log(self.serveur,canal,auteur+"$win",message)
-                    self.add_score(auteur,1)
+                    if auteur in config_noscore:
+                        score_obtenu=0
+                    self.add_score(auteur,score_obtenu)
                     token=time.time()
                     self.play_status[canal]=[0,token]
                     serv.execute_delayed(random.randrange(Ttrig*5,Ttrig*10),self.start_enigme,(serv,canal,token))
@@ -563,7 +592,7 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
         victime = ev.arguments()[0]
         raison = ev.arguments()[1]
         if victime==self.nick:
-            log(self.serveur,"%s kické par %s (raison : %s)" %(victime,auteur,raison))
+            log(self.serveur,"%s kické de %s par %s (raison : %s)" %(victime,channel,auteur,raison))
             time.sleep(5)
             serv.join(channel)
             # on ne dit rien au rejoin
@@ -618,7 +647,7 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
 if __name__=="__main__":
     import sys
     if len(sys.argv)==1:
-        print "Usage : deconnaisseur.py <serveur> [--debug]"
+        print "Usage : historien.py <serveur> [--debug]"
         exit(1)
     serveur=sys.argv[1]
     if "debug" in sys.argv or "--debug" in sys.argv:
@@ -632,5 +661,5 @@ if __name__=="__main__":
     except KeyError:
         print "Server Unknown : %s"%(serveur)
         exit(404)
-    deco=Deconnaisseur(serveur,debug)
-    deco.start()
+    historien=Historien(serveur,debug)
+    historien.start()