mirror of
https://github.com/Mikaela/Limnoria.git
synced 2025-02-28 11:30:40 +01:00
Fix for RFE #801934: Response in case of non-commands.
This commit is contained in:
parent
ffefdf1ab7
commit
176b9b30b6
@ -51,6 +51,26 @@ import privmsgs
|
||||
import callbacks
|
||||
|
||||
class MiscCommands(callbacks.Privmsg):
|
||||
def doPrivmsg(self, irc, msg):
|
||||
# This exists to be able to respond to attempts to command the bot
|
||||
# with a "That's not a command!" if the proper conf.variable is set.
|
||||
callbacks.Privmsg.doPrivmsg(self, irc, msg)
|
||||
if conf.replyWhenNotCommand:
|
||||
s = callbacks.addressed(irc.nick, msg)
|
||||
if s:
|
||||
tokens = callbacks.tokenize(s)
|
||||
notCommands = []
|
||||
for command in callbacks.getCommands(tokens):
|
||||
if not callbacks.findCallbackForCommand(irc, command):
|
||||
notCommands.append(command)
|
||||
if notCommands:
|
||||
if len(notCommands) == 1:
|
||||
s = '%r is not a command.' % notCommands[0]
|
||||
else:
|
||||
s = '%s are not commands' % \
|
||||
utils.commaAndify(notCommands)
|
||||
irc.queueMsg(callbacks.reply(msg, s))
|
||||
|
||||
def list(self, irc, msg, args):
|
||||
"""[<module name>]
|
||||
|
||||
|
@ -262,6 +262,14 @@ def tokenize(s):
|
||||
debug.msg('tokenize took %s seconds.' % (time.time() - start), 'verbose')
|
||||
return args
|
||||
|
||||
def getCommands(tokens):
|
||||
L = []
|
||||
if tokens and isinstance(tokens, list):
|
||||
L.append(tokens[0])
|
||||
for elt in tokens:
|
||||
L.extend(getCommands(elt))
|
||||
return L
|
||||
|
||||
def findCallbackForCommand(irc, commandName):
|
||||
"""Given a command name and an Irc object, returns the callback that
|
||||
command is in. Returns None if there is no callback with that command."""
|
||||
|
@ -84,6 +84,13 @@ throttleTime = 1.0
|
||||
###
|
||||
allowEval = False
|
||||
|
||||
###
|
||||
# replyWhenNotCommand: True if you want the bot reply when someone apparently
|
||||
# addresses him but there is no command. Otherwise he'll
|
||||
# just remain silent.
|
||||
###
|
||||
replyWhenNotCommand = True
|
||||
|
||||
###
|
||||
# defaultCapabilities: Capabilities allowed to everyone by default. You almost
|
||||
# certainly want to have !owner and !admin in here.
|
||||
|
@ -37,6 +37,7 @@ if 'test' not in sys.path:
|
||||
|
||||
import conf
|
||||
conf.dataDir = 'test-data'
|
||||
conf.replyWhenNotCommand = False
|
||||
|
||||
from fix import *
|
||||
|
||||
|
@ -33,6 +33,13 @@ from test import *
|
||||
|
||||
class MiscCommandsTestCase(PluginTestCase, PluginDocumentation):
|
||||
plugins = ('MiscCommands', 'Utilities')
|
||||
def testReplyWhenNotCommand(self):
|
||||
conf.replyWhenNotCommand = True
|
||||
self.assertRegexp('foo bar baz', 'not.*command')
|
||||
self.assertRegexp('foo | bar | baz', 'not.*commands')
|
||||
self.assertRegexp('baz [foo] [bar]', 'not.*commands')
|
||||
conf.replyWhenNotCommand = False
|
||||
|
||||
def testHelp(self):
|
||||
self.assertNotError('help list')
|
||||
self.assertNotError('help help')
|
||||
|
@ -128,6 +128,17 @@ class FunctionsTestCase(unittest.TestCase):
|
||||
'%s: foo' % channelMsg.nick),
|
||||
callbacks.reply(channelMsg, 'foo'))
|
||||
|
||||
def testGetCommands(self):
|
||||
self.assertEqual(callbacks.getCommands(['foo']), ['foo'])
|
||||
self.assertEqual(callbacks.getCommands(['foo', 'bar']), ['foo'])
|
||||
self.assertEqual(callbacks.getCommands(['foo', ['bar', 'baz']]),
|
||||
['foo', 'bar'])
|
||||
self.assertEqual(callbacks.getCommands(['foo', 'bar', ['baz']]),
|
||||
['foo', 'baz'])
|
||||
self.assertEqual(callbacks.getCommands(['foo', ['bar'], ['baz']]),
|
||||
['foo', 'bar', 'baz'])
|
||||
|
||||
|
||||
class PrivmsgTestCase(PluginTestCase):
|
||||
plugins = ('Utilities',)
|
||||
def testEmptySquareBrackets(self):
|
||||
|
Loading…
x
Reference in New Issue
Block a user