# 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)",
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 on m'a demandé de mourir
-config_quit_message=[u"Bien que cela me désole, je me vois dans l'obligation de vous abandonner."]
-
+# 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):
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
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 [<username>] <password>")
- 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 [<username>] <password>
- Ouvre une connexion au serveur NoteKfet.
- Si <username> n'est pas précisé, j'utiliserais l'identité sous laquelle je te connais, ou, à défaut, ton pseudo.""",
-"identify": """IDENTIFY <username> <password>
- 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 <password>
- 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 <pseudo> 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 <commande>
+ Affiche de l'aide sur la commande""",None,None],
+"identify": ["""IDENTIFY <username> <password>
+ 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 <password>
+ 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 <pseudo>
+ Affiche le solde de la personne désignée (par son pseudo note).""",None],
+ "join": [None, """JOIN <channel>
+ Me fait rejoindre le channel""",None],
+ "leave": [None,"""LEAVE <channel>
+ Me fait quitter le channel (sauf s'il est dans ma stay_list).""",None],
+ "quiet": [None,"""QUIET <channel>
+ Me rend silencieux sur le channel.""",None],
+ "noquiet": [None,"""NOQUIET <channel>
+ Me rend la parole sur le channel.""",None],
+ "lost": [None,"""LOST <channel>
+ Me fait perdre sur le channel.""",None],
+ "say": [None,None,"""SAY <channel> <message>
+ Me fait parler sur le channel."""],
+ "do": [None,None,"""DO <channel> <action>
+ Me fait faitre une action (/me) sur le channel."""],
+ "stay": [None,None,"""STAY <channel>
+ Ajoute le channel à ma stay_list."""],
+ "nostay": [None,None,"""NOSTAY <channel>
+ 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 <channel> <pseudo> [<raison>]
+ Kicke <pseudo> 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)
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:
elif cmd=="die":
if auteur in self.overops:
log(self.serveur,"priv",auteur," ".join(message)+"[successful]")
- self.die(message=config_quit_message)
+ self.mourir()
else:
notunderstood=True
elif cmd=="quiet":
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>")
+ serv.privmsg(auteur,"Syntaxe : KICK <channel> <pseudo> [<raison>]")
else:
notunderstood=True
elif cmd=="lost":
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:
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:
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()!=[]:
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]")
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)
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:
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"))
victime = ev.arguments()[0]
raison = ev.arguments()[1]
if victime==self.nick:
- log(self.serveur,"%s kické par %s (raison : %s)" %(victime,auteur,raison))
+ log(self.serveur,"%s kické de %s par %s (raison : %s)" %(victime,channel,auteur,raison))
time.sleep(2)
serv.join(channel)
l1,l2=config_kick_answers,config_kick_actions
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)