Телеграм-бот напоминаний (Bun + grammY + LiteLLM)
- TypeScript 97.9%
- Dockerfile 2.1%
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> |
||
|---|---|---|
| src | ||
| .env.example | ||
| .gitignore | ||
| bun.lock | ||
| docker-compose.yml | ||
| Dockerfile | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
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).