+ def pourmoi(self, serv, message):
+ """Renvoie (False, lemessage) ou (True, le message amputé de "pseudo: ")"""
+ pseudo = self.nick
+ pseudo = pseudo.decode("utf-8")
+ size = len(pseudo)
+ if message[:size] == pseudo and len(message) > size and message[size] == ":":
+ return (True, message[size+1:].lstrip(" "))
+ else:
+ return (False, message)
+
+ ### Exécution d'actions
+ def lost(self, serv, channel, forced=False):
+ """Réaction à un trigger de perdu.
+ Annonce "J'ai perdu" sur le channel si on n'a pas perdu depuis un certain temps."""
+ if self.last_perdu + config.time_between_perdu < time.time() or forced:
+ if not channel in self.quiet_channels or forced:
+ serv.privmsg(channel, "J'ai perdu !")
+ self.last_perdu=time.time()
+ delay=config.time_between_perdu_trigger
+ delta=config.time_between_perdu_trigger_delta
+ serv.execute_delayed(random.randrange(delay-delta,delay+delta),self.lost,(serv,channel))
+
+ def quitter(self, chan, leave_message=None):
+ """Quitter un channel avec un message customisable."""
+ if leave_message == None:
+ leave_message = random.choice(config.leave_messages)
+ self.serv.part(chan, message=leave_message.encode("utf8"))
+
+ def mourir(self):
+ """Se déconnecter du serveur IRC avec un message customisable."""
+ quit_message = random.choice(config.quit_messages)
+ self.die(msg=quit_message.encode("utf8"))
+
+ def execute_reload(self, auteur=None):
+ """Recharge la config."""
+ reload(config)
+ regexp_compile()
+ 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)
+ return True, None
+ else:
+ return True, u"Config reloaded"
+
+ def crash(self, chan="nowhere", who="nobody"):
+ """Fait crasher le bot."""
+ where = "en privé" if chan == "priv" else "sur le chan %s" % chan
+ raise CrashError("Crash demandé par %s %s" % (who, where))
+
+ ACTIONS = {
+ "reload" : execute_reload,
+ }
+
+ def execute_something(self, something, params, place=None, auteur=None):
+ """Exécute une action et répond son résultat à ``auteur``
+ sur un chan ou en privé en fonction de ``place``"""
+ action = self.ACTIONS[something]
+ success, message = action(self, **params)
+ if message:
+ if irclib.is_channel(place):
+ message = "%s: %s" % (auteur, message.encode("utf-8"))
+ self.serv.privmsg(place, message)
+ log(self.serveur, place, auteur, something + "%r" % params + "[successful]" if success else "[failed]")
+
+ ### Surcharge des events du Bot