From: Vincent Le Gallic Date: Sat, 1 Jun 2013 02:09:36 +0000 (+0200) Subject: Début de séparation de ce qui concerne NK2015 dans un fichier nk.py X-Git-Url: http://gitweb.pimeys.fr/?a=commitdiff_plain;h=3d828f49cb74dd5992502c51d3f820f5e79faa52;p=bots%2Fbasile.git Début de séparation de ce qui concerne NK2015 dans un fichier nk.py --- diff --git a/basile.py b/basile.py index 60df813..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) diff --git a/nk.py b/nk.py new file mode 100644 index 0000000..c80adfd --- /dev/null +++ b/nk.py @@ -0,0 +1,72 @@ +#!/usr/bin/python +# -*- coding:utf-8 -*- + +# Codé par 20-100 + +""" Module de Basile pour dialoguer avec la NoteKfet2015 """ + +import socket +import json +import ssl + +#: Config de basile +import config + +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 connect(): + 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(username,password,typ="bdd"): + sock=connect() + 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 +