Skip to content

I3eka/WSP-Sniper

Repository files navigation

WSP Sniper

Python Streamlit License: MIT

The missing high-precision registration tool

Легковесный и высокопроизводительный бот для регистрации на дисциплины в WSP (KBTU). Стандартная регистрация через браузер часто страдает от задержек, ошибок сети и неудобного интерфейса. Существующие монолитные скрипты на Selenium потребляют много ресурсов и сложны в поддержке.

WSP Sniper заполняет этот пробел: модульное, асинхронное решение на Python с разделением логики и представления. Настройте план через удобный Web UI, а выполняйте атаку через молниеносный CLI.

Особенности

  • Высокая скорость: Использует aiohttp вместо медленных браузерных движков.
  • Два интерфейса: Web UI для удобства и CLI для производительности.
  • Отказоустойчивость: Умная система ретраев при ошибках 500 и разрывах связи.
  • Синхронизация: NTP-коррекция времени для точности до миллисекунд.
  • Persistence: Единый файл конфигурации saved_plan.json для всех интерфейсов.

Установка

Через uv (Рекомендуется)

# MacOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

Из исходного кода

git clone https://github.com/I3eka/WSP-Sniper.git
cd WSP-Sniper
uv sync

Использование

Web UI (Streamlit)

Идеально для первоначальной настройки и выбора предметов.

uv run streamlit run app.py
  1. Авторизация: Введите данные WSP в сайдбаре.
  2. Выбор: Отметьте нужные лекции и практики (данные сохранятся автоматически).
  3. Запуск: Нажмите "START SNIPER ATTACK".

CLI (Terminal)

Идеально для запуска на серверах (VPS) или слабых машинах.

uv run main.py

Бот автоматически подхватит saved_plan.json, созданный в Web-версии, синхронизирует время и перейдет в режим ожидания атаки.

Первый запуск

При отсутствии файла .env, бот запустит интерактивный мастер настройки:

✨ Welcome to WSP-Sniper First Launch Setup! ✨
Please enter your KBTU WSP credentials below.
...

Конфигурация

Параметры управляются через файл .env.

Переменная Описание Дефолт
WSP_USERNAME Логин пользователя -
WSP_PASSWORD Пароль пользователя -
WSP_DESIRED_TIME_LOCAL Время старта (локальное, формат HH:MM:SS) 10:00:00
WSP_REQUEST_DELAY Задержка между запросами разных предметов (сек) 0.5
WSP_RETRY_DELAY Интервал повтора при ошибке "Регистрация не началась" 0.5

Разработка

Требования

  • Python 3.10+
  • uv: curl -LsSf https://astral.sh/uv/install.sh | sh

Настройка окружения

git clone https://github.com/I3eka/WSP-Sniper.git
cd WSP-Sniper
uv venv
source .venv/bin/activate
uv pip install -r requirements.txt

Структура проекта

wsp_sniper_cli/
├── config/                 # Pydantic настройки
├── src/
│   ├── api/                # Сетевой слой (aiohttp)
│   ├── core/               # Логика снайпера и планировщик
│   ├── ui/
│   │   ├── cli/            # Консольный интерфейс
│   │   └── web/            # Streamlit интерфейс
│   └── utils/              # Общие утилиты
├── app.py                  # Точка входа Web
└── main.py                 # Точка входа CLI

Как работает Sniper Logic

Алгоритм регистрации построен для работы в условиях высокой нагрузки:

  1. Sync: Вычисляется смещение локальных часов относительно NTP пула.
  2. Wait: Бот переходит в режим ожидания до WSP_DESIRED_TIME_LOCAL.
  3. Stagger: Запросы на регистрацию отправляются каскадом с задержкой 0.5с (чтобы избежать бана по IP или ошибки 500).
  4. Loop: Если сервер возвращает "Регистрация не началась", бот ждет 0.5с и повторяет попытку для конкретного предмета.

Примечание

Я написал этот код для демонстрации возможностей asyncio и современной архитектуры Python приложений. Используйте инструмент с осторожностью. Автор не несет ответственности за возможные последствия использования данного ПО в университетской среде.

License

MIT

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages