Команды

Регистрация команд чата, подкоманды, аргументы и сообщения игроку.

Ввод команд в игре

Введите /toolbox или /8 в чат, чтобы перейти к командной строке Toolbox, затем введите команду. Можно передать команду сразу:

/toolbox mymod
/toolbox mymod echo "Hello world"
/toolbox mymod echo 'A quoted string'
/toolbox mymod echo "Quotes: \"example\"; backslash: \\"

Пробелы разделяют аргументы. Для строки с пробелами используйте одинарные или двойные кавычки. Обратная косая черта экранирует кавычки и саму себя. Незакрытые кавычки вызывают ошибку разбора. В callback поступают строки: числа и логические значения преобразуйте и проверяйте сами.

Регистрация

mod.command предоставляет встроенный модуль команд. add(command, callback[, context]) принимает имя или массив псевдонимов. Имена уникальны без учета регистра; повторная регистрация занятого имени вызывает ошибку. context задает this обработчика.

module.exports = function MyMod(mod) {
    mod.command.add(['mymod', 'mm'], (...args) => {
        mod.command.message(`Arguments: ${args.join(', ')}`);
    });
};

Подкоманды

Вместо функции можно передать объект. Каждый ключ становится подкомандой; вложенные объекты создают следующий уровень. $none вызывается без аргументов, $default — если соответствия не найдено. В $default передается и неизвестное имя подкоманды.

mod.command.add('example', {
    $none() {
        mod.command.message('Usage: example echo <text> | color blue');
    },
    $default(name) {
        mod.command.message(`Unknown subcommand: ${name}`);
    },
    echo(...words) {
        mod.command.message(words.join(' '));
    },
    color: {
        $default() { mod.command.message('Usage: example color blue'); },
        blue() { mod.command.message('<font color="#5555ff">Hello!</font>'); }
    }
});

Остальные методы

Метод Поведение
remove(command) Удаляет команду или массив псевдонимов
message(msg) Сообщение в канал Toolbox; поддерживает игровую HTML-разметку
exec(str) Исполняет строку команды без /toolbox
exec(args) Исполняет массив уже разделенных аргументов

exec возвращает true, если найдена команда, и false, если нет; ошибки callback могут распространяться вызывающему коду. message добавляет имя модуля согласно настройкам command. Команды, зарегистрированные через mod.command, удаляются при уничтожении соответствующего интерфейса; при временном отключении функции используйте remove явно. Не вставляйте непроверенный текст в HTML-атрибуты сообщения.

Источники: mods/command/README.md, mods/command/index.js, bin/mod.js. Исходный модуль команд создан Pinkie Pie; в Toolbox он дополнен и встроен в API модулей.