diff --git a/src/as/com/threerings/crowd/chat/client/ChatDirector.as b/src/as/com/threerings/crowd/chat/client/ChatDirector.as index f8f4cdc23..2a4e75ddd 100644 --- a/src/as/com/threerings/crowd/chat/client/ChatDirector.as +++ b/src/as/com/threerings/crowd/chat/client/ChatDirector.as @@ -241,15 +241,18 @@ public class ChatDirector extends BasicDirector public function registerCommandHandler ( msg :MessageBundle, command :String, handler :CommandHandler) :void { - var key :String = "c." + command; - if (msg.exists(key)) { - var tokens :Array = msg.get(key).split(/\s+/); - for each (var cmd :String in tokens) { - _handlers.put(cmd, handler); - } - } else { - // fall back to just using the English command - _handlers.put(command, handler); + for each (var cmd :String in getCommandAliases(msg, command)) { + _handlers.put(cmd, handler); + } + } + + /** + * Unregister a chat command handler. + */ + public function unregisterCommandHandler (msg :MessageBundle, command :String) :void + { + for each (var cmd :String in getCommandAliases(msg, command)) { + _handlers.remove(cmd); } } @@ -903,6 +906,18 @@ public class ChatDirector extends BasicDirector return null; // TODO } + /** + * Return the translated aliases for the specified command. + */ + protected function getCommandAliases (msg :MessageBundle, cmd :String) :Array /* of String */ + { + var key :String = "c." + cmd; + if (msg.exists(key)) { + return msg.get(key).split(/\s+/); + } + return [ cmd ]; + } + /** * Returns a hashmap containing all command handlers that match the specified command (i.e. the * specified command is a prefix of their registered command string).