summaryrefslogtreecommitdiffstats
path: root/ircbot/bot.py
blob: 25a1014f875134fe5a7a51e4e1c72dffb1665d46 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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()