Создайте полнофункционального Telegram-бота для агентства недвижимости, который позволяет сдавать квартиры посуточно. Бот должен иметь каталог квартир, систему бронирования, интеграцию платежей и админ-панель для управления контентом.
Технические требования
1. Архитектура и технологии
· Фреймворк: Aiogram 3.x (асинхронный)
· База данных: SQLite с SQLAlchemy 2.0 ORM
· Оплата: Интеграция с ЮKassa/Telegram Payments
· Состояния: FSM (Finite State Machine) для многошаговых сценариев
· Конфигурация: python-dotenv для управления переменными окружения
2. Основные функции
· Пользовательская часть:
· Просмотр каталога квартир с фотографиями, описанием, ценами
· Фильтрация по параметрам (цена, количество комнат, район)
· Пошаговое бронирование с выбором дат
· Оплата через Telegram Payments или ЮKassa
· История бронирований пользователя
· Система уведомлений о статусе брони
· Административная часть:
· Добавление/редактирование/удаление квартир
· Загрузка фотографий (до 5 фото на квартиру)
· Управление бронированиями (подтверждение, отмена)
· Просмотр статистики (занятость, доходы)
· Команда для рассылки уведомлений всем пользователям
3. Структура базы данных
```sql
- Пользователи (user_id, username, full_name, phone, registration_date)
- Квартиры (id, title, description, address, price_per_day, rooms, area, amenities, photos, is_available)
- Бронирования (id, user_id, apartment_id, check_in, check_out, total_price, payment_status, booking_date, status)
- Платежи (id, booking_id, transaction_id, amount, currency, status, payment_date)
```
4. Интерфейс бота
· Интуитивное меню с кнопками
· Inline-кнопки для навигации по каталогу
· Галерея фотографий квартир (использовать InputMediaPhoto для альбомов)
· Календарь для выбора дат (можно использовать инлайн-клавиатуру)
· Подтверждение брони с деталями перед оплатой
· Чек после успешной оплаты
Детальные инструкции для генерации кода
1. Структура проекта
Создайте следующую структуру файлов:
```
real_estate_bot/
├── data/ (директория для БД)
├── bot/
│ ├── __init__.py
│ ├── config.py (настройки, загрузка .env)
│ ├── database.py (модели SQLAlchemy, инициализация)
│ ├── keyboards.py (все клавиатуры и inline-кнопки)
│ ├── filters.py (кастомные фильтры, например, для админов)
│ ├── states.py (состояния FSM для бронирования)
│ ├── middlewares.py (при необходимости)
│ ├── handlers/
│ │ ├── __init__.py
│ │ ├── user_handlers.py (команды для пользователей)
│ │ ├── admin_handlers.py (команды для админов)
│ │ └── payment_handlers.py (обработка платежей)
│ └── utils/
│ ├── __init__.py
│ ├── payment.py (логика работы с платежами)
│ └── notifications.py (отправка уведомлений)
├── .env.example (шаблон для .env файла)
├── requirements.txt
├── main.py (точка входа)
└── README.md (инструкция по запуску)
```
2. Требования к коду
· Полностью асинхронная реализация
· Обработка ошибок с try-except блоками
· Валидация вводимых данных (дат, контактной информации)
· Логирование ключевых событий
· Комментарии на английском или русском языке для сложных участков кода
3. Ключевые сценарии для реализации
Сценарий 1: Бронирование квартиры
1. Пользователь выбирает квартиру из каталога
2. Бот запрашивает дату заезда и выезда через FSM
3. Система проверяет доступность дат
4. Рассчитывается итоговая стоимость
5. Показывается подтверждение с деталями
6. Генерация платежного счета
7. Обработка успешной/неуспешной оплаты
8. Уведомление пользователя и администратора
Сценарий 2: Добавление новой квартиры (админ)
1. Админ отправляет команду /add_apartment
2. Бот пошагово запрашивает: название, описание, адрес, цену, количество комнат, удобства
3. Запрос загрузки фотографий (поддержка нескольких фото)
4. Сохранение в БД и подтверждение
4. Интеграция платежей
· Использование provider_token для Telegram Payments
· Реализация PreCheckoutQuery и SuccessfulPaymentHandler
· Альтернативная интеграция с ЮKassa API для карточных платежей
· Обновление статуса брони после успешной оплаты
5. Тестовые данные
Для проверки работоспособности создайте:
· 5 тестовых квартир с разными параметрами
· 2 тестовых пользователя (обычный и администратор)
· Систему сброса данных для тестирования (команда /test_reset для админа)
Инструкция для проверки
После генерации кода, пожалуйста, протестируйте следующее:
1. Запуск бота: Убедитесь, что бот запускается без ошибок
2. Команда /start: Проверьте ответ бота и создание записи в БД
3. Каталог квартир: Проверьте отображение всех квартир, фотографий, кнопок
4. Процесс бронирования: Пройдите полный цикл бронирования (без реальной оплаты, используя тестовый режим)
5. Админ-функции: Добавьте новую квартиру, проверьте загрузку фото
6. Платежи: Протестируйте успешную и отмененную оплату
Требования к документации
1. Подробный README.md с инструкцией по установке и настройке
2. .env.example с объяснением всех переменных окружения
3. Комментарии в коде для сложных функций
4. Примеры запросов к API платежной системы (если используется внешняя)
Критерии успешной реализации
· Бот запускается и отвечает на команды
· Каталог квартир отображается корректно
· Процесс бронирования работает от начала до конца
· Оплата в тестовом режиме проходит успешно
· Админ-панель позволяет управлять квартирами
· Все данные сохраняются в БД и корректно извлекаются
· Обработка ошибок (некорректные даты, недоступность квартиры и т.д.)
· Многоязычные сообщения об ошибках и успешных операциях
Сгенерируйте полный код проекта, готовый к запуску после установки зависимостей и настройки переменных окружения. Код должен быть производственного качества с учетом лучших практик Python и Aiogram.
за 90 дней44 → 440максимум 44, 26 сенместо в рейтинге на дату пересчёта 2718
Оценкасобытия
Что изменилось за 90 дней: по категориям и событиям · событий: 2
Что изменилось за 90 дней
Категория
Динамика
Оценка
Вклад в оценку
Security25%
— → —
—
CI/CD20%
— → —
—
Активность15%
11 → 10
−0,2
Документация15%
46 → 40
−1,6
Issues15%
— → 50
—
Code health10%
90 → 90
0,0
Смена состава данныхпоявились данные: Issues, веса остальных перенормированы
+1,7
Оценка
44 → 44
0
Вклад = вес категории × изменение её оценки / сумма весов. Строки складываются в итог с точностью до округления. Наведите строку — справа подсветятся связанные события.
События
2
18 окт 2026 · методика
Изменилась методика
Оценку пересчитали по текущим правилам на тех же фактах, без нового обхода репозитория