X-Git-Url: http://gitweb.pimeys.fr/?p=bots%2Fparrot.git;a=blobdiff_plain;f=parrot.py;h=01ed82adecb1070b80b7d6c86928723b6ba46a2f;hp=6da8e7a186bdf0619e0c30e08746822791552afd;hb=09d929c80db13d5d8b3d775262a4b4252f862a79;hpb=fe5896c741f4de89a661c74a6e5e8afec210ee0d diff --git a/parrot.py b/parrot.py index 6da8e7a..01ed82a 100755 --- a/parrot.py +++ b/parrot.py @@ -23,7 +23,10 @@ from commands import getstatusoutput as ex import config #: Module définissant les erreurs import errors +#: Module de gestion des quotes +import quotes +quote_pattern = re.compile(config.quote_regexp, flags=re.UNICODE) def get_config_logfile(serveur): """Renvoie le nom du fichier de log en fonction du ``serveur`` et de la config.""" @@ -80,6 +83,10 @@ class Parrot(ircbot.SingleServerIRCBot): self.stay_channels = config.stay_channels self.quiet_channels = config.quiet_channels self.last_perdu = 0 + + self.quotedb = quotes.QuoteDB() + self.reload_quotes() + ### Utilitaires def _getnick(self): @@ -89,7 +96,7 @@ class Parrot(ircbot.SingleServerIRCBot): def give_me_my_pseudo(self, serv): """Récupère le pseudo auprès de NickServ.""" - serv.privmsg("NickServ", "RECOVER %s %s" % (config.irc_pseudo, config.irc_password)) + serv.privmsg("NickServ", "GHOST %s %s" % (config.irc_pseudo, config.irc_password)) serv.privmsg("NickServ", "RELEASE %s %s" % (config.irc_pseudo, config.irc_password)) time.sleep(0.3) serv.nick(config.irc_pseudo) @@ -116,10 +123,15 @@ class Parrot(ircbot.SingleServerIRCBot): quit_message = random.choice(config.quit_messages) self.die(msg=quit_message.encode("utf8")) + def reload_quotes(self): + """ Recharge la base de données des quotes et recompile la regexp de quote """ + self.quotedb.load() + self.quote_pattern = re.compile(config.quote_regexp, flags=re.UNICODE) + def execute_reload(self, auteur=None): """Recharge la config.""" reload(config) - isit.regexp_compile() + self.reload_quotes() if auteur in [None, "SIGHUP"]: towrite = "Config reloaded" + " (SIGHUP received)" * (auteur == "SIGHUP") for to in config.report_bugs_to: @@ -150,6 +162,9 @@ class Parrot(ircbot.SingleServerIRCBot): log(self.serveur, place, auteur, something + "%r" % params + ("[successful]" if success else "[failed]")) ### Gestion des quotes + def enregistrer(self, author, content, timestamp): + + quotes.save(self.quotelist, config.quote_file) ### Surcharge des events du Bot @@ -387,7 +402,26 @@ class Parrot(ircbot.SingleServerIRCBot): serv.privmsg(canal, "%s: pong" % (auteur)) else: # Vu que ce bot est prévu pour parser des quotes il va falloir bosser ici - pass + match = quote_pattern.match(message) + if match: + d = match.groupdict() + if self.quotedb.store(d["author"], d["content"]): + serv.privmsg(canal, (u"%s: Ce sera retenu, répété, amplifié" % (auteur,)).encode("utf-8")) + self.quotedb.save() + else: + serv.privmsg(canal, (u"%s: Je le savais déjà." % (auteur,)).encode("utf-8")) + if message.startswith(u"!quote"): + if message.strip() == u"!quote": + q = self.quotedb.random() + serv.privmsg(canal, str(q)) + elif message.startswith("!quote "): + author = message[7:].strip() + try: + q = self.quotedb.randomfrom(author) + except IndexError: + serv.privmsg(canal, (u"Pas de quote de %s en mémoire." % author).encode("utf-8")) + return + serv.privmsg(canal, str(q)) def on_action(self, serv, ev): """À la réception d'une action.""" @@ -480,7 +514,7 @@ def main(): parrot.start_as_daemon(outfile) else: # on enregistre le pid de parrot - pidfile = "/var/run/bots/parror.pid" + pidfile = "/var/run/bots/parrot.pid" for arg in sys.argv: arg = arg.split("=") if arg[0].strip('-') in ["pidfile"]: