diff options
Diffstat (limited to 'Cancer')
| -rwxr-xr-x | Cancer/ircbot/bot.py | 81 | ||||
| -rw-r--r-- | Cancer/ircbot/feeds | 2 | 
2 files changed, 83 insertions, 0 deletions
| diff --git a/Cancer/ircbot/bot.py b/Cancer/ircbot/bot.py new file mode 100755 index 00000000..25a1014f --- /dev/null +++ b/Cancer/ircbot/bot.py @@ -0,0 +1,81 @@ +#!/usr/bin/python +import irc.bot +import feedparser +import _thread +import math +from time import sleep + +class TestBot(irc.bot.SingleServerIRCBot): +    def __init__(self, rss, name, server='10.243.231.66', 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() diff --git a/Cancer/ircbot/feeds b/Cancer/ircbot/feeds new file mode 100644 index 00000000..50fe0667 --- /dev/null +++ b/Cancer/ircbot/feeds @@ -0,0 +1,2 @@ +HN|http://news.ycombinator.com/rss +Fefe|http://blog.fefe.de/rss.xml | 
