commit 00cff3d717ae677d7259489f21f92b5e8021c363 Author: admin Date: Sun Oct 4 19:00:16 2026 +0200 Initial echo bot MVP diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dfb8234 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +__pycache__/ +*.py[cod] +.venv/ +.env diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5323b31 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM python:3.12-slim + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 + +WORKDIR /app +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt +COPY bot.py . +CMD ["python", "bot.py"] diff --git a/IDEA.MD b/IDEA.MD new file mode 100644 index 0000000..33f040c --- /dev/null +++ b/IDEA.MD @@ -0,0 +1,30 @@ +# Social Post Writer Bot + +## Идея +Telegram-бот, который по запросу пользователя готовит текст публикации для выбранной социальной сети. + +## Цель +Быстро превращать тему, тезисы или черновик пользователя в готовый к публикации текст, адаптированный под площадку и заданный стиль. + +## Основной сценарий +1. Пользователь описывает, о чём нужен пост, и указывает соцсеть. +2. При необходимости задаёт тон, длину и дополнительные требования. +3. Бот генерирует текст; пользователь может попросить изменить или переписать его. + +## Первая версия +- Принимать запрос обычным сообщением. +- Уточнять площадку и стиль, если они не указаны. +- Возвращать готовый текст без автоматической публикации. +- Поддерживать доработку результата сообщениями вроде «короче», «добавь юмора» или «сделай официальный тон». + +## Технические заметки +- Формат: Telegram-бот. +- Предварительный стек: Python, aiogram 3.x. +- LLM-провайдер и модель: выбрать отдельно; ключи хранить только в переменных окружения, не в репозитории. +- Целевые соцсети, хранение истории и дополнительные функции уточнить при реализации. + +## Статус +- [x] Идея проекта зафиксирована +- [ ] Утвердить список соцсетей и формат запроса +- [ ] Выбрать LLM-провайдера +- [ ] Реализовать и проверить MVP diff --git a/README.md b/README.md new file mode 100644 index 0000000..c4c7c47 --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ +# Social Post Writer Bot — test echo deployment + +Temporary MVP: `/start` sends a short prompt, and ordinary text is echoed unchanged. + +- Runtime: Python 3.12, aiogram 3.x +- `BOT_TOKEN`: supplied only through Coolify environment variables +- `BOT_ENV=test`: routes Bot API calls to Telegram's test environment +- No LLM integration or automatic social-media publishing yet diff --git a/bot.py b/bot.py new file mode 100644 index 0000000..3aaf74b --- /dev/null +++ b/bot.py @@ -0,0 +1,45 @@ +import asyncio +import logging +import os + +from aiogram import Bot, Dispatcher, F, Router +from aiogram.client.session.aiohttp import AiohttpSession +from aiogram.client.telegram import TEST +from aiogram.filters import CommandStart +from aiogram.types import Message + +logging.basicConfig(level=logging.INFO) + +router = Router() + + +@router.message(CommandStart()) +async def start(message: Message) -> None: + await message.answer("Тестовый эхо-бот запущен. Отправь мне текст — я повторю его.") + + +@router.message(F.text & ~F.text.startswith("/")) +async def echo(message: Message) -> None: + if message.text: + await message.answer(message.text) + + +async def main() -> None: + token = os.environ.get("BOT_TOKEN", "").strip() + if not token: + raise RuntimeError("BOT_TOKEN is required") + + test_env = os.environ.get("BOT_ENV", "test").strip().lower() == "test" + session = AiohttpSession(api=TEST) if test_env else None + bot = Bot(token=token, session=session) + dp = Dispatcher() + dp.include_router(router) + + try: + await dp.start_polling(bot) + finally: + await bot.session.close() + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..d5a4d9f --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +aiogram==3.26.0