]> gitweb.pimeys.fr Git - bots/parrot.git/commitdiff
gestion du lieu et du quoter
authorVincent Le Gallic <legallic@crans.org>
Fri, 18 Apr 2014 02:55:40 +0000 (04:55 +0200)
committerVincent Le Gallic <legallic@crans.org>
Fri, 18 Apr 2014 02:55:40 +0000 (04:55 +0200)
config.py
parrot.py
quotes.py

index 552f24fcc77b4edd67d669c9c46780f45daf5e35..fce38cb31da8801128e4ad8248133429538472ee 100644 (file)
--- a/config.py
+++ b/config.py
@@ -125,8 +125,11 @@ helpmsg_overops = u" SAY DO STAY NOSTAY OPS OVEROPS KICK DIE CRASH RESTORE"
 #: et aucun élément de ``exceptlist``
 blacklisted_masks = [("Flo!*@*", [])]
 
+#: Regexp pour le lieu et le quoter
+quote_optionnal_fields = ur"\|\s*(?P<place>[^|]+?)?\s*\|\s*(?P<quoter>[^|]+?)?\s*"
+
 #: Regexp utilisée pour parser des quotes
-quote_regexp = ur"""\s*(?:"|«|')\s*(?P<content>.+?)\s*(?:"|»|')\s*~\s*(?P<author>.+?)\s*(?:$|\n)"""
+quote_regexp = ur"""\s*(?:"|«|')\s*(?P<content>.+?)\s*(?:"|»|')\s*~\s*(?P<author>[^|]+?)\s*(?:%s)?(?:$|\n)""" % (quote_optionnal_fields,)
 
 #: Regexp utlisée pour parser une quote avec timestamp
 quote_regexp_with_timestamp = ur"(?P<timestamp>.{19}) " + quote_regexp
index 1072896cb8f98b687d94283d0b8cf66864f670b6..0cd5be9771eb644ee7ef2332b9330f1b8550d525 100755 (executable)
--- a/parrot.py
+++ b/parrot.py
@@ -432,7 +432,9 @@ class Parrot(ircbot.SingleServerIRCBot):
             match = self.quote_pattern.match(message)
             if match:
                 d = match.groupdict()
-                if self.quotedb.store(d["author"], d["content"]):
+                # On n'autorise pas les gens à déclarer le quoter
+                d["quoter"] = auteur.decode("utf-8")
+                if self.quotedb.store(**d):
                     serv.privmsg(canal, (u"%s: Ce sera retenu, répété, amplifié" % (auteur,)).encode("utf-8"))
                     self.quotedb.save()
                 else:
index 2ff299e65a19b779e9b2db4f402c8021d4fdcdf6..f6e4bc3dabbcf471f46cd6e123d9a403a5bac9b7 100644 (file)
--- a/quotes.py
+++ b/quotes.py
@@ -40,7 +40,7 @@ def sanitize_author(raw):
 
 class Quote(object):
     """ Une citation """
-    def __init__(self, author, content, timestamp=None):
+    def __init__(self, author, content, timestamp=None, place=None, quoter=None):
         if timestamp is None:
             timestamp = get_now()
         elif isinstance(timestamp, basestring):
@@ -48,10 +48,13 @@ class Quote(object):
         self.author = sanitize_author(author)
         self.content = content
         self.timestamp = timestamp
+        self.place = place
+        self.quoter = quoter
     
     def jsonize(self):
         d = {"author" : self.author, "content" : self.content,
-             "timestamp" : self.timestamp.strftime(u"%F_%T")}
+             "timestamp" : self.timestamp.strftime(u"%F_%T"),
+             "place" : self.place, "quoter" : self.quoter}
         return d
     
     def __unicode__(self):
@@ -60,6 +63,13 @@ class Quote(object):
     def __str__(self):
         return unicode(self).encode("utf-8")
     
+    def full_str(self):
+        """ Retourne une chaîne représentant la totalité des infos de la quote,
+            tout en étant parsable et human-readable. """
+        place = self.place if self.place else ""
+        quoter = self.quoter if self.quoter else ""
+        return (u"%s %s | %s | %s" % (self.timestamp.strftime("%F_%T"), unicode(self), place, quoter)).encode("utf-8")
+    
     def __eq__(self, otherquote):
         """ Vérifie si cette phrase n'a pas déjà été dite par la même personne.
             Indépendamment de la date et de la casse. """
@@ -119,11 +129,13 @@ class QuoteDB(object):
         authors = [list(c) for c in authors if len(c) > 1]
         return authors
     
-    def store(self, author, content, timestamp=None):
+    def store(self, timestamp=None, **kwargs):
         """ Enregistre une nouvelle quote, sauf si elle existe déjà.
             Force l'auteur à utiliser la même casse si un auteur de casse différente existait déjà.
             Renvoie ``True`` si elle a été ajoutée, ``False`` si elle existait. """
-        newquote = Quote(self._collapse_author(author), content, timestamp)
+        kwargs["author"] = self._collapse_author(kwargs["author"])
+        kwargs["timestamp"] = timestamp
+        newquote = Quote(**kwargs)
         if not newquote in self.quotelist:
             self.search
             self.quotelist.append(newquote)
@@ -178,7 +190,7 @@ def dump(quotedb, dump_file=None):
     """Pour exporter les quotes dans un format readable vers un fichier."""
     if dump_file is None:
         dump_file = config.quote_dump_file
-    t = "\n".join(["%s %s" % (q.timestamp.strftime("%F_%T"), q) for q in quotedb.quotelist]) + "\n"
+    t = "\n".join([q.full_str() for q in quotedb.quotelist]) + "\n"
     with open(dump_file, "w") as f:
         f.write(t)