Merge pull request #974 from GLolol/topic-allow-separator

Topic: remove limitation forbidding the topic separator in topic.add
This commit is contained in:
Valentin Lorentz 2014-12-27 20:12:20 +01:00
commit cb441da644
2 changed files with 29 additions and 15 deletions

View File

@ -79,6 +79,11 @@ conf.registerChannelValue(Topic, 'requireManageCapability',
channel-level capabilities.
Note that absence of an explicit anticapability means user has
capability.""")))
conf.registerChannelValue(Topic, 'allowSeparatorinTopics',
registry.Boolean(True, _("""Determines whether the bot will allow
topics containing the defined separator to be used. You may want
to disable this if you are signing all topics by nick (see the 'format'
option for ways to adjust this).""")))
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:

View File

@ -48,6 +48,7 @@ _ = PluginInternationalization('Topic')
import supybot.ircdb as ircdb
def canChangeTopic(irc, msg, args, state):
assert not state.channel
callConverter('channel', irc, msg, args, state)
@ -60,9 +61,11 @@ def canChangeTopic(irc, msg, args, state):
state.error(format(_('I can\'t change the topic, I\'m not (half)opped '
'and %s is +t.'), state.channel), Raise=True)
def getTopic(irc, msg, args, state, format=True):
separator = state.cb.registryValue('separator', state.channel)
if separator in args[0]:
if separator in args[0] and not \
state.cb.registryValue('allowSeparatorinTopics', state.channel):
state.errorInvalid('topic', args[0],
format(_('The topic must not include %q.'),
separator))
@ -73,6 +76,7 @@ def getTopic(irc, msg, args, state, format=True):
topic = ircutils.standardSubstitute(irc, msg, formatter, env)
state.args.append(topic)
def getTopicNumber(irc, msg, args, state):
def error(s):
state.errorInvalid(_('topic number'), s)
@ -103,15 +107,19 @@ addConverter('topic', getTopic)
addConverter('topicNumber', getTopicNumber)
addConverter('canChangeTopic', canChangeTopic)
def splitTopic(topic, separator):
return list(filter(None, topic.split(separator)))
datadir = conf.supybot.directories.data()
filename = conf.supybot.directories.data.dirize('Topic.pickle')
class Topic(callbacks.Plugin):
"""This plugin allows you to use many topic-related functions,
such as Add, Undo, and Remove."""
def __init__(self, irc):
self.__parent = super(Topic, self)
self.__parent.__init__(irc)
@ -165,13 +173,13 @@ class Topic(callbacks.Plugin):
stack = self.undos.setdefault(channel, [])
stack.append(topics)
maxLen = self.registryValue('undo.max', channel)
del stack[:len(stack)-maxLen]
del stack[:len(stack) - maxLen]
def _addRedo(self, channel, topics):
stack = self.redos.setdefault(channel, [])
stack.append(topics)
maxLen = self.registryValue('undo.max', channel)
del stack[:len(stack)-maxLen]
del stack[:len(stack) - maxLen]
def _getUndo(self, channel):
try:
@ -233,7 +241,8 @@ class Topic(callbacks.Plugin):
if capabilities:
for capability in re.split(r'\s*;\s*', capabilities):
if capability.startswith('channel,'):
capability = ircdb.makeChannelCapability(channel, capability[8:])
capability = ircdb.makeChannelCapability(
channel, capability[8:])
if capability and ircdb.checkCapability(msg.prefix, capability):
return True
return False
@ -403,7 +412,7 @@ class Topic(callbacks.Plugin):
topics = self._splitTopic(irc.state.getTopic(channel), channel)
L = []
for (i, t) in enumerate(topics):
L.append(format(_('%i: %s'), i+1, utils.str.ellipsisify(t, 30)))
L.append(format(_('%i: %s'), i + 1, utils.str.ellipsisify(t, 30)))
s = utils.str.commaAndify(L)
irc.reply(s)
list = wrap(list, ['inChannel'])