init commit

This commit is contained in:
2025-08-20 21:10:31 +09:00
parent 36a9382cb6
commit 745046c638
31 changed files with 1074 additions and 1 deletions

View File

@@ -1,2 +1,73 @@
# tg_post_min
# 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 и т.п.) и секреты.