]> gitweb.pimeys.fr Git - bots/deconnaisseur.git/commitdiff
fichier de config + reloadable y compris sur SIGHUP
authorVincent Le Gallic <legallic@crans.org>
Mon, 30 Jul 2012 16:59:34 +0000 (18:59 +0200)
committerVincent Le Gallic <legallic@crans.org>
Mon, 30 Jul 2012 16:59:34 +0000 (18:59 +0200)
config.py [new file with mode: 0644]
deconnaisseur.py

diff --git a/config.py b/config.py
new file mode 100644 (file)
index 0000000..762532e
--- /dev/null
+++ b/config.py
@@ -0,0 +1,46 @@
+#!/usr/bin/python
+# -*- coding:utf8 -*-
+
+password="PatrickSébastien"
+pseudo="deconnaisseur"
+chanlist=["#bot","#flood"]
+play_channels=["#flood"]
+stay_channels=["#flood","#bot"]
+overops=["[20-100]","[20-100]_","PEB"]
+ops=["Nit","Eguel","Harry"]
+
+report_bugs_to =["[20-100]"]
+
+source_file="deconnaissances.txt"
+played_file_template="played.%s.txt" #il faut rajouter le nom du serveur
+
+ttrig=120 #time trigger (normalement 120, mais diminué pour les tests)
+Ttrig=600 #between two enigms (600)
+time_incompressible=15 #on peut pas retrigger en dessous de ce temps (60)
+time_incompressible_clue=60 #on peut pas forcer la demande d'indice en dessous
+
+score_file="scores.pickle"
+
+tag_triggers=[u"t(|a)g",u"ta gueule",u"la ferme",u"ferme( |-)la",u"tais-toi",u"chut"]
+tag_actions=[u"se tait",u"ferme sa gueule",u"se la ferme",u"la ferme"]
+tag_answers=[u"J'me tais si j'veux !",
+u"Je t'entends pas :°",
+u"Héhé, try again",
+u"Non, j'ai pas envie",
+u"Peut-être quand toi tu la fermeras, et encore…"]
+
+level2=[]
+level3=["[20-100]","Petite-Peste","PEB","Constance","pika"]
+
+debug_stdout = True
+logfile_template="deconnaisseur.%s.log"
+
+quit_messages=[u"Se décrocher la mâchoire, pas cuit bras d'oiseau ou métalld précieuxld"]
+
+leave_messages=[u"On continuera à jouer plus tard ;)"]
+
+# Quand personne ne cause, on finit par se taire
+# temps au bout duquel, si personne n'a parlé, on se tait
+idle_time=20*60
+# liste des bots, qui ne sont pas considérés comme de l'activité
+idle_bots=["deconnaisseur","Basile","historien","hung","salesman","Shadobot","Wen","___","Sanctuary","Saturnin"]
index 1eaa4831953efa025141b0860fb3dc9eb2643752..3cc3f4774d215a7c9ee6b06bdfd89e14469fd16a 100755 (executable)
@@ -20,53 +20,16 @@ sys.path.insert(0, "/home/vincent/scripts/python-myirclib")
 import irclib
 import ircbot
 
 import irclib
 import ircbot
 
+# Fichier de conf
+import config
 
 
-config_password="PatrickSébastien"
-config_pseudo="deconnaisseur"
-config_chanlist=["#bot","#flood"]
-config_play_channels=["#flood"]
-config_stay_channels=["#flood","#bot"]
-config_overops=["[20-100]","[20-100]_","PEB"]
-config_ops=["Nit","Eguel","Harry"]
-
-config_source_file="deconnaissances.txt"
-config_played_file_template="played.%s.txt" #il faut rajouter le nom du serveur
 def get_config_played_file(serveur):
     serveurs={"acoeur.crans.org":"acoeur","irc.crans.org":"crans"}
 def get_config_played_file(serveur):
     serveurs={"acoeur.crans.org":"acoeur","irc.crans.org":"crans"}
-    return config_played_file_template%(serveurs[serveur])
-ttrig=120 #time trigger (normalement 120, mais diminué pour les tests)
-Ttrig=600 #between two enigms (600)
-config_time_incompressible=15 #on peut pas retrigger en dessous de ce temps (60)
-config_time_incompressible_clue=60 #on peut pas forcer la demande d'indice en dessous
-
-config_score_file="scores.pickle"
-
-config_tag_triggers=[u"t(|a)g",u"ta gueule",u"la ferme",u"ferme( |-)la",u"tais-toi",u"chut"]
-config_tag_actions=[u"se tait",u"ferme sa gueule",u"se la ferme",u"la ferme"]
-config_tag_answers=[u"J'me tais si j'veux !",
-u"Je t'entends pas :°",
-u"Héhé, try again",
-u"Non, j'ai pas envie",
-u"Peut-être quand toi tu la fermeras, et encore…"]
-
-config_level2=[]
-config_level3=["[20-100]","Petite-Peste","PEB","Constance","pika"]
+    return config.played_file_template%(serveurs[serveur])
 
 
-config_debug_stdout = True
-config_logfile_template="deconnaisseur.%s.log"
 def get_config_logfile(serveur):
     serveurs={"acoeur.crans.org":"acoeur","irc.crans.org":"crans"}
 def get_config_logfile(serveur):
     serveurs={"acoeur.crans.org":"acoeur","irc.crans.org":"crans"}
-    return config_logfile_template%(serveurs[serveur])
-
-config_quit_messages=[u"Se décrocher la mâchoire, pas cuit bras d'oiseau ou métalld précieuxld"]
-
-config_leave_messages=[u"On continuera à jouer plus tard ;)"]
-
-# Quand personne ne cause, on finit par se taire
-# temps au bout duquel, si personne n'a parlé, on se tait
-config_idle_time=20*60
-# liste des bots, qui ne sont pas considérés comme de l'activité
-config_idle_bots=["deconnaisseur","Basile","historien","hung","salesman","Shadobot","Wen","___","Sanctuary","Saturnin"]
+    return config.logfile_template%(serveurs[serveur])
 
 class UnicodeBotError(Exception):
     pass
 
 class UnicodeBotError(Exception):
     pass
@@ -84,15 +47,15 @@ def log(serveur,channel,auteur=None,message=None):
     else:
         chain="%s [%s:%s] %s"%(time.strftime("%F %T"),channel,auteur,message)
     f.write(chain+"\n")
     else:
         chain="%s [%s:%s] %s"%(time.strftime("%F %T"),channel,auteur,message)
     f.write(chain+"\n")
-    if config_debug_stdout:
+    if config.debug_stdout:
         print chain
     f.close()
 
 
 def reussi(message,answer,answer_regexp,auteur):
         print chain
     f.close()
 
 
 def reussi(message,answer,answer_regexp,auteur):
-    if auteur in config_level3:
+    if auteur in config.level3:
         return answer in message
         return answer in message
-    if auteur in config_level2:
+    if auteur in config.level2:
         return remplace_accents(answer) in message
     else:
         if re.match(remplace_accents(answer_regexp).lower(),remplace_accents(message).lower()):
         return remplace_accents(answer) in message
     else:
         if re.match(remplace_accents(answer_regexp).lower(),remplace_accents(message).lower()):
@@ -109,37 +72,37 @@ def is_something(chain,matches,avant=u".*(?:^| )",apres=u"(?:$|\.| |,|;).*",case
     return o
 
 def is_tag(chain):
     return o
 
 def is_tag(chain):
-    return is_something(chain,config_tag_triggers)
+    return is_something(chain,config.tag_triggers)
 
 class RefuseError(Exception):
     pass
 
 class Deconnaisseur(ircbot.SingleServerIRCBot):
     def __init__(self,serveur,debug=False):
 
 class RefuseError(Exception):
     pass
 
 class Deconnaisseur(ircbot.SingleServerIRCBot):
     def __init__(self,serveur,debug=False):
-        temporary_pseudo=config_pseudo+str(random.randrange(10000,100000))
+        temporary_pseudo=config.pseudo+str(random.randrange(10000,100000))
         ircbot.SingleServerIRCBot.__init__(self, [(serveur, 6667)],
                                       temporary_pseudo,"Un bot irc.[flagellez 20-100, il le mérite]", 10)
         self.debug=debug
         self.serveur=serveur
         ircbot.SingleServerIRCBot.__init__(self, [(serveur, 6667)],
                                       temporary_pseudo,"Un bot irc.[flagellez 20-100, il le mérite]", 10)
         self.debug=debug
         self.serveur=serveur
-        self.overops=config_overops
-        self.ops=self.overops+config_ops
-        self.chanlist=config_chanlist
-        self.stay_channels=config_stay_channels
-        self.play_channels=config_play_channels
+        self.overops=config.overops
+        self.ops=self.overops+config.ops
+        self.chanlist=config.chanlist
+        self.stay_channels=config.stay_channels
+        self.play_channels=config.play_channels
         self.play_status={i:[0] for i in self.play_channels}
         self.last_activity={}
         self.quiet_channels=[]
 
     def give_me_my_pseudo(self,serv):
         self.play_status={i:[0] for i in self.play_channels}
         self.last_activity={}
         self.quiet_channels=[]
 
     def give_me_my_pseudo(self,serv):
-        serv.privmsg("NickServ","RECOVER %s %s"%(config_pseudo,config_password))
-        serv.privmsg("NickServ","RELEASE %s %s"%(config_pseudo,config_password))
+        serv.privmsg("NickServ","RECOVER %s %s"%(config.pseudo,config.password))
+        serv.privmsg("NickServ","RELEASE %s %s"%(config.pseudo,config.password))
         time.sleep(0.3)
         time.sleep(0.3)
-        serv.nick(config_pseudo)
+        serv.nick(config.pseudo)
     
     def on_welcome(self, serv, ev):
         self.serv=serv # ça serv ira :)
         self.give_me_my_pseudo(serv)
     
     def on_welcome(self, serv, ev):
         self.serv=serv # ça serv ira :)
         self.give_me_my_pseudo(serv)
-        serv.privmsg("NickServ","identify %s"%(config_password))
+        serv.privmsg("NickServ","identify %s"%(config.password))
         log(self.serveur,"Connected")
         if self.debug:
             self.chanlist=["#bot"]
         log(self.serveur,"Connected")
         if self.debug:
             self.chanlist=["#bot"]
@@ -151,19 +114,19 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
         for c in self.play_channels:
             token=time.time()-3600
             self.play_status[c]=[0,token]
         for c in self.play_channels:
             token=time.time()-3600
             self.play_status[c]=[0,token]
-            serv.execute_delayed(random.randrange(ttrig),self.start_enigme,(serv,c,token))
+            serv.execute_delayed(random.randrange(config.ttrig),self.start_enigme,(serv,c,token))
 
     def start_enigme(self,serv,channel,token=None):
         # On reste silencieux si lechan n'est pas actif
         if not self.is_active(channel):
 
     def start_enigme(self,serv,channel,token=None):
         # On reste silencieux si lechan n'est pas actif
         if not self.is_active(channel):
-            serv.execute_delayed(ttrig*5,self.start_enigme,(serv,channel,token))
+            serv.execute_delayed(config.ttrig*5,self.start_enigme,(serv,channel,token))
             return
         if self.play_status[channel][0]==0 and channel in self.play_channels:
             ok="skip"
             if token==self.play_status[channel][-1]:
                 ok="do_it"
             if token==None:
             return
         if self.play_status[channel][0]==0 and channel in self.play_channels:
             ok="skip"
             if token==self.play_status[channel][-1]:
                 ok="do_it"
             if token==None:
-                if time.time() > self.play_status[channel][-1]+config_time_incompressible:
+                if time.time() > self.play_status[channel][-1]+config.time_incompressible:
                     ok="do_it"
                 else:
                     ok="refuse"
                     ok="do_it"
                 else:
                     ok="refuse"
@@ -173,31 +136,31 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
                 serv.privmsg(channel,enigme.encode("utf8"))
                 token=time.time()
                 self.play_status[channel]=[1,enigme,indice,answer_reg,answer,token]
                 serv.privmsg(channel,enigme.encode("utf8"))
                 token=time.time()
                 self.play_status[channel]=[1,enigme,indice,answer_reg,answer,token]
-                serv.execute_delayed(random.randrange(ttrig*3,ttrig*5),self.give_indice,(serv,channel,token))
+                serv.execute_delayed(random.randrange(config.ttrig*3,config.ttrig*5),self.give_indice,(serv,channel,token))
             elif ok=="refuse":
                 raise RefuseError
     def give_indice(self,serv,channel,token):
         if self.play_status[channel][0]==1:
             if token==None:
                 # c'est donc que l'indice a été demandé
             elif ok=="refuse":
                 raise RefuseError
     def give_indice(self,serv,channel,token):
         if self.play_status[channel][0]==1:
             if token==None:
                 # c'est donc que l'indice a été demandé
-                if self.play_status[channel][-1]+config_time_incompressible_clue<time.time():
+                if self.play_status[channel][-1]+config.time_incompressible_clue<time.time():
                     token=self.play_status[channel][-1]
             if self.play_status[channel][-1]==token:
                 indice=self.play_status[channel][2]
                 serv.privmsg(channel,"indice : %s"%(indice).encode("utf8"))
                 self.play_status[channel][0]=2
                     token=self.play_status[channel][-1]
             if self.play_status[channel][-1]==token:
                 indice=self.play_status[channel][2]
                 serv.privmsg(channel,"indice : %s"%(indice).encode("utf8"))
                 self.play_status[channel][0]=2
-                serv.execute_delayed(random.randrange(ttrig*1,ttrig*3),self.give_answer,(serv,channel,token))
+                serv.execute_delayed(random.randrange(config.ttrig*1,config.ttrig*3),self.give_answer,(serv,channel,token))
     def give_answer(self,serv,channel,token):
         if self.play_status[channel][0]==2 and self.play_status[channel][-1]==token:
             answer=self.play_status[channel][4]
             serv.privmsg(channel,"C'était : %s"%(answer).encode("utf8"))
             token=time.time()
             self.play_status[channel]=[0,token]
     def give_answer(self,serv,channel,token):
         if self.play_status[channel][0]==2 and self.play_status[channel][-1]==token:
             answer=self.play_status[channel][4]
             serv.privmsg(channel,"C'était : %s"%(answer).encode("utf8"))
             token=time.time()
             self.play_status[channel]=[0,token]
-            serv.execute_delayed(random.randrange(Ttrig*5,Ttrig*10),self.start_enigme,(serv,channel,token))
+            serv.execute_delayed(random.randrange(config.Ttrig*5,config.Ttrig*10),self.start_enigme,(serv,channel,token))
 
     def get_enigme(self):
         # on récupère les déconnaissances
 
     def get_enigme(self):
         # on récupère les déconnaissances
-        f=open(config_source_file)
+        f=open(config.source_file)
         t=f.read()
         f.close()
         l=re.findall("%\n(.*)\n(.*)\n(.*)\n(.*)\n(.*)\n",t)
         t=f.read()
         f.close()
         l=re.findall("%\n(.*)\n(.*)\n(.*)\n(.*)\n(.*)\n",t)
@@ -253,7 +216,8 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
  PLAY       Passe un channel en mode "jouer"
  NOPLAY     Passe un channel en mode "ne pas jouer"
  QUIET      Se taire sur un channel
  PLAY       Passe un channel en mode "jouer"
  NOPLAY     Passe un channel en mode "ne pas jouer"
  QUIET      Se taire sur un channel
- NOQUIET    Opposé de QUIET"""
+ NOQUIET    Opposé de QUIET
+ RELOAD     Recharge lac config"""
             helpmsg_overops="""
  SCORES {DEL|ADD|SUB}   Tu veux un dessin ?
  SAY        Fais envoyer un message sur un chan ou à une personne
             helpmsg_overops="""
  SCORES {DEL|ADD|SUB}   Tu veux un dessin ?
  SAY        Fais envoyer un message sur un chan ou à une personne
@@ -376,6 +340,12 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
                         log(self.serveur,"priv",auteur," ".join(message)+"[failed]")
             else:
                 notunderstood=True
                         log(self.serveur,"priv",auteur," ".join(message)+"[failed]")
             else:
                 notunderstood=True
+        elif cmd=="reload":
+            if auteur in self.ops:
+                self.reload(auteur)
+                log(self.serveur,"priv",auteur," ".join(message)+"[successful]")
+            else:
+                notunderstood=True
         elif cmd in ["states","status"]:
             if auteur in self.overops:
                 for k in self.play_status.keys():
         elif cmd in ["states","status"]:
             if auteur in self.overops:
                 for k in self.play_status.keys():
@@ -497,9 +467,13 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
                 else:
                     serv.privmsg(canal,"%s: crève !"%(auteur))
                     log(self.serveur,canal,auteur,message+"[failed]")
                 else:
                     serv.privmsg(canal,"%s: crève !"%(auteur))
                     log(self.serveur,canal,auteur,message+"[failed]")
-            if cmd in ["meur", "meurt","meurre","meurres"] and not canal in self.quiet_channels:
+            elif cmd in ["meur", "meurt","meurre","meurres"] and not canal in self.quiet_channels:
                 serv.privmsg(canal,'%s: Mourir, impératif, 2ème personne du singulier : "meurs" (de rien)'%(auteur))
                 serv.privmsg(canal,'%s: Mourir, impératif, 2ème personne du singulier : "meurs" (de rien)'%(auteur))
-            if cmd in ["part","leave","dégage"]:
+            elif cmd == "reload":
+                if auteur in self.ops:
+                    log(self.serveur, canal, auteur, message+"[successful]")
+                    self.reload(canal)
+            elif cmd in ["part","leave","dégage"]:
                 if auteur in self.ops and (not (canal in self.stay_channels)
                                            or auteur in self.overops):
                     self.quitter(canal)
                 if auteur in self.ops and (not (canal in self.stay_channels)
                                            or auteur in self.overops):
                     self.quitter(canal)
@@ -509,16 +483,16 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
                     serv.privmsg(canal,"%s: Non, je reste !"%(auteur))
                     log(self.serveur,canal,auteur,message+"[failed]")
     
                     serv.privmsg(canal,"%s: Non, je reste !"%(auteur))
                     log(self.serveur,canal,auteur,message+"[failed]")
     
-            if cmd in ["deviens","pseudo"]:
+            elif cmd in ["deviens","pseudo"]:
                 if auteur in self.ops:
                     become=args
                     serv.nick(become)
                     log(self.serveur,canal,auteur,message+"[successful]")
                 if auteur in self.ops:
                     become=args
                     serv.nick(become)
                     log(self.serveur,canal,auteur,message+"[successful]")
-            if cmd in ["coucou"] and not canal in self.quiet_channels:
+            elif cmd in ["coucou"] and not canal in self.quiet_channels:
                 serv.privmsg(canal,"%s: coucou"%(auteur))
                 serv.privmsg(canal,"%s: coucou"%(auteur))
-            if cmd in ["ping"] and not canal in self.quiet_channels:
+            elif cmd in ["ping"] and not canal in self.quiet_channels:
                 serv.privmsg(canal,"%s: pong"%(auteur))
                 serv.privmsg(canal,"%s: pong"%(auteur))
-            if cmd in ["déconnaissance","deconnaissance","énigme","enigme","encore"]:
+            elif cmd in ["déconnaissance","deconnaissance","énigme","enigme","encore"]:
                 if canal in self.play_channels:
                     if self.play_status.get(canal,[-1])[0]==0:
                         try:
                 if canal in self.play_channels:
                     if self.play_status.get(canal,[-1])[0]==0:
                         try:
@@ -529,9 +503,9 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
                         serv.privmsg(canal,("%s: Rappel : %s"%(auteur,self.play_status[canal][1])).encode("utf8") )
                 else:
                     serv.privmsg(canal,"%s: pas ici…"%(auteur))
                         serv.privmsg(canal,("%s: Rappel : %s"%(auteur,self.play_status[canal][1])).encode("utf8") )
                 else:
                     serv.privmsg(canal,"%s: pas ici…"%(auteur))
-            if cmd in ["score","!score"]:
+            elif cmd in ["score","!score"]:
                 serv.privmsg(auteur,"Votre score : %s"%(self.get_scores().get(auteur,0)) )
                 serv.privmsg(auteur,"Votre score : %s"%(self.get_scores().get(auteur,0)) )
-            if cmd in ["scores","!scores"]:
+            elif cmd in ["scores","!scores"]:
                 scores=self.get_scores().items()
                 # trie par score
                 scores.sort(lambda x,y:cmp(x[1],y[1]))
                 scores=self.get_scores().items()
                 # trie par score
                 scores.sort(lambda x,y:cmp(x[1],y[1]))
@@ -540,18 +514,18 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
                 # trie par pseudo
                 scores.sort(lambda x,y:cmp(x[0].lower(),y[0].lower()))
                 serv.privmsg(auteur,"Scores by pseudo : "+" ; ".join(["%s %s"%(i[0],i[1]) for i in scores]))
                 # trie par pseudo
                 scores.sort(lambda x,y:cmp(x[0].lower(),y[0].lower()))
                 serv.privmsg(auteur,"Scores by pseudo : "+" ; ".join(["%s %s"%(i[0],i[1]) for i in scores]))
-            if cmd=="indice" and canal in self.play_channels:
+            elif cmd=="indice" and canal in self.play_channels:
                 self.give_indice(serv,canal,None)
                 self.give_indice(serv,canal,None)
-            if is_tag(message) and not canal in self.quiet_channels:
+            elif is_tag(message) and not canal in self.quiet_channels:
                 if auteur in self.ops:
                 if auteur in self.ops:
-                    action=random.choice(config_tag_actions)
+                    action=random.choice(config.tag_actions)
                     serv.action(canal,action.encode("utf8"))
                     self.quiet_channels.append(canal)
                 else:
                     serv.action(canal,action.encode("utf8"))
                     self.quiet_channels.append(canal)
                 else:
-                    answer=random.choice(config_tag_answers)
+                    answer=random.choice(config.tag_answers)
                     for ligne in answer.split("\n"):
                         serv.privmsg(canal,"%s: %s"%(auteur,ligne.encode("utf8")))
                     for ligne in answer.split("\n"):
                         serv.privmsg(canal,"%s: %s"%(auteur,ligne.encode("utf8")))
-            if "Bâille, cru aile ou orld" in message:
+            elif "Bâille, cru aile ou orld" in message:
                 self.mourir(u"Un de mes easters eggs (non en fait j'en ai qu'un) a été découvert par %s !"%auteur)
             else:
                 tryother=True
                 self.mourir(u"Un de mes easters eggs (non en fait j'en ai qu'un) a été découvert par %s !"%auteur)
             else:
                 tryother=True
@@ -567,7 +541,7 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
                     self.add_score(auteur,1)
                     token=time.time()
                     self.play_status[canal]=[0,token]
                     self.add_score(auteur,1)
                     token=time.time()
                     self.play_status[canal]=[0,token]
-                    serv.execute_delayed(random.randrange(Ttrig*5,Ttrig*10),self.start_enigme,(serv,canal,token))
+                    serv.execute_delayed(random.randrange(config.Ttrig*5,config.Ttrig*10),self.start_enigme,(serv,canal,token))
     
     def on_kick(self,serv,ev):
         auteur = irclib.nm_to_n(ev.source())
     
     def on_kick(self,serv,ev):
         auteur = irclib.nm_to_n(ev.source())
@@ -580,7 +554,7 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
             serv.join(channel)
             self.update_activity(channel,"")
             # on ne dit rien au rejoin
             serv.join(channel)
             self.update_activity(channel,"")
             # on ne dit rien au rejoin
-            #l1,l2=config_kick_answers,config_kick_actions
+            #l1,l2=config.kick_answers,config.kick_actions
             #n1,n2=len(l1),len(l2)
             #i=random.randrange(n1+n2)
             #if i>=n1:
             #n1,n2=len(l1),len(l2)
             #i=random.randrange(n1+n2)
             #if i>=n1:
@@ -590,16 +564,16 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
     
     def quitter(self,chan,leave_message=None):
         if leave_message==None:
     
     def quitter(self,chan,leave_message=None):
         if leave_message==None:
-            leave_message=random.choice(config_leave_messages)
+            leave_message=random.choice(config.leave_messages)
         self.serv.part(chan,message=leave_message.encode("utf8"))
     
     def mourir(self,quit_message=None):
         if quit_message==None:
         self.serv.part(chan,message=leave_message.encode("utf8"))
     
     def mourir(self,quit_message=None):
         if quit_message==None:
-            quit_message=random.choice(config_quit_messages)
+            quit_message=random.choice(config.quit_messages)
         self.die(msg=quit_message.encode("utf8"))
     
     def get_scores(self):
         self.die(msg=quit_message.encode("utf8"))
     
     def get_scores(self):
-        f=open(config_score_file)
+        f=open(config.score_file)
         scores=pickle.load(f)
         f.close()
         return scores
         scores=pickle.load(f)
         f.close()
         return scores
@@ -613,7 +587,7 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
         self.save_scores(scores)
 
     def save_scores(self,scores):
         self.save_scores(scores)
 
     def save_scores(self,scores):
-        f=open(config_score_file,"w")
+        f=open(config.score_file,"w")
         pickle.dump(scores,f)
         f.close()
     
         pickle.dump(scores,f)
         f.close()
     
@@ -622,10 +596,20 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
     nick = property(_getnick)
     
     def update_activity(self,canal,pseudo):
     nick = property(_getnick)
     
     def update_activity(self,canal,pseudo):
-        if not pseudo in config_idle_bots:
+        if not pseudo in config.idle_bots:
             self.last_activity[canal]=time.time()
     def is_active(self,canal):
             self.last_activity[canal]=time.time()
     def is_active(self,canal):
-        return time.time()-self.last_activity[canal]<config_idle_time
+        return time.time()-self.last_activity[canal]<config.idle_time
+    
+    def reload(self, auteur=None):
+        reload(config)
+        if auteur in [None, "SIGHUP"]:
+            towrite = "Config reloaded" + " (SIGHUP received)"*(auteur == "SIGHUP")
+            for to in config.report_bugs_to:
+                self.serv.privmsg(to, towrite)
+            log(self.serveur, towrite)
+        else:
+            self.serv.privmsg(auteur,"Config reloaded")
     
     def start_as_daemon(self, outfile):
         sys.stderr = Logger(outfile)
     
     def start_as_daemon(self, outfile):
         sys.stderr = Logger(outfile)
@@ -676,6 +660,10 @@ if __name__=="__main__":
         print "Server Unknown : %s"%(serveur)
         exit(404)
     deconnaisseur=Deconnaisseur(serveur,debug)
         print "Server Unknown : %s"%(serveur)
         exit(404)
     deconnaisseur=Deconnaisseur(serveur,debug)
+    # Si on reçoit un SIGHUP, on reload la config
+    def sighup_handler(signum, frame):
+        deconnaisseur.reload("SIGHUP")
+    signal.signal(signal.SIGHUP, sighup_handler)
     if daemon:
         child_pid = os.fork()
         if child_pid == 0:
     if daemon:
         child_pid = os.fork()
         if child_pid == 0: