u"♩ J'ai vu ta mère sur chat rouleeeeeeette ♫"
u"On avait dit \"pas les mamans\""]
-config_action_trigger=[u"(frappe|cogne|tape)(| sur)",u"démolit",u"vomit sur",u"slap(|s)"]
+config_action_trigger=[u"(frappe|cogne|tape)(| sur)",u"(démolit|dégomme|fouette|agresse)",
+u"vomit sur",u"slap(|s)"]
config_action_answers=[u"Hey ! Mais qu'est-ce que j'ai fait ?",
u"Pourquoi moi ?",
u"Mais euh…",
u"Mais j'ai rien demandé moi !"]
-config_action_actions=[u"prend de la distance, par précaution…",u"part en courant"]
+config_action_actions=[u"prend de la distance, par précaution…",u"part en courant",u"esquive"]
config_bonjour=[u"(s|)(a|'|)lu(t|)",u"hello",u"plop",u"plip",u"pr(ou|ü)t",u"bonjour",u"bonsoir"]
config_bonjour_answers=[u"Salut {}",u"Hello {} :)",u"Bonjour {}",u"Hello {}",u"{}: hello",u"{}: bonjour"]
def login_NK(username,password,typ="bdd"):
sock=connect_NK()
+ if typ=="special": # ça c'est pour Basile lui-même
+ masque='["note"]'
+ elif typ=="bdd":
+ masque='[["all"],["all"],false]'
try:
# Basile a un compte special user
- commande='login [%s,%s,"%s"]'%(json.dumps(username),json.dumps(password),typ)
+ commande='login [%s,%s,"%s",%s]'%(json.dumps(username),json.dumps(password),typ,masque)
sock.write(commande)
out=sock.read()
except Exception as exc:
def is_tamere(chain):
return is_something(chain,config_tamere)
def is_action_trigger(chain,pseudo):
- return is_something(chain,config_action_trigger,avant=u"^",apres=" %s($|\.| |,|;).*"%(pseudo))
+ return is_something(chain,config_action_trigger,avant=u"^",
+ apres="( [a-z]*ment)? %s($|\.| |,|;).*"%(pseudo))
def is_pan(chain):
return re.match(u"^(pan|bim|bang)$",unicode(chain,"utf8").lower().strip())
u"ouvert(|e|s|es)":u"ouverte",
u"open":u"open",
u"plein(|s|es)":u"pleine",
- u"bien plein(|e|s|es)":u"bien pleine"}
+ u"bien plein(|e|s|es)":u"bien pleine",
+ u"innocent(|e|s|es)":u"innocente"}
adj_reg=u"(?P<adjectif>"+u"|".join(adjectifs.keys())+u")"
- reg=u".*(^| )"+debuts+u" "+adj_reg+u"($|,|;|\.| ).*"
+ reg=u".*(^| |')"+debuts+u" "+adj_reg+u"($|,|;|\.| ).*"
matched=re.match(reg,message)
if matched:
# il faut repasser l'adjectif au féminin singulier
"""renvoie (False,lemessage) ou (True, le message amputé de "pseudo: ")"""
pseudo=serv.get_nickname()
size=len(pseudo)
- if message[:size]==pseudo and message[size]==":":
+ if message[:size]==pseudo and len(message)>size and message[size]==":":
return (True,message[size+1:].lstrip(" "))
else:
return (False,message)
HELP Affiche de l'aide sur une commande.
CONNECT Ouvre une connection au serveur Note Kfet.
IDENTIFY Me permet de savoir qui tu es sur la note kfet.
- DROP Me fait oublier ton identité."""
+ DROP Me fait oublier ton identité.
+ SOLDE Obtenir ton solde"""
helpmsg_ops="""
JOIN Faire rejoindre un chan
LEAVE Faire quitter un chan
QUIET Se taire sur un chan
NOQUIET Opposé de QUIET
- LOST Perdre sur un chan"""
+ LOST Perdre sur un chan
+ SOLDE <pseudo> Donner le solde de quelqu'un"""
helpmsg_overops="""
- SAY Fais envoyer un message sur un chan ou à une personne
+ SAY Fait envoyer un message sur un chan ou à une personne
+ DO Fait faire une action sur un chan
STAY Ignorera les prochains LEAVE pour un chan
NOSTAY Opposé de STAY
DIE Mourir"""
serv.privmsg(auteur,"Syntaxe : SAY <channel> <message>")
else:
notunderstood=True
+ elif cmd=="do":
+ if auteur in self.overops and len(message)>2:
+ serv.action(message[1]," ".join(message[2:]))
+ log(self.serveur,"priv",auteur," ".join(message))
+ elif len(message)<=2:
+ serv.privmsg(auteur,"Syntaxe : DO <channel> <action>")
+ else:
+ notunderstood=True
+ elif cmd=="kick":
+ if auteur in self.overops and len(message)>2:
+ serv.kick(message[1],message[2]," ".join(message[3:]))
+ log(self.serveur,"priv",auteur," ".join(message))
+ elif len(message)<=2:
+ serv.privmsg(auteur,"Syntaxe : KICK <channel> <pseudo>")
+ else:
+ notunderstood=True
elif cmd=="lost":
if auteur in self.ops and len(message)>1:
serv.privmsg(message[1],"J'ai perdu !")
serv.privmsg(auteur,"Syntaxe : LOST <channel>")
else:
notunderstood=True
+ elif cmd=="solde":
+ if len(message)==1:
+ if self.identities.has_key(auteur):
+ try:
+ self.nk.write('search ["x",["pseudo"],%s]'%(json.dumps(self.identities[auteur])))
+ ret=json.loads(self.nk.read())
+ solde=ret["msg"][0]["solde"]
+ pseudo=ret["msg"][0]["pseudo"]
+ except Exception as exc:
+ print exc
+ serv.privmsg(auteur,"failed")
+ log(self.serveur,"priv",auteur," ".join(message)+"[failed]")
+ return
+ serv.privmsg(auteur,"%s (%s)"%(float(solde)/100,pseudo.encode("utf8")))
+ else:
+ serv.privmsg(canal,"Je ne connais pas ton pseudo note.")
+ elif auteur in self.ops:
+ try:
+ self.nk.write('search ["x",["pseudo"],%s]'%(json.dumps(message[1])))
+ ret=json.loads(self.nk.read())
+ solde=ret["msg"][0]["solde"]
+ pseudo=ret["msg"][0]["pseudo"]
+ except Exception as exc:
+ serv.privmsg(auteur,"failed")
+ log(self.serveur,"priv",auteur," ".join(message)+"[failed]")
+ return
+ serv.privmsg(auteur,"%s (%s)"%(float(solde)/100,pseudo.encode("utf8")))
else:
notunderstood=True
if notunderstood:
try:
test=bot_unicode(message)
except UnicodeBotError:
- serv.privmsg(canal,
- "%s: Euh, tu fais de la merde avec ton encodage là, j'ai failli crasher…"%(auteur))
- return
+ if not canal in self.quiet_channels:
+ serv.privmsg(canal,
+ "%s: Euh, tu fais de la merde avec ton encodage là, j'ai failli crasher…"%(auteur))
+ return
pour_moi,message=self.pourmoi(serv,message)
if pour_moi and message.split()!=[]:
cmd=message.split()[0].lower()
elif cmd in ["reconnect"]:
if auteur in self.ops:
try:
- self.nk=self.new_connection_NK(serv,config_note_pseudo,config_note_password)[1]
+ self.nk=self.new_connection_NK(serv,config_note_pseudo,
+ config_note_password,"special")[1]
except Exception as exc:
self.nk=None
log(self.serveur,"""Erreur dans on_pubmsg/"cmd in ["reconnect"]\n"""+str(exc))
else:
serv.privmsg(canal,"%s: Je ne connais pas ton pseudo note."%(auteur))
log(self.serveur,canal,auteur,message+"[unknown]")
- elif re.match("!?(pain au chocolat|chocolatine)",message.lower())
- and not canal in self.quiet_channels:
+ elif (re.match("!?(pain au chocolat|chocolatine)",message.lower())
+ and not canal in self.quiet_channels):
serv.action(canal,"sert un pain au chocolat à %s"%(auteur))
elif re.match("!?manzana",message.lower()) and not canal in self.quiet_channels:
if auteur=="[20-100]":
answer=random.choice(config_merci_answers)
for ligne in answer.split("\n"):
serv.privmsg(canal,"%s: %s"%(auteur,ligne.encode("utf8")))
- out=re.match(u"^([A-Z[]|\\|[0-9]+|(¹|²|³|⁴|⁵|⁶|⁷|⁸|⁹|⁰)+)(?:| \?| !)$",
+ out=re.match(ur"^([A-Z[]|\\|[0-9]+|(¹|²|³|⁴|⁵|⁶|⁷|⁸|⁹|⁰)+)(?:| \?| !)$",
unicode(message.upper(),"utf8"))
if out and not canal in self.quiet_channels:
out=out.groups()[0]
serv.privmsg(canal,"%s: pfff, j'ai l'air malin maintenant… [ ?"%(auteur))
elif out in "[\\":
serv.privmsg(canal,"%s: nan mais il faut qu'on arrête, ça va finir par poser des problèmes…"%(auteur))
- elif re.match(r"(¹|²|³|⁴|⁵|⁶|⁷|⁸|⁹|⁰)+",out):
+ elif re.match(ur"(¹|²|³|⁴|⁵|⁶|⁷|⁸|⁹|⁰)+",out):
def translate(mess):
return "".join([{u"⁰¹²³⁴⁵⁶⁷⁸⁹0123456789"[i]:u"0123456789⁰¹²³⁴⁵⁶⁷⁸⁹"[i]
for i in range(20)}[j]
action = ev.arguments()[0]
auteur = irclib.nm_to_n(ev.source())
channel = ev.target()
+ try:
+ test=bot_unicode(action)
+ except UnicodeBotError:
+ serv.privmsg(channel,
+ "%s : Euh, tu fais de la merde avec ton encodage là, j'ai failli crasher…"%(auteur))
+ return
mypseudo=serv.get_nickname()
- if is_action_trigger(action,mypseudo):
+
+ if is_action_trigger(action,mypseudo) and not channel in self.quiet_channels:
l1,l2=config_action_answers,config_action_actions
n1,n2=len(l1),len(l2)
i=random.randrange(n1+n2)
if i>=n1:
- serv.action(channel,l2[i-n1])
+ serv.action(channel,l2[i-n1].encode("utf8"))
else:
serv.privmsg(channel,"%s: %s"%(auteur,l1[i].encode("utf8")))