Telegram-бот Boltun AI на grammY + Mastra
- Отвечает только администраторам из ADMIN_IDS - Личности на чат: встроенные и пользовательские (/personas, /persona, /persona_add, /persona_del) - Вопросы через /ask, упоминание, ответ боту или личку - Сохраняет сообщения чата в SQLite; агент по просьбе читает их инструментом read_chat_messages - Модели через OpenRouter (по умолчанию DeepSeek) - Слои: libs, repositories, services, bot/handlers - Dockerfile для деплоя в Dokploy Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
41
CLAUDE.md
Normal file
41
CLAUDE.md
Normal file
@@ -0,0 +1,41 @@
|
||||
# Boltun AI
|
||||
|
||||
Telegram-бот на Node.js + TypeScript + grammY, AI через Mastra (модели через OpenRouter, например DeepSeek). Хранилище — SQLite (better-sqlite3).
|
||||
|
||||
## Команды
|
||||
|
||||
- `pnpm dev` — запуск с автоперезагрузкой (читает `.env`)
|
||||
- `pnpm typecheck` — проверка типов
|
||||
- `pnpm build` / `pnpm start` — сборка в `dist/` и запуск
|
||||
- Node.js 24 (`.nvmrc`); Mastra требует Node >= 22.13
|
||||
|
||||
## Архитектура
|
||||
|
||||
Зависимости идут сверху вниз: `bot` → `services` → `repositories` → `libs`. Сборка всех слоёв (composition root) — в `src/index.ts`.
|
||||
|
||||
```
|
||||
src/
|
||||
index.ts — создание зависимостей и запуск бота
|
||||
config.ts — чтение и валидация env
|
||||
types.ts — доменные типы (Persona, ChatMessage)
|
||||
constants/ — встроенные личности и прочие константы
|
||||
libs/ — инфраструктура без бизнес-логики (SQLite, форматирование Telegram-сообщений)
|
||||
repositories/ — только SQL и маппинг строк в доменные типы, по репозиторию на таблицу
|
||||
services/ — бизнес-логика; зависят от репозиториев, не знают про grammY
|
||||
assistant/ — AI на Mastra: агент, промпты, tools
|
||||
bot/ — grammY: сборка бота, общие хелперы ответа
|
||||
handlers/ — тонкие Composer'ы: разбор команды → вызов сервиса → ответ
|
||||
```
|
||||
|
||||
- Каждый модуль — фабрика `createX(deps)`, тип экспортируется как `ReturnType<typeof createX>`.
|
||||
- Хендлеры не ходят в репозитории напрямую — только через сервисы.
|
||||
- Правила доступа (только админы) — в `bot/create-bot.ts` через `bot.filter`.
|
||||
|
||||
## Стиль кода
|
||||
|
||||
- Пиши функционально: стрелочные функции и фабрики (`const createX = (...) => ({ ... })`), без классов.
|
||||
- Не используй ключевое слово `function` — только `const fn = (...) => ...`.
|
||||
- Не используй `let` (и `var`) — только `const`; вместо циклов с мутацией — `map`/`filter`/`reduce`/рекурсия.
|
||||
- Отделяй пустой строкой объявления констант и логические блоки друг от друга.
|
||||
- Импорты локальных файлов — с расширением `.js` (ESM, `module: NodeNext`).
|
||||
- Тексты для пользователей бота и комментарии — на русском.
|
||||
Reference in New Issue
Block a user