]> gitweb.pimeys.fr Git - bots/saturnin.git/blobdiff - saturnin.py
IRC, I hate you
[bots/saturnin.git] / saturnin.py
index 75165dfbe8615dfb1f891b93a853226db9a23e05..848019c2ea51a4001b4295f0862eb468ddb1fae8 100755 (executable)
@@ -66,7 +66,8 @@ def ignore_event(serv, ev):
         else:
             exceptit = bool(irclib.mask_matches(usermask, exceptmask))
         blackit = bool(irclib.mask_matches(usermask, blackmask))
-        return blackit and not exceptit
+        if blackit and not exceptit:
+            return True
 
 class UnicodeBotError(Exception):
     pass
@@ -203,6 +204,8 @@ class Saturnin(ircbot.SingleServerIRCBot):
                         helpmsg+="\n"+helpmsgs[2]
                     else:
                         helpmsg=helpmsgs[2]
+                if not helpmsg: # Un non-op a demandé de l'aide sur une commande dont il n'est pas censé connaître l'existence
+                    helpmsg = "Commande inacessible."
             for ligne in helpmsg.split("\n"):
                 serv.privmsg(auteur,ligne)
         elif cmd=="join":
@@ -404,6 +407,13 @@ class Saturnin(ircbot.SingleServerIRCBot):
                         self.add_score(de,-asked)
                         self.add_score(to,asked)
                         serv.privmsg(auteur,"Transfert de %s points de %s à %s"%(asked,de,to))
+                elif len(message) == 2:
+                    scores = self.get_scores()
+                    asked = message[1]
+                    if asked in scores:
+                        serv.privmsg(auteur, "Score de %s : %s" % (asked, scores[asked]))
+                    else:
+                        serv.privmsg(auteur, "%s n'a encore jamais joué (avec succès)." % (asked,))
                 else:
                     serv.privmsg(auteur,"Syntaxe : SCORE TRANSFERT <pseudo> [<n>]")
             else:
@@ -451,15 +461,29 @@ class Saturnin(ircbot.SingleServerIRCBot):
     def sendscore(self, to):
         self.serv.privmsg(to, "Votre score : %s"%(self.get_scores().get(to,0)) )
     
+    def _sendscores(self, to, scores):
+        message = ''
+        for [nick, score] in scores:
+            score = '{}: {}'.format(nick, score)
+            if len(message) < config.MAX_LENGTH - len(score):
+                message += ' ' + score
+            else:
+                self.serv.privmsg(to, message)
+                message = score
+        if message:
+            self.serv.privmsg(to, message)
+
     def sendscores(self, to):
         scores=self.get_scores().items()
         # trie par score
         scores.sort(lambda x,y:cmp(x[1],y[1]))
         scores.reverse()
-        self.serv.privmsg(to, "Scores by score : "+" ; ".join(["%s %s"%(i[0],i[1]) for i in scores]))
+        self.serv.privmsg(to, "Scores by score : ")
+        self._sendscores(to, scores)
         # trie par pseudo
         scores.sort(lambda x,y:cmp(x[0].lower(),y[0].lower()))
-        self.serv.privmsg(to, "Scores by pseudo : "+" ; ".join(["%s %s"%(i[0],i[1]) for i in scores]))
+        self.serv.privmsg(to, "Scores by pseudo : ")
+        self._sendscores(to, scores)
     
     def on_pubmsg(self, serv, ev):
         if ignore_event(serv, ev):
@@ -505,9 +529,13 @@ class Saturnin(ircbot.SingleServerIRCBot):
                 self.sendscore(auteur)
             elif cmd == "scores":
                 self.sendscores(auteur)
-        else:
-            if is_pan(message):
-                self.shot(channel, auteur)
+            elif cmd in [u"deviens", u"pseudo"]:
+                if auteur in self.ops:
+                    become = args
+                    serv.nick(become)
+                    log(self.serveur, channel, auteur, message + "[successful]")
+        if is_pan(message):
+            self.shot(channel, auteur)
     
     def on_action(self, serv, ev):
         if ignore_event(serv, ev):