From 814d89e200215b548ef184e49a1912ff10b66c85 Mon Sep 17 00:00:00 2001 From: Daniel Folkinshteyn Date: Sun, 11 Apr 2010 12:48:08 -0400 Subject: [PATCH] topic now checks for +t mode before denying topic changes, and also allows halfops in addition to ops. default required capabilities for topic changes (if topic is +t and user is not an op or halfop), are chan,op and chan,halfop thanks jemfinch for the suggestions. Signed-off-by: James Vega --- plugins/Topic/config.py | 2 +- plugins/Topic/plugin.py | 2 +- plugins/Topic/test.py | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/plugins/Topic/config.py b/plugins/Topic/config.py index f07870554..25f3243b6 100644 --- a/plugins/Topic/config.py +++ b/plugins/Topic/config.py @@ -64,7 +64,7 @@ conf.registerChannelValue(Topic.undo, 'max', registry.NonNegativeInteger(10, """Determines the number of previous topics to keep around in case the undo command is called.""")) conf.registerChannelValue(Topic, 'requireManageCapability', - registry.String('admin; channel,op', + registry.String('channel,op; channel,halfop', """Determines the capabilities required (if any) to make any topic changes, (everything except for read-only operations). Use 'channel,capab' for diff --git a/plugins/Topic/plugin.py b/plugins/Topic/plugin.py index 3c843aa6d..098b55f55 100644 --- a/plugins/Topic/plugin.py +++ b/plugins/Topic/plugin.py @@ -173,7 +173,7 @@ class Topic(callbacks.Plugin): manually anyway. """ c = irc.state.channels[channel] - if msg.nick in c.ops: + if msg.nick in c.ops or msg.nick in c.halfops or 't' not in c.modes: return True capabilities = self.registryValue('requireManageCapability') if capabilities: diff --git a/plugins/Topic/test.py b/plugins/Topic/test.py index 9d13b3264..83adcfaee 100644 --- a/plugins/Topic/test.py +++ b/plugins/Topic/test.py @@ -73,6 +73,10 @@ class TopicTestCase(ChannelPluginTestCase): def testManageCapabilities(self): try: + self.irc.feedMsg(ircmsgs.mode(self.channel, args=('+o', self.nick), + prefix=self.prefix)) + self.irc.feedMsg(ircmsgs.mode(self.channel, args=('+t'), + prefix=self.prefix)) world.testing = False origuser = self.prefix self.prefix = 'stuff!stuff@stuff'