потыкать можно тут @StackMatch_bot
Современный, высокопроизводительный асинхронный Telegram-бот для точечного поиска и агрегации вакансий с платформы HeadHunter. В отличие от стандартных парсеров, бот реализует механику тиндер-свайпов, систему персонального скоринга навыков и полностью изолирован в Docker-контейнере.
Проект спроектирован с упором на максимальное быстродействие (I/O-bound оптимизация) и отказоустойчивость архитектуры.
- ⚡ Мгновенный отклик (Connection Pooling): Архитектура бота переведена на единую глобальную сессию
aiohttp.ClientSessionвнутри контекста диспетчераaiogram. Это исключило накладные расходы на постоянные TCP/SSL рукопожатия с серверами Telegram и HH.ru, сократив время обработки сетевых запросов в разы. - 🔥 Вакансии в стиле "Тиндера": Реализован интерактивный инлайн-интерфейс для точечного отбора вакансий. Пользователь может мгновенно лайкать или дизлайкать предложения, формируя свой список Избранного.
- 🧠 Персональный скоринг: Собственный алгоритм динамически оценивает текстовое описание вакансий на основе совпадения ключевых стейтов, а также истории лайков/дизлайков конкретного пользователя, поднимая подходящие вакансии в топ выдачи.
- ⚙ Умные кастомные фильтры: Глубокая интеграция с API HH.ru (Города, опыт, вилка зарплат, удаленка, ключевые слова) через контекст конечных автоматов (
aiogram.fsm). - ⏰ Асинхронный шедулер (Daily Top-5): Интегрирован фоновый планировщик
APScheduler. Бот ежедневно в фиксированное время генерирует персонализированную подборку ТОП-5 вакансий и отправляет её пользователям асинхронным пакетным пулом. - 🎯 Сервис локального кэширования: Реализован умный кэш гео-справочника (
CityMapper). Бот запрашивает дерево регионов HH.ru один раз при старте, кэширует его в памяти и выдает мгновенный поиск городов по частичному совпадению или алиасам ("спб", "мск") без единого запроса в сеть. - 🐋 Docker:* Контейнеризация приложения на базе сверхбыстрого менеджера зависимостей
uv(Astral). Сборка Docker оптимизирована через установку пакетов в системное окружение контейнера, что предотвращает конфликты файловых систем.
- Backend: Python 3.12 (CPython)
- Framework: Aiogram 3.30 (Асинхронные роутеры, FSM, Rich Messages)
- Database & ORM: SQLAlchemy 2.0 (Async), SQLite, Alembic (Версионирование и миграции схем данных)
- Tools: Docker & Docker Desktop, uv (Package Manager), Ruff (Lинтер и статический анализ кода), Structured Logging (
structlog) - Фоновые задачи: APScheduler 3.11
Проект полностью контейнеризирован. Для запуска на любой машине (включая работу через локальные VPN-туннели вроде Sing-box/Happ) достаточно выполнить несколько шагов:
Создайте файл settings.toml в корне проекта на основе settings.example.toml и укажите свои рабочие токены:
[bot]
token = "your_telegram_bot_token_here"
[access_bot_token]
access_token = "your_access_hhapi_token"docker build -t stack_match_image .docker run -d --name stack_match_container -v "\$(pwd):/app" stack_match_imageФлаг -v пробрасывает мост к папке проекта, гарантируя, что база данных jobs.db и файлы миграций Alembic будут сохраняться прямо на вашем жестком диске и не сотрутся при перезапуске контейнера.
Стартовое меню:
Вакансия:
#