From 366f912a3771a1c5b92441ef7efed52541b33827 Mon Sep 17 00:00:00 2001 From: lassulus Date: Sat, 4 Jan 2014 05:09:40 +0100 Subject: ircbot: now with controller --- ircbot/bot.py | 81 ---------------------------------------------- ircbot/contoller.py | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++ ircbot/new_feeds | 2 ++ ircbot/rssbot.py | 81 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 175 insertions(+), 81 deletions(-) delete mode 100755 ircbot/bot.py create mode 100755 ircbot/contoller.py create mode 100644 ircbot/new_feeds create mode 100755 ircbot/rssbot.py diff --git a/ircbot/bot.py b/ircbot/bot.py deleted file mode 100755 index c9a7d027..00000000 --- a/ircbot/bot.py +++ /dev/null @@ -1,81 +0,0 @@ -#!/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='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() diff --git a/ircbot/contoller.py b/ircbot/contoller.py new file mode 100755 index 00000000..5750551f --- /dev/null +++ b/ircbot/contoller.py @@ -0,0 +1,92 @@ +import irc.bot +import _thread +import rssbot +# +#def startall(): +# for bot in botarray: +# bot.start() + +class NewsBot(irc.bot.SingleServerIRCBot): + def __init__(self, name, server='ire', port=6667, chan='#news', timeout=60): + irc.bot.SingleServerIRCBot.__init__(self, [(server, port)], name, name) + self.name = name + self.server = server + self.port = port + self.chan = chan + self.to = timeout + + def start(self): + self.bot = _thread.start_new_thread(irc.bot.SingleServerIRCBot.start, (self,)) + +# 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) + args_array = event.arguments[0].split() + print(args_array) + if args_array[0][:-1]==self.name: + answer = self.read_message(args_array[1:]) + self.connection.privmsg(self.chan, answer) + + + def on_pubmsg(self, connection, event): + self.on_privmsg(connection, event) + + def read_message(self, args): + print('reading message') + try: + if args[0] == 'add': + bot = rssbot.RssBot(args[2], args[1]) + bots[args[1]] = bot + bot.start() + return "bot " + args[1] + " added" + elif args[0] == 'del': + bots[args[1]].die() + del bots[args1] + return "bot " + args[1] + " deleted" + elif args[0] == 'save': + output_buffer = '' + for bot in bots: + output_buffer += bot + '|' + bots[bot].url + '\n' + + F = open(feedfile, "w") + F.writelines(output_buffer) + F.close() + + return "bots saved to " + feedfile + + + else: + return "unknown command" + except: + return "mimimimi" + +feedfile = 'new_feeds' + +bots = {} +knews = NewsBot('knews') +knews.start() + +#config file reading +F = open(feedfile, "r") +lines = F.readlines() +F.close() + +for line in lines: + linear = line.split('|') + bot = rssbot.RssBot(linear[1], linear[0]) + bot.start() + bots[linear[0]] = bot diff --git a/ircbot/new_feeds b/ircbot/new_feeds new file mode 100644 index 00000000..4931f3fd --- /dev/null +++ b/ircbot/new_feeds @@ -0,0 +1,2 @@ +fefe|http://blog.fefe.de/rss.xml +HN|http://news.ycombinator.com/rss 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() -- cgit v1.2.3