Телеграм-бот напоминаний (Bun + grammY + LiteLLM)
  • TypeScript 97.9%
  • Dockerfile 2.1%
Find a file
Данил Габов 4d260e5ff8 fix: fallback-цепочка из живых моделей
OpenRouter-пул LiteLLM протух: deepseek/qwen/llama :free исчезли.
Пул обновлён на сервере (nemotron 3, laguna, north-mini-code),
у бота в запасе groq llama 3.1 → north-mini-code → nemotron-nano-30b.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 16:22:39 +03:00
src fix: fallback-цепочка из живых моделей 2026-07-22 16:22:39 +03:00
.env.example feat: прод-хардening и новые фичи 2026-07-21 14:05:53 +03:00
.gitignore feat: телеграм-бот напоминаний (grammY + bun:sqlite + LiteLLM парсинг) 2026-07-21 10:36:42 +03:00
bun.lock feat: телеграм-бот напоминаний (grammY + bun:sqlite + LiteLLM парсинг) 2026-07-21 10:36:42 +03:00
docker-compose.yml feat: телеграм-бот напоминаний (grammY + bun:sqlite + LiteLLM парсинг) 2026-07-21 10:36:42 +03:00
Dockerfile feat: прод-хардening и новые фичи 2026-07-21 14:05:53 +03:00
package.json feat: телеграм-бот напоминаний (grammY + bun:sqlite + LiteLLM парсинг) 2026-07-21 10:36:42 +03:00
README.md docs: README под текущий функционал 2026-07-21 14:16:03 +03:00
tsconfig.json feat: телеграм-бот напоминаний (grammY + bun:sqlite + LiteLLM парсинг) 2026-07-21 10:36:42 +03:00

reminder-bot

Телеграм-бот напоминаний в стиле @RemindMegaBot. Пишешь или наговариваешь голосом в свободной форме — бот понимает через LLM и напоминает вовремя.

  • «через 20 минут снять чай»
  • «завтра в 9 позвонить маме»
  • «каждый понедельник в 10 планёрка»
  • «25-го числа заплатить за интернет»
  • 🎤 голосовое сообщение — распознаётся whisper'ом
  • «отмени напоминание про чай», «что у меня запланировано» — тоже свободным текстом

Фичи

  • Разовые и повторяющиеся напоминания (daily / weekly / monthly / interval)
  • Кнопки под напоминанием: Готово, +10 мин, +1 час, Завтра
  • Snooze повторяющегося не сбивает его расписание (создаётся разовый дубль)
  • /list — активные напоминания с удалением; отмена и список работают и свободным текстом
  • Утренний дайджест напоминаний на день (DIGEST_TIME)
  • Голосовые/аудио через OpenAI-совместимый ASR (Groq whisper)
  • Ретраи парсера с fallback-моделями
  • Whitelist по Telegram user ID, алерты админу об ошибках
  • Graceful shutdown; healthcheck по heartbeat, привязанному к живости поллинга (смерть getUpdates → рестарт контейнера)

Стек

Bun + grammY + bun:sqlite. Парсинг — LLM через LiteLLM, распознавание речи — whisper (Groq).

Запуск

cp .env.example .env  # заполнить BOT_TOKEN, LLM_API_KEY, при желании ASR_API_KEY
bun install
bun run start

Docker: docker compose up -d --build (данные в volume reminder-data).

Env

Var Что
BOT_TOKEN токен от @BotFather
ALLOWED_USER_IDS CSV user id, пусто = бот открыт всем (дайджест при этом выключен)
LLM_BASE_URL / LLM_API_KEY / LLM_MODEL OpenAI-совместимый эндпоинт парсинга
LLM_FALLBACK_MODELS CSV запасных моделей
ASR_BASE_URL / ASR_API_KEY / ASR_MODEL ASR для голосовых; пусто = голос выключен
ADMIN_CHAT_ID куда слать алерты (default: первый из whitelist)
DIGEST_TIME HH:MM утреннего дайджеста, пусто = выкл
TZ таймзона напоминаний (default Asia/Yekaterinburg)
DB_PATH путь к sqlite (в Docker /data/reminders.db)

Деплой

Coolify (MS-02): push в main на git.openbomber.com/bysawec/reminder-bot → Forgejo webhook → автодеплой. Контейнеру нужен HTTPS_PROXY (killswitch сервера режет прямой WAN).