2000 грн.
1. Цель проекта
Создание Telegram-бота для курьеров города Бровары. Бот предназначен для мониторинга загруженности двух точек McDonald's:
МакДональдс №1 — ул. Киевская, 162
МакДональдс №2 — ул. Киевская, 239
Информация собирается по принципу краудсорсинга (курьеры сами отмечают статус, находясь на точке). Доступ к информации платный (подписка) либо бесплатный в обмен на активность (отчеты).
2. Стек технологий
Язык: Python 3.10+
Фреймворк: aiogram 3.x (асинхронный)
База данных: SQLite
Планировщик задач: APScheduler
3. Логика подписки и баланса (Критически важно)
У каждого пользователя в БД есть поле balance_days (целое число).
При первом запуске (/start) пользователю автоматически начисляется 3 дня демо-доступа.
Каждый день в 00:00 у всех пользователей balance_days уменьшается на 1.
Если balance_days > 0, пользователь имеет статус «Подписчик» и видит всю информацию.
Если balance_days == 0, пользователь видит только кнопку «Мой профиль» с инструкцией по оплате и не может смотреть радар.
Система поощрения (Бартер):
Если пользователь успешно отправляет отчет со статусом точки, бот мгновенно увеличивает его balance_days на +1 день. (Лимит: не более 3 начислений в сутки от одного юзера, чтобы избежать накрутки).
4. Интерфейс и сценарии пользователя
Главное меню (Reply-кнопки):
[ ? Че там в Маках? ]
[ ? Я в Маке (Отметиться) ]
[ ? Мой профиль ]
Сценарий 1: Просмотр статуса ([ ? Че там в Маках? ])
Бот отправляет ОДНО сообщение со статусом обеих точек:
? МАК на Киевской, 162:
Статус: [Зеленый/Желтый/Красный/Серый смайл] [ТЕКСТ СТАТУСА]
Обновлено: ХХ минут назад
Комментарий: [Текст комментария]
? МАК на Киевской, 239:
Статус: ...
Сценарий 2: Отправка отчета ([ ? Я в Маке (Отметиться) ])
Бот запрашивает геолокацию: кнопка [ Отправить геопозицию ? ] (request_location=True).
Проверка координат (Backend):
Программист жестко зашивает в код координаты двух Маков. Бот проверяет, находится ли юзер в радиусе 70 метров от любого из них.
Если далеко: Выдать ошибку: «Ты слишком далеко от МакДональдса!» и прервать сценарий.
Если на месте: Автоматически определить, какой это Мак, и выдать Inline-кнопки статуса:
[ ? Быстро (до 7 мин) ]
[ ? Тянут (10-20 мин) ]
[ ? Запара (30+ мин) ]
После выбора статуса бот предлагает отправить короткий комментарий текстом или нажать Inline-кнопку [ Пропустить ➡️ ].
Конец сценария: Обновление данных в БД, начисление +1 дня к балансу юзера.
5. Фоновые процессы (Backend)
TTL статусов (Устаревание): Если статус точки не обновлялся 45 минут, APScheduler автоматически переводит её в статус: ⚪️ Нет актуальных данных.
Push-нотификация: Если кто-то отправляет статус ? Запара (30+ мин), бот делает массовую рассылку (рассылает это сообщение) всем пользователям, у которых balance_days > 0.
6. Админ-панель (Доступ по Telegram ID)
Команда /admin вызывает меню:
[ Выдать подписку ] — запрос Telegram ID и количества дней.
[ Общая статистика ] — количество пользоват