def privmsg(self, server, user, channel, message):
     say = lambda msg: self.say(server, channel, msg)
     if message.startswith("!feed") or message.startswith("!addfeed"):
         _, url, time, title = str_utils.split(message, " ", 4)
         try:
             time = int(time) * 60
         except:
             time = DEFAULT_FETCH_TIME
         if url == "":
             say(HELP_MESSAGE)
             return
         self.feeds.append(Feedpoller(say, url, time, title))
         self.saver.save(server, channel, message)
     elif message.startswith("!removefeed"):
         feeds = []
         for i in message.split(" "):
             i = int(i) if unicode(i).isdecimal() else -1
             if i >= 0 and i < len(self.feeds):
                 feeds.append(i);
         for i in sorted(feeds, reverse=True):
             say(REMOVING_FEED_MESSAGE.format(i, self.feeds[i].feed.title))
             del self.feeds[i]
             self.saver.remove(i)
             log.msg("Removed feed: " + str(i))
     elif message.startswith("!listfeed"):
         if len(self.feeds) == 0:
             say(NO_FEED_MESSAGE)
         for i, feed in enumerate(self.feeds):
             say(LIST_FEED_ITEM_MESSAGE.format(i, feed.feed.title))
 def test_more_parameters_than_limit(self):
     self.assertEqual(str_utils.split("a b c d", " ", 3), ["a", "b", "c d"])
 def test_equal_number_of_parameters(self):
     self.assertEqual(str_utils.split("a b c", " ", 3), ["a", "b", "c"])
 def test_less_parameters_than_limit(self):
     self.assertEqual(str_utils.split("a b", " ", 3), ["a", "b", ""])
 def test_more_parameters_than_limit(self):
     self.assertEqual(str_utils.split("a b c d", " ", 3), ["a", "b", "c d"])
 def test_equal_number_of_parameters(self):
     self.assertEqual(str_utils.split("a b c", " ", 3), ["a", "b", "c"])
 def test_less_parameters_than_limit(self):
     self.assertEqual(str_utils.split("a b", " ", 3), ["a", "b", ""])