Полнофункциональный коммерческий Telegram-магазин на aiogram 3 с каталогом, корзиной, оформлением заказов через FSM, профилем покупателя, админ-панелью, промокодами, реферальной системой и рассылками. Проект построен по слоистой архитектуре (handlers → services → database) и запускается одной командой через Docker Compose.
- 🛒 Каталог с категориями и фильтрацией товаров
- 🧺 Корзина: добавление, изменение количества, удаление, очистка
- ✅ Оформление заказа через FSM (контакт → комментарий → подтверждение)
- 📦 Мои заказы и история покупок со статусами
- 👤 Профиль: баланс, количество заказов, сумма покупок
- ⭐ Избранное
- 🔍 Поиск товаров по названию
- 🎁 Реферальная программа (
/ref, deep-linkstart=ref\_<id>) - 🏷 Промокоды со скидками
- ➕ Добавление товара (FSM)
- ✏️ Изменение товара (название / цена / описание / остаток)
- ❌ Удаление товара
- 📦 Управление заказами и смена статусов (с уведомлением покупателя)
- 📊 Статистика (пользователи, заказы, оборот, метрики за сегодня)
- 🏆 Рейтинг популярных товаров
- 📢 Массовая рассылка с отчётом
- 🏷 Создание промокодов
- 📄 Экспорт заказов в CSV
- 🔔 Уведомления о новых заказах и низком остатке товара
---
| Технология | Назначение |
|---|---|
| Python 3.12+ | Язык разработки |
| aiogram 3.28+ | Telegram Bot API 9.4, роутеры, FSM, middlewares, цветные кнопки |
| SQLAlchemy 2.0 (async) | ORM, асинхронный доступ к БД |
| PostgreSQL | Хранилище данных |
| asyncpg | Асинхронный драйвер PostgreSQL |
| Alembic | Миграции схемы БД |
| pydantic-settings | Типизированная конфигурация из .env |
| Docker / Docker Compose | Контейнеризация и запуск |
---
git clone https://github.com/txltedxgod/telegram-store-bot.git
cd telegram-store-botcp .env.example .envОткройте .env и укажите:
BOT\_TOKEN— токен от @BotFatherADMIN\_IDS— ваш Telegram ID (узнать можно у @userinfobot)
---
Проект поднимается командой:
docker compose up -dЧто произойдёт:
- Поднимется контейнер PostgreSQL с healthcheck.
- Контейнер бота дождётся базы, применит миграции (
alembic upgrade head). - При первом старте (если
SEED\_DEMO\_DATA=true) загрузятся демо-категории и товары. - Бот запустится в режиме long-polling.
Логи:
docker compose logs -f botОстановка:
docker compose down # сохранить данные
docker compose down -v # удалить данные вместе с томом БДpython -m venv .venv \&\& source .venv/bin/activate
pip install -r requirements.txt
# Поднимите PostgreSQL и пропишите POSTGRES\_HOST=localhost в .env
alembic upgrade head
python -m bot.bottelegram-store-bot/
├── bot/
│ ├── handlers/ # роутеры: start, catalog, cart, checkout, orders,
│ │ # profile, favorites, search, admin
│ ├── keyboards/ # инлайн-клавиатуры и callback-фабрики
│ ├── middlewares/ # сессия БД, логирование, регистрация пользователя
│ ├── services/ # бизнес-логика и доступ к данным (репозитории)
│ ├── database/ # base, engine, models, seed
│ ├── states/ # группы состояний FSM
│ ├── filters/ # IsAdmin и др
│ ├── utils/ # логирование, тексты/форматирование
│ ├── config.py # настройки из .env
│ └── bot.py # точка входа
├── alembic/ # миграци
├── docker/ # entrypoint
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
├── alembic.ini
├── .env.example
└── README.md
---
| Команда | Описание |
|---|---|
/start |
Запуск и главное меню |
/start ref\_42 |
Запуск по реферальной ссылке (пригласил пользователь #42) |
/menu |
Открыть главное меню |
/ref |
Получить свою реферальную ссылку |
/admin |
Админ-панель (только для ADMIN\_IDS) |
---
Каждое действие логируется в stdout (удобно для docker compose logs):
INFO | bot.users | User 456 registered
INFO | bot.checkout | User 123 created order #15
INFO | bot.admin | Admin 999 added product Steam Account
INFO | bot.admin | Broadcast finished: success=523 errors=7
---
- Платёжный провайдер (Telegram Payments / ЮKassa / Crypto)
- Redis-хранилище для FSM в проде
- Покрытие тестами (pytest + pytest-asyncio)
- Веб-админка и аналитика
---
MIT — см. файл LICENSE.