X-Git-Url: http://gitweb.pimeys.fr/?a=blobdiff_plain;f=basile.py;h=b881878aaf1434fbfccb95ca662703bbd0c6d1f9;hb=4459cc85415618591bbeefed2624ea3c14e6da79;hp=ab2c7119d8ac70e4f9d4ed4dfc2b72bab88b3629;hpb=3ebf662a09531ecd71728fc0b9e74ec4ba8a9a7f;p=bots%2Fbasile.git diff --git a/basile.py b/basile.py index ab2c711..b881878 100755 --- a/basile.py +++ b/basile.py @@ -109,12 +109,13 @@ u"Ce que fait ma mère c'est comme ce que tu fais avec ta bite, ça nous regarde 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"] @@ -178,9 +179,13 @@ def connect_NK(): 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: @@ -225,7 +230,8 @@ def is_merci(chain): 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()) @@ -332,9 +338,10 @@ class Basile(ircbot.SingleServerIRCBot): 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"+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 @@ -378,7 +385,7 @@ class Basile(ircbot.SingleServerIRCBot): """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) @@ -427,15 +434,17 @@ class Basile(ircbot.SingleServerIRCBot): 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 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 STAY Ignorera les prochains LEAVE pour un chan NOSTAY Opposé de STAY DIE Mourir""" @@ -589,6 +598,33 @@ class Basile(ircbot.SingleServerIRCBot): serv.privmsg(auteur,"Syntaxe : LOST ") 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: @@ -601,9 +637,10 @@ class Basile(ircbot.SingleServerIRCBot): 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() @@ -631,7 +668,8 @@ class Basile(ircbot.SingleServerIRCBot): 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)) @@ -789,13 +827,20 @@ class Basile(ircbot.SingleServerIRCBot): 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")))