diff --git a/plugins/Topic/plugin.py b/plugins/Topic/plugin.py index 4c79575b4..f091df6a4 100644 --- a/plugins/Topic/plugin.py +++ b/plugins/Topic/plugin.py @@ -515,6 +515,8 @@ class Topic(callbacks.Plugin): irc.errorNoCapability(capabilities, Raise=True) try: topics = self.lastTopics[channel] + if not topics: + raise KeyError except KeyError: irc.error(format(_('I haven\'t yet set the topic in %s.'), channel)) @@ -522,6 +524,31 @@ class Topic(callbacks.Plugin): self._sendTopics(irc, channel, topics) restore = wrap(restore, ['canChangeTopic']) + @internationalizeDocstring + def refresh(self, irc, msg, args, channel): + """[] + Refreshes current topic set by anyone. Restores topic if empty. + is only necessary if the message isn't sent in the channel + itself. + """ + if not self._checkManageCapabilities(irc, msg, channel): + capabilities = self.registryValue('requireManageCapability') + irc.errorNoCapability(capabilities, Raise=True) + topic = irc.state.channels[channel].topic + if topic: + self._sendTopics(irc, channel, topic) + return + try: + topics = self.lastTopics[channel] + if not topics: + raise KeyError + except KeyError: + irc.error(format(_('I haven\'t yet set the topic in %s.'), + channel)) + return + self._sendTopics(irc, channel, topics) + refresh = wrap(refresh, ['canChangeTopic']) + @internationalizeDocstring def undo(self, irc, msg, args, channel): """[] diff --git a/plugins/Topic/test.py b/plugins/Topic/test.py index 2f82cf363..70f6cad8e 100644 --- a/plugins/Topic/test.py +++ b/plugins/Topic/test.py @@ -162,6 +162,20 @@ class TopicTestCase(ChannelPluginTestCase): finally: conf.supybot.plugins.Topic.format.setValue(orig) + def testRestore(self): + self.getMsg('topic set foo') + self.assertResponse('topic restore', 'foo') + self.getMsg('topic remove 1') + restoreError = 'Error: I haven\'t yet set the topic in #test.' + self.assertResponse('topic restore', restoreError) + + def testRefresh(self): + self.getMsg('topic set foo') + self.assertResponse('topic refresh', 'foo') + self.getMsg('topic remove 1') + refreshError = 'Error: I haven\'t yet set the topic in #test.' + self.assertResponse('topic refresh', refreshError) + def testUndo(self): try: original = conf.supybot.plugins.Topic.format()