summaryrefslogtreecommitdiffstats
path: root/ircbot/rssbot.py
diff options
context:
space:
mode:
authorlassulus <lassulus@googlemail.com>2014-01-04 05:09:40 +0100
committerlassulus <lassulus@googlemail.com>2014-01-04 05:09:40 +0100
commit366f912a3771a1c5b92441ef7efed52541b33827 (patch)
treeccf436ee2e708d53b332a17be235f84730031de5 /ircbot/rssbot.py
parent2a730efca62a76d7344ad6bcaf0fa38acf925cdc (diff)
ircbot: now with controller
Diffstat (limited to 'ircbot/rssbot.py')
-rwxr-xr-xircbot/rssbot.py81
1 files changed, 81 insertions, 0 deletions
diff --git a/ircbot/rssbot.py b/ircbot/rssbot.py
new file mode 100755
index 00000000..40c4554a
--- /dev/null
+++ b/ircbot/rssbot.py
@@ -0,0 +1,81 @@
+#!/usr/bin/python
+import irc.bot
+import feedparser
+import _thread
+import math
+from time import sleep
+
+class RssBot(irc.bot.SingleServerIRCBot):
+ def __init__(self, rss, name, server='ire', port=6667, chan='#news', timeout=60):
+ irc.bot.SingleServerIRCBot.__init__(self, [(server, port)], name, name)
+ self.url = rss
+ self.feed = feedparser.parse(self.url)
+ self.name = name
+ self.server = server
+ self.port = port
+ self.chan = chan
+ self.to = timeout
+ self.oldnews = []
+ self.sendqueue = []
+ for entry in self.feed.entries:
+ try:
+ self.sendqueue.append(entry.title + " " + entry.link + " com: " + entry.comments)
+ except AttributeError:
+ self.sendqueue.append(entry.title + " " + entry.link)
+
+ self.oldnews.append(entry.link)
+
+ def start(self):
+ self.upd_thread = _thread.start_new_thread(self.updateloop, ())
+ self.bot = _thread.start_new_thread(irc.bot.SingleServerIRCBot.start, (self,))
+
+
+ def updateloop(self):
+ while True:
+ sleep(self.to)
+ self.feed = feedparser.parse(self.url)
+ for entry in self.feed.entries:
+ if not entry.link in self.oldnews:
+ try:
+ self.send(entry.title + " " + entry.link + " com: " + entry.comments)
+ except AttributeError:
+ self.send(entry.title + " " + entry.link)
+ self.oldnews.append(entry.link)
+
+ def sendall(self):
+ while len(self.sendqueue) > 0:
+ sleep(1)
+ self.send(self.sendqueue.pop())
+
+ def send(self, string):
+ if len(string) < 450:
+ self.connection.privmsg(self.chan, string)
+ else:
+ space = 0
+ for x in range(math.ceil(len(string)/400)):
+ oldspace = space
+ space = string.find(" ", (x+1)*400, (x+1)*400+50)
+ self.connection.privmsg(self.chan, string[oldspace:space])
+ sleep(1)
+
+
+ def on_welcome(self, connection, event):
+ connection.join(self.chan)
+
+# def on_privmsg(self, connection, event):
+# print event.source().split('!')[0], event.arguments()
+
+#F = open("feeds", "r")
+#lines = F.readlines()
+#F.close()
+#
+#botarray = []
+#for line in lines:
+# lineArray = line.split('|')
+# bot = TestBot(lineArray[1], lineArray[0])
+# #bot.start()
+# botarray.append(bot)
+#
+#def startall():
+# for bot in botarray:
+# bot.start()