X-Git-Url: http://gitweb.pimeys.fr/?p=bots%2Fdeconnaisseur.git;a=blobdiff_plain;f=backup%2Fdummy%2Fdeconnaisseur.py;fp=backup%2Fdummy%2Fdeconnaisseur.py;h=0000000000000000000000000000000000000000;hp=e0a50936dccfdb0fb43b7d686f6523dd7fd09834;hb=90b8bc3f3c7dd2dd0b5202fc6775d9a06ad0044a;hpb=256775d7e99a64e60fdb7c77e7a4dc71715629b7 diff --git a/backup/dummy/deconnaisseur.py b/backup/dummy/deconnaisseur.py deleted file mode 100755 index e0a5093..0000000 --- a/backup/dummy/deconnaisseur.py +++ /dev/null @@ -1,393 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf8 -*- - -# Codé par 20-100 le 23/04/12 - -# Un bot IRC qui sort des déconnaissances - -import irclib -import ircbot -import threading -import random -import time -import pickle -import re - -config_password="PatrickSébastien" -config_pseudo="deconnaisseur" -config_chanlist=["#bot","#flood"] -config_play_channels=["#flood"] -config_stay_channels=["#flood","#bot"] -config_overops=["[20-100]","[20-100]_","PEB"] -config_ops=["Nit","Eguel","Harry"] - -config_source_file_template="deconnaissances.%s.txt" #il faut rajouter le nom du serveur -def get_config_source_file(serveur): - serveurs={"acoeur.crans.org":"acoeur","irc.crans.org":"crans"} - return config_source_file_template%(serveurs[serveur]) -ttrig=120 #time trigger (normalement 120, mais diminué pour les tests) -Ttrig=600 #between two enigms -config_time_incompressible=60 #on peut pas retrigger en dessous de ce temps (60) -config_time_incompressible_clue=60 #on peut pas forcer la demande d'indice en dessous - - -class UnicodeBotError(Exception): - pass -def bot_unicode(chain): - try: - unicode(chain,"utf8") - except UnicodeDecodeError: - raise UnicodeBotError - -def log(channel,auteur=None,message=None): - #f=open(config_logfile,"a") - #if auteur==message==None: - # chain=channel - #else: - # chain="%s [%s:%s] %s"%(time.strftime("%T"),channel,auteur,message) - #f.write(chain+"\n") - #print chain - #f.close() - a=0 # does nothing - - -def tolere(regexp): - """Renvoie une regexp plus tolérante""" - reg=unicode(regexp,"utf8").lower() - reg=reg.replace(u"á",u"(á|a)").replace(u"à",u"(à|a)").replace(u"â",u"(â|a)").replace(u"ä",u"(ä|a)") - reg=reg.replace(u"é",u"(é|e)").replace(u"è",u"(è|e)").replace(u"ê",u"(ê|e)").replace(u"ë",u"(ë|e)") - reg=reg.replace(u"í",u"(í|i)").replace(u"ì",u"(ì|i)").replace(u"î",u"(î|i)").replace(u"ï",u"(ï|i)") - reg=reg.replace(u"ó",u"(ó|o)").replace(u"ò",u"(ò|o)").replace(u"ê",u"(ô|o)").replace(u"ö",u"(ö|o)") - reg=reg.replace(u"ú",u"(ú|u)").replace(u"ù",u"(ù|u)").replace(u"ê",u"(û|u)").replace(u"ü",u"(ü|u)") - reg=reg.replace(u"ý",u"(ý|y)").replace(u"ỳ",u"(ỳ|y)").replace(u"ê",u"(ŷ|y)").replace(u"ÿ",u"(ÿ|y)") - reg=reg.replace(u"œ",u"(œ|oe)").replace(u"æ",u"(æ|ae)") - return reg - -class RefuseError(Exception): - pass - -class Deconnaisseur(ircbot.SingleServerIRCBot): - def __init__(self,serveur,debug=False): - temporary_pseudo=config_pseudo+str(random.randrange(10000,100000)) - ircbot.SingleServerIRCBot.__init__(self, [(serveur, 6667)], - temporary_pseudo,"Un bot irc.[flagellez 20-100, il le mérite]", 10) - self.debug=debug - self.serveur=serveur - self.overops=config_overops - self.ops=self.overops+config_ops - self.chanlist=config_chanlist - self.stay_channels=config_stay_channels - self.play_channels=config_play_channels - self.play_status={i:[0] for i in self.play_channels} - - def give_me_my_pseudo(self,serv): - serv.privmsg("NickServ","RECOVER %s %s"%(config_pseudo,config_password)) - serv.privmsg("NickServ","RELEASE %s %s"%(config_pseudo,config_password)) - time.sleep(0.3) - serv.nick(config_pseudo) - - def on_welcome(self, serv, ev): - self.give_me_my_pseudo(serv) - serv.privmsg("NickServ","identify %s"%(config_password)) - log("Connected") - if self.debug: - self.chanlist=["#bot"] - self.play_channels=["#bot"] - for c in self.chanlist: - log("JOIN %s"%(c)) - serv.join(c) - for c in self.play_channels: - token=time.time()-3600 - self.play_status[c]=[0,token] - serv.execute_delayed(random.randrange(ttrig),self.start_enigme,(serv,c,token)) - - def start_enigme(self,serv,channel,token=None): - if self.play_status[channel][0]==0 and channel in self.play_channels: - ok="skip" - if token==self.play_status[channel][-1]: - ok="do_it" - if token==None: - if time.time() > self.play_status[channel][-1]+config_time_incompressible: - ok="do_it" - else: - ok="refuse" - if ok=="do_it": - enigme,indice,answer_reg,answer=self.get_enigme() - print "%s; %s; %s; %s"%(enigme, indice, answer_reg, answer) - serv.privmsg(channel,enigme) - token=time.time() - self.play_status[channel]=[1,enigme,indice,answer_reg,answer,token] - serv.execute_delayed(random.randrange(ttrig*3,ttrig*5),self.give_indice,(serv,channel,token)) - elif ok=="refuse": - raise RefuseError - def give_indice(self,serv,channel,token): - if self.play_status[channel][0]==1: - if token==None: - # c'est donc que l'indice a été demandé - if self.play_status[channe][-1]+config_time_incompressible_clue1: - if message[1] in self.chanlist: - serv.privmsg(auteur,"Je suis déjà sur %s"%(message[1])) - else: - serv.join(message[1]) - self.chanlist.append(message[1]) - serv.privmsg(auteur,"Channels : "+" ".join(self.chanlist)) - log("priv",auteur," ".join(message)) - else: - serv.privmsg(auteur,"Channels : "+" ".join(self.chanlist)) - else: - notunderstood=True - elif cmd=="leave": - 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.chanlist.remove(message[1]) - log("priv",auteur," ".join(message)+"[successful]") - else: - serv.privmsg(auteur,"Non, je reste !") - log("priv",auteur," ".join(message)+"[failed]") - else: - serv.privmsg(auteur,"Je ne suis pas sur %s"%(message[1])) - else: - notunderstood=True - elif cmd=="stay": - if auteur in self.overops: - if len(message)>1: - if message[1] in self.stay_channels: - serv.privmsg(auteur,"Je stay déjà sur %s."%(message[1])) - log("priv",auteur," ".join(message)+"[failed]") - else: - self.stay_channels.append(message[1]) - serv.privmsg(auteur,"Stay channels : "+" ".join(self.stay_channels)) - log("priv",auteur," ".join(message)+"[successful]") - else: - serv.privmsg(auteur,"Stay channels : "+" ".join(self.stay_channels)) - else: - notunderstood=True - elif cmd=="nostay": - if auteur in self.overops: - if len(message)>1: - if message[1] in self.stay_channels: - self.stay_channels.remove(message[1]) - serv.privmsg(auteur,"Stay channels : "+" ".join(self.stay_channels)) - log("priv",auteur," ".join(message)+"[successful]") - else: - serv.privmsg(auteur,"Je ne stay pas sur %s."%(message[1])) - log("priv",auteur," ".join(message)+"[failed]") - else: - notunderstood=True - elif cmd=="play": - if auteur in self.ops: - if len(message)>1: - if message[1] in self.play_channels: - serv.privmsg(auteur,"Je play déjà sur %s."%(message[1])) - log("priv",auteur," ".join(message)+"[failed]") - else: - self.play_channels.append(message[1]) - self.play_status[message[1]]=[0,time.time()-3600] - serv.privmsg(auteur,"Play channels : "+" ".join(self.play_channels)) - log("priv",auteur," ".join(message)+"[successful]") - else: - serv.privmsg(auteur,"Play channels : "+" ".join(self.play_channels)) - else: - notunderstood=True - elif cmd=="noplay": - if auteur in self.ops: - if len(message)>1: - if message[1] in self.play_channels: - self.play_channels.remove(message[1]) - serv.privmsg(auteur,"Play channels : "+" ".join(self.play_channels)) - log("priv",auteur," ".join(message)+"[successful]") - else: - serv.privmsg(auteur,"Je ne play pas sur %s."%(message[1])) - log("priv",auteur," ".join(message)+"[failed]") - else: - notunderstood=True - elif cmd in ["states","status"]: - if auteur in self.overops: - for k in self.play_status.keys(): - serv.privmsg(auteur,"%s : %s"%(k,"; ".join([str(i) for i in self.play_status[k]]))) - elif cmd=="say": - if auteur in self.overops and len(message)>2: - serv.privmsg(message[1]," ".join(message[2:])) - log("priv",auteur," ".join(message)) - elif len(message)<=2: - serv.privmsg(auteur,"Syntaxe : SAY ") - else: - notunderstood=True - elif cmd=="die": - if auteur in self.overops: - self.die() - else: - notunderstood=True - if notunderstood: - serv.privmsg(auteur,"Je n'ai pas compris. Essaye HELP…") - - def on_pubmsg(self, serv, ev): - auteur = irclib.nm_to_n(ev.source()) - canal = ev.target() - message = ev.arguments()[0] - 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 - tryother=False - pour_moi,message=self.pourmoi(serv,message) - if pour_moi and message.split()!=[]: - cmd=message.split()[0].lower() - try: - args=" ".join(message.split()[1:]) - except: - args="" - if cmd in ["meurs","die","crève"]: - if auteur in self.overops: - self.die() - log(canal,auteur,message+"[successful]") - else: - serv.privmsg(canal,"%s: crève !"%(auteur)) - log(canal,auteur,message+"[failed]") - if cmd in ["meur", "meurt","meurre","meurres"]: - serv.privmsg(canal,'%s: Mourir, impératif, 2ème personne du pluriel : "meurs" (de rien)'%(auteur)) - if cmd in ["part","leave","dégage"]: - 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)) - log(canal,auteur,message+"[successful]") - else: - serv.privmsg(canal,"%s: Non, je reste !"%(auteur)) - log(canal,auteur,message+"[failed]") - - if cmd in ["deviens","pseudo"]: - if auteur in self.ops: - become=args - serv.nick(become) - log(canal,auteur,message+"[successful]") - - if cmd in ["coucou"]: - serv.privmsg(canal,"%s: coucou"%(auteur)) - if cmd in ["ping"]: - serv.privmsg(canal,"%s: pong"%(auteur)) - if cmd in ["déconnaissance","deconnaissance","énigme","enigme","encore"]: - if canal in self.play_channels: - if self.play_status.get(canal,[-1])[0]==0: - try: - self.start_enigme(serv,canal) - except RefuseError: - serv.privmsg(canal,"%s: Je peux souffler une minute ?"%(auteur)) - else: - serv.privmsg(canal,"%s: Rappel : %s"%(auteur,self.play_status[canal][1])) - else: - serv.privmsg(canal,"%s: pas ici…"%(auteur)) - else: - tryother=True - else: - tryother=True - if tryother: - if self.play_status.get(canal,[-1])[0] in [1,2]: - answer=self.play_status[canal][3] - if re.match(tolere(answer),unicode(message,"utf8").lower()): - serv.privmsg(canal,"%s: bravo ! (C'était %s)"%(auteur,answer)) - token=time.time() - self.play_status[canal]=[0,token] - serv.execute_delayed(random.randrange(Ttrig*5,Ttrig*10),self.start_enigme,(serv,canal,token)) - - -if __name__=="__main__": - import sys - if len(sys.argv)==1: - print "Usage : deconnaisseur.py [--debug]" - exit(1) - serveur=sys.argv[1] - if "debug" in sys.argv or "--debug" in sys.argv: - debug=True - else: - debug=False - serveurs={"a♡":"acoeur.crans.org","acoeur":"acoeur.crans.org","acoeur.crans.org":"acoeur.crans.org", - "irc":"irc.crans.org","crans":"irc.crans.org","irc.crans.org":"irc.crans.org"} - try: - serveur=serveurs[serveur] - except KeyError: - print "Server Unknown : %s"%(serveur) - exit(404) - deco=Deconnaisseur(serveur,debug) - deco.start()