diff --git a/atom.py b/atom.py
index 66acebd..a06f54a 100755
--- a/atom.py
+++ b/atom.py
@@ -18,8 +18,18 @@ class AtomEntry:
except:
print (node.getElementsByTagName("updated")[0].firstChild.nodeValue[:10])
self.updated = time.localtime ()
- self.summary = node.getElementsByTagName("summary")[0].firstChild.nodeValue
- self.link = node.getElementsByTagName("link")[0].getAttribute ("href")
+ if len(node.getElementsByTagName("summary")) > 0:
+ self.summary = node.getElementsByTagName("summary")[0].firstChild.nodeValue
+ else:
+ self.summary = None
+ if len(node.getElementsByTagName("link")) > 0:
+ self.link = node.getElementsByTagName("link")[0].getAttribute ("href")
+ else:
+ self.link = None
+ if len (node.getElementsByTagName("category")) > 1:
+ self.category = node.getElementsByTagName("category")[0].getAttribute ("term")
+ else:
+ self.category = None
if len (node.getElementsByTagName("link")) > 1:
self.link2 = node.getElementsByTagName("link")[1].getAttribute ("href")
else:
@@ -42,6 +52,8 @@ class Atom:
def diff (self, other):
differ = list ()
for k in other.entries.keys ():
+ if self.updated is None and k not in self.entries:
+ self.updated = entry.updated
if k not in self.entries and other.entries[k].updated >= self.updated:
differ.append (other.entries[k])
return differ
@@ -62,3 +74,4 @@ if __name__ == "__main__":
print (b.updated)
diff = a.diff (b)
+ print (diff)
diff --git a/birthday.py b/birthday.py
index 926c896..6f8fdf4 100644
--- a/birthday.py
+++ b/birthday.py
@@ -1,6 +1,7 @@
# coding=utf-8
import re
+import sys
from datetime import datetime
from datetime import date
from xml.dom.minidom import parse
@@ -44,7 +45,7 @@ def load_module(datas_path):
BIRTHDAYS = {}
filename = datas_path + "/birthdays.xml"
- print ("Loading birthdays ...",)
+ sys.stdout.write ("Loading birthdays ... ")
dom = parse(filename)
xmlparse (dom.getElementsByTagName('birthdays')[0])
print ("done (%d loaded)" % len(BIRTHDAYS))
@@ -53,7 +54,7 @@ def load_module(datas_path):
def save_module():
"""Save the dates"""
global filename
- print ("Saving birthdays ...",)
+ sys.stdout.write ("Saving birthdays ... ")
impl = getDOMImplementation()
newdoc = impl.createDocument(None, 'birthdays', None)
diff --git a/events.py b/events.py
index 850ea7e..3d9aa91 100644
--- a/events.py
+++ b/events.py
@@ -1,6 +1,7 @@
# coding=utf-8
import re
+import sys
from datetime import timedelta
from datetime import datetime
from datetime import date
@@ -51,7 +52,7 @@ def load_module(datas_path):
EVENTS = {}
filename = datas_path + "/events.xml"
- print ("Loading events ...",)
+ sys.stdout.write ("Loading events ... ")
dom = parse(filename)
xmlparse (dom.getElementsByTagName('events')[0])
print ("done (%d loaded)" % len(EVENTS))
@@ -60,7 +61,7 @@ def load_module(datas_path):
def save_module():
"""Save the dates"""
global filename
- print ("Saving events ...",)
+ sys.stdout.write ("Saving events ... ")
impl = getDOMImplementation()
newdoc = impl.createDocument(None, 'events', None)
diff --git a/message.py b/message.py
index b233f66..a0d7803 100755
--- a/message.py
+++ b/message.py
@@ -154,15 +154,12 @@ class Message:
def parsemsg (self, mods):
- if re.match(".*(norme|coding style).*", self.content) is not None and re.match(".*(please|give|obtenir|now|plz|stp|svp|s'il (te|vous) pla.t|check).*", self.content) is not None:
- norme.launch (self.srv.s, self.sender, self.content)
-
#Treat all messages starting with 'nemubot:' as distinct commands
- elif self.content.find("%s:"%self.srv.nick) == 0:
+ if self.content.find("%s:"%self.srv.nick) == 0:
messagel = self.content.lower()
#Is it a simple response?
- if re.match(".*(m[' ]?entends?[ -]+tu|h?ear me|do you copy|ping).*", messagel) is not None:
+ if re.match(".*(m[' ]?entends?[ -]+tu|h?ear me|do you copy|ping)", messagel) is not None:
self.send_chn ("%s: pong"%(self.sender))
elif re.match(".*di[st] (a|à) ([a-zA-Z0-9_]+) (.+)$", messagel) is not None:
diff --git a/nemubot.py b/nemubot.py
index 883c28c..f9b1d71 100755
--- a/nemubot.py
+++ b/nemubot.py
@@ -10,7 +10,7 @@ from datetime import datetime
from datetime import timedelta
from xml.dom.minidom import parse
-imports = ["birthday", "qd", "events", "youtube"]
+imports = ["birthday", "qd", "events", "youtube", "watchWebsite"]
imports_launch = ["watchWebsite"]
mods = list ()
import server
@@ -51,7 +51,6 @@ for serveur in config.getElementsByTagName('server'):
for imp in imports_launch:
mod = __import__ (imp)
- mod.load_module (basedir + "/datas/")
mod.launch (servers)
print ("Nemubot ready, my PID is %i!" % (os.getpid()))
diff --git a/qd.py b/qd.py
index fd93ded..0b4afd4 100644
--- a/qd.py
+++ b/qd.py
@@ -2,6 +2,7 @@
import re
import time
+import sys
from datetime import timedelta
from datetime import datetime
from datetime import date
@@ -15,18 +16,105 @@ MANCHE = None
SCORES = dict ()
temps = dict ()
+class Score:
+ def __init__(self):
+ #FourtyTwo
+ self.ftt = 0
+ #TwentyThree
+ self.twt = 0
+ self.pi = 0
+ self.notfound = 0
+ self.tententen = 0
+ self.leet = 0
+ self.great = 0
+ self.bad = 0
+ self.last = None
+ self.changed = False
+
+ def parse(self, item):
+ self.ftt = int(item.getAttribute("fourtytwo"))
+ self.twt = int(item.getAttribute("twentythree"))
+ self.pi = int(item.getAttribute("pi"))
+ self.notfound = int(item.getAttribute("notfound"))
+ self.tententen = int(item.getAttribute("tententen"))
+ self.leet = int(item.getAttribute("leet"))
+ self.great = int(item.getAttribute("great"))
+ self.bad = int(item.getAttribute("bad"))
+
+ def newWinner(self):
+ self.ftt = 0
+ self.twt = 0
+ self.pi = 1
+ self.notfound = 1
+ self.tententen = 0
+ self.leet = 1
+ self.great = -1
+ self.bad = -4
+
+ def isWinner(self):
+ return self.great >= 42
+
+ def playFtt(self):
+ if self.canPlay():
+ self.ftt += 1
+ self.last = datetime.now()
+ def playTwt(self):
+ if self.canPlay():
+ self.twt += 1
+ self.last = datetime.now()
+ def playPi(self):
+ if self.canPlay():
+ self.pi += 1
+ self.last = datetime.now()
+ def playNoutfound(self):
+ if self.canPlay():
+ self.notfound += 1
+ self.last = datetime.now()
+ def playTen(self):
+ if self.canPlay():
+ self.tententen += 1
+ self.last = datetime.now()
+ def playLeet(self):
+ if self.canPlay():
+ self.leet += 1
+ self.last = datetime.now()
+ def playGreat(self):
+ if self.canPlay():
+ self.great += 1
+ self.last = datetime.now()
+ def playBad(self):
+ if self.canPlay():
+ self.bad += 1
+ self.last = datetime.now()
+
+ def toTuple(self):
+ return (self.ftt, self.twt, self.pi, self.notfound, self.tententen, self.leet, self.great, self.bad)
+
+ def canPlay(self):
+ self.changed = True
+ return self.last == None or self.last.minute != datetime.now().minute or self.last.hour != datetime.now().hour or self.last.day != datetime.now().day
+
+ def hasChanged(self):
+ if self.changed:
+ self.changed = False
+ return True
+ else:
+ return False
+
+ def score(self):
+ return (self.ftt * 2 - self.bad * 10 + self.great * 5 + self.leet * 3 + self.pi * 3.1415 + self.twt + self.notfound * 4.04)
+
+ def details(self):
+ return "42: %d, 23: %d, bad: %d, great: %d, leet: %d, pi: %d, 404: %d, 10: %d = %d."%(self.ftt, self.twt, self.bad, self.great, self.leet, self.pi, self.notfound, self.tententen, self.score())
+
+
def xmlparse(node):
"""Parse the given node and add scores to the global list."""
global SCORES, MANCHE
for item in node.getElementsByTagName("score"):
- SCORES[item.getAttribute("name")] = (int(item.getAttribute("fourtytwo")),
- int(item.getAttribute("twentythree")),
- int(item.getAttribute("pi")),
- int(item.getAttribute("notfound")),
- int(item.getAttribute("tententen")),
- int(item.getAttribute("leet")),
- int(item.getAttribute("great")),
- int(item.getAttribute("bad")))
+ SCORES[item.getAttribute("name")] = Score ()
+ SCORES[item.getAttribute("name")].parse(item)
+
manche = node.getElementsByTagName("manche")[0]
MANCHE = (int(manche.getAttribute("number")),
manche.getAttribute("winner"),
@@ -42,22 +130,22 @@ def load_module(datas_path):
SCORES = dict ()
filename = datas_path + "/42.xml"
- print ("Loading 42scores ...",)
+ sys.stdout.write ("Loading 42scores ... ")
dom = parse(filename)
xmlparse (dom.documentElement)
print ("done (%d loaded, currently in round %d)" % (len(SCORES), -42))
def save_module():
- """Save the dates"""
+ """Save the scores"""
global filename
- print ("Saving birthdays ...",)
+ sys.stdout.write ("Saving 42scores ... ")
impl = getDOMImplementation()
newdoc = impl.createDocument(None, 'game', None)
top = newdoc.documentElement
for name in SCORES.keys():
- scr = 'fourtytwo="%d" twentythree="%d" pi="%d" notfound="%d" tententen="%d" leet="%d" great="%d" bad="%d"'% SCORES[name]
+ scr = 'fourtytwo="%d" twentythree="%d" pi="%d" notfound="%d" tententen="%d" leet="%d" great="%d" bad="%d"'% SCORES[name].toTuple()
item = parseString ('' % (name, scr)).documentElement
top.appendChild(item);
@@ -78,7 +166,7 @@ def help_full ():
def rev (tupl):
(k, v) = tupl
- return (v, k)
+ return (v.score(), k)
def parseanswer (msg):
if msg.cmd[0] == "42" or msg.cmd[0] == "score" or msg.cmd[0] == "scores":
@@ -93,22 +181,15 @@ def parseanswer (msg):
if len(msg.cmd) > 1:
if msg.cmd[1].lower() in SCORES:
- (normal, bad, great, leet, pi, dt, nf) = user(msg.cmd[1])
- phrase += " %s: 42: %d, 23: %d, bad: %d, great: %d, leet: %d, pi: %d, 404: %d = %d."%(msg.cmd[1], normal, dt, bad, great, leet, pi, nf, normal * 2 - bad * 10 + great * 5 + leet * 3 + pi * 3.1415 + dt + nf * 4.04)
+ phrase += " " + msg.cmd[1] + ": " + SCORES[msg.cmd[1].lower()].details()
else:
phrase = " %s n'a encore jamais joué,"%(msg.cmd[1])
else:
- joueurs = dict()
-# for player in players:
- for player in SCORES.keys():
- if player in SCORES:
- joueurs[player] = score(player)
-
- for nom, scr in sorted(joueurs.items(), key=rev, reverse=True):
+ for nom, scr in sorted(SCORES.items(), key=rev, reverse=True):
if phrase == "":
- phrase = " *%s: %d*,"%(nom, scr)
+ phrase = " *%s: %d*,"%(nom, scr.score())
else:
- phrase += " %s: %d,"%(nom, scr)
+ phrase += " %s: %d,"%(nom, scr.score())
msg.send_chn ("Scores :%s" % (phrase[0:len(phrase)-1]))
return True
@@ -116,12 +197,6 @@ def parseanswer (msg):
return False
-def score(who):
- (qd, dt, pi, nf, ttt, leet, great, bad) = user(who)
-# return (normal * 2 + leet * 3 + pi * 3.1415 + dt + nf * 4.04) * (10000 * great / (1 + bad * 2.5))
- return (qd * 2 - bad * 10 + great * 5 + leet * 3 + pi * 3.1415 + dt + nf * 4.04)
-
-
def win(s, who):
global SCORES, MANCHE
who = who.lower()
@@ -141,7 +216,7 @@ def win(s, who):
SCORES = dict()
# SCORES[maxi_name] = (-10, 0, -4, 0, 0, -2, 0)
# SCORES[maxi_name] = (0, 0, 0, 0, 0, 0, 0)
- SCORES[who] = (0, 0, 1, 1, 0, 1, -1, -4)
+ SCORES[who].newWinner
if who != maxi_name:
msg.send_global ("Félicitations %s, tu remportes cette manche terminée par %s, avec un score de %d !"%(maxi_name, who, maxi_scor))
@@ -154,95 +229,81 @@ def win(s, who):
save_module ()
-def user(who):
- who = who.lower()
- if who in SCORES:
- return SCORES[who]
- else:
- return (0, 0, 0, 0, 0, 0, 0, 0)
-
-
-def canPlay(who):
- who = who.lower()
- if not who in temps or (temps[who].minute != datetime.now().minute or temps[who].hour != datetime.now().hour or temps[who].day != datetime.now().day):
- temps[who] = datetime.now()
- return True
- else:
- return False
-
-
def parseask (msg):
return False
+
+def getUser(name):
+ global SCORES
+ if name not in SCORES:
+ SCORES[name] = Score()
+ return SCORES[name]
+
+
def parselisten (msg):
# if msg.channel == "#nemutest":
if msg.channel != "#nemutest":
- (qd, dt, pi, nf, ttt, leet, great, bad) = user(msg.sender)
- sum = qd + dt + pi + nf + ttt + leet + great + bad
-
if (msg.content.strip().startswith("42") and len (msg.content) < 5) or ((msg.content.strip().lower().startswith("quarante-deux") or msg.content.strip().lower().startswith("quarante deux")) and len (msg.content) < 17):
if datetime.now().minute == 10 and datetime.now().second == 10 and datetime.now().hour == 10:
- ttt += 1
- great += 1
+ getUser(msg.sender).playTen()
+ getUser(msg.sender).playGreat()
elif datetime.now().minute == 42:
if datetime.now().second == 0:
- great += 1
- qd += 1
+ getUser(msg.sender).playGreat()
+ getUser(msg.sender).playFtt()
else:
- bad += 1
+ getUser(msg.sender).playBad()
if (msg.content.strip().startswith("23") and len (msg.content) < 5) or ((msg.content.strip().lower().startswith("vingt-trois") or msg.content.strip().lower().startswith("vingt trois")) and len (msg.content) < 14):
if datetime.now().minute == 23:
if datetime.now().second == 0:
- great += 1
- dt += 1
+ getUser(msg.sender).playGreat()
+ getUser(msg.sender).playTwt()
else:
- bad += 1
+ getUser(msg.sender).playBad()
if (msg.content.strip().startswith("101010") and len (msg.content) < 9):
if datetime.now().minute == 10 and datetime.now().hour == 10:
if datetime.now().second == 10:
- great += 1
- ttt += 1
+ getUser(msg.sender).playGreat()
+ getUser(msg.sender).playTen()
else:
- bad += 1
+ getUser(msg.sender).playBad()
if (msg.content.strip().startswith("12345") and len (msg.content) < 8) or (msg.content.strip().startswith("012345") and len (msg.content) < 9):
if datetime.now().hour == 1 and datetime.now().minute == 23 and datetime.now().second == 45:
- great += 1
- dt += 1
+ getUser(msg.sender).playGreat()
+ getUser(msg.sender).playTwt()
else:
- bad += 1
+ getUser(msg.sender).playBad()
if len (msg.content) < 12 and (msg.content.strip().lower().startswith("leet time") or msg.content.strip().lower().startswith("leettime") or msg.content.strip().lower().startswith("l33t time") or msg.content.strip().lower().startswith("1337")):
if datetime.now().hour == 13 and datetime.now().minute == 37:
if datetime.now().second == 0:
- great += 1
- leet += 1
+ getUser(msg.sender).playGreat()
+ getUser(msg.sender).playLeet()
else:
- bad += 1
+ getUser(msg.sender).playBad()
if len (msg.content) < 11 and (msg.content.strip().lower().startswith("pi time") or msg.content.strip().lower().startswith("pitime") or msg.content.strip().lower().startswith("3.14 time")):
if datetime.now().hour == 3 and datetime.now().minute == 14:
if datetime.now().second == 15 or datetime.now().second == 16:
- great += 1
- pi += 1
+ getUser(msg.sender).playGreat()
+ getUser(msg.sender).playPi()
else:
- bad += 1
+ getUser(msg.sender).playBad()
if len (msg.content) < 16 and (msg.content.strip().lower().startswith("time not found") or msg.content.strip().lower().startswith("timenotfound") or msg.content.strip().lower().startswith("404 time")) or (len (msg.content) < 6 and msg.content.strip().lower().startswith("404")):
if datetime.now().hour == 4 and datetime.now().minute == 4:
if datetime.now().second == 0 or datetime.now().second == 4:
- great += 1
- nf += 1
+ getUser(msg.sender).playGreat()
+ getUser(msg.sender).playNotfound()
else:
- bad += 1
+ getUser(msg.sender).playBad()
- if sum != qd + dt + pi + nf + ttt + leet + great + bad and (canPlay (msg.sender) or (datetime.now().second == 45 and datetime.now().minute == 23 and datetime.now().hour == 1)):
- SCORES[msg.sender.lower()] = (qd, dt, pi, nf, ttt, leet, great, bad)
- if great >= 42:
- print ("Nous avons un vainqueur ! Nouvelle manche :p")
- win(s, msg.sender)
- else:
- save_module ()
+ if getUser(msg.sender).isWinner():
+ print ("Nous avons un vainqueur ! Nouvelle manche :p")
+ win(s, msg.sender)
+ elif getUser(msg.sender).hasChanged():
+ save_module ()
return False
diff --git a/server.py b/server.py
index 20c46e2..f77ee91 100755
--- a/server.py
+++ b/server.py
@@ -29,7 +29,7 @@ class Server:
def send_msg (self, channel, msg, cmd = "PRIVMSG", endl = "\r\n"):
for line in msg.split("\n"):
- if line != "":
+ if line != "" and self.accepted_channel(channel):
self.s.send (("%s %s :%s%s" % (cmd, channel, line, endl)).encode ())
def send_global (self, msg, cmd = "PRIVMSG", endl = "\r\n"):
@@ -41,7 +41,7 @@ class Server:
_thread.start_new_thread(self.connect, (mods,))
def accepted_channel(self, channel):
- return (self.channels.find(channel) != -1)
+ return (self.channels.count(channel) != -1)
def read(self, mods):
self.readbuffer = "" #Here we store all the messages from server
@@ -56,10 +56,10 @@ class Server:
for line in temp:
msg = message.Message (self, line)
- try:
- msg.treat (mods)
- except:
- print ("Une erreur est survenue lors du traitement du message : %s"%line)
+# try:
+ msg.treat (mods)
+# except:
+# print ("Une erreur est survenue lors du traitement du message : %s"%line)
def connect(self, mods):
diff --git a/watchWebsite.py b/watchWebsite.py
index da0e0b3..a07a5cc 100644
--- a/watchWebsite.py
+++ b/watchWebsite.py
@@ -2,6 +2,7 @@
import http.client
import hashlib
+import sys
import time
import _thread
from urllib.parse import unquote
@@ -16,15 +17,118 @@ filename = ""
SITES = []
SRVS = None
-def xmlparse(node):
- """Parse the given node and add events to the global list."""
- for item in node.getElementsByTagName("watch"):
- if item.getAttribute("type"):
- type = item.getAttribute("type")
- else:
- type = "hash"
+class Site:
+ def __init__(self, item):
+ self.server = item.getAttribute("server")
+ self.page = item.getAttribute("page")
+ if item.getAttribute("type"):
+ self.type = item.getAttribute("type")
+ else:
+ self.type = "hash"
+ self.message = item.getAttribute("message")
+
+ self.thread = None
+ if item.getAttribute("time"):
+ self.updateTime = int(item.getAttribute("time"))
+ else:
+ self.updateTime = 60
+ self.lastChange = 0
+ self.lastpage = None
+ self.run = True
+
+ self.channels = list()
+ for channel in item.getElementsByTagName('channel'):
+ self.channels.append(channel.getAttribute("name"))
+
+
+ def start (self):
+ self.thread = _thread.start_new_thread (startThread, (self,))
+
+ def send_message (self, msg):
+ global SRVS
+ if len(self.channels) > 0:
+ for server in SRVS:
+ for chan in self.channels:
+ server.send_msg (chan, msg)
+ else:
+ for server in SRVS:
+ server.send_global (msg)
+
+ def treat_atom (self, content):
+ change=False
+ f = atom.Atom (content)
+ if self.lastpage is not None:
+ diff = self.lastpage.diff (f)
+ if len(diff) > 0:
+ print ("[%s] Page differ!"%self.server)
+ if f.id == "http://public.nbr23.com/rss.php":
+ for d in diff:
+ if d.category == None:
+ messageI = self.message % ("quel est ce nouveau fichier", "%s")
+ elif d.category == "Music":
+ messageI = self.message % ("quelles sont ces nouvelles musiques", "%s")
+ elif d.category == "TV_Shows":
+ messageI = self.message % ("quelle est cette nouvelle série", "%s")
+ elif d.category == "Movies":
+ messageI = self.message % ("quel est ce nouveau film", "%s")
+ elif d.category == "Books":
+ messageI = self.message % ("quel est ce nouveau livre", "%s")
+ else:
+ messageI = self.message % ("quel est ce nouveau fichier", "%s")
+ self.send_message (messageI % unquote (d.link))
+ elif f.id == "http://musik.p0m.fr/atom.php?nemubot":
+ for d in diff:
+ youtube.send_global (d.link2, self.message % (d.title, unquote (d.link)))
+ elif self.message.find ("%s") >= 0:
+ print ("[%s] Send message!"%self.server)
+ for d in diff:
+ self.send_message (self.message % unquote (d.title))
+ else:
+ self.send_message (self.message)
+ change=True
+ return (f, change)
+
+ def check (self):
+ while self.run:
+ try:
+# print ("Check %s/%s"%(self.server, self.page))
+ content = getPage(self.server, self.page)
+
+ if self.type == "atom":
+ (self.lastpage, change) = self.treat_atom (content)
+ if change:
+ if self.lastChange <= 0:
+ self.lastChange -= 1
+ else:
+ self.lastChange = 0
+ else:
+ self.lastChange += 1
+ else:
+ hash = hashlib.sha224(content).hexdigest()
+ if hash != self.lastpage:
+ if self.lastpage is not None:
+ self.send_message ()
+ self.lastpage = hash
+ if self.lastChange <= 0:
+ self.lastChange -= 1
+ else:
+ self.lastChange = 0
+ else:
+ self.lastChange += 1
+
+ #Update check time intervalle
+ #TODO
+
+ if self.updateTime < 10:
+ self.updateTime = 10
+ if self.updateTime > 400:
+ self.updateTime = 400
+
+ time.sleep(self.updateTime)
+ except:
+ print ("Une erreur est survenue lors de la récupération de la page " + self.server + "/" + self.page)
+ time.sleep(self.updateTime * 3)
- SITES.append ((item.getAttribute("server"), item.getAttribute("page"), type, item.getAttribute("message"), None, 40))
def load_module(datas_path):
@@ -33,9 +137,10 @@ def load_module(datas_path):
SITES = []
filename = datas_path + "/watch.xml"
- print ("Loading watchsites ...",)
+ sys.stdout.write ("Loading watchsites ... ")
dom = parse(filename)
- xmlparse (dom.documentElement)
+ for item in dom.documentElement.getElementsByTagName("watch"):
+ SITES.append (Site (item))
print ("done (%d loaded)" % len(SITES))
@@ -43,101 +148,57 @@ def launch (servers):
global SRVS
SRVS = servers
for site in SITES:
- _thread.start_new_thread (startThread, (site,))
+ site.start ()
-def send_global (msg):
- for server in SRVS:
- server.send_global (msg)
+def save_module():
+ """Save the module state"""
+ global filename
+ sys.stdout.write ("Saving watched sites ... ")
+ impl = getDOMImplementation()
+ newdoc = impl.createDocument(None, 'service', None)
+ top = newdoc.documentElement
+
+ for site in SITES:
+ item = parseString ('' % (site.server, site.page, site.message, site.type, site.updateTime)).documentElement
+ if len(site.channels) > 0:
+ for chan in site.channels:
+ item.appendChild(parseString ('' % (chan)).documentElement);
+ top.appendChild(item);
+
+ with open(filename, "w") as f:
+ newdoc.writexml (f)
+ print ("done")
+
+
+def help_tiny ():
+ """Line inserted in the response to the command !help"""
+ return None
+
+def help_full ():
+ return None
+
+def parseanswer (msg):
+ if msg.cmd[0] == "watch":
+ print ("print states here")
+ return True
+ return False
+
+def parseask (msg):
+ return False
+
+def parselisten (msg):
+ return False
-def treat_atom (lastpage, content, message):
- change=False
- f = atom.Atom (content)
- if lastpage is not None:
- diff = lastpage.diff (f)
- if len(diff) > 0:
- if f.id == "http://public.nbr23.com/rss.php":
- for d in diff:
- if d.summary == "Music":
- messageI = message % ("quelles sont ces nouvelles musiques", "%s")
- elif d.summary == "TV_Shows":
- messageI = message % ("quelle est cette nouvelle série", "%s")
- elif d.summary == "Movies":
- messageI = message % ("quel est ce nouveau film", "%s")
- elif d.summary == "Books":
- messageI = message % ("quel est ce nouveau livre", "%s")
- else:
- messageI = message % ("quel est ce nouveau fichier", "%s")
- send_global (messageI % unquote (d.link))
- elif f.id == "http://musik.p0m.fr/atom.php?nemubot":
- for d in diff:
- youtube.send_global (d.link2, message % (d.title, unquote (d.link)))
- elif message.find ("%s") >= 0:
- for d in diff:
- send_global (message % unquote (d.link))
- else:
- send_global (message)
- change=True
- return (f,change)
def getPage (s, p):
- conn = http.client.HTTPConnection(s)
- conn.request("GET", "/%s"%(p))
+ conn = http.client.HTTPConnection(s)
+ conn.request("GET", "/%s"%(p))
- res = conn.getresponse()
- data = res.read()
+ res = conn.getresponse()
+ data = res.read()
- conn.close()
- return data
+ conn.close()
+ return data
def startThread(site):
- (srv, page, type, message, lastpage, updateTime) = site
-
- lastChange = 0
-
- while 1:
- content = getPage(srv, page)
-
- if type == "atom":
- (lastpage, change) = treat_atom (lastpage, content, message)
- if change:
- if lastChange <= 0:
- lastChange -= 1
- else:
- lastChange = 0
- else:
- lastChange += 1
- else:
- hash = hashlib.sha224(content).hexdigest()
- if hash != lastpage:
- if lastpage is not None:
- send_global (message)
- lastpage = hash
- if lastChange <= 0:
- lastChange -= 1
- else:
- lastChange = 0
- else:
- lastChange += 1
-
- #Update check time intervalle
- if lastChange >= 1 and updateTime < 60:
- updateTime *= 2
- elif lastChange >= 10 and updateTime < 200:
- updateTime *= 1.25
- elif lastChange >= 50 and updateTime < 500:
- updateTime *= 1.1
- elif lastChange < 0 and updateTime < 60:
- updateTime /= 2
- elif lastChange <= 0 and updateTime < 200:
- updateTime /= 3
- elif lastChange <= 0 and updateTime > 350:
- updateTime /= 7
- elif lastChange <= 0:
- updateTime /= 4.5
-
- if updateTime < 10:
- updateTime = 10
- if updateTime > 500:
- updateTime = 500
-
- time.sleep(updateTime)
+ site.check ()