summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlassulus <lassulus@googlemail.com>2014-01-05 14:55:17 +0100
committerlassulus <lassulus@googlemail.com>2014-01-05 14:55:17 +0100
commit8c9e76b443adc2cd33a65dddd7ac00a39b64f26f (patch)
tree1a1c19696f18e578e7e4db7a70b6a4526a372f61
parentfbf323d3866d524ad9b6e6028247adb746f52dde (diff)
ircbot: refactor and more features
-rwxr-xr-xircbot/contoller.py112
-rw-r--r--ircbot/new_feeds58
-rwxr-xr-xircbot/rssbot.py32
3 files changed, 121 insertions, 81 deletions
diff --git a/ircbot/contoller.py b/ircbot/contoller.py
index cacb81e8..b3938b63 100755
--- a/ircbot/contoller.py
+++ b/ircbot/contoller.py
@@ -12,8 +12,8 @@ class NewsBot(irc.bot.SingleServerIRCBot):
self.chan = chan
self.to = timeout
-# def start(self):
-# self.bot = _thread.start_new_thread(irc.bot.SingleServerIRCBot.start, (self,))
+ def start(self):
+ self.bot = _thread.start_new_thread(irc.bot.SingleServerIRCBot.start, (self,))
# def send(self, string):
# if len(string) < 450:
@@ -30,60 +30,27 @@ class NewsBot(irc.bot.SingleServerIRCBot):
def on_welcome(self, connection, event):
connection.join(self.chan)
+ def send(self, string):
+ for line in string.split('\n'):
+ self.connection.privmsg(self.chan, line)
+ sleep(1)
+
def on_privmsg(self, connection, event):
args_array = event.arguments[0].split()
if args_array[0][:-1]==self.name:
answer = self.read_message(args_array[1:])
self.send(answer)
- def send(self, string):
- for line in string.split('\n'):
- self.connection.privmsg(self.chan, line)
- sleep(0.5)
-
def on_pubmsg(self, connection, event):
self.on_privmsg(connection, event)
def read_message(self, args):
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]].stop()
- del bots[args[1]]
- 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
- elif args[0] == 'caps':
- return "add del save caps list"
-
- elif args[0] == 'list':
- output_buffer = ''
- for bot in bots:
- output_buffer += bot + ' url: ' + bots[bot].url + '\n'
- return output_buffer
-
- elif args[0] == 'info':
- if args[1] in bots:
- return 'title: ' + bots[args[1]].feed.feed.title + '\n' + 'size: ' + len(bots[args[1]].feed.entries)
- else:
- return 'bot not found'
-
+ if args[0] in [x for x in commands.__dict__.keys() if x.find('_')]:
+ func = getattr(commands, args[0])
+ return func(args)
else:
- return "unknown command"
+ return 'command not found'
except:
return "mimimimi"
@@ -105,3 +72,60 @@ for line in lines:
bots[linear[0]] = bot
knews.start()
+
+
+class commands():
+ def add(args):
+ bot = rssbot.RssBot(args[2], args[1])
+ bots[args[1]] = bot
+ bot.start()
+ return "bot " + args[1] + " added"
+
+ def delete(args):
+ bots[args[1]].stop()
+ del bots[args[1]]
+ return "bot " + args[1] + " deleted"
+
+ def rename(args):
+ if args[1] in bots:
+ if args[2] in bots:
+ return args[2] + ' already taken'
+ else:
+ bots[args[1]].connection.nick(args[2])
+ bots[args[1]].name = args[2]
+ bots[args[2]] = bots[args[1]]
+ del bots[args[1]]
+ return 'renamed ' + args[1] + ' in ' + args[2]
+ else:
+ return args[1] + ' does not exist'
+
+ def save(args):
+ 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
+
+ def caps(args):
+ return ' '.join([x for x in commands.__dict__.keys() if x.find('_')])
+
+ def list(args):
+ output_buffer = ''
+ for bot in bots:
+ output_buffer += bot + ' url: ' + bots[bot].url + '\n'
+ return output_buffer
+
+ def info(args):
+ if args[1] in bots:
+ output_buffer = ''
+ for data in ['title', 'link', 'updated']:
+ if data in bots[args[1]].feed.feed:
+ output_buffer += data + ': ' + bots[args[1]].feed.feed[data] + '\n'
+ print(output_buffer)
+ return output_buffer
+ else:
+ return 'bot not found'
diff --git a/ircbot/new_feeds b/ircbot/new_feeds
index 767b59f2..0a8352bd 100644
--- a/ircbot/new_feeds
+++ b/ircbot/new_feeds
@@ -1,32 +1,40 @@
-fvwm|http://freecode.com/projects/fvwm/releases.atom
-aje|http://www.aljazeera.com/Services/Rss/?PostingId=2007731105943979989
-rt|http://rt.com/rss/news/
-anon|http://anoninsiders.net/feed/
+golem|http://www.golem.de/rss.php?feed=RSS1.0
+ars|http://feeds.arstechnica.com/arstechnica/index?format=xml
linuxinsider|http://www.linuxinsider.com/perl/syndication/rssfull.pl
+sz|http://suche.sueddeutsche.de/?output=rss
+wp_world|http://feeds.washingtonpost.com/rss/rss_blogpost
+exploitdb|http://www.exploit-db.com/rss.xml
+lolmythesis|http://lolmythesis.com/rss
+torr_news|http://feed.torrentfreak.com/Torrentfreak/
+LtU|http://lambda-the-ultimate.org/rss.xml
+reuters|http://feeds.reuters.com/Reuters/worldNews
+reddit_consp|http://reddit.com/r/conspiracy/.rss
+fvwm|http://freecode.com/projects/fvwm/releases.atom
+reddit_world|http://www.reddit.com/r/worldnews/.rss
+xkcd|https://xkcd.com/rss.xml
+coinspotting|http://coinspotting.com/rss
antirez|http://antirez.com/rss
-lisp|http://planet.lisp.org/rss20.xml
+faz_feui|http://www.faz.net/rss/aktuell/feuilleton/
+taz|http://taz.de/Themen-des-Tages/!p15;rss/
+heise|http://heise.de.feedsportal.com/c/35207/f/653902/index.rss
reddit_prog|http://reddit.com/r/programming/
-rawstory|http://www.rawstory.com/rs/feed/
-fefe|http://blog.fefe.de/rss.xml
-xkcd|https://xkcd.com/rss.xml
-slashdot|http://rss.slashdot.org/Slashdot/slashdot
-spiegel_top|http://www.spiegel.de/schlagzeilen/tops/index.rss
-weechat|http://dev.weechat.org/feed/atom
+scmp|http://www.scmp.com/rss/91/feed
+faz_politik|http://www.faz.net/rss/aktuell/politik/
+ccc|http://www.ccc.de/rss/updates.rdf
+sec-db|http://feeds.security-database.com/SecurityDatabaseToolsWatch
+HN|http://news.ycombinator.com/rss
spiegel_eil|http://www.spiegel.de/schlagzeilen/eilmeldungen/index.rss
reddit_sci|http://www.reddit.com/r/science/.rss
-reuters|http://feeds.reuters.com/Reuters/worldNews
-HN|http://news.ycombinator.com/rss
reddit_tech|http://www.reddit.com/r/technology/.rss
-coinspotting|http://coinspotting.com/rss
-ccc|http://www.ccc.de/rss/updates.rdf
+weechat|http://dev.weechat.org/feed/atom
+rawstory|http://www.rawstory.com/rs/feed/
+rt|http://rt.com/rss/news/
archlinux|http://www.archlinux.org/feeds/news/
-reddit_consp|http://reddit.com/r/conspiracy/.rss
-scmp|http://www.scmp.com/rss/91/feed
-LtU|http://lambda-the-ultimate.org/rss.xml
-reddit_world|http://www.reddit.com/r/worldnews/.rss
-sec-db|http://feeds.security-database.com/SecurityDatabaseToolsWatch
-exploitdb|http://www.exploit-db.com/rss.xml
-heise|http://heise.de.feedsportal.com/c/35207/f/653902/index.rss
-wp_world|http://feeds.washingtonpost.com/rss/rss_blogpost
-ars|http://feeds.arstechnica.com/arstechnica/index?format=xml
-golem|http://www.golem.de/rss.php?feed=RSS1.0
+lisp|http://planet.lisp.org/rss20.xml
+spiegel_top|http://www.spiegel.de/schlagzeilen/tops/index.rss
+fefe|http://blog.fefe.de/rss.xml
+anon|http://anoninsiders.net/feed/
+torr_bits|http://feeds.feedburner.com/TorrentfreakBits
+faz_wirtschaft|http://www.faz.net/rss/aktuell/wirtschaft/
+slashdot|http://rss.slashdot.org/Slashdot/slashdot
+aje|http://www.aljazeera.com/Services/Rss/?PostingId=2007731105943979989
diff --git a/ircbot/rssbot.py b/ircbot/rssbot.py
index 008f9fa0..1e1d620d 100755
--- a/ircbot/rssbot.py
+++ b/ircbot/rssbot.py
@@ -27,7 +27,10 @@ class RssBot(irc.bot.SingleServerIRCBot):
self.disconnect()
def updateloop(self):
- self.feed = feedparser.parse(self.url)
+ try:
+ self.feed = feedparser.parse(self.url)
+ except:
+ print(self.name + ': rss timeout occured')
for entry in self.feed.entries:
#try:
# self.sendqueue.append(entry.title + " " + entry.link + " com: " + entry.comments)
@@ -38,7 +41,10 @@ class RssBot(irc.bot.SingleServerIRCBot):
while self.loop:
sleep(self.to)
- self.feed = feedparser.parse(self.url)
+ try:
+ self.feed = feedparser.parse(self.url)
+ except:
+ print(self.name + ': rss timeout occured')
for entry in self.feed.entries:
if not entry.link in self.oldnews:
#try:
@@ -52,17 +58,19 @@ class RssBot(irc.bot.SingleServerIRCBot):
sleep(1)
self.send(self.sendqueue.pop())
- def send(self, string):
+ def send(self, string=''):
if self.connection.connected:
- 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)
+ for line in string.split('\n'):
+ if len(line) < 450:
+ self.connection.privmsg(self.chan, line)
+ else:
+ space = 0
+ for x in range(math.ceil(len(line)/400)):
+ oldspace = space
+ space = line.find(" ", (x+1)*400, (x+1)*400+50)
+ self.connection.privmsg(self.chan, line[oldspace:space])
+ sleep(1)
+ sleep(1)
else:
self.connection.reconnect()
self.send(string)