430101eb25c20c9949b4d907966bbd2bf8e3fe83
Reviewed-on: #1
TG Poster Bot
Бот для конструирования сообщений (текст + фото/видео/анимация) и отправки в выбранные группы/каналы.
Привязка чатов — вручную: пользователь добавляет бота в чат, затем в ЛС выполняет /add_group и вставляет chat_id или пересылает сообщение из чата.
Стек
- Python 3.12
- python-telegram-bot v21
- SQLAlchemy 2.x
- Alembic
- Docker & Compose
- Drone CI pipeline
Быстрый старт (локально с Docker)
- Скопируйте
.env.exampleв.envи заполнитеBOT_TOKEN(получите у @BotFather). - Запустите:
docker compose up --build - Бот сам применит миграции и запустится.
Команды бота
/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_usernamedocker_passworddocker_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 и т.п.) и секреты.
Description
Languages
Python
99.2%
Mako
0.4%
Dockerfile
0.3%
Shell
0.1%