diff --git a/putsch.py b/putsch.py index ffb817605002d4261f33ab49c71ad8f74ad87d35..c6bfe090c29594179d95813254fd2eb3891dc5af 100644 --- a/putsch.py +++ b/putsch.py @@ -9,6 +9,9 @@ import time def couper(pseudo) : return pseudo.split("!")[0] +def list_to_str(li) : + return ", ".join(li) + #renvoie un paquet avec le bon nombre de cartes & les bonnes classes def Paquet(nbrJoueurs) : if nbrJoueurs == 4 : @@ -37,8 +40,10 @@ class Boooob(ircbot.SingleServerIRCBot): self.ingame = 0 self.phase = 0 self.repet = 0 - + + self.phase2trig = 1 self.phase2 = 0 + self.voyanteok = 0 self.loupsok = 0 self.sorciereok = 0 @@ -56,16 +61,27 @@ class Boooob(ircbot.SingleServerIRCBot): self.sorciere = "" self.cankill = 1 #sorciere uniquement self.cansave = 1 #sorciere uniquement - + + self.chasseur = "" + self.chasseurok = 1 + self.chasseurtrig = 1 self.pf = "" + self.voyante = "" self.cansee = 1 #voyante self.cupidon = "" + self.cupidontrig = 1 + self.maire = "" + self.voleur = "" + self.voleurtrig = 1 + self.ancien = "" - self.victime = "" + self.canlive = 1 + + self.victime = [] def on_welcome(self, serv, ev): @@ -77,7 +93,7 @@ class Boooob(ircbot.SingleServerIRCBot): serv.privmsg("NickServ","identify MotDePasse") def on_join(self, serv, ev):#Quand qq entre dans le chann, le bot inclus canal = ev.target() - if canal == "#lg_putsch_loups" : + if canal == "#lg_putsch_loups" and self.phase == 3: serv.privmsg(canal, "Vous pouvez maintenant voter en tapant '!vote pseudo'. Tout vote est definitif, vous avez le choix entre :"+", ".join(self.joueurs)) @@ -86,6 +102,7 @@ class Boooob(ircbot.SingleServerIRCBot): def on_privmsg(self, serv, ev):#msg privé personne = ev.source() + personne = couper(personne) message = ev.arguments()[0] if self.phase == 2 : #Voleur @@ -93,7 +110,12 @@ class Boooob(ircbot.SingleServerIRCBot): for f in self.cartes : if f in message : serv.privmsg(personne, "Tu as choisi : "+f) - setattr(self,f,personne) + if f == "loups" : + self.loups.append(personne) + serv.privmsg(personne, "Pense a rejoindre le chann #lg_putsch_loups !") + serv.invite(personne, "#lg_putsch_loups") + else : + setattr(self,f,personne) self.phase2 = self.phase2 + 1 break @@ -105,36 +127,53 @@ class Boooob(ircbot.SingleServerIRCBot): for f in self.joueurs : if f in message and f not in amants : amants.append(f) - serv.privmsg(personne, "Tu as choisi ces deux couillons :"+", ".join(amants)) - self.lovers = amants - serv.privmsg(self.lovers[0], "Felicitations, tu es en couple avec "+self.lovers[1]+".") - serv.privmsg(self.lovers[1], "Felicitations, tu es en couple avec "+self.lovers[0]+".") - self.phase2 = self.phase2 + 1 + if len(amants) == 2 : + serv.privmsg(personne, "Tu as choisi ces deux couillons :"+", ".join(amants)) + self.lovers = amants + serv.privmsg(self.lovers[0], "Felicitations, tu es en couple avec "+self.lovers[1]+".") + serv.privmsg(self.lovers[1], "Felicitations, tu es en couple avec "+self.lovers[0]+".") + self.phase2 = self.phase2 + 1 if self.phase == 3 : #voyante if self.voyante == personne and self.cansee == 1 : - for f in joueurs : - if f in message : + for f in self.joueurs : + if f in message and "!who" in message: for g in dir(self) : - if f == getattr(self, g) : + if f in str(getattr(self, g)) and g != "joueurs" : serv.privmsg(personne, "La classe de "+f+" est :"+g) break self.cansee = 0 #sorciere - if self.sorciere == personne and (self.cankill == 1 or self.cansave == 1) : - if "ress" in message and self.cansave == 1 : - self.cansave = 0 - self.victime = "" + if self.sorciere == personne and (self.cankill == 1 or self.cansave == 1) and self.sorciereok != 1 : + if "!nope" in message : self.sorciereok = 1 + serv.privmsg("#lg_putsch", "La sorciere a fait ce qu'elle avait a faire..") else : - if "tuer" in message and self.cankill == 1: - if message.split(" ")[1] in self.joueurs : - self.victime = self.victime +" et "+ message.split(" ")[1] - self.joueurs.remove(message.split(" ")[1]) - self.cankill = 0 - self.sorciereok = 1 + + if "!ress" in message and self.cansave == 1 : + self.cansave = 0 + self.victime = "" + self.sorciereok = 1 + serv.privmsg("#lg_putsch", "La sorciere a fait ce qu'elle avait a faire..") + else : + if "!tuer" in message and self.cankill == 1: + if message.split(" ")[1] in self.joueurs : + self.victime.append( message.split(" ")[1]) + self.joueurs.remove(message.split(" ")[1]) + self.cankill = 0 + self.sorciereok = 1 + serv.privmsg("#lg_putsch", "La sorciere a fait ce qu'elle avait a faire..") + #chasseur + if self.chasseur == personne and self.chasseur in self.victime : + for f in self.joueurs : + if f in message and "!tuer" in message : + self.victime.append(f) + serv.privmsg(self.chasseur, "Tu as tué "+f+" par vengeance ! HAHA !") + self.chasseurok = 1 + serv.privmsg("#lg_putsch", "J'en connais un qui va etre deçu...") + break @@ -158,14 +197,15 @@ class Boooob(ircbot.SingleServerIRCBot): personne = ev.source() personne = couper(personne) message = ev.arguments()[0] - message = message.lower() #Passe le message en minuscule if "!debug" in message : - serv.privmsg("#lg_cheat", "etat des differentes variables :") - vars = ["avote","vote","phase","ingame","joueurs","topic","attente","cartes","loups","villageois","phase2","lovers","sorciere","pf","voyante","cupidon","maire","voleur","ancien","victime"] - for f in vars: - serv.privmsg("#lg_cheat", f+" = "+str(getattr(self, f))) - time.sleep(1) + if len(message.split(" ")) == 1 : + for f in dir(self): + print(f+" = "+str(getattr(self, f))) + else : + for f in message.split(" ")[1:] : + print(f+" = "+str(getattr(self, f))) + if self.ingame == 0 : #Ensemble des commandes avant le debut de la partie if self.topic == 0 : #serv.topic(canal,"Tapez !newgame pour demarrer une partie ! ") @@ -187,7 +227,7 @@ class Boooob(ircbot.SingleServerIRCBot): self.joueurs.remove(personne) if "!list" in message : - serv.privmsg(canal, "La liste des joueurs est : "+" ,".join(self.joueurs)) + serv.privmsg(canal, "La liste des joueurs est : "+", ".join(self.joueurs)) if len(self.joueurs) < 4 : self.attente = 0 if len(self.joueurs) >= 4 and self.attente == 0: @@ -223,33 +263,54 @@ class Boooob(ircbot.SingleServerIRCBot): serv.privmsg(canal, "Bon, bah c'est parti...") serv.privmsg(canal, "La partie commence....") self.phase = 2 - if self.phase == 2 : - serv.privmsg("#lg_putsch", "J'appelle le voleur...S'il existe !") - if self.voleur != "" : + if self.phase == 2 : + if self.phase2trig == 1 : + serv.privmsg("#lg_putsch", "J'appelle le voleur...S'il existe !") + serv.privmsg("#lg_putsch", "J'appelle le cupidon... S'il existe !") + self.phase2trig = 0 + + if self.voleur != "" and self.phase2 == 0 and self.voleurtrig == 1 : serv.privmsg(self.voleur, "Tu es le voleur, tes choix sont : "+", ".join(self.cartes)) + self.voleurtrig = 0 else : - self.phase2 = self.phase2 +1 - time.sleep(1) - serv.privmsg("#lg_putsch", "J'appelle le cupidon... S'il existe !") - if self.cupidon != "" : - serv.privmsg(self.cupidon, "Tu es le cupidon, designe deux joueurs parmi ceux là : "+", ".join(self.joueurs)) + if self.phase2 == 0 and self.voleurtrig == 1: + self.phase2 = self.phase2 +1 + + if self.cupidon != "" and self.phase2 == 1 and self.cupidontrig == 1 : + serv.privmsg(self.cupidon, "Tu es le cupidon, designe deux joueurs de cette maniere : 'pseudo1' + 'pseudo2'. La liste: "+", ".join(self.joueurs)) + self.cupidontrig = 0 else : - self.phase2 = self.phase2 + 1 + if self.phase2 == 1 and self.cupidontrig == 1 : + self.phase2 = self.phase2 + 1 if self.phase2 == 2 : self.phase = 3 - serv.mode("#lg_putsch_loups","-m") - serv.privmsg("#lg_putsch", "Okay, la partie commence vraiment cette fois") - time.sleep(10) - self.temps = time.time() + serv.privmsg("#lg_putsch", "La partie commence dans 20s...") + time.sleep(20) + serv.privmsg("#lg_putsch", "Debut de la partie") + serv.mode("#lg_putsch_loups", "-m") + serv.privmsg("#lg_putsch_loups", "Vous pouvez voter avec '!vote pseudo' . la liste des pseudos : "+" ,".join(self.joueurs)) if self.phase == 3 : - if time.time() - self.temps > 40 : + if len(self.votes) == len(self.loups) : + if self.sorciere == "" : + self.sorciereok = 1 + serv.mode("#lg_putsch_loups", "+m") serv.privmsg("#lg_putsch","la sorciere se leve...") - a = 0 + bid = [] for f in self.joueurs : - if self.votes.count(f) > a : - a = self.vote.count(f) - self.victime = f - serv.privmsg(self.sorciere, self.victime+" est mort cette nuit. Souhaitez vous 1 : ressusciter "+self.victime+" ou 2 : tuer quelqu'un d'autre (un seul choix). Tapez : 'tuer groot' pour tuer groot, ou juste 'ress' pour ressusciter la victime") + bid.append(str(self.votes.count(f))) + a = max(bid) + c = 0 + for f in bid : + if f == a : + c=c+1 + if c == 1 : + self.victime.append(self.joueurs[bid.index(a)]) + + + + if self.sorciere != "" : + serv.privmsg(self.sorciere, list_to_str(self.victime)+" est mort cette nuit. Tapez : '!tuer pseudo' pour tuer quelqu'un ou '!ress' pour ressusciter la victime. Vous pouvez taper !nope pour ne rien faire. (un seul choix possible)") + self.votes = [] @@ -262,7 +323,7 @@ class Boooob(ircbot.SingleServerIRCBot): if self.voyanteok == 0 : serv.privmsg("#lg_putsch", "J'appelle la voyante") - serv.privmsg(self.voyante, "De quel joueur souhaites tu voir la carte ? Tu as le choix entre : "+", ".join(self.joueurs)) + serv.privmsg(self.voyante, "Tape !who pseudo pour connaitre le role de pseudo. La liste : "+", ".join(self.joueurs)) self.voyanteok = 1 @@ -271,24 +332,64 @@ class Boooob(ircbot.SingleServerIRCBot): serv.privmsg("#lg_putsch", "Les loups se reveillent...") self.loupsok = 1 if canal == "#lg_putsch_loups" : - if "!vote" in message and personne not in self.avote : + if "!vote" in message and personne not in self.avote and personne in self.loups : + print ("message de vote :"+message) if message.split(" ")[1] in self.joueurs : - self.votes.append(message.split(" ")[1]) - self.avote.append(personne) - serv.privmsg(canal, personne+" a voté pour "message.split(" ")[1]+"!") - - - if self.sorciereok == 1 : - self.voyanteok = 0 - self.loupsok = 0 - self.sorciereok = 0 - self.phase = 4 - serv.privmsg("#lg_putsch", "La ou les victimes de cette nuit : "+self.victime) - self.victime = "" - self.avote = [] - self.votes = [] - self.cansee= 1 - serv.privmsg("#lg_putsch", "Regaaaarde, le joour se leeeve") + (self.votes).append(message.split(" ")[1]) + (self.avote).append(personne) + serv.privmsg(canal, personne+" a voté pour "+message.split(" ")[1]+"!") + + + if self.sorciereok == 1 and self.voyanteok == 1 : + if self.ancien in self.victime and self.canlive == 1: + self.joueurs.append(self.victime) + self.victime.remove(self.ancien) + self.canlive = 0 + serv.privmsg(self.ancien, "Ouf, ton pouvoir vient de te sauver !") + if self.chasseur in self.victime : + if self.chasseurtrig == 1: + + serv.privmsg(self.chasseur, "Tu as été tué cette nuit ! Tape !tuer pseudo pour te venger ! la liste des cibles est : "+" ,".join(self.joueurs)) + self.chasseurok = 0 + self.chasseurtrig = 0 + else : + self.chasseurok = 1 + + if self.chasseur == "" : + self.chasseurok = 1 + if self.chasseurok == 1 : + + for f in self.victime : + for g in dir(self) : + if f in str(getattr(self, g)) and g != "joueurs" and g != "victime" and g != "avote" : + serv.privmsg("#lg_putsch" , f+" est decedé cette nuit.. son role : "+g+".") + + self.chasseurok = 0 + self.voyanteok = 0 + self.loupsok = 0 + self.sorciereok = 0 + self.victime = "" + self.avote = [] + self.votes = [] + self.cansee= 1 + serv.privmsg("#lg_putsch", "Regaaaarde, le joour se leeeve") + self.phase = 4 + + + if self.phase == 4 : + serv.privmsg("lg_putsch", "Ce crime ne peut rester impuni !") + time.sleep(2) + serv.privmsg("lg_putsch", "Le village se reunit et decide de lyncher quelqu'un...") + + + + + + + + + +