]> gitweb.pimeys.fr Git - scripts-20-100.git/blob - newsbot/signe.py.deprecated
[bde] Aliases, comme adhesions
[scripts-20-100.git] / newsbot / signe.py.deprecated
1 #!/usr/bin/python
2 # -*- coding:utf8 -*-
3
4 # codé par 20-100 à partir du 02/04/12, sur une idée de NeK
5
6 import socket
7 import time
8 import pickle
9 import re
10
11 def start():
12 # ouvre une connexion avec le serveur de news et renvoie la socket
13 s=socket.socket()
14 s.connect(("news.crans.org",119))
15 s.recv(4096)
16 return s
17
18 def ask(s,something):
19 # effectue une requête et renvoie (execution_code,result)
20 s.send(something+"\n")
21 time.sleep(0.05)
22 t=s.recv(8192)
23 try:
24 firstline,rest=t.split(' ',1)
25 except:
26 print t
27 raise
28 return int(firstline.split()[0]),rest
29
30 def get_groups(s):
31 # donne la liste des groupes existants
32 cod,t=ask(s,"list")
33 if cod in range(200,300):
34 l=t.split("\n")[2:-2]
35 return [i.split()[0] for i in l]
36 else:
37 raise KeyboardInterrup("communication error : %s"%(cod))
38
39 def load_read():
40 # charge le dico des derniers messages lus
41 return pickle.load(open("dicoread.txt"))
42
43 def save_read(dicoread):
44 # sauvegarde le dio des derniers messages lus
45 pickle.dump(dicoread,open("dicoread.txt","w"))
46
47 def get_last_message(s,group):
48 # renvoie le dernier message existant dans un groupe
49 cod,t=ask(s,"group %s"%(group))
50 if cod in range(200,300):
51 return int(t.split()[2])
52 else:
53 raise KeyboardInterrup("communication error : %s"%(cod))
54
55 def get_all_last(s,groups):
56 # récupère les derniers messages de tous les groupes
57 dicolast={}
58 for g in groups:
59 dicolast[g]=get_last_message(s,g)
60 return dicolast
61
62 def get_nouveaux_messages(s,groups,dicoread,dicounread):
63 # crée un itérateurs sur les nouveaux messages
64 # un "nouveau" message c'est un message dont le numéro
65 # est supérieur strict à celui dans dicoread
66 # mais inférieur à celui dans dicounread
67 for g in groups:
68 if not(dicoread.has_key(g)):
69 dicoread[g]=0
70 # il faut lui redire dans quel groupe on est
71 ask(s,"group %s"%(g))
72 for ident in range(dicoread[g]+1,dicounread[g]+1):
73 # on demande les headers du message
74 cod,rest=ask(s,"head %s"%(ident))
75 if cod in range(200,300):
76 mid=re.findall('Message-ID:(.*)',t)[0].strip()
77 ref=False
78 try:
79 ref=re.findall('References:(.*)',t)[0].strip()
80 _,message
81 yield rest
82 else:
83 # bon bah ce massage existe pas, tant pis
84 pass