From f1491bbc2003de22d5436d8fea0ce6eb80db8dd3 Mon Sep 17 00:00:00 2001 From: lassulus Date: Thu, 9 Jan 2014 18:35:14 +0100 Subject: ircbot: shortenurl function --- ircbot/rssbot.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'ircbot/rssbot.py') diff --git a/ircbot/rssbot.py b/ircbot/rssbot.py index 225e6f13..45af1dc3 100755 --- a/ircbot/rssbot.py +++ b/ircbot/rssbot.py @@ -57,12 +57,25 @@ class RssBot(irc.bot.SingleServerIRCBot): #try: # self.send(entry.title + " " + entry.link + " com: " + entry.comments) #except AttributeError: - shorturl = subprocess.check_output(["curl", "-sS", "-F", "uri=" + entry.link, self.url_shortener]).decode() - self.send(entry.title + " " + shorturl.strip('\n').strip('\r') + '#' + entry.link.partition('://')[2].partition('/')[0]) + shorturl = self.shortenurl(entry.link) + self.send(entry.title + ' ' + shorturl) self.oldnews.append(entry.link) self.lastnew = datetime.now() sleep(self.to) + def shortenurl(self, url): + while True: + try: + shorturl = subprocess.check_output(["curl", "-sS", "-F", "uri=" + url, self.url_shortener]).decode().strip('\n').strip('\r') + '#' + url.partition('://')[2].partition('/')[0] + return shorturl + except: + print('url shortener error') + sleep(1) + + def last(self, num): + for feed in reversed([x for x in reversed(self.feed.entries)][:num]): + self.send(feed.title + ' ' + self.shortenurl(feed.link)) + def send(self, string): if self.connection.connected: for line in string.split('\n'): -- cgit v1.2.3 From 35406d4fc7bf83c954b225747ac6c13a6aad2994 Mon Sep 17 00:00:00 2001 From: lassulus Date: Thu, 9 Jan 2014 20:27:00 +0100 Subject: ircbot: better looping --- ircbot/rssbot.py | 52 ++++++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 24 deletions(-) (limited to 'ircbot/rssbot.py') diff --git a/ircbot/rssbot.py b/ircbot/rssbot.py index 45af1dc3..79276a3a 100755 --- a/ircbot/rssbot.py +++ b/ircbot/rssbot.py @@ -41,26 +41,28 @@ class RssBot(irc.bot.SingleServerIRCBot): self.loop = False def updateloop(self): - try: - self.feed = feedparser.parse(self.url) - except: - print(self.name + ': rss timeout occured') - for entry in self.feed.entries: - self.oldnews.append(entry.link) + while True: + try: + self.feed = feedparser.parse(self.url) + for entry in self.feed.entries: + self.oldnews.append(entry.link) + break + except: + print(self.name + ': rss timeout occured') while self.loop: try: 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: + shorturl = self.shortenurl(entry.link) + self.sendall(entry.title + ' ' + shorturl) + self.oldnews.append(entry.link) + self.lastnew = datetime.now() except: print(self.name + ': rss timeout occured') - 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: - shorturl = self.shortenurl(entry.link) - self.send(entry.title + ' ' + shorturl) - self.oldnews.append(entry.link) - self.lastnew = datetime.now() sleep(self.to) def shortenurl(self, url): @@ -72,25 +74,27 @@ class RssBot(irc.bot.SingleServerIRCBot): print('url shortener error') sleep(1) - def last(self, num): - for feed in reversed([x for x in reversed(self.feed.entries)][:num]): - self.send(feed.title + ' ' + self.shortenurl(feed.link)) + def last(self, target, num): + for feed in [x for x in self.feed.entries][:num]: + self.send(target, feed.title + ' ' + self.shortenurl(feed.link)) + + def sendall(self, string): + for chan in self.channels: + self.send(chan, string) - def send(self, string): + def send(self, target, string): if self.connection.connected: for line in string.split('\n'): if len(line) < 450: - for chan in self.channels: - self.connection.privmsg(chan, line) + self.connection.privmsg(target, line) + sleep(1) else: space = 0 for x in range(math.ceil(len(line)/400)): oldspace = space space = line.find(" ", (x+1)*400, (x+1)*400+50) - for chan in self.channels: - self.connection.privmsg(chan, line[oldspace:space]) + self.connection.privmsg(target, line[oldspace:space]) sleep(1) - sleep(1) else: self.connection.reconnect() sleep(1) -- cgit v1.2.3 From f4c627b4a70e09c122973274dba4399a10751adc Mon Sep 17 00:00:00 2001 From: lassulus Date: Thu, 9 Jan 2014 23:46:26 +0100 Subject: ircbot: stop retrying after 20 fails --- ircbot/rssbot.py | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'ircbot/rssbot.py') diff --git a/ircbot/rssbot.py b/ircbot/rssbot.py index 79276a3a..7240fa90 100755 --- a/ircbot/rssbot.py +++ b/ircbot/rssbot.py @@ -41,6 +41,7 @@ class RssBot(irc.bot.SingleServerIRCBot): self.loop = False def updateloop(self): + failcount=0 while True: try: self.feed = feedparser.parse(self.url) @@ -49,6 +50,10 @@ class RssBot(irc.bot.SingleServerIRCBot): break except: print(self.name + ': rss timeout occured') + failcount+=1 + if failcount>20: + print(self.name + ' is broken, going to die') + self.stop() while self.loop: try: self.feed = feedparser.parse(self.url) -- cgit v1.2.3 From 69694643bd15e713d2173c98f0ff56d634fa2711 Mon Sep 17 00:00:00 2001 From: lassulus Date: Thu, 9 Jan 2014 23:49:08 +0100 Subject: ircbot: maybe this will work --- ircbot/rssbot.py | 1 + 1 file changed, 1 insertion(+) (limited to 'ircbot/rssbot.py') diff --git a/ircbot/rssbot.py b/ircbot/rssbot.py index 7240fa90..b2fa34a1 100755 --- a/ircbot/rssbot.py +++ b/ircbot/rssbot.py @@ -39,6 +39,7 @@ class RssBot(irc.bot.SingleServerIRCBot): def stop(self): self.ircobj.disconnect_all() self.loop = False + del self def updateloop(self): failcount=0 -- cgit v1.2.3 From 9c73389ee25efd97083aea81af4f9e4f4eb99aca Mon Sep 17 00:00:00 2001 From: lassulus Date: Thu, 9 Jan 2014 23:53:27 +0100 Subject: ircbot: maybe this? --- ircbot/rssbot.py | 1 + 1 file changed, 1 insertion(+) (limited to 'ircbot/rssbot.py') diff --git a/ircbot/rssbot.py b/ircbot/rssbot.py index b2fa34a1..87c58781 100755 --- a/ircbot/rssbot.py +++ b/ircbot/rssbot.py @@ -55,6 +55,7 @@ class RssBot(irc.bot.SingleServerIRCBot): if failcount>20: print(self.name + ' is broken, going to die') self.stop() + return while self.loop: try: self.feed = feedparser.parse(self.url) -- cgit v1.2.3 From 940e77f47d7c3d874053eeab17054f6b10e63a12 Mon Sep 17 00:00:00 2001 From: lassulus Date: Thu, 9 Jan 2014 23:58:38 +0100 Subject: rename ircbot to knn (krebs news network) --- ircbot/rssbot.py | 116 ------------------------------------------------------- 1 file changed, 116 deletions(-) delete mode 100755 ircbot/rssbot.py (limited to 'ircbot/rssbot.py') diff --git a/ircbot/rssbot.py b/ircbot/rssbot.py deleted file mode 100755 index 87c58781..00000000 --- a/ircbot/rssbot.py +++ /dev/null @@ -1,116 +0,0 @@ -#!/usr/bin/python -import irc.bot -from irc.client import IRC -import feedparser -import threading -import math -import re -import subprocess -from datetime import datetime -from time import sleep - -class RssBot(irc.bot.SingleServerIRCBot): - def __init__(self, rss, name, chans=['#news'], url_shortener="http://localhost", server='ire', port=6667, timeout=60): - irc.bot.SingleServerIRCBot.__init__(self, [(server, port)], name, name) - self.url = rss - self.name = name - self.server = server - self.port = port - self.chans = chans - self.to = timeout - self.oldnews = [] - self.sendqueue = [] - self.loop = True - self.lastnew = datetime.now() - self.url_shortener = url_shortener - - def better_loop(timeout=0.2): - while self.loop: - self.ircobj.process_once(timeout) - self.ircobj.process_forever = better_loop - - - def start(self): - self.upd_loop = threading.Thread(target=self.updateloop) - self.bot = threading.Thread(target=irc.bot.SingleServerIRCBot.start, args=(self,)) - self.upd_loop.start() - self.bot.start() - - def stop(self): - self.ircobj.disconnect_all() - self.loop = False - del self - - def updateloop(self): - failcount=0 - while True: - try: - self.feed = feedparser.parse(self.url) - for entry in self.feed.entries: - self.oldnews.append(entry.link) - break - except: - print(self.name + ': rss timeout occured') - failcount+=1 - if failcount>20: - print(self.name + ' is broken, going to die') - self.stop() - return - while self.loop: - try: - 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: - shorturl = self.shortenurl(entry.link) - self.sendall(entry.title + ' ' + shorturl) - self.oldnews.append(entry.link) - self.lastnew = datetime.now() - except: - print(self.name + ': rss timeout occured') - sleep(self.to) - - def shortenurl(self, url): - while True: - try: - shorturl = subprocess.check_output(["curl", "-sS", "-F", "uri=" + url, self.url_shortener]).decode().strip('\n').strip('\r') + '#' + url.partition('://')[2].partition('/')[0] - return shorturl - except: - print('url shortener error') - sleep(1) - - def last(self, target, num): - for feed in [x for x in self.feed.entries][:num]: - self.send(target, feed.title + ' ' + self.shortenurl(feed.link)) - - def sendall(self, string): - for chan in self.channels: - self.send(chan, string) - - def send(self, target, string): - if self.connection.connected: - for line in string.split('\n'): - if len(line) < 450: - self.connection.privmsg(target, line) - sleep(1) - 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(target, line[oldspace:space]) - sleep(1) - else: - self.connection.reconnect() - sleep(1) - self.send(string) - - def on_invite(self, connection, event): - for chan in event.arguments: - connection.join(chan) - - def on_welcome(self, connection, event): - for chan in self.chans: - connection.join(chan) -- cgit v1.2.3