Initial echo bot MVP
This commit is contained in:
commit
00cff3d717
6 files changed
+98
No files matched your search
@@ -0,0 +1,4 @@
|
|||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
.venv/
|
||||||
|
.env
|
||||||
+10
@@ -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"]
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# Social Post Writer Bot
|
||||||
|
|
||||||
|
## Идея
|
||||||
|
Telegram-бот, который по запросу пользователя готовит текст публикации для выбранной социальной сети.
|
||||||
|
|
||||||
|
## Цель
|
||||||
|
Быстро превращать тему, тезисы или черновик пользователя в готовый к публикации текст, адаптированный под площадку и заданный стиль.
|
||||||
|
|
||||||
|
## Основной сценарий
|
||||||
|
1. Пользователь описывает, о чём нужен пост, и указывает соцсеть.
|
||||||
|
2. При необходимости задаёт тон, длину и дополнительные требования.
|
||||||
|
3. Бот генерирует текст; пользователь может попросить изменить или переписать его.
|
||||||
|
|
||||||
|
## Первая версия
|
||||||
|
- Принимать запрос обычным сообщением.
|
||||||
|
- Уточнять площадку и стиль, если они не указаны.
|
||||||
|
- Возвращать готовый текст без автоматической публикации.
|
||||||
|
- Поддерживать доработку результата сообщениями вроде «короче», «добавь юмора» или «сделай официальный тон».
|
||||||
|
|
||||||
|
## Технические заметки
|
||||||
|
- Формат: Telegram-бот.
|
||||||
|
- Предварительный стек: Python, aiogram 3.x.
|
||||||
|
- LLM-провайдер и модель: выбрать отдельно; ключи хранить только в переменных окружения, не в репозитории.
|
||||||
|
- Целевые соцсети, хранение истории и дополнительные функции уточнить при реализации.
|
||||||
|
|
||||||
|
## Статус
|
||||||
|
- [x] Идея проекта зафиксирована
|
||||||
|
- [ ] Утвердить список соцсетей и формат запроса
|
||||||
|
- [ ] Выбрать LLM-провайдера
|
||||||
|
- [ ] Реализовать и проверить MVP
|
||||||
@@ -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
|
||||||
@@ -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())
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
aiogram==3.26.0
|
||||||
Reference in new issue
Block a user