Files
boltun-ai/README.md
yunogasai 99c4660da9 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>
2026-09-24 18:31:44 +02:00

3.7 KiB
Raw Blame History

Boltun AI

Telegram-бот для групповых чатов с AI-личностями. Стек: Node.js, TypeScript, grammY, Mastra (модели через OpenRouter / DeepSeek), SQLite.

Возможности

  • Отвечает только администраторам из ADMIN_IDS, остальных молча игнорирует.
  • Вопросы: /ask <вопрос>, упоминание @бота, ответ на сообщение бота, в личке — любое сообщение.
  • Контекст из чата: бот сохраняет сообщения чата в SQLite (последние HISTORY_LIMIT на чат). Попросите «посмотри последние 100 сообщений и перескажи» — агент сам вызовет инструмент read_chat_messages и загрузит переписку в контекст. Если задать /ask ответом на чьё-то сообщение, оно тоже попадёт в контекст.
  • Личности: у каждого чата своя активная личность. Встроенные: Болтун, Эксперт, Философ, Саркастик, Пират.
    • /personas — список и выбор кнопками
    • /persona <id> — выбрать
    • /persona_add <id> <описание характера> — добавить/изменить свою
    • /persona_del <id> — удалить свою

Telegram Bot API не отдаёт историю чата задним числом: бот видит только сообщения, пришедшие после его добавления. Чтобы он видел все сообщения группы, отключите privacy mode в @BotFather (/setprivacy → Disable) до добавления в группу или сделайте бота админом группы.

Запуск локально

nvm use            # Node 24
pnpm install
cp .env.example .env   # заполнить BOT_TOKEN, ADMIN_IDS, OPENROUTER_API_KEY
pnpm dev

Свой Telegram ID можно узнать, написав боту /whoami в личку.

Переменные окружения

Переменная Обязательна Описание
BOT_TOKEN да токен от @BotFather
ADMIN_IDS да Telegram ID админов через запятую
OPENROUTER_API_KEY да* ключ OpenRouter (*или ключ того провайдера, что в AI_MODEL)
AI_MODEL нет модель Mastra model router, по умолчанию openrouter/deepseek/deepseek-v4-flash; напрямую через DeepSeek — deepseek/deepseek-chat + DEEPSEEK_API_KEY
DB_PATH нет путь к SQLite, по умолчанию data/bot.db (в Docker — /app/data/bot.db)
HISTORY_LIMIT нет сколько сообщений на чат хранить, по умолчанию 2000

Деплой (Dokploy)

Приложение собирается из Dockerfile (Build Type: Dockerfile). Бот работает через long polling — домен и порты не нужны, достаточно одной реплики.

  1. Создать проект и приложение, источник — этот git-репозиторий, ветка main.
  2. Build Type — Dockerfile.
  3. Environment — переменные из таблицы выше.
  4. Volumes — volume, смонтированный в /app/data (там SQLite-база, иначе история и личности пропадут при передеплое).
  5. Deploy.