diff options
| -rwxr-xr-x | ircbot/contoller.py | 112 | ||||
| -rw-r--r-- | ircbot/new_feeds | 58 | ||||
| -rwxr-xr-x | ircbot/rssbot.py | 32 | 
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)  | 
