Telegram-бот для управления задачами с AI-распознаванием текста и голоса. Задачи группируются по проектам и отображаются в закреплённом сообщении. Поддерживает напоминания по дате/времени и повторяющиеся уведомления.
- TypeScript + Node.js
- grammY — Telegram Bot framework
- Prisma + PostgreSQL — база данных
- Gemini / OpenAI-compatible API — planner для разбора задач
- STT provider — распознавание голосовых сообщений
- node-cron — планировщик напоминаний
- Biome — линтер и форматтер
- Husky — git pre-commit хуки
- Добавление задач текстом или голосом
- AI-парсинг: planner + executor для определения названия, проекта, даты, времени
- Относительные даты: "через час", "завтра в 10", "в пятницу"
- Управление задачами текстом/голосом: удаление, завершение, переименование, перемещение между проектами, изменение дедлайна
- Закреплённое сообщение со списком задач по проектам
- Inline-кнопки для завершения/удаления задач
- Повторяющиеся напоминания (еженедельно, ежемесячно, ежегодно)
- Мультипользовательский — каждый пользователь выбирает свой часовой пояс
- Напоминания по расписанию (проверка каждую минуту)
Самый простой способ запустить бота — через Docker Compose.
git clone https://github.com/maslakovSaveliy/task-bot.git
cd task-bot- BOT_TOKEN — создать бота через @BotFather в Telegram
- GEMINI_API_KEY — получить ключ Gemini API
- STT_API_KEY — ключ провайдера распознавания голоса
cp .env.example .envЗаполнить:
BOT_TOKEN=123456:ABC-DEF...
DATABASE_URL=postgresql://taskbot:taskbot_secret@db:5432/taskbot
GEMINI_API_KEY=...
STT_API_KEY=...
STT_BASE_URL=https://api.onlysq.ru/ai/openai/docker compose up -dБот поднимет PostgreSQL, применит миграции и запустится. Проверить логи:
docker compose logs -f botdocker compose downДанные PostgreSQL сохраняются в Docker volume pgdata.
Для серверного запуска есть отдельный override-файл docker-compose.server.yml.
Схема:
botработает как обычно- planner идёт напрямую в Gemini API
- STT остаётся на текущем провайдере
Подготовка:
cp .env.server.example .env.serverЗаполни:
GEMINI_API_KEYSTT_API_KEYиSTT_BASE_URL
Запуск на сервере:
docker compose --env-file .env.server -f docker-compose.yml -f docker-compose.server.yml up -d --buildПроверка:
docker compose --env-file .env.server -f docker-compose.yml -f docker-compose.server.yml logs -f botКлючевые server env:
GEMINI_BASE_URL=https://generativelanguage.googleapis.com/v1beta/openai/PRIMARY_CHAT_MODEL=gemini-2.5-flashFALLBACK_CHAT_MODEL=по умолчанию выключен, чтобы не сжигать free-tier лимит второй модельюAI_FALLBACK_BASE_URL=https://api.onlysq.ru/ai/openai/AI_FALLBACK_CHAT_MODEL=llama3.1-8bAI_AGENT_MODE=true
Если Gemini на конкретном сервере не работает по региону или free-tier ограничению, planner автоматически уйдёт на secondary provider через AI_FALLBACK_*.
- Node.js 22+
- pnpm 10+
- PostgreSQL 16+
pnpm installcp .env.example .env
# заполнить BOT_TOKEN, DATABASE_URL и AI/STT ключиDATABASE_URL="postgresql://..." pnpm db:pushpnpm dev| Команда | Описание |
|---|---|
/start |
Запуск и выбор часового пояса |
/help |
Справка по всем возможностям |
/tasks |
Показать список активных задач |
/projects |
Список проектов |
/recurring |
Повторяющиеся напоминания |
/timezone |
Сменить часовой пояс |
src/
├── index.ts — точка входа
├── bot.ts — создание бота, middleware
├── config.ts — переменные окружения
├── db/client.ts — Prisma client
├── modules/
│ ├── tasks/ — задачи (handlers, service, renderer, keyboard, pinned)
│ ├── projects/ — проекты (handlers, service)
│ ├── recurring/ — повторяющиеся (handlers, service, keyboard)
│ ├── voice/ — голосовые сообщения
│ └── reminders/ — cron-планировщик
├── services/
│ ├── ai.ts — planner/executor AI parsing
│ └── stt.ts — голос → текст
└── types/index.ts — общие типы
| Скрипт | Описание |
|---|---|
pnpm dev |
Запуск в watch-режиме (tsx) |
pnpm start |
Запуск без watch |
pnpm build |
Компиляция TypeScript |
pnpm lint |
Проверка Biome |
pnpm lint:fix |
Автоисправление Biome |
pnpm db:generate |
Генерация Prisma Client |
pnpm db:migrate |
Создание миграции |
pnpm db:push |
Применение схемы к БД |