From a24dc4452ddb6f767e4a87ee5e44fa8f628aaf78 Mon Sep 17 00:00:00 2001 From: Cosmo Date: Fri, 6 Feb 2026 12:08:38 +0000 Subject: [PATCH] Add Pulse Telegram bot spec: commands, inline buttons, architecture --- Projects/Pulse/Telegram-Bot.md | 148 +++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 Projects/Pulse/Telegram-Bot.md diff --git a/Projects/Pulse/Telegram-Bot.md b/Projects/Pulse/Telegram-Bot.md new file mode 100644 index 0000000..c186ec3 --- /dev/null +++ b/Projects/Pulse/Telegram-Bot.md @@ -0,0 +1,148 @@ +# Pulse — Telegram Bot + +Бот как полноценный интерфейс к Pulse. Управление задачами и привычками без захода на сайт. + +## Авторизация + +### Связка аккаунта +1. Пользователь отправляет `/start` +2. Бот отвечает: "Привет! Твой chat_id: `123456789`. Добавь его в настройках профиля на сайте." +3. После привязки бот может отправлять уведомления и принимать команды + +### Альтернатива: Magic Link +- `/login` → бот отправляет одноразовую ссылку для входа +- Или код подтверждения, который вводишь на сайте + +## Команды + +### Задачи + +| Команда | Описание | +|---------|----------| +| `/tasks` | Список задач на сегодня (все) | +| `/tasks remaining` | Только невыполненные задачи | +| `/tasks all` | Все активные задачи | +| `/task <текст>` | Создать новую задачу | +| `/done ` | Отметить задачу выполненной | +| `/undone ` | Снять отметку выполнения | + +**Примеры:** +``` +/task Купить молоко +/task Позвонить врачу !высокий @завтра +/done 15 +``` + +**Флаги при создании:** +- `!высокий` / `!средний` / `!низкий` — приоритет +- `@сегодня` / `@завтра` / `@10.02` — дедлайн +- `🔔17:00` — напоминание + +### Привычки + +| Команда | Описание | +|---------|----------| +| `/habits` | Привычки на сегодня | +| `/habits all` | Все привычки | +| `/check ` | Отметить привычку выполненной | +| `/uncheck ` | Снять отметку | + +**Примеры:** +``` +/habits +/check 3 +``` + +### Статистика + +| Команда | Описание | +|---------|----------| +| `/stats` | Краткая статистика (выполнено сегодня, streak) | +| `/stats week` | Статистика за неделю | + +### Настройки + +| Команда | Описание | +|---------|----------| +| `/settings` | Текущие настройки уведомлений | +| `/notify on` / `/notify off` | Вкл/выкл уведомления | +| `/morning 09:00` | Установить время утреннего уведомления | + +## Inline кнопки + +Для удобства бот отправляет сообщения с кнопками: + +### Список задач +``` +📋 Задачи на сегодня: + +1. [ ] Купить молоко +2. [ ] Позвонить врачу (!) +3. [✓] Оплатить счета + +[✅ Отметить] [➕ Новая задача] +``` + +При нажатии "Отметить" → показать список для выбора. + +### Уведомление о привычке +``` +🔔 Напоминание: Гитара 🎸 + +Время заниматься! (17:00) + +[✅ Выполнено] [⏰ Напомни через 30 мин] +``` + +## Быстрые ответы + +Бот понимает текст без команд в контексте: +- После `/tasks` можно просто написать "купить хлеб" → создаст задачу +- После показа списка можно написать "1" → отметит задачу #1 + +## Архитектура + +### Хранение состояния +- Redis или in-memory map для user states +- Состояния: `idle`, `awaiting_task_text`, `awaiting_habit_check` + +### Обработка команд +```go +type BotHandler struct { + taskService *service.TaskService + habitService *service.HabitService + userService *service.UserService +} + +func (h *BotHandler) HandleUpdate(update tgbotapi.Update) { + // роутинг команд +} +``` + +### Связь с основным API +- Бот использует те же сервисы что и HTTP API +- Авторизация по telegram_chat_id → user_id + +## Безопасность + +- Команды работают только для привязанных аккаунтов +- Rate limiting на создание задач +- Логирование действий через бота + +## TODO + +- [ ] Базовые команды: /start, /tasks, /habits +- [ ] Создание задач через /task +- [ ] Отметка выполнения: /done, /check +- [ ] Inline кнопки для быстрых действий +- [ ] Контекстные быстрые ответы +- [ ] Настройки через бота + +## Приоритет реализации + +1. **MVP:** /start, /tasks, /habits, /done, /check +2. **v1.1:** Создание задач, inline кнопки +3. **v1.2:** Быстрые ответы, статистика, настройки + +--- +*Создано: 2026-02-06*