X-Git-Url: http://gitweb.pimeys.fr/?a=blobdiff_plain;f=basile.py;h=2bc9533808fd0e10a78087bd0ef725b6d8c14b51;hb=a906af8008dcba0c0847070dca6218b1ba19bc12;hp=b4d2c4283a69c9b5591c559c705d37328312333c;hpb=3f24ce761d99ef16c419ff2b5fa917eea0646263;p=bots%2Fbasile.git diff --git a/basile.py b/basile.py index b4d2c42..2bc9533 100755 --- a/basile.py +++ b/basile.py @@ -38,6 +38,8 @@ config_report_bugs_to=["[20-100]"] # config "ce bot a été codé par 20-100, tu te rappelles ?" config_manzana = ["[20-100]", "Petite-Peste"] +# config "mais PEB aussi est passé par là" +config_manzana_bis = ["PEB"] # config "tu m'traites ?" config_insultes=[u"conna(rd|sse)",u"pute",u"con(|ne)",u"enf(oiré|lure)", @@ -67,10 +69,13 @@ u"Mais je ne vous permets pas ! Enfin, pas comme ça…"] # config "à peine quelques kilos octets" config_gros=[u"gros",u"énorme",u"lourd"] +config_thisfile= os.path.realpath( __file__ ) +def get_filesize(): + return ex("ls -s %s"%(config_thisfile))[1].split()[0] # config spéciale-iota config_buffer_fail_answers=[u"Pas de chance !",u"Révisez vos classiques !", -u"Encore un effort, je sais que vous pouvez le faire. ;)" +u"Encore un effort, je sais que vous pouvez le faire. ;)", u"Where did you learn to type?"] # config "jeu", d'ailleurs, j'ai perdu. @@ -172,9 +177,9 @@ config_bonne_nuit_answers=[u"{}: thanks, make sweet dreams tonight ! ;)",u"Bonne config_kick_answers=[u"Suis-je de trop ici ?",u"{}: je m'excuse pour ce bruit indu qui a stimulé votre colère",u"{} a le /kick facile, sans doute la fatigue.",u"{}: j'ai l'impression que vous n'allez pas bien aujourd'hui, vous vous en prenez à un robot !"] config_kick_actions=[u"sera désormais exemplaire",u"prépare une lettre d'excuses à {}",u"essaiera de ne plus s'attirer les foudres de {}",u"croyait avoir tout bien fait… cruelle déception."] -config_thisfile= os.path.realpath( __file__ ) -def get_filesize(): - return ex("ls -s %s"%(config_thisfile))[1].split()[0] +# config on m'a demandé de mourir/partir +config_quit_messages=[u"Bien que cela me désole, je me vois dans l'obligation de vous abandonner."] +config_leave_messages=config_quit_messages class NKError(Exception): def __init__(self,msg): @@ -322,7 +327,6 @@ class Basile(ircbot.SingleServerIRCBot): self.ops=self.overops+config_ops self.report_bugs_to=config_report_bugs_to self.chanlist=config_chanlist - self.sockets={} self.identities=pickle.load(open("identities.pickle","r")) self.stay_channels=config_stay_channels self.quiet_channels=config_quiet_channels @@ -405,75 +409,82 @@ class Basile(ircbot.SingleServerIRCBot): test=bot_unicode(message) except UnicodeBotError: serv.privmsg(auteur, - "Si je n'avais pas été créé avec la plus grande attention, votre encodage m'aurait déjà tué…") + "Si je n'avais pas été créé avec la plus grande attention, votre encodage aurait eu raison de moi…") return message=message.split() cmd=message[0].lower() notunderstood=False - if cmd=="connect": - if not len(message) in [2,3]: - serv.privmsg(auteur,"Syntaxe : CONNECT [] ") - return - username=auteur - if len(message)>2: - username=(message[1]) - password=" ".join(message[2:]) - else: - password=" ".join(message[1:]) - success,sock=self.new_connection_NK(serv,username,password) - if success: - self.sockets[username]=sock - serv.privmsg(auteur,"Connection successful") - log(self.serveur,"priv",auteur," ".join(message)+"[successful]") - else: - serv.privmsg(auteur,"Connection failed") - log(self.serveur,"priv",auteur," ".join(message)+"[failed]") - - elif cmd=="help": - helpdico={"connect": """CONNECT [] - Ouvre une connexion au serveur NoteKfet. - Si n'est pas précisé, j'utiliserais l'identité sous laquelle je te connais, ou, à défaut, ton pseudo.""", -"identify": """IDENTIFY - Vérifie le mot de passe et me permet de savoir à l'avenir quel est ton pseudo note kfet. - Sans paramètre, je réponds sous quel pseudo je te connais.""", -"drop":"""DROP - Vérifie le mot de passe et me fait d'oublier ton pseudo note kfet."""} - helpmsg_default="""Liste des commandes : - 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é. - 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 - SOLDE Donner le solde de quelqu'un""" - helpmsg_overops=""" - 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""" + if cmd=="help": + helpdico={"help":["""HELP + Affiche de l'aide sur la commande""",None,None], +"identify": ["""IDENTIFY + Vérifie le mot de passe et me permet de savoir à l'avenir quel est votre pseudo note kfet. + Sans paramètre, je vous précise sous quel pseudo je vous connais.""",None,None], +"drop":["""DROP + Vérifie le mot de passe et me fait d'oublier votre pseudo note kfet.""",None,None], +"solde": ["""SOLDE + Affiche votre solde, si je connais votre pseudo note kfet.""", + """SOLDE + Affiche le solde de la personne désignée (par son pseudo note).""",None], + "join": [None, """JOIN + Me fait rejoindre le channel""",None], + "leave": [None,"""LEAVE + Me fait quitter le channel (sauf s'il est dans ma stay_list).""",None], + "quiet": [None,"""QUIET + Me rend silencieux sur le channel.""",None], + "noquiet": [None,"""NOQUIET + Me rend la parole sur le channel.""",None], + "lost": [None,"""LOST + Me fait perdre sur le channel.""",None], + "say": [None,None,"""SAY + Me fait parler sur le channel."""], + "do": [None,None,"""DO + Me fait faitre une action (/me) sur le channel."""], + "stay": [None,None,"""STAY + Ajoute le channel à ma stay_list."""], + "nostay": [None,None,"""NOSTAY + Retire le channel de ma stay_list."""], + "ops": [None,None,"""OPS + Affiche la liste des ops."""], + "overops": [None,None,"""OVEROPS + Affiche la liste des overops."""], + "kick": [None,None,"""KICK [] + Kicke du channel (Il faut bien entendu que j'y sois op)."""], + "die": [None,None,"""DIE + Me déconnecte du serveur IRC."""] + } + helpmsg_default="Liste des commandes disponibles :\nHELP IDENTIFY DROP SOLDE" + helpmsg_ops=" JOIN LEAVE QUIET NOQUIET LOST" + helpmsg_overops=" SAY DO STAY NOSTAY OPS OVEROPS KICK DIE" + op,overop=auteur in self.ops, auteur in self.overops if len(message)==1: helpmsg=helpmsg_default - if auteur in self.ops: + if op: helpmsg+=helpmsg_ops - if auteur in self.overops: + if overop: helpmsg+=helpmsg_overops else: - helpmsg=helpdico.get(message[1].lower(),"Commande inconnue.") + helpmsgs=helpdico.get(message[1].lower(),["Commande inconnue.",None,None]) + helpmsg=helpmsgs[0] + if op and helpmsgs[1]: + if helpmsg: + helpmsg+="\n"+helpmsgs[1] + else: + helpmsg=helpmsgs[1] + if overop and helpmsgs[2]: + if helpmsg: + helpmsg+="\n"+helpmsgs[2] + else: + helpmsg=helpmsgs[2] for ligne in helpmsg.split("\n"): serv.privmsg(auteur,ligne) elif cmd=="identify": if len(message)==1: if self.identities.has_key(auteur): - serv.privmsg(auteur,"Je te connais sous le pseudo note %s."%( + serv.privmsg(auteur,"Je vous connais sous le pseudo note %s."%( self.identities[auteur].encode("utf8"))) else: - serv.privmsg(auteur,"Je ne connais pas ton pseudo note.") + serv.privmsg(auteur,"Je ne connais pas votre pseudo note.") elif len(message)>=3: username,password=message[1],unicode(" ".join(message[2:]),"utf8") success,_=self.new_connection_NK(serv,username,password) @@ -522,7 +533,7 @@ class Basile(ircbot.SingleServerIRCBot): 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: - serv.part(message[1]) + self.quitter(message[1]," ".join(message[2:])) self.chanlist.remove(message[1]) log(self.serveur,"priv",auteur," ".join(message)+"[successful]") else: @@ -562,7 +573,7 @@ class Basile(ircbot.SingleServerIRCBot): elif cmd=="die": if auteur in self.overops: log(self.serveur,"priv",auteur," ".join(message)+"[successful]") - self.die() + self.mourir() else: notunderstood=True elif cmd=="quiet": @@ -612,7 +623,7 @@ class Basile(ircbot.SingleServerIRCBot): 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 ") + serv.privmsg(auteur,"Syntaxe : KICK []") else: notunderstood=True elif cmd=="lost": @@ -637,6 +648,7 @@ class Basile(ircbot.SingleServerIRCBot): log(self.serveur,"priv",auteur," ".join(message)+"[failed]") return serv.privmsg(auteur,"%s (%s)"%(float(solde)/100,pseudo.encode("utf8"))) + log(self.serveur,"priv",auteur," ".join(message)+"[successful]") else: serv.privmsg(canal,"Je ne connais pas ton pseudo note.") elif auteur in self.ops: @@ -650,6 +662,16 @@ class Basile(ircbot.SingleServerIRCBot): log(self.serveur,"priv",auteur," ".join(message)+"[failed]") return serv.privmsg(auteur,"%s (%s)"%(float(solde)/100,pseudo.encode("utf8"))) + elif cmd=="ops": + if auteur in self.overops: + serv.privmsg(auteur," ".join(self.ops)) + else: + notunderstood=True + elif cmd=="overops": + if auteur in self.overops: + serv.privmsg(auteur," ".join(self.overops)) + else: + notunderstood=True else: notunderstood=True if notunderstood: @@ -664,7 +686,7 @@ class Basile(ircbot.SingleServerIRCBot): except UnicodeBotError: if not canal in self.quiet_channels: serv.privmsg(canal, - "%s: Si je n'avais pas été créé avec la plus grande attention, votre encodage m'aurait déjà tué…"%(auteur)) + "%s: Si je n'avais pas été créé avec la plus grande attention, votre encodage aurait eu raison de moi…"%(auteur)) return pour_moi,message=self.pourmoi(serv,message) if pour_moi and message.split()!=[]: @@ -676,7 +698,7 @@ class Basile(ircbot.SingleServerIRCBot): if cmd in ["meurs","die","crève"]: if auteur in self.overops: log(self.serveur,canal,auteur,message+"[successful]") - self.die() + self.mourir() else: serv.privmsg(canal,"%s: mourrez vous-même !"%(auteur)) log(self.serveur,canal,auteur,message+"[failed]") @@ -684,7 +706,7 @@ class Basile(ircbot.SingleServerIRCBot): elif cmd in ["part","leave","dégage","va-t-en","tut'tiresailleurs,c'estmesgalets"]: if auteur in self.ops and (not (canal in self.stay_channels) or auteur in self.overops): - serv.part(canal,message="Éjecté par %s"%(auteur)) + self.quitter(canal) log(self.serveur,canal,auteur,message+"[successful]") if canal in self.chanlist: self.chanlist.remove(canal) @@ -746,6 +768,8 @@ class Basile(ircbot.SingleServerIRCBot): elif re.match("!?manzana",message.lower()) and not canal in self.quiet_channels: if auteur in config_manzana: serv.action(canal,"sert une bouteille de manzana à %s"%(auteur)) + elif auteur in config_manzana_bis: + serv.action(canal,"sert un grand verre de jus de pomme à %s : tout le monde sait qu'il ne boit pas."%(auteur)) else: serv.action(canal,"sert un verre de manzana à %s"%(auteur)) if is_insult(message) and not canal in self.quiet_channels: @@ -841,9 +865,11 @@ class Basile(ircbot.SingleServerIRCBot): if message in ["!manzana"] and not canal in self.quiet_channels: if auteur in config_manzana: serv.action(canal,"sert une bouteille de manzana à %s"%(auteur)) + elif auteur in config_manzana_bis: + serv.action(canal,"sert un grand verre de jus de pomme à %s : tout le monde sait qu'il ne boit pas."%(auteur)) else: serv.action(canal,"sert un verre de manzana à %s"%(auteur)) - if re.match('^(.|§|:|)(w|b) [0-9]+$',message) and not canal in self.quiet_channels: + if re.match(u'^ *(.|§|!|/|/|:|)(w|b) [0-9]+$',message.decode("utf8")) and not canal in self.quiet_channels: failanswers=config_buffer_fail_answers answer=random.choice(failanswers) serv.privmsg(canal,("%s: %s"%(auteur,answer)).encode("utf8")) @@ -909,7 +935,16 @@ class Basile(ircbot.SingleServerIRCBot): serv.action(channel,l2[i-n1].format(auteur).encode("utf8")) else: serv.privmsg(channel,l1[i].format(auteur).encode("utf8")) - + + def quitter(self,chan,leave_message=None): + if leave_message==None: + leave_message=random.choice(config_leave_messages) + self.serv.part(chan,message=leave_message.encode("utf8")) + + def mourir(self): + quit_message=random.choice(config_quit_messages) + self.die(msg=quit_message.encode("utf8")) + def _getnick(self): return self.serv.get_nickname() nick=property(_getnick)