diff --git a/plugins/RSS/plugin.py b/plugins/RSS/plugin.py index 3305e5bcd..ba0ba4ff0 100644 --- a/plugins/RSS/plugin.py +++ b/plugins/RSS/plugin.py @@ -550,6 +550,30 @@ class RSS(callbacks.Plugin): remove = wrap(remove, [('checkChannelCapability', 'op'), many(first('url', 'feedName'))]) + @internationalizeDocstring + def channels(self, irc, msg, args, feed): + """ + + Returns a list of channels that the given feed name or URL is being + announced to. + """ + plugin = irc.getCallback('RSS') + if not plugin.get_feed(feed): + irc.error(_("Unknown feed %s" % feed), Raise=True) + + channels = [] + for ircnet in world.ircs: + for channel in ircnet.state.channels: + if feed in plugin.registryValue('announce', channel, ircnet.network): + channels.append(ircnet.network + channel) + + if channels: + irc.reply(format("%s is announced to %L.", feed, channels)) + else: + irc.reply("%s is not announced to any channels." % feed) + + channels = wrap(channels, ['feedName']) + @internationalizeDocstring def rss(self, irc, msg, args, url, n): """ [] diff --git a/plugins/RSS/test.py b/plugins/RSS/test.py index 840f45735..70e576a6f 100644 --- a/plugins/RSS/test.py +++ b/plugins/RSS/test.py @@ -357,9 +357,15 @@ class RSSTestCase(ChannelPluginTestCase): timeFastForward(1.1) self.assertNotError('rss add advogato %s' % url) self.assertNotError('rss announce add advogato') + self.assertRegexp('rss announce channels advogato', 'advogato is announced to.*%s%s' % (self.irc.network, self.channel)) + self.assertNotRegexp('rss announce', r'ValueError') + self.assertNotError('rss announce remove advogato') + self.assertRegexp('rss announce channels advogato', 'advogato is not announced to any channels') + self.assertNotError('rss remove advogato') + self.assertRegexp('rss announce channels advogato', 'Unknown feed') def testRss(self): timeFastForward(1.1)