mirror of
https://github.com/Mikaela/Limnoria.git
synced 2024-11-20 17:39:27 +01:00
Moved tell and last commands from FunCommands to MiscCommands.
This commit is contained in:
parent
5db67b0b2c
commit
5ef3d7c5f5
@ -629,59 +629,6 @@ class FunCommands(callbacks.Privmsg):
|
||||
dicts, lists, tuples, refcounts)
|
||||
irc.reply(msg, response)
|
||||
|
||||
def last(self, irc, msg, args):
|
||||
"""[--{from,in,to,with,regexp,fancy}] <args>
|
||||
|
||||
Returns the last message matching the given criteria. --from requires
|
||||
a nick from whom the message came; --in and --to require a channel the
|
||||
message was sent to; --with requires some string that had to be in the
|
||||
message; --regexp requires a regular expression the message must match
|
||||
--fancy determines whether or not to show the nick; the default is not
|
||||
"""
|
||||
|
||||
(optlist, rest) = getopt.getopt(args, '', ['from=', 'in=', 'to=',
|
||||
'with=', 'regexp=',
|
||||
'fancy'])
|
||||
fancy = False
|
||||
predicates = []
|
||||
for (option, arg) in optlist:
|
||||
option = option.strip('-')
|
||||
if option == 'fancy':
|
||||
fancy = True
|
||||
elif option == 'from':
|
||||
predicates.append(lambda m, arg=arg: m.nick == arg)
|
||||
elif option == 'in' or option == 'to':
|
||||
if not ircutils.isChannel(arg):
|
||||
irc.error(msg, 'Argument to --%s must be a channel.' % arg)
|
||||
return
|
||||
predicates.append(lambda m, arg=arg: m.args[0] == arg)
|
||||
elif option == 'with':
|
||||
predicates.append(lambda m, arg=arg: arg in m.args[1])
|
||||
elif option == 'regexp':
|
||||
try:
|
||||
r = utils.perlReToPythonRe(arg)
|
||||
except ValueError, e:
|
||||
irc.error(msg, str(e))
|
||||
return
|
||||
predicates.append(lambda m: r.search(m.args[1]))
|
||||
first = True
|
||||
for m in reviter(irc.state.history):
|
||||
if first:
|
||||
first = False
|
||||
continue
|
||||
if not m.prefix or m.command != 'PRIVMSG':
|
||||
continue
|
||||
for predicate in predicates:
|
||||
if not predicate(m):
|
||||
break
|
||||
else:
|
||||
if fancy:
|
||||
irc.reply(msg, ircmsgs.prettyPrint(m))
|
||||
else:
|
||||
irc.reply(msg, m.args[1])
|
||||
return
|
||||
irc.error(msg, 'I couldn\'t find a message matching that criteria.')
|
||||
|
||||
def levenshtein(self, irc, msg, args):
|
||||
"""<string1> <string2>
|
||||
|
||||
@ -741,18 +688,7 @@ class FunCommands(callbacks.Privmsg):
|
||||
return
|
||||
irc.reply(msg, s)
|
||||
|
||||
def tell(self, irc, msg, args):
|
||||
"""<nick|channel> <text>
|
||||
|
||||
Tells the <nick|channel> whatever <text> is. Use nested commands to
|
||||
your benefit here.
|
||||
"""
|
||||
(target, text) = privmsgs.getArgs(args, needed=2)
|
||||
s = '%s wants me to tell you: %s' % (msg.nick, text)
|
||||
irc.queueMsg(ircmsgs.privmsg(target, s))
|
||||
raise callbacks.CannotNest
|
||||
|
||||
_eightballs = [
|
||||
_eightballs = (
|
||||
'outlook not so good.',
|
||||
'my reply is no.',
|
||||
'don\'t count on it.',
|
||||
@ -772,8 +708,7 @@ class FunCommands(callbacks.Privmsg):
|
||||
'without a doubt.',
|
||||
'reply hazy, try again.',
|
||||
'as I see it, yes.',
|
||||
]
|
||||
|
||||
)
|
||||
def eightball(self, irc, msg, args):
|
||||
"""[<question>]
|
||||
|
||||
|
@ -33,11 +33,17 @@
|
||||
Miscellaneous commands.
|
||||
"""
|
||||
|
||||
from fix import *
|
||||
|
||||
import os
|
||||
import getopt
|
||||
import pprint
|
||||
|
||||
import conf
|
||||
import debug
|
||||
import utils
|
||||
import ircmsgs
|
||||
import ircutils
|
||||
import privmsgs
|
||||
import callbacks
|
||||
|
||||
@ -228,6 +234,71 @@ class MiscCommands(callbacks.Privmsg):
|
||||
except IndexError:
|
||||
irc.error(msg, 'That\'s all, there is no more.')
|
||||
|
||||
def last(self, irc, msg, args):
|
||||
"""[--{from,in,to,with,regexp,fancy}] <args>
|
||||
|
||||
Returns the last message matching the given criteria. --from requires
|
||||
a nick from whom the message came; --in and --to require a channel the
|
||||
message was sent to; --with requires some string that had to be in the
|
||||
message; --regexp requires a regular expression the message must match
|
||||
--fancy determines whether or not to show the nick; the default is not
|
||||
"""
|
||||
|
||||
(optlist, rest) = getopt.getopt(args, '', ['from=', 'in=', 'to=',
|
||||
'with=', 'regexp=',
|
||||
'fancy'])
|
||||
fancy = False
|
||||
predicates = []
|
||||
for (option, arg) in optlist:
|
||||
option = option.strip('-')
|
||||
if option == 'fancy':
|
||||
fancy = True
|
||||
elif option == 'from':
|
||||
predicates.append(lambda m, arg=arg: m.nick == arg)
|
||||
elif option == 'in' or option == 'to':
|
||||
if not ircutils.isChannel(arg):
|
||||
irc.error(msg, 'Argument to --%s must be a channel.' % arg)
|
||||
return
|
||||
predicates.append(lambda m, arg=arg: m.args[0] == arg)
|
||||
elif option == 'with':
|
||||
predicates.append(lambda m, arg=arg: arg in m.args[1])
|
||||
elif option == 'regexp':
|
||||
try:
|
||||
r = utils.perlReToPythonRe(arg)
|
||||
except ValueError, e:
|
||||
irc.error(msg, str(e))
|
||||
return
|
||||
predicates.append(lambda m: r.search(m.args[1]))
|
||||
first = True
|
||||
for m in reviter(irc.state.history):
|
||||
if first:
|
||||
first = False
|
||||
continue
|
||||
if not m.prefix or m.command != 'PRIVMSG':
|
||||
continue
|
||||
for predicate in predicates:
|
||||
if not predicate(m):
|
||||
break
|
||||
else:
|
||||
if fancy:
|
||||
irc.reply(msg, ircmsgs.prettyPrint(m))
|
||||
else:
|
||||
irc.reply(msg, m.args[1])
|
||||
return
|
||||
irc.error(msg, 'I couldn\'t find a message matching that criteria.')
|
||||
|
||||
def tell(self, irc, msg, args):
|
||||
"""<nick|channel> <text>
|
||||
|
||||
Tells the <nick|channel> whatever <text> is. Use nested commands to
|
||||
your benefit here.
|
||||
"""
|
||||
(target, text) = privmsgs.getArgs(args, needed=2)
|
||||
s = '%s wants me to tell you: %s' % (msg.nick, text)
|
||||
irc.queueMsg(ircmsgs.privmsg(target, s))
|
||||
raise callbacks.CannotNest
|
||||
|
||||
|
||||
|
||||
Class = MiscCommands
|
||||
|
||||
|
@ -86,14 +86,6 @@ class FunCommandsTest(PluginTestCase, PluginDocumentation):
|
||||
i = ord(c)
|
||||
self.assertResponse('ord %s' % utils.dqrepr(c), str(i))
|
||||
|
||||
def testTell(self):
|
||||
m = self.getMsg('tell foo [rot13 foobar]')
|
||||
self.failUnless(m.args[0] == 'foo')
|
||||
self.failUnless('sbbone' in m.args[1])
|
||||
m = self.getMsg('tell #foo [rot13 foobar]')
|
||||
self.failUnless(m.args[0] == '#foo')
|
||||
self.failUnless('sbbone' in m.args[1])
|
||||
|
||||
def testZen(self):
|
||||
self.assertNotError('zen')
|
||||
|
||||
|
@ -60,8 +60,24 @@ class MiscCommandsTestCase(PluginTestCase, PluginDocumentation):
|
||||
def testGetprefixchar(self):
|
||||
self.assertNotError('getprefixchar')
|
||||
|
||||
def testModuleof(self):
|
||||
self.assertResponse('moduleof moduleof', 'MiscCommands')
|
||||
def testPlugin(self):
|
||||
self.assertResponse('plugin plugin', 'MiscCommands')
|
||||
|
||||
def testTell(self):
|
||||
m = self.getMsg('tell foo [plugin tell]')
|
||||
self.failUnless(m.args[0] == 'foo')
|
||||
self.failUnless('MiscCommands' in m.args[1])
|
||||
m = self.getMsg('tell #foo [plugin tell]')
|
||||
self.failUnless(m.args[0] == '#foo')
|
||||
self.failUnless('MiscCommands' in m.args[1])
|
||||
|
||||
def testLast(self):
|
||||
self.feedMsg('foo bar baz')
|
||||
self.assertResponse('last', 'foo bar baz')
|
||||
self.assertResponse('last', 'last')
|
||||
self.assertResponse('last --with foo', 'foo bar baz')
|
||||
self.assertResponse('last --regexp m/\s+/', 'last --with foo')
|
||||
self.assertResponse('last --regexp m/bar/', 'foo bar baz')
|
||||
|
||||
|
||||
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78:
|
||||
|
Loading…
Reference in New Issue
Block a user