f.write((chain + u"\n").encode("utf-8"))
f.close()
if config.debug_stdout:
- print chain
+ print chain.encode("utf-8")
+
+def ignore_event(serv, ev):
+ """Retourne ``True`` si il faut ignorer cet évènement."""
+ for (blackmask, exceptlist) in config.blacklisted_masks:
+ usermask = ev.source()
+ blackit = bool(irclib.mask_matches(usermask, blackmask))
+ exceptit = any([bool(irclib.mask_matches(usermask, exceptmask)) for exceptmask in exceptlist])
+ if exceptit: # Il est exempté
+ return False
+ else:
+ if blackit: # Il n'est pas exempté et matche la blacklist
+ return True
def regex_join(liste, avant=u".*(?:^| )", apres=u"(?:$|\.| |,|;).*"):
"""Fabrique une regexp à partir d'une liste d'éléments à matcher."""
def on_privmsg(self, serv, ev):
"""À la réception d'un message en privé."""
+ if ignore_event(serv, ev):
+ return
message = ev.arguments()[0]
auteur = irclib.nm_to_n(ev.source())
try:
if auteur in self.ops and len(message) > 1:
if message[1] in self.chanlist:
if not (message[1] in self.stay_channels) or auteur in self.overops:
- self.quitter(message[1], " ".join(message[2:]))
+ self.quitter(message[1].encode("utf-8"), " ".join(message[2:]))
self.chanlist.remove(message[1])
log(self.serveur, "priv", auteur, " ".join(message) + "[successful]")
else:
notunderstood = True
elif cmd == u"kick":
if auteur in self.overops and len(message) > 2:
- serv.kick(message[1], message[2], " ".join(message[3:]))
+ serv.kick(message[1].encode("utf-8"), message[2].encode("utf-8"), " ".join(message[3:]).encode("utf-8"))
log(self.serveur, "priv", auteur, " ".join(message))
elif len(message) <= 2:
serv.privmsg(auteur, "Syntaxe : KICK <channel> <pseudo> [<raison>]")
if self.identities.has_key(auteur):
success, solde, pseudo = nk.get_solde(self.nk, self.identities[auteur]["idbde"], serv, auteur)
if success:
- serv.privmsg(auteur, "%s (%s)" % (float(solde)/100, pseudo.encode("utf8")))
+ serv.privmsg(auteur, "%.2f (%s)" % (solde/100.0, pseudo.encode("utf8")))
log(self.serveur, "priv", auteur, " ".join(message) + ("[successful]" if success else "[failed]"))
else:
serv.privmsg(canal, "Je ne connais pas ton pseudo note.")
def on_pubmsg(self, serv, ev):
"""À la réception d'un message sur un channel."""
+ if ignore_event(serv, ev):
+ return
auteur = irclib.nm_to_n(ev.source())
canal = ev.target()
message = ev.arguments()[0]
elif cmd in [u"ping"] and not canal in self.quiet_channels:
serv.privmsg(canal, "%s: pong" % (auteur))
- elif cmd in [u"solde", u"!solde", u"!coca"]:
+ elif cmd in [u"solde", u"!solde", u"!coca"] or cmd.startswith("!"):
if self.identities.has_key(auteur):
idbde = self.identities[auteur]["idbde"]
if cmd in [u"solde", u"!solde"]:
success, solde, pseudo = nk.get_solde(self.nk, self.identities[auteur]["idbde"], serv, canal)
if success:
serv.privmsg(canal, "%s: %s (%s)" % (auteur, float(solde)/100, pseudo.encode("utf8")))
- elif cmd in [u"!coca"]:
- success = nk.consomme(self.nk, self.identities[auteur]["idbde"], u"Coca", serv, canal)
+ elif cmd in [u"!coca"] or cmd.startswith("!"):
+ success = nk.consomme(self.nk, self.identities[auteur]["idbde"], message[1:], serv, canal)
log(self.serveur, canal, auteur, message + ("[successful]" if success else "[failed]"))
else:
serv.privmsg(canal, "%s: Je ne connais pas votre pseudo note." % (auteur))
def on_action(self, serv, ev):
"""À la réception d'une action."""
+ if ignore_event(serv, ev):
+ return
action = ev.arguments()[0]
auteur = irclib.nm_to_n(ev.source())
channel = ev.target()
victime = ev.arguments()[0]
raison = ev.arguments()[1]
if victime == self.nick:
- log(self.serveur, "%s kické de %s par %s (raison : %s)" % (victime, channel, auteur, raison))
+ log(self.serveur, u"%s kické de %s par %s (raison : %s)" % (victime, channel.decode("utf-8"), auteur, raison))
time.sleep(2)
serv.join(channel)
l1, l2 = config.kick_answers, config.kick_actions