mirror of
https://github.com/Mikaela/Limnoria.git
synced 2025-01-30 22:24:20 +01:00
Added swap.
This commit is contained in:
parent
9c73c57089
commit
7e22b2b78d
@ -139,7 +139,7 @@ class Topic(callbacks.Privmsg):
|
|||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _topicNumber(self, irc, n, topics=None):
|
def _topicNumber(self, irc, n, topics=None, normalize=False):
|
||||||
try:
|
try:
|
||||||
n = int(n)
|
n = int(n)
|
||||||
if not n:
|
if not n:
|
||||||
@ -148,6 +148,10 @@ class Topic(callbacks.Privmsg):
|
|||||||
n -= 1
|
n -= 1
|
||||||
if topics is not None:
|
if topics is not None:
|
||||||
topics[n]
|
topics[n]
|
||||||
|
if normalize:
|
||||||
|
assert topics, 'Can\'t normalize without topics.'
|
||||||
|
if n < 0:
|
||||||
|
n += len(topics)
|
||||||
return n
|
return n
|
||||||
except (ValueError, IndexError):
|
except (ValueError, IndexError):
|
||||||
irc.error('That\'s not a valid topic number.', Raise=True)
|
irc.error('That\'s not a valid topic number.', Raise=True)
|
||||||
@ -380,6 +384,27 @@ class Topic(callbacks.Privmsg):
|
|||||||
irc.error('There are no more undos for %s.' % channel)
|
irc.error('There are no more undos for %s.' % channel)
|
||||||
undo = privmsgs.channel(undo)
|
undo = privmsgs.channel(undo)
|
||||||
|
|
||||||
|
def swap(self, irc, msg, args, channel):
|
||||||
|
"""[<channel>] <first topic number> <second topic number>
|
||||||
|
|
||||||
|
Swaps the order of the first topic number and the second topic number.
|
||||||
|
<channel> is only necessary if the message isn't sent in the channel
|
||||||
|
itself.
|
||||||
|
"""
|
||||||
|
self._canChangeTopic(irc, channel)
|
||||||
|
(first, second) = privmsgs.getArgs(args, required=2)
|
||||||
|
topics = self._splitTopic(irc.state.getTopic(channel), channel)
|
||||||
|
first = self._topicNumber(irc, first, topics, normalize=True)
|
||||||
|
second = self._topicNumber(irc, second, topics, normalize=True)
|
||||||
|
if first == second:
|
||||||
|
irc.error('I refuse to swap the same topic with itself.')
|
||||||
|
return
|
||||||
|
t = topics[first]
|
||||||
|
topics[first] = topics[second]
|
||||||
|
topics[second] = t
|
||||||
|
self._sendTopics(irc, channel, topics)
|
||||||
|
swap = privmsgs.channel(swap)
|
||||||
|
|
||||||
def default(self, irc, msg, args, channel):
|
def default(self, irc, msg, args, channel):
|
||||||
"""[<channel>]
|
"""[<channel>]
|
||||||
|
|
||||||
|
@ -131,6 +131,24 @@ class TopicTestCase(ChannelPluginTestCase, PluginDocumentation):
|
|||||||
finally:
|
finally:
|
||||||
conf.supybot.plugins.Topic.format.setValue(original)
|
conf.supybot.plugins.Topic.format.setValue(original)
|
||||||
|
|
||||||
|
def testSwap(self):
|
||||||
|
try:
|
||||||
|
original = conf.supybot.plugins.Topic.format()
|
||||||
|
conf.supybot.plugins.Topic.format.setValue('$topic')
|
||||||
|
self.assertResponse('topic set ""', '')
|
||||||
|
self.assertResponse('topic add foo', 'foo')
|
||||||
|
self.assertResponse('topic add bar', 'foo || bar')
|
||||||
|
self.assertResponse('topic add baz', 'foo || bar || baz')
|
||||||
|
self.assertResponse('topic swap 1 2', 'bar || foo || baz')
|
||||||
|
self.assertResponse('topic swap 1 -1', 'baz || foo || bar')
|
||||||
|
self.assertError('topic swap -1 -1')
|
||||||
|
self.assertError('topic swap 2 -2')
|
||||||
|
self.assertError('topic swap 1 -3')
|
||||||
|
self.assertError('topic swap -2 2')
|
||||||
|
self.assertError('topic swap -3 1')
|
||||||
|
finally:
|
||||||
|
conf.supybot.plugins.Topic.format.setValue(original)
|
||||||
|
|
||||||
def testDefault(self):
|
def testDefault(self):
|
||||||
self.assertError('topic default')
|
self.assertError('topic default')
|
||||||
try:
|
try:
|
||||||
|
Loading…
Reference in New Issue
Block a user