diff --git a/.gitignore b/.gitignore index 0d20b6487c61e7d1bde93acf4a14b7a89083a16d..df81b2c90e9247da32939d09cd068b43a2f2e4a9 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ *.pyc +config.py diff --git a/IRCLibs/__init__.py b/IRCLibs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/ircbot.py b/IRCLibs/ircbot.py similarity index 100% rename from ircbot.py rename to IRCLibs/ircbot.py diff --git a/irclib.py b/IRCLibs/irclib.py similarity index 100% rename from irclib.py rename to IRCLibs/irclib.py diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..dfb60be7280fcb3d43600d4b278e380ab0b8b666 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +**TODO** +Rename config.py.dist into config.py and fill the parameters in order to customize which channels your bot should join diff --git a/Tests/Regex_LG.py b/Tests/Regex_LG.py new file mode 100644 index 0000000000000000000000000000000000000000..268dcd71692856c7d6865a1f06781ba24fda931c --- /dev/null +++ b/Tests/Regex_LG.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- + +import re + +class Regex_LG(object): + + # Récupération du rôle du bot + @staticmethod + def getRole(): + return re.compile(r'Ton role pour la partie sera : (\w+)') diff --git a/Tests/__init__.py b/Tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/config.py.dist b/config.py.dist new file mode 100644 index 0000000000000000000000000000000000000000..a5bf42d752755a2d8b80f24e17e7fb89a63e9673 --- /dev/null +++ b/config.py.dist @@ -0,0 +1,13 @@ +""" IRC Channel configuration """ +IRC_SERVER = "irc.iiens.net" +IRC_PORT = 6667 +BOT_OWNER = "PUT_YOUR_NAME" +BOT_NAME = "PUT_A_NAME" +BOT_PWD = "PUT_A_PASSWORD" +BOT_DESC = "PUT_A_DESC" +TBOT_NAME = "PUT_A_NAME" +MAIN_CHANNEL = "#PUT_A_CHANNAME" +WOLF_CHANNEL = "#PUT_A_CHANNAME" +TRIG_CHANNEL = "#PUT_A_CHANNAME" +DEAD_CHANNEL = "#PUT_A_CHANNAME" +DEBUG_CHANNEL = "#PUT_A_CHANNAME" diff --git a/putsch.py b/putsch.py index 648bb10c462da57691ea317af582c7e07359162e..bb5a562ec816df5caa6e7fce43709c2e657b8efb 100644 --- a/putsch.py +++ b/putsch.py @@ -1,13 +1,15 @@ # -*- coding: utf-8 -*- # -import irclib -import ircbot +from IRCLibs import irclib +from IRCLibs import ircbot import random as rand import time from multiprocessing import Process +from config import * + def couper(pseudo): return pseudo.split("!")[0] @@ -17,8 +19,6 @@ 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: return ["loups", "voyante", "sorciere", "chasseur"] @@ -70,7 +70,7 @@ def is_cmd(string): class Boooob(ircbot.SingleServerIRCBot): def __init__(self): ircbot.SingleServerIRCBot.__init__( - self, [("irc.iiens.net", 6667)], "putsch", "Je suis un bot", 5) + self, [(IRC_SERVER, IRC_PORT)], BOT_NAME, BOT_DESC, 5) self.joueurs = [] self.ingame = 0 self.phase = 0 @@ -130,17 +130,16 @@ class Boooob(ircbot.SingleServerIRCBot): self.victime = [] def on_welcome(self, serv, ev): - serv.join("#lg_putsch") - serv.join("#tputsch") - serv.join("#lg_putsch_loups") - serv.join("#lg_putsch_pf") - serv.join("#lg_putsch_morts") - serv.join("#lg_cheat") - serv.privmsg("NickServ", "identify MotDePasse") + serv.join(MAIN_CHANNEL) + serv.join(TRIG_CHANNEL) + serv.join(WOLF_CHANNEL) + serv.join(DEAD_CHANNEL) + serv.join(DEBUG_CHANNEL) + serv.privmsg("NickServ", "identify " + BOT_PWD) def on_join(self, serv, ev): # Quand qq entre dans le chann, le bot inclus canal = ev.target() - if canal == "#lg_putsch_loups" and self.phase == 3: + if canal == WOLF_CHANNEL 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)) @@ -150,10 +149,10 @@ class Boooob(ircbot.SingleServerIRCBot): message = ev.arguments()[0] if "Titch" in personne and "!owner" in message: - serv.privmsg("chanserv", "set founder #lg_putsch_loups Titch") + serv.privmsg("chanserv", "set founder " + WOLF_CHANNEL + " Titch") if "Titch" in personne and "!mode" in message: - serv.mode("#lg_putsch_loups", "+i") + serv.mode(WOLF_CHANNEL, "+i") if self.phase == 2: # Voleur @@ -164,8 +163,8 @@ class Boooob(ircbot.SingleServerIRCBot): serv.privmsg(personne, "Tu as choisi : "+f) if f == "loups": self.loups.append(personne) - serv.privmsg(personne, "Pense a rejoindre le chann #lg_putsch_loups !") - serv.invite(personne, "#lg_putsch_loups") + serv.privmsg(personne, "Pense a rejoindre le chann " + WOLF_CHANNEL + " !") + serv.invite(personne, WOLF_CHANNEL) else: if f == "villageois": self.villageois.append(personne) @@ -212,7 +211,7 @@ class Boooob(ircbot.SingleServerIRCBot): if len(splt) > 0 and splt[0] == "!nope": self.sorciereok = 1 serv.privmsg(self.sorciere, "Espece de glandeur !") - serv.privmsg("#lg_putsch", "La sorciere a fait ce qu'elle avait a faire..") + serv.privmsg(MAIN_CHANNEL, "La sorciere a fait ce qu'elle avait a faire..") elif (len(splt) > 2 and splt[0] == "!ress" and self.cansave == 1 and splt[1] == "!kill" and self.cankill == 1): if splt[2] in self.joueurs: @@ -225,13 +224,13 @@ class Boooob(ircbot.SingleServerIRCBot): serv.privmsg( self.sorciere, "ASSASSIN ! Quoique... :thinking: ") serv.privmsg( - "#lg_putsch", "La sorciere a fait ce qu'elle avait a faire..") + MAIN_CHANNEL, "La sorciere a fait ce qu'elle avait a faire..") elif len(splt) > 0 and "!ress" == splt[0] 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..") + serv.privmsg(MAIN_CHANNEL, "La sorciere a fait ce qu'elle avait a faire..") serv.privmsg(self.sorciere, "Comme c'est gentil ! ") elif len(splt) > 1 and "!kill" == splt[0] and self.cankill == 1: if splt[1] in self.joueurs: @@ -241,9 +240,10 @@ class Boooob(ircbot.SingleServerIRCBot): self.sorciereok = 1 serv.privmsg(self.sorciere, "ASSASSIN ! ") serv.privmsg( - "#lg_putsch", "La sorciere a fait ce qu'elle avait a faire..") + MAIN_CHANNEL, "La sorciere a fait ce qu'elle avait a faire..") # chasseur if self.chasseur == personne and self.chasseur in self.victime: + self.chasseurok = 0 for f in self.joueurs: if (f in message and "!kill" in message and self.chasseur not in message): @@ -265,7 +265,7 @@ class Boooob(ircbot.SingleServerIRCBot): 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...") + serv.privmsg(MAIN_CHANNEL, "J'en connais un qui va etre deçu...") break def on_invite(self, serv, ev): @@ -273,12 +273,16 @@ class Boooob(ircbot.SingleServerIRCBot): serv.join(canal) def on_pubmsg(self, serv, ev): # quand qq ecrit dans le chat + + # Cette variable permet de différencier entre le canal principal et celui des loups canal = ev.target() - canal2 = self.channels[canal] # Sert a recup la liste des users personne = ev.source() personne = couper(personne) message = ev.arguments()[0] + + # TODO + # Rechercher sur les membres de self.admin au lieu du nom en dur pour les phases de test if "!debug" in message and "Titch" in personne: if len(message.split(" ")) == 1: @@ -296,8 +300,8 @@ class Boooob(ircbot.SingleServerIRCBot): serv.privmsg(canal, "Et hop, on hl tout le monde ! ou pas ?") 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 !") + MAIN_CHANNEL, "Ok, "+personne+" a lancé une partie, tapez !join pour rejoindre (si vous retapez !join, vous quittez !)") + serv.privmsg(MAIN_CHANNEL, personne+" a rejoint la partie !") self.joueurs.append(personne) self.ingame = 1 self.phase = 1 @@ -311,28 +315,28 @@ class Boooob(ircbot.SingleServerIRCBot): or sorted(self.lovers) == sorted(self.joueurs))) or "!reset" in message): if '!reset' in message: - serv.privmsg("#lg_putsch", "on reset ..") + serv.privmsg(MAIN_CHANNEL, "on reset ..") elif self.loups == []: - serv.privmsg("#lg_putsch", "Tous les loups sont morts..... Le village a gagné !") + serv.privmsg(MAIN_CHANNEL, "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é !") + MAIN_CHANNEL, "Tous les villageois sont morts... Les loups ont gagné !") else: - serv.privmsg("#lg_putsch", "Les amants ont gagné....") + serv.privmsg(MAIN_CHANNEL, "Les amants ont gagné....") for f in self.joueurs: - serv.mode("#lg_putsch", "-v "+f) + serv.mode(MAIN_CHANNEL, "-v "+f) for f in self.loups: - serv.kick("#lg_putsch_loups", f) + serv.kick(WOLF_CHANNEL, f) time.sleep(5) - serv.privmsg("#lg_putsch", "Les survivants sont : "+list_to_str(self.joueurs)) + serv.privmsg(MAIN_CHANNEL, "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") + MAIN_CHANNEL, "Channel de Loup Garou! Tapez !newgame pour commencer une nouvelle partie! Un bug à observer ? Rejoignez " + DEBUG_CHANNEL) - serv.mode("#lg_putsch", "-m") - serv.privmsg("#lg_putsch", "On reinitialise TOUT !") + serv.mode(MAIN_CHANNEL, "-m") + serv.privmsg(MAIN_CHANNEL, "On reinitialise TOUT !") self.joueurs = [] self.ingame = 0 self.phase = 0 @@ -388,42 +392,42 @@ class Boooob(ircbot.SingleServerIRCBot): self.victime = [] - serv.privmsg("#lg_putsch", "reinitialisation reussie !") + serv.privmsg(MAIN_CHANNEL, "reinitialisation reussie !") if self.phase == 1: # phase où les joueurs rejoignent la partie if "!join" in message: if personne not in self.joueurs: if len(self.joueurs) < 13: - serv.privmsg(canal, personne+" a rejoint la partie !") + serv.privmsg(MAIN_CHANNEL, personne+" a rejoint la partie !") self.joueurs.append(personne) else: - serv.privmsg(canal, "Desolé "+personne + + serv.privmsg(MAIN_CHANNEL, "Desolé "+personne + ", c'est complet pour l'instant...") else: - serv.privmsg(canal, personne+" a quitté la partie. ") + serv.privmsg(MAIN_CHANNEL, personne+" a quitté la partie. ") if personne in self.joueurs: self.joueurs.remove(personne) if "!list" in message: - serv.privmsg(canal, "La liste des joueurs est : "+list_to_str(self.joueurs)) + serv.privmsg(MAIN_CHANNEL, "La liste des joueurs est : "+list_to_str(self.joueurs)) if len(self.joueurs) < 4: self.attente = 0 if len(self.joueurs) >= 4 and self.attente == 0: serv.privmsg( - canal, "vous etes au moins 4, vous pouvez taper !run pour lancer la partie !") + MAIN_CHANNEL, "vous etes au moins 4, vous pouvez taper !run pour lancer la partie !") self.attente = 1 if "!run" in message and self.attente == 1: serv.privmsg( - canal, "La partie va se lancer.....Regardez vos query et vos invitations ! ") + MAIN_CHANNEL, "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 :" + + serv.topic(MAIN_CHANNEL, "Une partie est en cours. Les joueurs sont :" + list_to_str(self.joueurs)) - serv.mode(canal, "+m") # on mute le chan pour empecher les randoms de parler - serv.privmsg(canal, "Je mute le canal !") + serv.mode(MAIN_CHANNEL, "+m") # on mute le chan pour empecher les randoms de parler + serv.privmsg(MAIN_CHANNEL, "Je mute le canal !") self.cartes = paquet(len(self.joueurs)) # On attribue a chaque joueur un role @@ -437,30 +441,30 @@ class Boooob(ircbot.SingleServerIRCBot): #serv.mode(canal, "+v "+f) # on passe les joueurs en voice # on test si ne pas donner le voice casse tout ou pas if f == player: #attribution du loup n°1 à 100% serv.privmsg(f, "Ton role pour la partie sera : loup") - serv.privmsg(f, "Pense a rejoindre le chann #lg_putsch_loups !") + serv.privmsg(f, "Pense a rejoindre le chann " + WOLF_CHANNEL + " !") self.loups.append(f) - serv.invite(f, "#lg_putsch_loups") + serv.invite(f, WOLF_CHANNEL) else: role = self.cartes.pop(rand.randint(0, len(self.cartes) - 1)) #l'élément 0 étant le loup tiré au dessus serv.privmsg(f, "Ton role pour la partie sera : "+role) if role == "loups" or role == "villageois": if role == "loups": - serv.privmsg(f, "Pense a rejoindre le chann #lg_putsch_loups !") + serv.privmsg(f, "Pense a rejoindre le chann " + WOLF_CHANNEL + " !") self.loups.append(f) - serv.invite(f, "#lg_putsch_loups") + serv.invite(f, WOLF_CHANNEL) if role == "villageois": self.villageois.append(f) else: setattr(self, role, f) - serv.privmsg("#lg_putsch_loups", "coucou les ptits loups !") - serv.privmsg(canal, "Bon, bah c'est parti...") - serv.privmsg(canal, "La partie commence....") + serv.privmsg(WOLF_CHANNEL, "coucou les ptits loups !") + serv.privmsg(MAIN_CHANNEL, "Bon, bah c'est parti...") + serv.privmsg(MAIN_CHANNEL, "La partie commence....") self.phase = 2 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 !") + serv.privmsg(MAIN_CHANNEL, "J'appelle le voleur...S'il existe !") + serv.privmsg(MAIN_CHANNEL, "J'appelle le cupidon... S'il existe !") self.phase2trig = 0 print("phase 2") print(self.choix) @@ -488,20 +492,20 @@ class Boooob(ircbot.SingleServerIRCBot): self.phase2 = self.phase2 + 1 if self.phase2 == 2: self.phase = 3 - serv.privmsg("#lg_putsch", "Debut de la nuit") + serv.privmsg(MAIN_CHANNEL, "Debut de la nuit") for f in self.joueurs: #on retire le voice parce que de toute façon tout le monde fait dodo là - serv.mode("#lg_putsch", "-v "+f) - serv.mode("#lg_putsch_loups", "-m") + serv.mode(MAIN_CHANNEL, "-v "+f) + serv.mode(WOLF_CHANNEL, "-m") serv.privmsg( - "#lg_putsch_loups", "Vous pouvez voter avec '!vote pseudo' . la liste des pseudos : " + + WOLF_CHANNEL, "Vous pouvez voter avec '!vote pseudo' . la liste des pseudos : " + list_to_str(self.joueurs)) if self.phase == 3: 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...") + serv.mode(WOLF_CHANNEL, "+m") + serv.privmsg(MAIN_CHANNEL, "la sorciere se leve...") bid = [] for f in self.joueurs: bid.append(str(self.votes.count(f))) @@ -526,10 +530,10 @@ class Boooob(ircbot.SingleServerIRCBot): self.votes = [] if self.repet == 0: - serv.privmsg("#lg_putsch", "Il fait nuit noire...") + serv.privmsg(MAIN_CHANNEL, "Il fait nuit noire...") self.repet = 1 if "voyante" in self.cartes: - serv.privmsg("#lg_putsch", "J'appelle la voyante") + serv.privmsg(MAIN_CHANNEL, "J'appelle la voyante") if self.voyante == "" and self.voyanteok != 1: self.voyanteok = 1 @@ -539,61 +543,69 @@ class Boooob(ircbot.SingleServerIRCBot): if self.voyanteok == 0: serv.privmsg( self.voyante, "Tape !who pseudo pour connaitre le role de pseudo. La liste : "+", ".join(self.joueurs)) - serv.privmsg("#lg_putsch", "J'appelle la voyante") + serv.privmsg(MAIN_CHANNEL, "J'appelle la voyante") self.voyanteok = 2 if self.loupsok == 0: time.sleep(2) - serv.privmsg("#lg_putsch", "Les loups se reveillent...") + serv.privmsg(MAIN_CHANNEL, "Les loups se reveillent...") self.loupsok = 1 - if canal == "#lg_putsch_loups": + + # Vote des loups + if canal == WOLF_CHANNEL: 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]+"!") + # Fin vote loups if self.sorciereok == 1 and self.voyanteok == 1: + + # Vérification trigger ancien 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("#lg_putsch", "Ouf, le pouvoir de l'ancien a proc !") - if self.lovers != []: + # Fin vérification trigger ancien + # Vérification victimes amoureuses + 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) + # Fin vérification victimes amoureuses + # Vérification trigger chasseur if self.chasseur in self.victime: if self.chasseurtrig == 1: - serv.privmsg( self.chasseur, "Tu as été tué cette nuit ! Tape !kill 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...") + serv.privmsg(MAIN_CHANNEL, "J'en connais un qui va etre deçu...") self.chasseurok = 0 self.chasseurtrig = 0 else: self.chasseurok = 1 - if self.chasseur == "": self.chasseurok = 1 + # Fin vérification trigger chasseur + + # Décompte des morts if self.chasseurok == 1: - serv.privmsg("#lg_putsch", "Et soudainement, le jour se leve.....") + serv.privmsg(MAIN_CHANNEL, "Et soudainement, le jour se leve.....") for f in self.victime: 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+" ! )") + MAIN_CHANNEL, "Les amoureux sont morts ! (coucou "+f+" ! )") if f in str(getattr(self, g)) and g != "joueurs" and g != "victime" and g != "votes" and g != "avote" and g != "lovers" and g != "sorcierevictime" and g != "voleur": if f != self.chasseurvictime: - serv.privmsg("#lg_putsch", f + + serv.privmsg(MAIN_CHANNEL, f + " est decedé cette nuit.. son role : "+g+".") - serv.mode("#lg_putsch", "-v "+f) + serv.mode(MAIN_CHANNEL, "-v "+f) if f in self.joueurs: self.joueurs.remove(f) @@ -601,7 +613,7 @@ class Boooob(ircbot.SingleServerIRCBot): if g == "loups": if f in self.loups: self.loups.remove(f) - serv.kick("#lg_putsch_loups", f) + serv.kick(WOLF_CHANNEL, f) if g == "villageois": if f in self.villageois: self.villageois.remove(f) @@ -618,12 +630,12 @@ class Boooob(ircbot.SingleServerIRCBot): 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+" ! )") + MAIN_CHANNEL, "Les amoureux sont morts ! (coucou "+f+" ! )") 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" and g != "voleur" and g != "votes": - serv.privmsg("#lg_putsch", self.chasseur+" Decide donc de se venger sur " + + serv.privmsg(MAIN_CHANNEL, self.chasseur+" Decide donc de se venger sur " + self.chasseurvictime+", dont le role etait : "+g+" ! HEADSHOT !") - serv.mode("#lg_putsch", "-v "+self.chasseurvictime) + serv.mode(MAIN_CHANNEL, "-v "+self.chasseurvictime) try: self.joueurs.remove(self.chasseurvictime) except: @@ -631,7 +643,7 @@ class Boooob(ircbot.SingleServerIRCBot): self.chasseur = "" if g == "loups" or g == "villageois": if g == "loups": - serv.kick("#lg_putsch_loups", self.chasseurvictime) + serv.kick(WOLF_CHANNEL, self.chasseurvictime) if self.chasseurvictime in self.loups: self.loups.remove(self.chasseurvictime) else: @@ -641,7 +653,7 @@ class Boooob(ircbot.SingleServerIRCBot): setattr(self, g, "") for f in self.joueurs: #on redonne le voice au gens ! - serv.mode("#lg_putsch", "+v "+f) + serv.mode(MAIN_CHANNEL, "+v "+f) time.sleep(5) self.chasseurvictime = "" @@ -651,7 +663,7 @@ class Boooob(ircbot.SingleServerIRCBot): self.loupsok = 0 self.sorciereok = 0 if self.victime == []: - serv.privmsg("#lg_putsch", "Personne n'est mort cette nuit...") + serv.privmsg(MAIN_CHANNEL, "Personne n'est mort cette nuit...") self.victime = [] self.avote = [] self.votes = [] @@ -660,36 +672,40 @@ class Boooob(ircbot.SingleServerIRCBot): self.phase4 = 0 self.phase4trig = 1 self.temps = time.time() + # Fin décompte des morts + # Début phase vote if self.phase == 4: if "!list" in message: - serv.privmsg("#lg_putsch", "La liste des joueurs est :" + + serv.privmsg(MAIN_CHANNEL, "La liste des joueurs est :" + list_to_str(self.joueurs)) if self.phase4trig == 1: - serv.privmsg("#lg_putsch", "Ce crime ( ou pas...) ne peut rester impuni !") + serv.privmsg( + MAIN_CHANNEL, "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...") + MAIN_CHANNEL, "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") + MAIN_CHANNEL, "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 !") + MAIN_CHANNEL, " Le vote est ouvert, utilisez !vote pseudo . La liste des joueurs : "+list_to_str(self.joueurs)) + serv.privmsg( + MAIN_CHANNEL, "Rien ne vous empeche de continuer a debattre !") if self.phase4 == 1: if len(self.votes) == len(self.joueurs) or self.canvote == 0 and len(self.votes) == len(self.joueurs) - 1: - serv.privmsg("#lg_putsch", "fin du vote...") + serv.privmsg(MAIN_CHANNEL, "fin du vote...") bid = [] for f in self.joueurs: if self.votes.count(f) > 0: - serv.privmsg("#lg_putsch", "Le nombre de voix pour " + + serv.privmsg(MAIN_CHANNEL, "Le nombre de voix pour " + f+" est :"+str(self.votes.count(f))) bid.append(str(self.votes.count(f))) a = max(bid) @@ -703,9 +719,9 @@ class Boooob(ircbot.SingleServerIRCBot): if self.idiot in self.victime: serv.privmsg( - "#lg_putsch", "Le village a decidé de lyncher l'idiot : "+self.idiot) + MAIN_CHANNEL, "Le village a decidé de lyncher l'idiot : "+self.idiot) serv.privmsg( - "#lg_putsch", self.idiot+" n'est donc pas lynché, mais ne peut plus voter desormais...") + MAIN_CHANNEL, self.idiot+" n'est donc pas lynché, mais ne peut plus voter desormais...") self.canvote = 0 self.victime.remove(self.idiot) self.chasseurok = 1 @@ -718,31 +734,31 @@ class Boooob(ircbot.SingleServerIRCBot): self.victime.append(f) for f in self.victime: if f in self.loups: - serv.kick("#lg_putsch_loups", f) + serv.kick(WOLF_CHANNEL, 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+" ! )") + MAIN_CHANNEL, "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) + MAIN_CHANNEL, f+" est donc pendu(e) ( ou brulé(e), au choix ) par le village... Son role : "+g+".") + serv.mode(MAIN_CHANNEL, "-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) + serv.kick(WOLF_CHANNEL, f) if g == "villageois": self.villageois.remove(f) else: setattr(self, g, "") if g == "ancien": serv.privmsg( - "#lg_putsch", "Oh non, le village a decidé de lyncher l'ancien !") + MAIN_CHANNEL, "Oh non, le village a decidé de lyncher l'ancien !") serv.privmsg( - "#lg_putsch", "Tous les villageois PERDENT leur pouvoir !") + MAIN_CHANNEL, "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) @@ -753,25 +769,26 @@ class Boooob(ircbot.SingleServerIRCBot): serv.privmsg( self.chasseur, "Tu peux te venger sur quelqu'un : utilise '!kill pseudo'. La liste des joueurs :"+list_to_str(self.joueurs)) serv.privmsg( - "#lg_putsch", "Le chasseur selectionne une cible...") + MAIN_CHANNEL, "Le chasseur selectionne une cible...") else: - self.chasseurok = 1 + if self.chasseur == "": + self.chasseurok = 1 - serv.mode("#lg_putsch", "-v "+f) + serv.mode(MAIN_CHANNEL, "-v "+f) else: if self.egalite == 1: serv.privmsg( - "#lg_putsch", "Ah, egalité... Le village demande un nouveau vote !") + MAIN_CHANNEL, "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...") - serv.mode("#lg_putsch","+m") + MAIN_CHANNEL, "Egalité encore... Le village va se coucher...") + serv.mode(MAIN_CHANNEL,"+m") self.phase4trig = 1 self.votes = [] self.avote = [] @@ -786,16 +803,16 @@ class Boooob(ircbot.SingleServerIRCBot): for g in dir(self): if self.chasseurvictime in str(getattr(self, g)) and g != "joueurs" and g != "votes" 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 " + + serv.privmsg(MAIN_CHANNEL, self.chasseur+" Decide donc de se venger sur " + self.chasseurvictime+", dont le role etait : "+g+" ! HEADSHOT !") - serv.mode("#lg_putsch", "-v "+self.chasseurvictime) + serv.mode(MAIN_CHANNEL, "-v "+self.chasseurvictime) if self.chasseurvictime in self.joueurs: self.joueurs.remove(self.chasseurvictime) self.chasseur = "" if g == "loups" or g == "villageois": if g == "loups": - serv.kick("#lg_putsch_loups", self.chasseurvictime) + serv.kick(WOLF_CHANNEL, self.chasseurvictime) if self.chasseurvictime in self.loups: self.loups.remove(self.chasseurvictime) else: @@ -803,8 +820,8 @@ class Boooob(ircbot.SingleServerIRCBot): self.villageois.remove(self.chasseurvictime) else: setattr(self, g, "") - serv.privmsg("#lg_putsch", "Le village va donc se coucher...") - serv.mode("#lg_putsch","+m") + serv.privmsg(MAIN_CHANNEL, "Le village va donc se coucher...") + serv.mode(MAIN_CHANNEL,"+m") self.phase4trig = 1 self.votes = [] self.avote = [] @@ -815,10 +832,10 @@ class Boooob(ircbot.SingleServerIRCBot): self.phase4 = 0 if "!recap" in message: - serv.privmsg("#lg_putsch", "Ont voté : "+list_to_str(self.avote)) + serv.privmsg(MAIN_CHANNEL, "Ont voté : "+list_to_str(self.avote)) for f in self.joueurs: if self.votes.count(f) > 0: - serv.privmsg("#lg_putsch", "Le nombre de voix pour " + + serv.privmsg(MAIN_CHANNEL, "Le nombre de voix pour " + f+" est :"+str(self.votes.count(f))) if "!vote" in message and personne not in self.avote and len(message.split(" ")) > 1 and (message.split(" ")[1] in self.joueurs or message.split(" ")[1] == "random") and personne in self.joueurs: @@ -828,20 +845,20 @@ class Boooob(ircbot.SingleServerIRCBot): if personne == self.idiot: w = 0 serv.privmsg( - "#lg_putsch", "l'idiot essaie de voter... le village l'ignore") + MAIN_CHANNEL, "l'idiot essaie de voter... le village l'ignore") if message.split(" ")[1] == self.idiot: w = 0 - serv.privmsg("#lg_putsch", personne + + serv.privmsg(MAIN_CHANNEL, personne + " essaie de voter pour l'idiot... le village l'ignore...") if w == 1: if message.split(" ")[1] == "random": bi = self.joueurs[rand.randint(0, len(self.joueurs) - 1)] self.votes.append(bi) - serv.privmsg("#lg_putsch", "LE POUVOIR DU RANDOM ! ") - serv.privmsg("#lg_putsch", personne+" a voté pour "+bi+" !") + serv.privmsg(MAIN_CHANNEL, "LE POUVOIR DU RANDOM ! ") + serv.privmsg(MAIN_CHANNEL, personne+" a voté pour "+bi+" !") else: self.votes.append(message.split(" ")[1]) - serv.privmsg("#lg_putsch", personne+" a voté pour " + + serv.privmsg(MAIN_CHANNEL, personne+" a voté pour " + message.split(" ")[1]+" !") self.avote.append(personne) @@ -849,8 +866,8 @@ class Boooob(ircbot.SingleServerIRCBot): class Bite(ircbot.SingleServerIRCBot): def __init__(self): ircbot.SingleServerIRCBot.__init__( - self, [("irc.iiens.net", 6667)], "triggerbot", "ignorez moi :)", 5) - self.ctrig = "#tputsch" + self, [(IRC_SERVER, IRC_PORT)], TBOT_NAME, "ignorez moi :)", 5) + self.ctrig = TRIG_CHANNEL def on_welcome(self, serv, ev): serv.join(self.ctrig) diff --git a/tests.py b/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..2ae66f6d7b3b7d223545af5781b8b4217aa1db9b --- /dev/null +++ b/tests.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- + +from IRCLibs import irclib +from IRCLibs import ircbot + +# Banque de regex pour le bot +from Tests.Regex_LG import Regex_LG as rlg + +from multiprocessing import Process + +from config import * + +# Classe permettant d'ajouter des bots de test +class Dummy(ircbot.SingleServerIRCBot): + + role = "" + name = "" + + # Passer le nom du bot en paramètre + def __init__(self, name): + self.name = name + ircbot.SingleServerIRCBot.__init__( + self, [(IRC_SERVER, IRC_PORT)], name, "Bot de test LG", 5) + + # Action lors du lancement + def on_welcome(self, serv, ev): + serv.join(MAIN_CHANNEL) + + # Action lors d'une invitation, seule l'invitation sur WOLF_CHANNEL est validée + def on_invite(self, serv, ev): + if ev.arguments()[0] == WOLF_CHANNEL: + serv.join(WOLF_CHANNEL) + serv.privmsg(BOT_OWNER, "J'ai rejoint le camp des loups") + + # Messages privés + def on_privmsg(self, serv, ev): + + # Récupération de l'émetteur et du message + sender = ev.source().split("!")[0] + message = ev.arguments()[0] + + # Cas envoi par propriétaire + if BOT_OWNER in sender: + + # Mets fin au bot + if "!die" in message: + serv.privmsg(MAIN_CHANNEL, "C'est un bot qui sort d'un canal...") + self.die() + + # Message à envoyer sur le canal principal + if "!say" in message: + serv.privmsg(MAIN_CHANNEL, " ".join(message.split(" ")[1:])) + + if "!whisper" in message: + serv.privmsg(BOT_NAME, " ".join(message.split(" ")[1:])) + + # Cas envoi par autre personne + elif BOT_NAME in sender: + + # Récupération du rôle (1er message au bot de test) + if self.role == "": + self.role = rlg.getRole().match(message).group(1) + print self.name + " : " + self.role + serv.privmsg(BOT_OWNER, "< " + sender + "> " + message) + + # Messages publics + def on_pubmsg(self, serv, ev): + + # Récupération de l'émetteur, du canal et du message + sender = ev.source().split("!")[0] + message = ev.arguments()[0] + canal = ev.target() + + # Cas envoi par propriétaire + if BOT_OWNER in sender and (WOLF_CHANNEL in canal or MAIN_CHANNEL in canal): + + # Tout le monde MEURT + if "!die" in message: + serv.privmsg(MAIN_CHANNEL, "AAAAAH") + self.die() + + # Tout le monde rejoint la partie + if "!newgame" in message: + serv.privmsg(MAIN_CHANNEL, "!join") + + # Tout le monde vote pour un malheureux dans le bon canal + if "!vote" in message: + serv.privmsg(canal, message) + +# Fin classe Dummy + +if __name__ == '__main__': + p1 = Process(target=Dummy("Tinky_Winky").start) + p2 = Process(target=Dummy("Dipsy").start) + p3 = Process(target=Dummy("Laa-Laa").start) + p4 = Process(target=Dummy("Po").start) + p5 = Process(target=Dummy("Tiic").start) + p6 = Process(target=Dummy("Taac").start) + p1.start() + p2.start() + p3.start() + p4.start() + p5.start() + p6.start()