Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

StackMatch Bot

потыкать можно тут @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

📦 Быстрое развертывание проекта (Production Ready)

Проект полностью контейнеризирован. Для запуска на любой машине (включая работу через локальные VPN-туннели вроде Sing-box/Happ) достаточно выполнить несколько шагов:

1. Конфигурация окружения

Создайте файл settings.toml в корне проекта на основе settings.example.toml и укажите свои рабочие токены:

[bot]
token = "your_telegram_bot_token_here"

[access_bot_token]
access_token = "your_access_hhapi_token"

2. Сборка Docker-образа

docker build -t stack_match_image .

3. Запуск контейнера с сохранением персистентных данных

docker run -d --name stack_match_container -v "\$(pwd):/app" stack_match_image

Флаг -v пробрасывает мост к папке проекта, гарантируя, что база данных jobs.db и файлы миграций Alembic будут сохраняться прямо на вашем жестком диске и не сотрутся при перезапуске контейнера.

Стартовое меню:

image

Вакансия:

image #

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages