Настройка команды
Декоратор CommandHandler используется для объявления команды и добавления ее в обработчик, а также указания параметров команды. В нем используется перегрузка, позволяющая передавать аргументом либо строку, что будет являться названием команды для активации, либо объект с параметрами.
Простая настройка
@CommandHandler("example")
class ExampleCommand extends Command {}
Данный пример является самым простым, здесь мы создали команду example. Теперь бот будет обращаться к этому классу, если пользователь написал /example
Расширенная настройка
@CommandHandler({
name: "example",
args: {
method: "stdin",
value: [
["argument1", { question: "Напишите Ваш первый аргумент:" }]
["argument2", { question: "Напишите Ваш первый аргумент:" }]
]
},
description: [
{ text: "Это тестовая команда", language: "ru" },
{ text: "It's a test command", language: "en" },
]
})
class ExampleCommand extends Command {}
Здесь показаны все возможные настройки команды. Команда как и в первом примере реагирует на /example, но с дополнительными функциями.
Интерфейс параметров, принимаемый декоратором
interface ICommandParams {
// Название команды, на которую будет реагировать бот
name: string;
// Аргументы команды, которые необходимы для выполнения команды
args?: ICommandArguments;
// Описание команды, можно указать на разных языках, которое будет отправлено Telegram для установки в список команд
description?: ICommandDescription[];
}
interface ICommandDescription {
// Описание команды, от 1 до 256 символов
text: string;
// Двухбуквенный код языка ISO 639-1. Если пусто, команды будут применяться ко всем пользователям из данной области, для языка которых нет специальных команд.
language?: string;
}
type ICommandArgumentType = "parameterized" | "space" | "stdin" | "fulltext";
interface ICommandArguments {
/**
* Указывает, как будут приниматься аргументы для команды
*
* @param parameterized - Аргументы команды передаются в виде --ключ=значение
* @example
* User: /command --param1=value --param2=value
*
* @param space - Аргументы команды передаются в виде значений, разделенных пробелами
* @example
* User: /command value1 value2
*
* @param stdin - Аргументы команды запрашиваются после вызова команды, принимаются отдельными сообщениями, которые запрашивает бот
* @example
* User: /command
* Bot: What value do you want to specify?
* User: value
*
* @param fulltext - Принимает только один аргумент, возвращает весь текст сообщения
* @example
* User: /command здесь много текста, который полностью переносится в один аргумент
*/
method: ICommandArgumentType | ICommandArgumentType[];
/**
* @type {string[]} Массив состоящий из перечисления названий аргументов, которые необходимо получить
* @type {[string, { question?: string }][]} Массив из массивов, где сначала передается название аргумента, а потом его доп. параметры
*
* @param question Текст сообщения для запроса аргумента. Если текст не указан, будет отправлено стандартное сообщение
*/
value: string[] | [string, {
question?: string
}][];
}