]> gitweb.pimeys.fr Git - scripts-20-100.git/blob - newsbot/signe.py
[record.sh] On peut faire des compétitions où les jeunes ont une chance
[scripts-20-100.git] / newsbot / signe.py
1 #!/usr/bin/python
2 # -*- coding:utf8 -*-
3
4 """
5 Bot qui insulte les gens qui signent mal sur les news.
6
7 Codé par 20-100 le 02... ah non le 03/04/12 sur une idée de NeK
8 C'est la version 2, parce qu'en utilisant la lib python faite pour,
9 c'est quand même plus facile :D
10 """
11
12 import nntplib
13 import pickle
14 import time, re
15 import sys
16 from commands import getstatusoutput as ex
17
18 workingfile="tmpfile.article"
19
20 reallypost=False
21 if "-reallypost" in sys.argv:
22 reallypost=True
23
24 save=False
25 if "-save" in sys.argv:
26 save=True
27
28 def load_read():
29 # charge le dico des derniers messages lus
30 return pickle.load(open("dicoread.txt"))
31
32 def save_read(dicoread):
33 # sauvegarde le dio des derniers messages lus
34 pickle.dump(dicoread,open("dicoread.txt","w"))
35
36
37 con=nntplib.NNTP("news.crans.org")
38 dicoread=load_read()
39
40 newmessages=[]
41 dicounread={}
42 for group in dicoread.keys():
43 # on récupère le dernier id dans ce groupe
44 _,_,_,last,_=con.group(group)
45 dicounread[group]=int(last)
46 # on rajoute les infos des messages suivants
47 if int(last)>dicoread[group]:
48 bla=con.xover(str(dicoread[group]),last)[1]
49 newmessages+=bla
50
51 # on enlève les doubles en filtrant sur le message-id
52 nodouble=[]
53 for m in newmessages:
54 if not m[4] in [n[4] for n in nodouble]:
55 nodouble.append(m)
56 newmessages=nodouble
57
58 for (_,subject,poster,date,ident,refs,_,_) in newmessages:
59 messagelines=con.body(ident)[3]
60 if not "-- " in messagelines:
61 # alors il est mal signé
62 # on a besoin des newsgroups sur lesquels il a été posté
63 # et on obéit au Followup-To
64 headers=con.head(ident)[3]
65 ng,fu2="crans.test",None
66 for h in headers:
67 if re.match('Newsgroups',h):
68 ng=h[12:]
69 elif re.match('Followup-To',h):
70 fu2=h[13:]
71 if fu2:
72 ng=fu2
73 "\n".join(messagelines)
74 date=time.strptime(date[:-6],"%a, %d %b %Y %H:%M:%S")
75 date=time.strftime("Le %d/%m/%Y %H:%M",date)
76 f=open("workingfile",'w')
77 f.write("post\n")
78 f.write("From: sign-bot@crans.org\r\n")
79 f.write("Subject: %s\r\n"%(subject))
80 f.write("References: %s %s\r\n"%(refs,ident))
81 f.write("In-Reply-To: %s\r\n"%(ident))
82 f.write("Newsgroups: %s\r\n"%(ng))
83 f.write("Content-Type: text/plain; charset=utf-8\r\n")
84 f.write("Content-Transfer-Encoding: 8bit\r\n\r\n")
85 f.write("%s, %s a écrit :\r\n"%(date,re.sub('<.*>','',poster)))
86 f.write(">"+"\r\n>".join(messagelines))
87 f.write("\r\n\r\nPour signer, c'est\r\n[tiret][tiret][espace][entrée]\r\n[signature]\r\n-- \r\nSign-bot\r\n")
88 f.write(".\r\n")
89 f.write("quit\n")
90 f.close()
91 if ng=="crans.test":
92 if reallypost:
93 out=ex("cat workingfile | nc news.crans.org nntp")
94 else:
95 out=ex("cat workingfile")[1]
96 #print out
97 print subject, poster
98
99
100 # On enregistre les messages qu'on a maintenant traité
101 if save:
102 save_read(dicounread)