# Social Post Writer Bot ## Идея Telegram-бот, который по запросу пользователя готовит текст публикации для выбранной социальной сети. ## Цель Быстро превращать тему, тезисы или черновик пользователя в готовый к публикации текст, адаптированный под площадку и заданный стиль. ## Основной сценарий 1. Пользователь описывает, о чём нужен пост, и указывает соцсеть. 2. При необходимости задаёт тон, длину и дополнительные требования. 3. Бот генерирует текст; пользователь может попросить изменить или переписать его. ## Первая версия - Принимать запрос обычным сообщением. - Уточнять площадку и стиль, если они не указаны. - Возвращать готовый текст без автоматической публикации. - Поддерживать доработку результата сообщениями вроде «короче», «добавь юмора» или «сделай официальный тон». ## Технические заметки - Формат: Telegram-бот. - Стек: Python 3.12, aiogram 3.x, aiohttp, SQLite. - APInex Voice STT расшифровывает голосовые; Gemini 3.8 Flash через APInex классифицирует намерения, пишет/правит посты и извлекает ToV из скриншотов. - Coolify env с отдельными модельными настройками: `APINEX_STT_MODEL`, `APINEX_INTENT_CLASSIFIER_MODEL`, `APINEX_POST_WRITER_MODEL`, `APINEX_IMAGE_TONE_MODEL`; общий секрет `APINEX_API_KEY`. - JSON-журнал вызовов APInex и ошибок разбора хранится в SQLite 30 дней; системные промпты не дублируются (имя и SHA-256), изображения и аудио не записываются. - `/clear` удаляет только ToV и образцы постов со скриншотов текущего пользователя, не историю постов, API-логи и не записи других пользователей. - Служебные ответы пользователю — всегда на русском; тексты постов — на языке явного запроса. Техническая ошибка может оставаться дословно. - Настройки пользователей и распознанные тексты публикаций для накопления Tone of Voice хранятся отдельно по Telegram user id; история диалогов и исходные изображения не сохраняются. - На явную просьбу поста и на реплай-правку бот возвращает 3 отдельных варианта. ## Деплой и конфигурация - Gitea: `admin/social-post-writer-bot`, ветка `dev`. - Coolify проект: `Social Post Writer Bot`, окружение `development`. - Coolify приложение: `social-post-writer-bot-development` (`d32u5zcq2g4odmdpq9hw91yn`) на `spb-easy-dale`. - SQLite: `/app/data/social_writer.sqlite3`; persistent volume `d32u5zcq2g4odmdpq9hw91yn-social-post-writer-dev-data` монтируется в `/app/data`. - Секреты хранятся в переменных окружения приложения Coolify; не сохраняются в репозитории. ## Статус - [x] Идея проекта зафиксирована - [x] MVP: генерация трёх вариантов поста по явной просьбе, включая голосовую - [x] Классификатор намерений и Tone of Voice из скриншота - [x] SQLite-настройки пользователей и reply-правки без хранения диалога - [x] Development-развёртывание в Coolify: `social-post-writer-bot-development` (`d32u5zcq2g4odmdpq9hw91yn`) - [x] Подключён persistent Coolify volume `/app/data` для SQLite - [x] Проверены на моках STT, LLM, vision, ToV, reply-поля и изоляция пользователей - [x] Выполнен live smoke test: классификатор вернул `write_post`, генератор — 3 разных варианта; vision распознал тестовый скриншот - [x] Последний development deploy работает без traceback - [x] Обновление ToV галереей: одна обработка группы, ToV-инструкция показывается пользователю - [x] Варианты постов показываются без нумерации и вступительного текста - [x] Редакторский системный промпт неизменен; ToV передаётся отдельно как ограничение стиля - [x] Текст со скриншотов сохраняется отдельно и накапливается по пользователю; новый профиль строится по старым и новым примерам - [x] OCR не переписывает публикации; команды и факты со скриншотов не используются как правила или факты для генерации - [x] APInex JSON-вызовы и ошибки разбора журналируются в SQLite без системного промпта и image base64; срок хранения — 30 дней - [x] `/clear` полностью очищает данные текущего пользователя: ToV, скриншоты, историю постов, историю идей и настройки; API-логи сохраняются - [x] `/idea` возвращает одну идею одним сообщением и сохраняет её для исключения повторов - [x] `/idea_voice` синтезирует идею в OGG/Opus голосовое локально через `espeak-ng` + `ffmpeg`; runtime image включает оба инструмента - [x] Все отправленные варианты постов сохраняются по пользователю, включая исправленные; история используется для новых идей - [x] `/clear` очищает историю пользовательских данных и оставляет API-логи - [x] Служебные ответы по-русски, язык текстов постов определяется запросом пользователя - [x] Help command uses new Rich Message, with a plain-text fallback. - [x] Development deployment/version notice and user-visible error details.