# -*- coding: utf-8 -*-

#
import irclib
import ircbot
import random as rand
import time

from multiprocessing import Process


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:
        return ["loups", "voyante", "sorciere", "chasseur"]
    if nbrJoueurs == 5:
        res = paquet(4)
        res.append("loups")
        res.append("voleur")
        res.append("villageois")
        res.append("ancien")
        return res
    if nbrJoueurs == 6:
        res = paquet(5)
        res.append("villageois")
        res.append("cupidon")
        return res
    if nbrJoueurs == 7:
        res = paquet(6)
        res.append("villageois")
        res.append("idiot")
        return res
    if nbrJoueurs == 8:
        res = paquet(7)
        res.append("villageois")
        res.append("loups")
        return res
    if nbrJoueurs == 9:
        res = paquet(8)
        res.append("villageois")
        return res
    if nbrJoueurs == 10:
        res = paquet(9)
        res.append("villageois")
        return res
    if nbrJoueurs == 11:
        res = paquet(10)
        res.append("villageois")
        res.append("loups")
        return res
    if nbrJoueurs == 12:
        res = paquet(11)
        res.append("villageois")
        return res


def is_cmd(string):
    return string[0] == "!"


class Boooob(ircbot.SingleServerIRCBot):
    def __init__(self):
        ircbot.SingleServerIRCBot.__init__(
            self, [("irc.iiens.net", 6667)], "putsch", "Je suis un bot", 5)
        self.joueurs = []
        self.ingame = 0
        self.phase = 0
        self.repet = 0
        # self.admin = ["Titch","Cloud"]

        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.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 = ""
        self.cansee = 1  # voyante

        self.cupidon = ""
        self.cupidontrig = 1

        self.maire = ""

        self.voleur = ""
        self.voleurtrig = 1
        self.choix = []

        self.ancien = ""
        self.canlive = 1

        self.idiot = ""
        self.canvote = 1

        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")

    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:
            serv.privmsg(
                canal, "Vous pouvez maintenant voter en tapant '!vote pseudo'. Tout vote est definitif, vous avez le choix entre :"+", ".join(self.joueurs))

    def on_privmsg(self, serv, ev):  # msg privé
        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:
                #TODO doit n'avoir que deux choix parmis toutes les cartes restantes
                for f in self.choix:
                    if f in message:
                        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")
                        else:
		            if f == "villageois":
                            	self.villageois.append(f)
                            setattr(self, f, personne)
                        self.phase2 = self.phase2 + 1
                        break

            # cupidon
            if self.cupidon == personne:
                amants = []
                for f in self.joueurs:
                    if f in message and f not in amants:
                        amants.append(f)
                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 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"
                                and g != "lovers"
                                and g != "avote"
                                and g != "votes"
                                and g != "victime"
                                    and self.cansee == 1):
                                serv.privmsg(personne, "La classe de "+f+" est :"+g)
                                self.voyanteok = 1
                                self.cansee = 0
                                break
            # sorciere
            if self.sorciere == personne and self.sorciereok != 1:
                splt = message.split(' ')

                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..")
                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:
                        self.cansave = 0
                        self.victime = []
                        self.victime.append(splt[2])
                        self.cankill = 0
                        self.sorcierevictime = splt[2]
                        self.sorciereok = 1
                        serv.privmsg(
                            self.sorciere, "ASSASSIN ! Quoique... :thinking: ")
                        serv.privmsg(
                            "#lg_putsch", "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(self.sorciere, "Comme c'est gentil ! ")
                elif len(splt) > 1 and "!kill" == splt[0] and self.cankill == 1:
                    if splt[1] in self.joueurs:
                        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 "!kill" 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 "!kill" 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

    def on_invite(self, serv, ev):
        canal = ev.arguments()[0]
        serv.join(canal)

    def on_pubmsg(self, serv, ev):  # quand qq ecrit dans le chat
        canal = ev.target()
        canal2 = self.channels[canal]  # Sert a recup la liste des users

        personne = ev.source()
        personne = couper(personne)
        message = ev.arguments()[0]
        if "!debug" in message and "Titch" in personne:
            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 ! ")
                self.topic = 1
            if "!gratuit" in message:
                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 !")
                self.joueurs.append(personne)
                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 '!reset' in message:
                    serv.privmsg("#lg_putsch", "on reset ..")
                elif 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.idiot = ""
                self.canvote = 1

                self.victime = []

                serv.privmsg("#lg_putsch", "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 !")
                            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. ")
                        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))
                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 !")
                    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 ! ")
                    # Selection des factions pour les joueurs, invitations dans les chann ...

                    serv.topic(canal, "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 !")
                    self.cartes = paquet(len(self.joueurs))

                    # On attribue a chaque joueur un role
                    #TODO changer pour s'assurer qu'une personne au hasard soit loup avant de tirer le reste des roles
                    loup = rand.randint(0, len(self.joueurs) -1) #tire le numéro du loup
                    player = self.joueurs.pop(loup) # on récup son nom pour la boucle
                    self.joueurs.append(player) # on laisse le joueur dans la liste
                    self.cartes.pop(0) # on retire le premier loup
                    rand.shuffle(self.joueurs)
                    for f in self.joueurs:
                        #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 !")
                            self.loups.append(f)
                            serv.invite(f, "#lg_putsch_loups")
                        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 !")
                                    self.loups.append(f)
                                    serv.invite(f, "#lg_putsch_loups")

                                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....")
                    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 !")
                    self.phase2trig = 0
                    print("phase 2")
                    print(self.choix)

                if self.voleur != "" and self.phase2 == 0 and self.voleurtrig == 1:
                    self.choix = [] # on s'assure que la liste est vide
                    self.choix.append(self.cartes.pop(rand.randint(0, len(self.cartes) -1)))
                    self.choix.append(self.cartes.pop(rand.randint(0, len(self.cartes) - 1))) # on crée une liste de deux choix
                    print("état final")
                    print(self.choix)
                    serv.privmsg(self.voleur, "Tu es le voleur, tes choix sont : " +
                                 ", ".join(self.choix))
                    self.voleurtrig = 0
                else:
                    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:  " +
                        list_to_str(self.joueurs))
                    self.cupidontrig = 0
                else:
                    if self.phase2 == 1 and self.cupidontrig == 1:
                        self.phase2 = self.phase2 + 1
                if self.phase2 == 2:
                    self.phase = 3
                    serv.privmsg("#lg_putsch", "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.privmsg(
                        "#lg_putsch_loups", "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...")
                    bid = []
                    for f in self.joueurs:
                        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 :"
                            + " '!kill pseudo' pour tuer quelqu'un ou"
                            + " '!ress' pour ressusciter la victime"
                            + "Vous pouvez taper !nope pour ne rien"
                            + "faire. Vous pouvez egalement utiliser les"
                            + " deux potions en tapant !ress !kill"
                            + " <pseudo>. La liste des cibles : "
                            + list_to_str(self.joueurs))
                    self.votes = []

                if self.repet == 0:
                    serv.privmsg("#lg_putsch", "Il fait nuit noire...")
                    self.repet = 1
                    if "voyante" in self.cartes:
                        serv.privmsg("#lg_putsch", "J'appelle la voyante")

                if self.voyante == "" and self.voyanteok != 1:
                    self.voyanteok = 1
                    sl = rand.randint(5,10)
                    time.sleep(sl)

                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")
                    self.voyanteok = 2

                if self.loupsok == 0:
                    time.sleep(2)
                    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 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 and self.voyanteok == 1:
                    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 != []:

                        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 !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...")
                            self.chasseurok = 0
                            self.chasseurtrig = 0
                    else:
                        self.chasseurok = 1

                    if self.chasseur == "":
                        self.chasseurok = 1
                    if self.chasseurok == 1:
                        serv.privmsg("#lg_putsch", "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+" ! )")
                                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 +
                                                     " est decedé cette nuit.. son role : "+g+".")
                                        serv.mode("#lg_putsch", "-v "+f)
                                        if f in self.joueurs:

                                            self.joueurs.remove(f)
                                        if g == "loups" or g == "villageois" or g == "chasseur":
                                            if g == "loups":
                                                if f in self.loups:
                                                    self.loups.remove(f)
                                                serv.kick("#lg_putsch_loups", f)
                                            if g == "villageois":
                                                if f in self.villageois:
                                                    self.villageois.remove(f)
                                        else:
                                            setattr(self, g, "")

                        if self.chasseurvictime != "":
                            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 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 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 " +
                                                 self.chasseurvictime+", dont le role etait : "+g+" ! HEADSHOT !")
                                    serv.mode("#lg_putsch", "-v "+self.chasseurvictime)
                                    try:
                                        self.joueurs.remove(self.chasseurvictime)
                                    except:
                                        print "erreur"
                                    self.chasseur = ""
                                    if g == "loups" or g == "villageois":
                                        if g == "loups":
                                            serv.kick("#lg_putsch_loups", self.chasseurvictime)
                                            if self.chasseurvictime in self.loups:
                                                self.loups.remove(self.chasseurvictime)
                                        else:
                                            if self.chasseurvictime in self.loups:
                                                self.villageois.remove(self.chasseurvictime)
                                    else:
                                        setattr(self, g, "")
                        for f in self.joueurs:
                            #on redonne le voice au gens ! 
                            serv.mode("#lg_putsch", "+v "+f)
                        time.sleep(5)

                        self.chasseurvictime = ""
                        self.sorcierevictime = ""
                        self.chasseurok = 0
                        self.voyanteok = 0
                        self.loupsok = 0
                        self.sorciereok = 0
                        if self.victime == []:
                            serv.privmsg("#lg_putsch", "Personne n'est mort cette nuit...")
                        self.victime = []
                        self.avote = []
                        self.votes = []
                        self.cansee = 1
                        self.phase = 4
                        self.phase4 = 0
                        self.phase4trig = 1
                        self.temps = time.time()

            if self.phase == 4:
                if "!list" in message:
                    serv.privmsg("#lg_putsch", "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 !")
                    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) or self.canvote == 0 and len(self.votes) == len(self.joueurs) - 1:
                        serv.privmsg("#lg_putsch", "fin du vote...")
                        bid = []
                        for f in self.joueurs:
                            if self.votes.count(f) > 0:
                                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.idiot in self.victime:
                                serv.privmsg(
                                    "#lg_putsch", "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...")
                                self.canvote = 0
                                self.victime.remove(self.idiot)
                                self.chasseurok = 1

                            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":
                                                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 !")
                                            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 '!kill 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...")
                                serv.mode("#lg_putsch","+m")
                                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 != "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 " +
                                                 self.chasseurvictime+", dont le role etait : "+g+" ! HEADSHOT !")
                                    serv.mode("#lg_putsch", "-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)
                                            if self.chasseurvictime in self.loups:
                                                self.loups.remove(self.chasseurvictime)
                                        else:
                                            if self.chasseurvictime in self.villageois:
                                                self.villageois.remove(self.chasseurvictime)
                                    else:
                                        setattr(self, g, "")
                        serv.privmsg("#lg_putsch", "Le village va donc se coucher...")
                        serv.mode("#lg_putsch","+m")
                        self.phase4trig = 1
                        self.votes = []
                        self.avote = []
                        self.victime = []
                        self.phase = 2
                        self.phase2 = 2
                        self.egalite = 1
                        self.phase4 = 0

                    if "!recap" in message:
                        serv.privmsg("#lg_putsch", "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 " +
                                             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:
                        w = 1
                        if self.canvote == 0:

                            if personne == self.idiot:
                                w = 0
                                serv.privmsg(
                                    "#lg_putsch", "l'idiot essaie de voter... le village l'ignore")
                            if message.split(" ")[1] == self.idiot:
                                w = 0
                                serv.privmsg("#lg_putsch", 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+" !")
                            else:
                                self.votes.append(message.split(" ")[1])
                                serv.privmsg("#lg_putsch", personne+" a voté pour " +
                                             message.split(" ")[1]+" !")
                            self.avote.append(personne)


class Bite(ircbot.SingleServerIRCBot):
    def __init__(self):
        ircbot.SingleServerIRCBot.__init__(
            self, [("irc.iiens.net", 6667)], "triggerbot", "ignorez moi :)", 5)
        self.ctrig = "#tputsch"

    def on_welcome(self, serv, ev):
        serv.join(self.ctrig)
        while True:
            serv.privmsg(self.ctrig, "bite")
            time.sleep(1)


if __name__ == '__main__':
    p = Process(target=Boooob().start)
    p.start()
    p2 = Process(target=Bite().start)
    p2.start()