]> gitweb.pimeys.fr Git - scripts-20-100.git/blobdiff - newsbot/signe.py.deprecated
[newsbot] Bot qui insulte les gens qui signent mal/pas sur les news
[scripts-20-100.git] / newsbot / signe.py.deprecated
diff --git a/newsbot/signe.py.deprecated b/newsbot/signe.py.deprecated
new file mode 100644 (file)
index 0000000..e0a78d8
--- /dev/null
@@ -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