Универсальный фреймворк для создания ботов (Telegram и др.), веб-бэкендов или полноценных монолитов. Построен на Bun, TypeScript и модульной архитектуре, вдохновленной лучшими практиками Go.
Проект использует четкое разделение ответственности. Фреймворк позволяет объединять логику чат-ботов и HTTP-сервера в одном приложении.
cmd/— Точки входа в приложение.internal/— Приватный код приложения.core/— Базовые классы (App,Loader,Router), интерфейсы и системные перечисления.application/— Бизнес-логика: модули, роуты, события и сцены.services/— Специализированные сервисы (AI, бизнес-логика и др.).storage/— Логика работы с хранилищами данных (Prisma, Redis).
pkg/— Публичные утилиты и библиотеки.config/— Конфигурационные файлы.database/— Схемы БД (Prisma) и миграции.
Модули — это строительные блоки приложения. Они загружаются автоматически. События (ModuleType.EVENT) загружаются в последнюю очередь, чтобы гарантировать готовность всех зависимостей.
// internal/application/modules/example.module.ts
import Module, { ModuleType } from "@core/classes/module.class";
export default new Module({ type: ModuleType.MODULE }, async (deps, config) => {
// Ваша логика здесь
});Сцены используются для сложных диалогов в ботах. В параметрах передается name, а внутри доступны методы Telegraf и deps.scene.
// internal/application/scenes/order.scene.ts
export default new Scene({ name: "order_scene" }, async (deps, config) => {
deps.scene.enter(async (ctx) => {
await ctx.reply("Что вы хотите заказать?");
});
// Обработка шагов сцены
});Для создания API или бэкенда для сайта используйте роуты.
import Route from "@core/classes/route.class";
export default new Route(
{ path: "/api/status", method: "GET" },
async (deps, request, config) => {
return Response.json({ status: "ok" });
}
);По умолчанию поддержка Telegraf отключена в базовой версии для универсальности. Чтобы активировать её:
-
Установите библиотеку:
bun add telegraf
-
Активируйте файлы ядра: Переименуйте файлы, убрав расширение
.disabled:internal/core/classes/scene.class.ts.disabledinternal/core/interfaces/context.interface.ts.disabledinternal/core/interfaces/scene.interface.ts.disabled
-
Раскомментируйте код:
- В
internal/core/interfaces/deps.interface.tsраскомментируйте импорты Telegraf и интерфейсISceneDeps:import { Telegraf, Scenes } from "telegraf"; // ... export interface ISceneDeps extends IBaseDeps { scene: Scenes.BaseScene<any>; }
- В
internal/core/classes/loader.class.tsраскомментируйте методloadScenes:public async loadScenes(): Promise<Scenes.BaseScene<any>[]> { const sceneFiles = this.getFiles(this.scenesPath, this.suffix); const scenes: Scenes.BaseScene<any>[] = []; // ... return scenes; }
- В
-
Настройте App: В
internal/core/classes/app.class.tsдобавьте инициализацию сессий и сцен (middleware) перед загрузкой модулей.Примечание: Также необходимо добавить
stage: { ttl: число }в ваш конфиг. Параметрttl(Time To Live) определяет время жизни сцены (в секундах) после вызова; по истечении этого времени сцена автоматически закрывается.const scenes = await this.loader.loadScenes(); const stage = new Scenes.Stage(scenes, { ttl: config.stage.ttl }); this.deps.bot.use(session()); this.deps.bot.use(stage.middleware());
- Bun runtime
- Redis
- PostgreSQL/SQLite (через Prisma)
- Клонируйте репозиторий.
- Установите зависимости:
bun install. - Настройте
.env(используяenv.example). - Подготовьте БД:
bun run db:migrate && bun run db:generate. - Запустите:
bun run dev.
bun run dev— Запуск в режиме разработки с hot-reload.bun run start— Запуск в production.bun run db:*— Команды для работы с Prisma (migrate, generate, studio).bun run format— Форматирование кода через Prettier.
Проект включает Dockerfile и docker-compose.yml для быстрого развертывания в контейнерах.
# Запуск через docker-compose
docker-compose up -d
# Логи
docker-compose logs -f botNODE_ENV=production
LOG_LEVEL=warn
BOT_TOKEN=your_production_bot_token
GEMINI_API_KEY=your_production_gemini_key
REDIS_URL=redis://your-redis-server:6379Этот проект распространяется под лицензией MIT. Подробности в файле LICENSE.
© 2026 Pavlotech. MIT License.