X-Git-Url: http://gitweb.pimeys.fr/?a=blobdiff_plain;f=newsbot%2Fsigne.py.deprecated;fp=newsbot%2Fsigne.py.deprecated;h=e0a78d85ed6c2abf4ae6e259f8f5aef5ec069d71;hb=783742fe731044ce7be215aea3d13877cfaf6428;hp=0000000000000000000000000000000000000000;hpb=c20c78f6579ef226875061695c08f3415587f923;p=scripts-20-100.git diff --git a/newsbot/signe.py.deprecated b/newsbot/signe.py.deprecated new file mode 100644 index 0000000..e0a78d8 --- /dev/null +++ b/newsbot/signe.py.deprecated @@ -0,0 +1,84 @@ +#!/usr/bin/python +# -*- coding:utf8 -*- + +# codé par 20-100 à partir du 02/04/12, sur une idée de NeK + +import socket +import time +import pickle +import re + +def start(): + # ouvre une connexion avec le serveur de news et renvoie la socket + s=socket.socket() + s.connect(("news.crans.org",119)) + s.recv(4096) + return s + +def ask(s,something): + # effectue une requête et renvoie (execution_code,result) + s.send(something+"\n") + time.sleep(0.05) + t=s.recv(8192) + try: + firstline,rest=t.split(' ',1) + except: + print t + raise + return int(firstline.split()[0]),rest + +def get_groups(s): + # donne la liste des groupes existants + cod,t=ask(s,"list") + if cod in range(200,300): + l=t.split("\n")[2:-2] + return [i.split()[0] for i in l] + else: + raise KeyboardInterrup("communication error : %s"%(cod)) + +def load_read(): + # charge le dico des derniers messages lus + return pickle.load(open("dicoread.txt")) + +def save_read(dicoread): + # sauvegarde le dio des derniers messages lus + pickle.dump(dicoread,open("dicoread.txt","w")) + +def get_last_message(s,group): + # renvoie le dernier message existant dans un groupe + cod,t=ask(s,"group %s"%(group)) + if cod in range(200,300): + return int(t.split()[2]) + else: + raise KeyboardInterrup("communication error : %s"%(cod)) + +def get_all_last(s,groups): + # récupère les derniers messages de tous les groupes + dicolast={} + for g in groups: + dicolast[g]=get_last_message(s,g) + return dicolast + +def get_nouveaux_messages(s,groups,dicoread,dicounread): + # crée un itérateurs sur les nouveaux messages + # un "nouveau" message c'est un message dont le numéro + # est supérieur strict à celui dans dicoread + # mais inférieur à celui dans dicounread + for g in groups: + if not(dicoread.has_key(g)): + dicoread[g]=0 + # il faut lui redire dans quel groupe on est + ask(s,"group %s"%(g)) + for ident in range(dicoread[g]+1,dicounread[g]+1): + # on demande les headers du message + cod,rest=ask(s,"head %s"%(ident)) + if cod in range(200,300): + mid=re.findall('Message-ID:(.*)',t)[0].strip() + ref=False + try: + ref=re.findall('References:(.*)',t)[0].strip() + _,message + yield rest + else: + # bon bah ce massage existe pas, tant pis + pass