Files
tg_post_min/README.md
2025-08-20 21:10:31 +09:00

3.1 KiB
Raw Permalink Blame History

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. Запустите:
    docker compose up --build
    
  3. Бот сам применит миграции и запустится.

Команды бота

  • /add_group — привязать группу/канал (вставьте chat_id -100... или перешлите сообщение из чата)
  • /groups — список привязанных чатов и признак права публикации
  • /new — создать черновик, затем отправить его в выбранный чат
  • /help — краткая справка

Миграции

Alembic уже настроен. Первичная ревизия 0001_init добавлена. В контейнере миграции запускаются автоматически в entrypoint.sh.

Локально:

# создать новую ревизию
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 и т.п.) и секреты.