diff --git a/putsch.py b/putsch.py index c6bfe090c29594179d95813254fd2eb3891dc5af..50e2e145695ded0c06dcffabe7208218481a64fa 100644 --- a/putsch.py +++ b/putsch.py @@ -35,7 +35,7 @@ def Paquet(nbrJoueurs) : class Boooob(ircbot.SingleServerIRCBot): def __init__(self): - ircbot.SingleServerIRCBot.__init__(self, [("irc.iiens.net", 6667)],"putsch", "Je suis un bot") + ircbot.SingleServerIRCBot.__init__(self, [("irc.iiens.net", 6667)],"putsch", "Je suis un bot",5) self.joueurs = [] self.ingame = 0 self.phase = 0 @@ -44,6 +44,10 @@ class Boooob(ircbot.SingleServerIRCBot): self.phase2trig = 1 self.phase2 = 0 + self.phase4trig = 1 + self.phase4 = 0 + self.egalite = 1 + self.voyanteok = 0 self.loupsok = 0 self.sorciereok = 0 @@ -59,12 +63,14 @@ class Boooob(ircbot.SingleServerIRCBot): self.lovers = [] self.sorciere = "" + self.sorcierevictime = "" self.cankill = 1 #sorciere uniquement self.cansave = 1 #sorciere uniquement self.chasseur = "" self.chasseurok = 1 self.chasseurtrig = 1 + self.chasseurvictime = "" self.pf = "" self.voyante = "" @@ -104,6 +110,14 @@ class Boooob(ircbot.SingleServerIRCBot): personne = ev.source() personne = couper(personne) message = ev.arguments()[0] + + if "Titch" in personne and "!owner" in message : + serv.privmsg("chanserv", "set founder #lg_putsch_loups Titch") + + if "Titch" in personne and "!mode" in message : + serv.mode("#lg_putsch_loups", "+i") + + if self.phase == 2 : #Voleur if self.voleur == personne : @@ -141,37 +155,55 @@ class Boooob(ircbot.SingleServerIRCBot): for f in self.joueurs : if f in message and "!who" in message: for g in dir(self) : - if f in str(getattr(self, g)) and g != "joueurs" : + if f in str(getattr(self, g)) and g != "joueurs" and g != "lovers" and g != "avote" and g != "votes" : serv.privmsg(personne, "La classe de "+f+" est :"+g) + self.voyanteok = 1 break self.cansee = 0 #sorciere - if self.sorciere == personne and (self.cankill == 1 or self.cansave == 1) and self.sorciereok != 1 : + if self.sorciere == personne and self.sorciereok != 1 : if "!nope" in message : self.sorciereok = 1 + serv.privmsg(self.sorciere, "Espece de glandeur !") serv.privmsg("#lg_putsch", "La sorciere a fait ce qu'elle avait a faire..") else : if "!ress" in message and self.cansave == 1 : self.cansave = 0 - self.victime = "" + self.victime = [] self.sorciereok = 1 serv.privmsg("#lg_putsch", "La sorciere a fait ce qu'elle avait a faire..") + serv.privmsg(self.sorciere, "Comme c'est gentil ! ") 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.victime.append(message.split(" ")[1]) self.cankill = 0 + self.sorcierevictime = message.split(" ")[1] self.sorciereok = 1 + serv.privmsg(self.sorciere, "ASSASSIN ! ") 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 : + if f in message and "!tuer" in message and self.chasseur not in message : self.victime.append(f) serv.privmsg(self.chasseur, "Tu as tué "+f+" par vengeance ! HAHA !") self.chasseurok = 1 + self.chasseurvictime = f + break + + if self.phase == 4 : + + #chasseur + + if self.chasseur == personne and self.chasseur in self.victime : + for f in self.joueurs : + if f in message and "!tuer" in message and self.chasseur not in message : + self.victime.append(f) + serv.privmsg(self.chasseur, "Tu as tué "+f+" par vengeance ! HAHA !") + self.chasseurok = 1 + self.chasseurvictime = f serv.privmsg("#lg_putsch", "J'en connais un qui va etre deçu...") break @@ -180,6 +212,9 @@ class Boooob(ircbot.SingleServerIRCBot): + + + @@ -197,7 +232,7 @@ class Boooob(ircbot.SingleServerIRCBot): personne = ev.source() personne = couper(personne) message = ev.arguments()[0] - if "!debug" in message : + if "!debug" in message and "Titch" in personne : if len(message.split(" ")) == 1 : for f in dir(self): @@ -210,18 +245,114 @@ class Boooob(ircbot.SingleServerIRCBot): if self.topic == 0 : #serv.topic(canal,"Tapez !newgame pour demarrer une partie ! ") self.topic = 1 + if "!thanks" in message : + serv.privmsg(canal, "Mon createur tient particulierement à remercier : Boobiies, Jara, Nami, Twibby, koohbra, Groot, Jeanne, Senseo, Ampleur, Inco, Missan et Sisi pour leur assiduité pendant les tests, et pour pas avoir ralé à cause des hl gratuits") if "!newgame" in message : serv.privmsg(canal, "Ok, "+personne+" a lancé une partie, tapez !join pour rejoindre (si vous retapez !join, vous quittez !)") serv.privmsg(canal, personne+" a rejoint la partie !") - self.joueurs.append(personne) + if len(self.joueurs) < 7 : + + self.joueurs.append(personne) + else : + serv.privmsg(canal, "Desolé "+personne+", c'est complet pour l'instant...") self.ingame = 1 self.phase = 1 if self.ingame == 1 : + + + + + # Condition de victoire + + if ((self.phase == 3 or self.phase == 4) and ( self.loups == [] or sorted(self.joueurs) == sorted(self.loups) or sorted(self.lovers) == sorted(self.joueurs))) or "!reset" in message : + if self.loups == [] : + serv.privmsg("#lg_putsch", "Tous les loups sont morts..... Le village a gagné !") + else : + if sorted(self.joueurs) == sorted(self.loups) : + serv.privmsg("#lg_putsch", "Tous les villageois sont morts... Les loups ont gagné !") + else : + serv.privmsg("#lg_putsch", "Les amants ont gagné....") + for f in self.joueurs : + serv.mode("#lg_putsch", "-v "+f) + for f in self.loups : + serv.kick("#lg_putsch_loups", f) + time.sleep(5) + serv.privmsg("#lg_putsch", "Les survivants sont : "+list_to_str(self.joueurs)) + + time.sleep(10) + serv.topic("#lg_putsch", "Channel de Loup Garou! Tapez !newgame pour commencer une nouvelle partie! Un bug à observer ? Rejoignez #lg_bugs" ) + + serv.mode("#lg_putsch", "-m") + serv.privmsg("#lg_putsch", "On reinitialise TOUT !") + self.joueurs = [] + self.ingame = 0 + self.phase = 0 + self.repet = 0 + + self.phase2trig = 1 + self.phase2 = 0 + + self.phase4trig = 1 + self.phase4 = 0 + self.egalite = 1 + + self.voyanteok = 0 + self.loupsok = 0 + self.sorciereok = 0 + self.votes = [] + self.avote = [] + self.temps = 0 + self.topic = 0 + self.attente = 0 + self.cartes = [] #Les cartes qui seront en jeu -> sert uniquement pour initialiser la partie + self.loups = [] + self.villageois =[] + + self.lovers = [] + + self.sorciere = "" + self.cankill = 1 #sorciere uniquement + self.cansave = 1 #sorciere uniquement + + self.chasseur = "" + self.chasseurok = 1 + self.chasseurtrig = 1 + self.chasseurvictime = "" + self.pf = "" + + self.voyante = "" + self.cansee = 1 #voyante + + self.cupidon = "" + self.cupidontrig = 1 + + self.maire = "" + + self.voleur = "" + self.voleurtrig = 1 + + self.ancien = "" + self.canlive = 1 + + self.victime = [] + + serv.privmsg("#lg_putsch", " Ouf, reinitialisation reussie !") + + + + + + + if self.phase == 1 : #phase où les joueurs rejoignent la partie if "!join" in message : if personne not in self.joueurs : - serv.privmsg(canal, personne+" a rejoint la partie !") - self.joueurs.append(personne) + if len(self.joueurs) < 7 : + serv.privmsg(canal, personne+" a rejoint la partie !") + self.joueurs.append(personne) + else : + serv.privmsg(canal, "Desolé "+personne+", c'est complet pour l'instant...") + else : serv.privmsg(canal, personne+" a quitté la partie ! BOUH ! ") self.joueurs.remove(personne) @@ -238,9 +369,9 @@ class Boooob(ircbot.SingleServerIRCBot): serv.privmsg(canal,"La partie va se lancer.....Regardez vos query et vos invitations ! ") # Selection des factions pour les joueurs, invitations dans les chann ... - #serv.topic(canal, "Une partie est en cours. Les joueurs sont :"+" ,".join(self.joueurs)) + serv.topic(canal, "Une partie est en cours. Les joueurs sont :"+" ,".join(self.joueurs)) - #serv.mode(canal, "+m") #on mute le chan pour empecher les randoms de parler + serv.mode(canal, "+m") #on mute le chan pour empecher les randoms de parler serv.privmsg(canal, "Je mute le canal !") self.cartes = Paquet(len(self.joueurs)) @@ -284,9 +415,7 @@ class Boooob(ircbot.SingleServerIRCBot): self.phase2 = self.phase2 + 1 if self.phase2 == 2 : self.phase = 3 - serv.privmsg("#lg_putsch", "La partie commence dans 20s...") - time.sleep(20) - serv.privmsg("#lg_putsch", "Debut de la partie") + serv.privmsg("#lg_putsch", "Debut de la nuit") 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 : @@ -309,7 +438,7 @@ class Boooob(ircbot.SingleServerIRCBot): 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)") + 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) La liste des cibles : "+list_to_str(self.joueurs)) self.votes = [] @@ -319,12 +448,13 @@ class Boooob(ircbot.SingleServerIRCBot): serv.privmsg("#lg_putsch", "Il fait nuit noire...") self.repet = 1 - + if self.voyante == "" : + self.voyanteok = 1 if self.voyanteok == 0 : serv.privmsg("#lg_putsch", "J'appelle la voyante") serv.privmsg(self.voyante, "Tape !who pseudo pour connaitre le role de pseudo. La liste : "+", ".join(self.joueurs)) - self.voyanteok = 1 + self.voyanteok = 2 if self.loupsok == 0 : @@ -333,7 +463,7 @@ class Boooob(ircbot.SingleServerIRCBot): self.loupsok = 1 if canal == "#lg_putsch_loups" : if "!vote" in message and personne not in self.avote and personne in self.loups : - print ("message de vote :"+message) + #print ("message de vote :"+message) if message.split(" ")[1] in self.joueurs : (self.votes).append(message.split(" ")[1]) (self.avote).append(personne) @@ -341,15 +471,24 @@ class Boooob(ircbot.SingleServerIRCBot): if self.sorciereok == 1 and self.voyanteok == 1 : - if self.ancien in self.victime and self.canlive == 1: - self.joueurs.append(self.victime) + if self.ancien in self.victime and self.canlive == 1 and self.ancien != self.sorcierevictime and self.ancien != self.chasseurvictime : self.victime.remove(self.ancien) self.canlive = 0 - serv.privmsg(self.ancien, "Ouf, ton pouvoir vient de te sauver !") + #serv.privmsg("#lg_putsch", "Ouf, le pouvoir de l'ancien a proc !") + if self.lovers != [] : + + if self.lovers[0] in self.victime or self.lovers[1] in self.victime : + for f in self.lovers : + if f not in self.victime : + self.victime.append(f) + + 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)) + serv.privmsg(self.chasseur, "Les victimes de cette nuit :"+list_to_str(self.victime)) + serv.privmsg("#lg_putsch", "J'en connais un qui va etre deçu...") self.chasseurok = 0 self.chasseurtrig = 0 else : @@ -358,28 +497,202 @@ class Boooob(ircbot.SingleServerIRCBot): if self.chasseur == "" : self.chasseurok = 1 if self.chasseurok == 1 : + serv.privmsg("#lg_putsch", "Et soudainement, le jour se leve.....") + time.sleep(5) 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+".") - + if f in str(getattr(self,g)) and g == "lovers" : + serv.privmsg("#lg_putsch", "Les amoureux sont morts ! (coucou "+f+" ! )" ) + if f in str(getattr(self, g)) and g != "joueurs" and g != "victime" and g != "avote" and g != "lovers" and g != "sorcierevictime" : + if f != self.chasseurvictime : + serv.privmsg("#lg_putsch" , f+" est decedé cette nuit.. son role : "+g+".") + serv.mode("#lg_putsch", "-v "+f) + try : + self.joueurs.remove(f) + except : + print "erreur..." + if g == "loups" or g == "villageois" or g == "chasseur": + if g == "loups" : + self.loups.remove(f) + serv.kick("#lg_putsch_loups", f) + if g == "villageois" : + self.villageois.remove(f) + else : + setattr(self,g, "") + + + if self.chasseurvictime != "" : + for g in dir(self) : + if self.chasseurvictime in str(getattr(self, g)) and g!="joueurs" and g!="victime" and g != "avote" and g != "lovers" and g != "sorcierevictime" and g != "chasseurvictime" : + serv.privmsg("#lg_putsch", self.chasseur+" Decide donc de se venger sur "+self.chasseurvictime+", dont le role etait : "+g+" ! HEADSHOT !") + serv.mode("#lg_putsch" , "-v "+self.chasseurvictime) + self.joueurs.remove(self.chasseurvictime) + self.chasseur = "" + if g == "loups" or g == "villageois" : + if g == "loups" : + serv.kick("#lg_putsch_loups", self.chasseurvictime) + self.loups.remove(self.chasseurvictime) + else : + self.villageois.remove(self.chasseurvictime) + else : + setattr(self,g,"") + + self.chasseurvictime = "" self.chasseurok = 0 self.voyanteok = 0 self.loupsok = 0 self.sorciereok = 0 - self.victime = "" + if self.victime == [] : + serv.privmsg("#lg_putsch", "Personne n'est mort cette nuit...") + self.victime = [] self.avote = [] self.votes = [] self.cansee= 1 - serv.privmsg("#lg_putsch", "Regaaaarde, le joour se leeeve") self.phase = 4 + self.phase4 = 0 + self.phase4trig = 1 + self.temps = time.time() 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...") + if self.phase4trig == 1 : + + serv.privmsg("#lg_putsch", "Ce crime ( ou pas...) ne peut rester impuni !") + time.sleep(2) + serv.privmsg("#lg_putsch", "Le village se reunit et decide de lyncher quelqu'un...") + self.phase4trig = 0 + serv.privmsg("#lg_putsch", "Vous avez 1 minute pour debattre avant le debut du vote") + if time.time() - self.temps > 60 and self.phase4trig == 0 : + self.phase4 = 1 + self.phase4trig = 2 + serv.privmsg("#lg_putsch", " Le vote est ouvert, utilisez !vote pseudo . La liste des joueurs : "+list_to_str(self.joueurs)) + serv.privmsg("#lg_putsch", "Rien ne vous empeche de continuer a debattre !") + + if self.phase4 == 1 : + if len(self.votes) == len(self.joueurs) : + serv.privmsg("#lg_putsch", "fin du vote...") + bid = [] + for f in self.joueurs : + serv.privmsg("#lg_putsch", "Le nombre de voix pour "+f+" est :"+str(self.votes.count(f))) + 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.lovers != [] : + + if self.lovers[0] in self.victime or self.lovers[1] in self.victime : + for f in self.lovers : + if f not in self.victime : + self.victime.append(f) + for f in self.victime : + if f in self.loups : + serv.kick("#lg_putsch_loups", f) + for g in dir(self) : + if f in str(getattr(self, g)) and g == "lovers" : + serv.privmsg("#lg_putsch", "Les amoureux sont morts ! (coucou "+f+" ! )" ) + if f in str(getattr(self, g)) and g != "joueurs" and g != "victime" and g != "avote" and g != "lovers" and g != "votes" and g != "voleur" and g != "sorcierevictime": + serv.privmsg("#lg_putsch" , f+" est donc pendu(e) ( ou brulé(e), au choix ) par le village... Son role : "+g+".") + serv.mode("#lg_putsch", "-v "+f) + self.joueurs.remove(f) + + + + + if g == "loups" or g == "villageois" or g == "chasseur" : + if g == "loups" : + self.loups.remove(f) + serv.kick("#lg_putsch_loups", f) + if g == "villageois" : + serv.villageois.remove(f) + else : + setattr(self,g, "") + if g == "ancien" : + serv.privmsg("#lg_putsch", "Oh non, le village a decidé de lyncher l'ancien !") + serv.privmsg("#lg_putsch", "Tous les villageois PERDENT leur pouvoir !") + for a in [self.sorciere, self.voyante, self.chasseur] : + if a not in self.villageois and a != "" : + self.villageois.append(a) + self.sorciere = "" + self.voyante = "" + self.chasseur = "" + if g == "chasseur" : + serv.privmsg(self.chasseur, "Tu peux te venger sur quelqu'un : utilise '!tuer pseudo'. La liste des joueurs :"+list_to_str(self.joueurs)) + serv.privmsg("#lg_putsch", "Le chasseur selectionne une cible...") + + else : + self.chasseurok = 1 + + serv.mode("#lg_putsch", "-v "+f) + + + + + else : + if self.egalite == 1 : + serv.privmsg("#lg_putsch", "Ah, egalité... Le village demande un nouveau vote !") + self.egalite = 0 + self.phase4trig = 0 + self.avote = [] + self.votes = [] + else : + serv.privmsg("#lg_putsch", "Egalité encore... Le village va se coucher...") + self.phase4trig = 1 + self.votes = [] + self.avote = [] + self.phase = 2 + self.phase2 = 2 + self.egalite = 1 + self.victime = [] + self.phase4 = 0 + + + if self.chasseurok == 1 : + if self.chasseurvictime != "" : + + for g in dir(self) : + if self.chasseurvictime in str(getattr(self, g)) and g!="joueurs" and g!="victime" and g != "avote" and g != "lovers" and g != "sorcierevictime" and g != "chasseurvictime" : + serv.privmsg("#lg_putsch", self.chasseur+" Decide donc de se venger sur "+self.chasseurvictime+", dont le role etait : "+g+" ! HEADSHOT !") + serv.mode("#lg_putsch" , "-v "+self.chasseurvictime) + self.joueurs.remove(self.chasseurvictime) + self.chasseur = "" + if g == "loups" or g == "villageois" : + if g == "loups" : + serv.kick("#lg_putsch_loups", self.chasseurvictime) + self.loups.remove(self.chasseurvictime) + else : + self.villageois.remove(self.chasseurvictime) + else : + setattr(self,g,"") + serv.privmsg("#lg_putsch", "Le village va donc se coucher...") + self.phase4trig = 1 + self.votes = [] + self.avote = [] + self.victime = [] + self.phase = 2 + self.phase2 = 2 + self.egalite = 1 + self.phase4 = 0 + + + if "!list" in message : + serv.privmsg("#lg_putsch", "La liste des joueurs est : "+", ".join(self.joueurs)) + + if "!recap" in message : + for f in self.joueurs : + serv.privmsg("#lg_putsch", "Le nombre de voix pour "+f+" est :"+str(self.votes.count(f))) + + if "!vote" in message and personne not in self.avote and message.split(" ")[1] in self.joueurs and personne in self.joueurs : + self.votes.append(message.split(" ")[1]) + self.avote.append(personne) + serv.privmsg("#lg_putsch", personne+" a voté pour "+message.split(" ")[1]+" !") + + +