Задача

Разработать Telegram-бота на Python (библиотека aiogram) для приема платных объявлений о продаже автомобилей с последующей публикацией в Telegram-канал. Бот должен обеспечивать пошаговый сбор данных, предпросмотр объявления, прием платежа, автоматическое удаление объявлений через заданное число дней, а также функции администрирования.

Функциональные требования

  • Сбор данных объявления: пошаговый сбор (FSM): Марка, Модель, Год выпуска, Цена, Пробег, Город, Описание.
  • Медиа-файлы: обязательная загрузка от 1 до N фотографий автомобиля.
  • Контакты: обязательный ввод контактного телефона и Telegram username пользователя.
  • Предпросмотр: показ собранной информации для подтверждения пользователем перед оплатой.
  • Оплата: встроенная оплата по фиксированному тарифу через платежного агрегатора (ЮKassa).
  • Публикация: автоматическая публикация в заданный Telegram-канал в заданном формате (с эмодзи для марки/модели, цены, пробега, города, описания, телефона, никнейма).
  • Таймер удаления: автоматическое удаление сообщения с объявлением из канала через N дней после публикации.
  • Управление пользователями: возможность пользователю самостоятельно удалить свое опубликованное объявление из канала.
  • Администрирование: администратор управляет через личные сообщения бота (удаление любых объявлений, блокировка/разблокировка пользователей, настройка стоимости публикации и срока публикации, смена Telegram канала).

Технические требования

  • Язык и библиотеки: Python 3 + библиотека aiogram (асинхронный Telegram Bot API).
  • База данных: SQLite.
  • Архитектура: Использование FSM (машины состояний) для сбора данных от пользователей.
  • Конфигурация: хранение всех настроек (токены, ID канала, стоимость, срок публикации) в файле .env.
  • Качество кода: чистый структурированный код с комментариями и ведением логов.

Результат работы

Готовый Telegram-бот, стартующий командой. Бот успешно принимает от пользователей данные (включая фотографии и контакты), проверяет их, принимает оплату за публикацию, отправляет объявление в ленту канала и удаляет его автоматически через настроенное количество дней. Вся административная настройка осуществляется через сообщения в Telegram.