X-Git-Url: http://gitweb.pimeys.fr/?a=blobdiff_plain;f=basile.py;h=96641c120badf7e01959faa6d3351b017c898ebe;hb=3d828f49cb74dd5992502c51d3f820f5e79faa52;hp=359c75f951b76a4fcc79800e0788c48dcfd5eeac;hpb=99a8248b42e55993cea58e28ac94a816c709f090;p=bots%2Fbasile.git diff --git a/basile.py b/basile.py index 359c75f..96641c1 100755 --- a/basile.py +++ b/basile.py @@ -3,12 +3,12 @@ # Codé par 20-100 (commencé le 23/04/12) -# Un bot IRC qui, un jour, s'interfacera avec la Note Kfet 2015 +""" Un bot IRC destiné à s'interfacer avec la Note Kfet 2015 """ import threading import random import time -import socket, ssl, json +import json import pickle import re import os @@ -22,8 +22,10 @@ import ircbot from commands import getstatusoutput as ex -# on récupère la config +#: Config de basile import config +#: Module responsable du dialogue avec la NoteKfet2015 +import nk # la partie qui réfère au fichier lui-même est mieux ici # sinon on réfère la config et pas le fichier lui-même @@ -37,24 +39,6 @@ def get_config_logfile(serveur): def get_filesize(): return ex("ls -s %s"%(config.thisfile))[1].split()[0] -class NKError(Exception): - def __init__(self,msg): - Exception.__init__(self) - self.msg=msg - def __str__(self): - return str(self.msg) - def __unicode__(self): - return unicode(self.msg) - -class NKRefused(NKError): - pass - -class NKHelloFailed(NKError): - pass - -class NKUnknownError(NKError): - pass - def log(serveur,channel,auteur=None,message=None): f=open(get_config_logfile(serveur),"a") if auteur==message==None: @@ -67,46 +51,6 @@ def log(serveur,channel,auteur=None,message=None): print chain f.close() -def connect_NK(): - sock=socket.socket() - try: - # On établit la connexion sur port 4242 - sock.connect((config.nk_server, config.nk_port)) - # On passe en SSL - sock=ssl.wrap_socket(sock,ca_certs='../keys/ca_.crt') - # On fait un hello - sock.write('["hello", "Basile"]') - # On récupère la réponse du hello - out=sock.read() - out=json.loads(out) - except Exception as exc: - # Si on a foiré quelque part, c'est que le serveur est down - raise NKRefused(str(exc)) - if out["retcode"]==0: - return sock - elif out["retcode"]==11: - raise NKHelloFailed(out["errmsg"]) - else: - raise NKUnknownError(out["errmsg"]) - -def login_NK(username,password,typ="bdd"): - sock=connect_NK() - if typ=="special": # ça c'est pour Basile lui-même - masque='[]' - elif typ=="bdd": - masque='[[], [], true]' - try: - # Basile a un compte special user - commande='["login", [%s,%s,"%s",%s]]'%(json.dumps(username),json.dumps(password),typ,masque) - sock.write(commande) - out=sock.read() - except Exception as exc: - # Si on a foiré quelque part, c'est que le serveur est down - raise NKRefused(str(exc)) - # On vérifie ensuite que le login - return json.loads(out),sock - - def is_something(chain,matches,avant=u".*(?:^| )",apres=u"(?:$|\.| |,|;).*",case_sensitive=False,debug=False): if case_sensitive: chain=unicode(chain,"utf8") @@ -197,19 +141,21 @@ class Basile(ircbot.SingleServerIRCBot): def new_connection_NK(self,serv,username,password,typ="bdd"): + """Renvoie (``True``, ) + ou bien (``False``, None)""" try: - login_result,sock=login_NK(username,password,typ) + login_result,sock=nk.login(username,password,typ) droits,retcode,errmsg=login_result["msg"],login_result["retcode"],login_result["errmsg"] - except NKRefused as exc: + except nk.NKRefused as exc: for report in self.report_bugs_to: serv.privmsg(report,"Le Serveur NK2015 est down.") return (False,None) - except NKHelloFailed as exc: + except nk.NKHelloFailed as exc: for report in self.report_bugs_to: serv.privmsg(report, "La version du site utilisée n'est pas supportée par le serveur NK2015.") return (False,None) - except NKUnknownError as exc: + except nk.NKUnknownError as exc: erreurs=["Une fucking erreur inconnue s'est produite"] erreurs+=str(exc).split("\n") for report in self.report_bugs_to: @@ -226,6 +172,7 @@ class Basile(ircbot.SingleServerIRCBot): return (False,None) def give_me_my_pseudo(self,serv): + """Récupère le pseudo auprès de NickServ.""" serv.privmsg("NickServ","RECOVER %s %s"%(config.irc_pseudo,config.irc_password)) serv.privmsg("NickServ","RELEASE %s %s"%(config.irc_pseudo,config.irc_password)) time.sleep(0.3) @@ -724,14 +671,14 @@ class Basile(ircbot.SingleServerIRCBot): if re.match("ma bite dans ton oreille",message) and not canal in self.quiet_channels: serv.privmsg(canal,"%s: Seul un olasd peut imiter un olasd dans un de ses grands jours !"%(auteur)) if out and not canal in self.quiet_channels: - out=out.groups()[0] + out = out.groups()[0] try: - out=int(out) - serv.privmsg(canal,"%s: %s !"%(auteur,out+1)) - if out==2147483647: - serv.privmsg(canal,"%s: Ciel, un maxint ! Heureusement que je suis en python…"%(auteur)) + iout = int(out) + serv.privmsg(canal,"%s: %s !"%(auteur, iout + 1)) + if iout == 2147483647: + serv.privmsg(canal,"%s: Ciel, un maxint ! Heureusement que je suis en python…" % (auteur)) return - if out+1>1000 and random.randrange(4)==0: + if iout + 1 > 1000 and random.randrange(4)==0: serv.privmsg(canal,"%s: Vous savez, moi et les chiffres…"%(auteur)) return except Exception as exc: