74 lines
3.1 KiB
Markdown
74 lines
3.1 KiB
Markdown
# TG Poster Bot
|
||
|
||
Бот для конструирования сообщений (текст + фото/видео/анимация) и отправки в выбранные группы/каналы.
|
||
Привязка чатов — вручную: пользователь добавляет бота в чат, затем в ЛС выполняет `/add_group` и вставляет chat_id или пересылает сообщение из чата.
|
||
|
||
## Стек
|
||
- Python 3.12
|
||
- python-telegram-bot v21
|
||
- SQLAlchemy 2.x
|
||
- Alembic
|
||
- Docker & Compose
|
||
- Drone CI pipeline
|
||
|
||
## Быстрый старт (локально с Docker)
|
||
1. Скопируйте `.env.example` в `.env` и заполните `BOT_TOKEN` (получите у @BotFather).
|
||
2. Запустите:
|
||
```bash
|
||
docker compose up --build
|
||
```
|
||
3. Бот сам применит миграции и запустится.
|
||
|
||
## Команды бота
|
||
- `/add_group` — привязать группу/канал (вставьте chat_id `-100...` или перешлите сообщение из чата)
|
||
- `/groups` — список привязанных чатов и признак права публикации
|
||
- `/new` — создать черновик, затем отправить его в выбранный чат
|
||
- `/help` — краткая справка
|
||
|
||
## Миграции
|
||
Alembic уже настроен. Первичная ревизия `0001_init` добавлена. В контейнере миграции запускаются автоматически в `entrypoint.sh`.
|
||
|
||
Локально:
|
||
```bash
|
||
# создать новую ревизию
|
||
alembic revision -m "feature: add something"
|
||
|
||
# применить миграции
|
||
alembic upgrade head
|
||
|
||
# откатиться
|
||
alembic downgrade -1
|
||
```
|
||
|
||
## Настройка Drone CI
|
||
- В секретах репозитория создайте:
|
||
- `docker_username`
|
||
- `docker_password`
|
||
- `docker_repo` (например, `registry.example.com/namespace/tg-poster-bot`)
|
||
- (Опционально для деплоя) `ssh_host`, `ssh_user`, `ssh_key`, `ssh_port`, и переменная окружения `DEPLOY_DIR` в настройках репозитория.
|
||
|
||
## Структура проекта
|
||
```
|
||
app/
|
||
bot/
|
||
handlers/ # команды и коллбэки
|
||
keyboards/ # inline-клавиатуры
|
||
messages.py # текстовые константы
|
||
db/
|
||
base.py # Base = declarative_base()
|
||
session.py # движок и SessionLocal
|
||
models.py # модели
|
||
migrations/ # alembic (env.py, versions/...)
|
||
main.py # точка входа
|
||
alembic.ini
|
||
docker-compose.yml
|
||
Dockerfile
|
||
entrypoint.sh
|
||
requirements.txt
|
||
```
|
||
|
||
## Заметки
|
||
- Для каналов бот должен быть администратором с правом «Публиковать сообщения».
|
||
- `DATABASE_URL` имеет приоритет перед параметрами `DB_*`.
|
||
- В проде используйте внешнюю БД (RDS и т.п.) и секреты.
|