diff --git a/plugins/Alias.py b/plugins/Alias.py index c50dfd726..8849913be 100644 --- a/plugins/Alias.py +++ b/plugins/Alias.py @@ -217,9 +217,10 @@ class Alias(callbacks.Privmsg): raise AliasError, s name = realName cbs = callbacks.findCallbackForCommand(irc, name) - if [cb for cb in cbs if cb != self]: - s = 'A command with the name %r already exists.' % name - raise AliasError, s + if self in cbs: + if hasattr(self, realName) and realName not in self.aliases: + s = 'You can\'t overwrite commands in this plugin.' + raise AliasError, s if name in self.aliases: (currentAlias, locked) = self.aliases[name] if locked and currentAlias != alias: diff --git a/test/test_Alias.py b/test/test_Alias.py index 1f3956589..d1dd30477 100644 --- a/test/test_Alias.py +++ b/test/test_Alias.py @@ -67,6 +67,13 @@ class FunctionsTest(unittest.TestCase): class AliasTestCase(ChannelPluginTestCase, PluginDocumentation): plugins = ('Alias', 'Fun', 'Utilities') + def testDoesNotOverwriteCommands(self): + self.assertError('alias add alias "echo foo bar baz"') + self.assertError('alias add add "echo foo bar baz"') + self.assertError('alias add remove "echo foo bar baz"') + self.assertError('alias add lock "echo foo bar baz"') + self.assertError('alias add unlock "echo foo bar baz"') + def testAliasHelp(self): self.assertNotError('alias add slashdot foo') self.assertRegexp('help slashdot', "Alias for 'foo'")