mirror of
				https://github.com/Mikaela/Limnoria.git
				synced 2025-11-03 17:17:23 +01:00 
			
		
		
		
	Merge pull request #1064 from GLolol/channel/part+cycle
Move 'part' command from Admin to Channel and use part messages in Channel.cycle
This commit is contained in:
		
						commit
						cf7e4c6512
					
				@ -41,14 +41,6 @@ def configure(advanced):
 | 
			
		||||
    from supybot.questions import expect, anything, something, yn
 | 
			
		||||
    conf.registerPlugin('Admin', True)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Admin = conf.registerPlugin('Admin')
 | 
			
		||||
 | 
			
		||||
conf.registerChannelValue(Admin, 'partMsg',
 | 
			
		||||
    registry.String('$version', _("""Determines what part message should be
 | 
			
		||||
        used by default. If the part command is called without a part message,
 | 
			
		||||
        this will be used. If this value is empty, then no part message will
 | 
			
		||||
        be used (they are optional in the IRC protocol). The standard
 | 
			
		||||
        substitutions ($version, $nick, etc.) are all handled appropriately.""")))
 | 
			
		||||
 | 
			
		||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
 | 
			
		||||
 | 
			
		||||
@ -231,38 +231,6 @@ class Admin(callbacks.Plugin):
 | 
			
		||||
            irc.reply(irc.nick)
 | 
			
		||||
    nick = wrap(nick, [additional('nick'), additional('something')])
 | 
			
		||||
 | 
			
		||||
    @internationalizeDocstring
 | 
			
		||||
    def part(self, irc, msg, args, channel, reason):
 | 
			
		||||
        """[<channel>] [<reason>]
 | 
			
		||||
 | 
			
		||||
        Tells the bot to part the list of channels you give it.  <channel> is
 | 
			
		||||
        only necessary if you want the bot to part a channel other than the
 | 
			
		||||
        current channel.  If <reason> is specified, use it as the part
 | 
			
		||||
        message.  Otherwise, the default part message specified in
 | 
			
		||||
        supybot.plugins.Admin.partMsg will be used. No part message will be
 | 
			
		||||
        used if no default is configured.
 | 
			
		||||
        """
 | 
			
		||||
        if channel is None:
 | 
			
		||||
            if irc.isChannel(msg.args[0]):
 | 
			
		||||
                channel = msg.args[0]
 | 
			
		||||
            else:
 | 
			
		||||
                irc.error(Raise=True)
 | 
			
		||||
        try:
 | 
			
		||||
            network = conf.supybot.networks.get(irc.network)
 | 
			
		||||
            network.channels().remove(channel)
 | 
			
		||||
        except KeyError:
 | 
			
		||||
            pass
 | 
			
		||||
        if channel not in irc.state.channels:
 | 
			
		||||
            irc.error(_('I\'m not in %s.') % channel, Raise=True)
 | 
			
		||||
        reason = (reason or self.registryValue("partMsg", channel))
 | 
			
		||||
        reason = ircutils.standardSubstitute(irc, msg, reason)
 | 
			
		||||
        irc.queueMsg(ircmsgs.part(channel, reason))
 | 
			
		||||
        if msg.nick in irc.state.channels[channel].users:
 | 
			
		||||
            irc.noReply()
 | 
			
		||||
        else:
 | 
			
		||||
            irc.replySuccess()
 | 
			
		||||
    part = wrap(part, [optional('validChannel'), additional('text')])
 | 
			
		||||
 | 
			
		||||
    class capability(callbacks.Commands):
 | 
			
		||||
 | 
			
		||||
        @internationalizeDocstring
 | 
			
		||||
 | 
			
		||||
@ -94,27 +94,6 @@ class AdminTestCase(PluginTestCase):
 | 
			
		||||
        self.assertEqual(m.args[0], '#foo')
 | 
			
		||||
        self.assertEqual(m.args[1], 'key')
 | 
			
		||||
 | 
			
		||||
    def testPart(self):
 | 
			
		||||
        def getAfterJoinMessages():
 | 
			
		||||
            m = self.irc.takeMsg()
 | 
			
		||||
            self.assertEqual(m.command, 'MODE')
 | 
			
		||||
            m = self.irc.takeMsg()
 | 
			
		||||
            self.assertEqual(m.command, 'MODE')
 | 
			
		||||
            m = self.irc.takeMsg()
 | 
			
		||||
            self.assertEqual(m.command, 'WHO')
 | 
			
		||||
        self.assertError('part #foo')
 | 
			
		||||
        self.assertRegexp('part #foo', 'not in')
 | 
			
		||||
        self.irc.feedMsg(ircmsgs.join('#foo', prefix=self.prefix))
 | 
			
		||||
        getAfterJoinMessages()
 | 
			
		||||
        m = self.getMsg('part #foo')
 | 
			
		||||
        self.assertEqual(m.command, 'PART')
 | 
			
		||||
        self.irc.feedMsg(ircmsgs.join('#foo', prefix=self.prefix))
 | 
			
		||||
        getAfterJoinMessages()
 | 
			
		||||
        m = self.getMsg('part #foo reason')
 | 
			
		||||
        self.assertEqual(m.command, 'PART')
 | 
			
		||||
        self.assertEqual(m.args[0], '#foo')
 | 
			
		||||
        self.assertEqual(m.args[1], 'reason')
 | 
			
		||||
 | 
			
		||||
    def testNick(self):
 | 
			
		||||
        original = conf.supybot.nick()
 | 
			
		||||
        try:
 | 
			
		||||
 | 
			
		||||
@ -51,6 +51,11 @@ conf.registerChannelValue(Channel, 'nicksInPrivate',
 | 
			
		||||
    registry.Boolean(True, _("""Determines whether the output of 'nicks' will
 | 
			
		||||
    be sent in private. This prevents mass-highlights of a channel's users,
 | 
			
		||||
    accidental or on purpose.""")))
 | 
			
		||||
 | 
			
		||||
conf.registerChannelValue(Channel, 'partMsg',
 | 
			
		||||
    registry.String('$version', _("""Determines what part message should be
 | 
			
		||||
        used by default. If the part command is called without a part message,
 | 
			
		||||
        this will be used. If this value is empty, then no part message will
 | 
			
		||||
        be used (they are optional in the IRC protocol). The standard
 | 
			
		||||
        substitutions ($version, $nick, etc.) are all handled appropriately.""")))
 | 
			
		||||
 | 
			
		||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
 | 
			
		||||
 | 
			
		||||
@ -258,17 +258,22 @@ class Channel(callbacks.Plugin):
 | 
			
		||||
                             any('nickInChannel')])
 | 
			
		||||
 | 
			
		||||
    @internationalizeDocstring
 | 
			
		||||
    def cycle(self, irc, msg, args, channel):
 | 
			
		||||
    def cycle(self, irc, msg, args, channel, reason):
 | 
			
		||||
        """[<channel>]
 | 
			
		||||
 | 
			
		||||
        If you have the #channel,op capability, this will cause the bot to
 | 
			
		||||
        "cycle", or PART and then JOIN the channel. <channel> is only necessary
 | 
			
		||||
        if the message isn't sent in the channel itself.
 | 
			
		||||
        if the message isn't sent in the channel itself. If <reason> is not
 | 
			
		||||
        specified, the default part message specified in
 | 
			
		||||
        supybot.plugins.Channel.partMsg will be used. No part message will be
 | 
			
		||||
        used if neither a cycle reason nor a default part message is given.
 | 
			
		||||
        """
 | 
			
		||||
        self._sendMsg(irc, ircmsgs.part(channel, msg.nick))
 | 
			
		||||
        reason = (reason or self.registryValue("partMsg", channel))
 | 
			
		||||
        reason = ircutils.standardSubstitute(irc, msg, reason)
 | 
			
		||||
        self._sendMsg(irc, ircmsgs.part(channel, reason))
 | 
			
		||||
        networkGroup = conf.supybot.networks.get(irc.network)
 | 
			
		||||
        self._sendMsg(irc, networkGroup.channels.join(channel))
 | 
			
		||||
    cycle = wrap(cycle, ['op'])
 | 
			
		||||
    cycle = wrap(cycle, ['op', additional('text')])
 | 
			
		||||
 | 
			
		||||
    @internationalizeDocstring
 | 
			
		||||
    def kick(self, irc, msg, args, channel, nicks, reason):
 | 
			
		||||
@ -941,6 +946,41 @@ class Channel(callbacks.Plugin):
 | 
			
		||||
        self.alertOps(irc, channel, text, frm=msg.nick)
 | 
			
		||||
    alert = wrap(alert, ['inChannel', 'text'])
 | 
			
		||||
 | 
			
		||||
    @internationalizeDocstring
 | 
			
		||||
    def part(self, irc, msg, args, channel, reason):
 | 
			
		||||
        """[<channel>] [<reason>]
 | 
			
		||||
 | 
			
		||||
        Tells the bot to part the list of channels you give it.  <channel> is
 | 
			
		||||
        only necessary if you want the bot to part a channel other than the
 | 
			
		||||
        current channel.  If <reason> is specified, use it as the part
 | 
			
		||||
        message.  Otherwise, the default part message specified in
 | 
			
		||||
        supybot.plugins.Channel.partMsg will be used. No part message will be
 | 
			
		||||
        used if no default is configured.
 | 
			
		||||
        """
 | 
			
		||||
        if channel is None:
 | 
			
		||||
            if irc.isChannel(msg.args[0]):
 | 
			
		||||
                channel = msg.args[0]
 | 
			
		||||
            else:
 | 
			
		||||
                irc.error(Raise=True)
 | 
			
		||||
        capability = ircdb.makeChannelCapability(channel, 'op')
 | 
			
		||||
        hostmask = irc.state.nickToHostmask(msg.nick)
 | 
			
		||||
        if not ircdb.checkCapability(hostmask, capability):
 | 
			
		||||
            irc.errorNoCapability(capability, Raise=True)
 | 
			
		||||
        try:
 | 
			
		||||
            network = conf.supybot.networks.get(irc.network)
 | 
			
		||||
            network.channels().remove(channel)
 | 
			
		||||
        except KeyError:
 | 
			
		||||
            pass
 | 
			
		||||
        if channel not in irc.state.channels:
 | 
			
		||||
            irc.error(_('I\'m not in %s.') % channel, Raise=True)
 | 
			
		||||
        reason = (reason or self.registryValue("partMsg", channel))
 | 
			
		||||
        reason = ircutils.standardSubstitute(irc, msg, reason)
 | 
			
		||||
        irc.queueMsg(ircmsgs.part(channel, reason))
 | 
			
		||||
        if msg.nick in irc.state.channels[channel].users:
 | 
			
		||||
            irc.noReply()
 | 
			
		||||
        else:
 | 
			
		||||
            irc.replySuccess()
 | 
			
		||||
    part = wrap(part, [optional('validChannel'), additional('text')])
 | 
			
		||||
 | 
			
		||||
Class = Channel
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -251,6 +251,27 @@ class ChannelTestCase(ChannelPluginTestCase):
 | 
			
		||||
    def testNicks(self):
 | 
			
		||||
        self.assertResponse('channel nicks', 'bar, foo, and test')
 | 
			
		||||
        self.assertResponse('channel nicks --count', '3')
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
    def testPart(self):
 | 
			
		||||
        def getAfterJoinMessages():
 | 
			
		||||
            m = self.irc.takeMsg()
 | 
			
		||||
            self.assertEqual(m.command, 'MODE')
 | 
			
		||||
            m = self.irc.takeMsg()
 | 
			
		||||
            self.assertEqual(m.command, 'MODE')
 | 
			
		||||
            m = self.irc.takeMsg()
 | 
			
		||||
            self.assertEqual(m.command, 'WHO')
 | 
			
		||||
        self.assertError('part #foo')
 | 
			
		||||
        self.assertRegexp('part #foo', 'not in')
 | 
			
		||||
        self.irc.feedMsg(ircmsgs.join('#foo', prefix=self.prefix))
 | 
			
		||||
        getAfterJoinMessages()
 | 
			
		||||
        m = self.getMsg('part #foo')
 | 
			
		||||
        self.assertEqual(m.command, 'PART')
 | 
			
		||||
        self.irc.feedMsg(ircmsgs.join('#foo', prefix=self.prefix))
 | 
			
		||||
        getAfterJoinMessages()
 | 
			
		||||
        m = self.getMsg('part #foo reason')
 | 
			
		||||
        self.assertEqual(m.command, 'PART')
 | 
			
		||||
        self.assertEqual(m.args[0], '#foo')
 | 
			
		||||
        self.assertEqual(m.args[1], 'reason')
 | 
			
		||||
 | 
			
		||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user