# Примеры использования umbot

В этой директории содержатся запускаемые примеры навыков и чат-ботов на фреймворке `umbot`.
Все примеры собраны в один npm-пакет, чтобы их можно было установить и запустить одной командой.

## Требования

- Node.js 20.19+
- TypeScript 5+
- Собранная библиотека `umbot`: перед установкой примеров выполните `npm run build` в корне репозитория

## Как запустить

Из папки `examples`:

```bash
npm install
npm run build
npm run <имя примера>
```

Например, для базового навыка: `npm run standard`.

Большинство примеров запускаются в интерактивном консольном режиме `BotTest`:
после старта вводите команды прямо в терминале. Выход — команда `exit` (или Ctrl+C).

## Список примеров

| Команда                   | Папка                  | Что показывает                                                                                                                                                                                                                                                     |
| ------------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| —                         | `umbot-demo/`          | **Демо-проект «Кофейня-бот»**: законченный бот целиком (один код — 7 платформ). Вся логика — цепочка команд без контроллера: форма заказа, цены и итог, лояльность, `userData`, карточки, NLU, middleware, тесты. Запускается отдельно, см. `umbot-demo/README.md` |
| `npm run standard`        | `skills/standard`      | Базовый шаблон навыка: контроллер, платформы, файловая БД                                                                                                                                                                                                          |
| `npm run add-command`     | `skills/addCommand`    | Регистрацию команд: строковые слоты, RegExp, fallback                                                                                                                                                                                                              |
| `npm run add-step`        | `skills/addStep`       | Многошаговые диалоги и переходы между шагами                                                                                                                                                                                                                       |
| `npm run auth`            | `skills/auth`          | Авторизацию пользователя                                                                                                                                                                                                                                           |
| `npm run game`            | `skills/game`          | Игру с состоянием; запуск полноценного HTTP-сервера                                                                                                                                                                                                                |
| `npm run game-in-command` | `skills/gameInCommand` | Ту же игру, но вся логика описана через `addCommand`                                                                                                                                                                                                               |
| `npm run http-client`     | `skills/httpClient`    | Подмену встроенного HTTP-клиента через `appContext.httpClient`                                                                                                                                                                                                     |
| `npm run local-storage`   | `skills/localStorage`  | Работу с `userData` через локальное хранилище платформы                                                                                                                                                                                                            |
| `npm run user-app`        | `skills/UserApp`       | Собственный адаптер платформы (кастомный транспорт)                                                                                                                                                                                                                |
| `npm run user-db`         | `skills/userDbConnect` | Собственный адаптер базы данных                                                                                                                                                                                                                                    |

Папка `skills/json` содержит файл `UsersData.json` — пример структуры данных, которые
`FileAdapter` сохраняет для пользователей. Сам по себе пример не запускается.

> Пример `game` запускает HTTP-сервер на `localhost:3000`. Чтобы подключить к нему
> реальную платформу, потребуется публичный URL (например, через nginx или туннель).

## Структура

- `config/` — общие конфигурации, которые переиспользуются примерами;
- `skills/` — исходники примеров, по одной папке на пример;
- `umbot-demo/` — самостоятельный демо-проект со своим `package.json`, тестами и README (не входит в сборку `npm run build` этого пакета);
- `data/` — создаётся автоматически при первом сохранении: `FileAdapter` хранит там `UsersData.json` и кэш токенов изображений/звуков (в `.gitignore`);
- `logs/` — логи ошибок, если они возникнут при запуске (в `.gitignore`).

Каждый пример содержит README с описанием того, что он демонстрирует.

## Как перенести пример в свой проект

1. Скопируйте папку примера и нужные файлы из `config/` в свой проект.
2. Установите фреймворк: `npm install umbot`.
3. Поправьте пути до конфигов — это поля `json` и `error_log` в скопированных файлах из
   `examples/config/` (например, `skillDefaultConfig.ts`) — и запустите: `bot.test()` для
   разработки или `bot.start()` для продакшена.
