diff --git a/plugins/Alias.py b/plugins/Alias.py index 0804b23aa..a6c635b35 100644 --- a/plugins/Alias.py +++ b/plugins/Alias.py @@ -127,23 +127,32 @@ def makeNewAlias(name, alias): doChannel = '$channel' in alias biggestDollar = findBiggestDollar(alias) biggestAt = findBiggestAt(alias) + wildcard = '$*' in alias + if biggestAt and wildcard: + raise AliasError, 'Can\'t use $* and optional args (@1, etc.)' def f(self, irc, msg, args): alias_ = alias if doChannel: channel = privmsgs.getChannel(msg, args) alias_ = alias.replace('$channel', channel) - if biggestDollar or biggestAt: + if not wildcard and biggestDollar or biggestAt: args = privmsgs.getArgs(args, needed=biggestDollar, optional=biggestAt) # Gotta have a tuple. - if biggestDollar + biggestAt == 1: + if biggestDollar + biggestAt == 1 and not wildcard: args = (args,) - def replace(m): - idx = int(m.group(1)) - return utils.dqrepr(args[idx-1]) - alias_ = dollarRe.sub(replace, alias_) - args = args[biggestDollar:] - alias_ = atRe.sub(replace, alias_) + def replace(m): + idx = int(m.group(1)) + return utils.dqrepr(args[idx-1]) + #debug.printf((args, alias_)) + alias_ = dollarRe.sub(replace, alias_) + #debug.printf((args, alias_)) + args = args[biggestDollar:] + #debug.printf((args, alias_)) + alias_ = atRe.sub(replace, alias_) + #debug.printf((args, alias_)) + alias_ = alias_.replace('$*', ' '.join(map(utils.dqrepr, args))) + #debug.printf((args, alias_)) self.Proxy(irc.irc, msg, callbacks.tokenize(alias_)) #f = new.function(f.func_code, f.func_globals, alias) f.__doc__ ='\n\nAlias for %r' % \ diff --git a/test/test_Alias.py b/test/test_Alias.py index 13f3260ad..c24a9be5a 100644 --- a/test/test_Alias.py +++ b/test/test_Alias.py @@ -91,6 +91,11 @@ class AliasTestCase(PluginTestCase, PluginDocumentation): self.assertNotError('alias rev "echo $3 $2 $1"') self.assertResponse('rev foo bar baz', 'baz bar foo') + def testAllArgs(self): + self.assertNotError('alias swap "echo $2 $1 $*"') + self.assertResponse('swap 1 2 3 4 5', '2 1 3 4 5') + self.assertError('alias foo "echo $1 @1 $*"') + def testNoRecursion(self): self.assertError('alias rotinfinity "rot13 [rotinfinity $1]"')