Telegram-бот соревновательной экосистемы «1984 Bounties Competitive» для игроков osu!.
"Вы больше не участник — вы стали частью самой системы."
1984 | Global & Competitive — специализированная экосистема для игроков osu!, объединяющая аналитику прогресса, систему еженедельных баунти и рейтинговые дуэли на картах.
Система создана для:
- 🎮 Стимулирования игрового прогресса и выхода из зоны комфорта
- 🏆 Формирования здоровой соревновательной и развлекательной экосистемы
- 📊 Отслеживания прогресса через Hunter Progression System (HPS)
- ⚔️ Рейтинговых 1v1 дуэлей через систему BeatSkill (BSK)
- 🎁 Вознаграждения за мастерство, выдержку и лояльность
| Функция | Описание |
|---|---|
| 👤 Профили | Авто-обновление профиля, просмотр недавних рекордов, сравнение |
| 🏆 Hunter Points | Система прогрессии с рангами от Candidate до Big Brother |
| 🎯 Баунти | Еженедельные вызовы 11 типов с автоматическим подсчётом HP |
| 📊 Лидерборды | 9 категорий активного рейтинга |
| ⚔️ BeatSkill (BSK) | 1v1 рейтинговые дуэли, пул из 6 карт с pick/ban-фазой, 4 ортогональные оси скилла (0–10★) и ML-модель |
| Команда | Описание |
|---|---|
start |
Приветствие и быстрый старт |
register <nickname> / reg |
Регистрация в системе |
profile / pf |
Ваш профиль и ранг охотника |
refresh |
Принудительная синхронизация с osu! API |
help |
Меню справки |
| Команда | Описание |
|---|---|
rs / recent |
Последняя сыгранная карта |
compare [username] |
Сравнение статистики с другим игроком |
leaderboard / lb / top |
Таблица лидеров (9 категорий) |
leaderboardmap / lbm [id/url] |
Локальный лидерборд карты |
| Команда | Описание |
|---|---|
hps [link/id] |
Анализ HP-потенциала карты |
bountylist / bli |
Список активных баунти |
bountydetails / bde [id] |
Детали баунти |
submit [id] |
Отправить результат на баунти |
| Команда | Описание |
|---|---|
bsk |
Карточка вашего BSK рейтинга + панель матчмейкинга |
bskduel / bskd <nick> [casual|ranked] |
Вызвать игрока на дуэль (соперник получит пинг в DM) |
bskstatus / bskst |
Статус текущей дуэли, pick/ban-фазы и счёта |
bskcancel / bskc |
Отменить входящий/исходящий вызов |
bskstats / bsks |
Ваша BSK статистика по 4 осям скилла |
bskhistory / bskh [N] |
Последние N завершённых дуэлей |
| Команда | Описание |
|---|---|
link |
Привязать osu! через OAuth |
unlink / unregister / unreg |
Отвязать аккаунт (кулдаун 30 дней) |
BeatSkill — рейтинговая система 1v1 дуэлей на пуле карт. Вместо единого рейтинга у каждого игрока есть 4 ортогональных компонента скилла в абсолютной шкале 0 – 10★:
| Компонент | Что измеряет |
|---|---|
| 🎯 Aim | Точность движений, прыжки, угловые паттерны |
| ⚡ Speed | Стримы, бёрсты, BPM-выносливость |
| 💎 Accuracy | Точность попаданий, OD-карты |
| 🛡️ Consistency | Выносливость на длинных картах, HP-карты |
Каждая карта в пуле имеет свои веса w_aim / w_speed / w_acc / w_cons, определяющие, какой компонент на ней важнее. После раунда обновляются только те компоненты игрока, которые карта проверяет.
Дуэль использует персональные пулы под слабости каждого игрока:
- Каждому игроку формируется свой пул из 6 карт, подобранных так, чтобы максимально нагружать его слабые компоненты (variant-C selection).
- Соперники получают в DM пул противника и одновременно банят до 3 карт — каждый бьёт по сильным сторонам другого.
- Перед каждым раундом оба игрока выбирают карту из оставшихся; приоритет — у игрока с меньшим μ.
- Дуэль идёт до 1 000 000 суммарных очков (composite score).
- На время вызова приходит пинг сопернику в личку, ошибки Telegram (
BadRequest) больше не ломают флоу. - Активные дуэли переживают рестарт бота — состояние раунда восстанавливается из БД, включая собранный пул карт.
Раунд оценивается чистым execution-метриком, без зависимости от pp:
composite_score = 0.7·(accuracy · combo_ratio) + 0.3·miss_penalty
гдеmiss_penalty = 1 / (1 + misses/5), итог скейлится до 200 000 очков на раунд.
При добавлении карты в пул бот:
-
Скачивает
.osuфайл и парсит паттерны:- Стримы, бёрсты, death streams (по интервалам между нотами)
- Углы движения курсора, back-and-forth паттерны
- Скорость прыжков между нотами
- Дисперсию SV (scroll velocity) и плотности нот
- HP drain rate как индикатор нагрузки на consistency
-
Запрашивает osu! API (
/beatmaps/{id}/attributes):aim_difficulty,speed_difficulty— значения от движка osu!slider_factor— влияние слайдеров на сложность
-
Вычисляет начальные веса на основе полученных данных.
Ночью (02:00 по MSK) запускается pure-Python Random Forest в 3 уровня надёжности — каждая карта получает веса из самого сильного источника, для которого хватает данных:
-
Per-map корреляция (
data_driven) — карта набрала ≥MIN_ROUNDS_PER_MAPраундов и компонент-исход коррелирует. Веса берутся из реальной истории матчей. -
Round-level Random Forest (
rf_prior) — общий лес обучается на истории всех раундов: предсказывает win-margin по(map_features, total_diff, share_diffs, map×share interactions). Из обученного леса через partial-dependence извлекаются веса для каждой карты пула. -
Эвристика (
heuristic) — фолбэк по фичам карты, когда леса нет или его качество ниже планки.
Защита от деградации. Лес проходит через несколько барьеров:
- Mirror augmentation — каждый раунд дублируется с инвертированными разницами и
y → 1−y, чтобы убрать side-bias. - μ-diff декорреляция — четыре оси разлагаются на
total + share, чтобы устранить коллинеарность сильных игроков. - Map × share interactions — явные произведения
f_jump_density·share_aimи т.п., чтобы лес отделял "карта прыжковая" от "игрок aim-овый". - OOB R² gate (
MIN_RF_OOB_R2 = 0.30) — слабый лес отбрасывается; карты тогда получают эвристический prior, а не нули по оси. - PD floor 1% — partial-dependence веса не могут уйти в строгий ноль по одной оси из-за выбросов.
Каждый запуск пишется в bskmlstats с разбивкой maps_data_driven / maps_rf_prior / maps_heuristic, OOB R² и top-N feature importances — чтобы было видно, чем именно лес обосновал свои веса.
Первые 10 матчей — фаза размещения с множителем K×6. Начальный рейтинг рассчитывается по pp, шкала каждой оси — абсолютная (от 0★ до 10★):
| pp | ≈ BSK SR |
|---|---|
| 1 000 | 2★ |
| 3 000 | 4★ |
| 5 000 | 5.4★ |
| 7 000 | 6.9★ |
| 10 000 | 8.2★ |
| 15 000 | 10★ (кап) |
На SR ≥ 5.5★ применяется отдельный SR-scaled множитель CONS, чтобы consistency оставался конкурентным компонентом и не «съедался» aim/speed.
| Ранг | Диапазон HP | Описание |
|---|---|---|
| 🔵 Candidate | 0–250 | Испытуемый. Способности замечены, лояльность не доказана. |
| 🟢 Party Member | 251–750 | Полноправная единица структуры. Стабильно функционируете в баунти-циклах. |
| 🟠 Inspector | 751–1500 | Опытный субъект. Право контроля над ритмом и конкуренция с элитой. |
| 🔴 High Commissioner | 1501–3000 | Высшее руководство. Авторитет незыблем, рекорды эталонные. |
| 🟣 Big Brother | 3001+ | Абсолютный предел. Вы больше не участник — вы стали частью самой системы. |
| Тип | Условие |
|---|---|
| First FC | Первый Full Combo на карте |
| Snipe | Перебить рекорд конкретного игрока |
| History | Исторически установленный рекорд |
| Accuracy | Рекорд по точности (≥98%, 99%, 100%) |
| Pass | Пройти карту |
| Mod | Пройти с модами (HD/HR/DT/FL и др.) |
| SS | 100% точность |
| Marathon | Карты-марафоны (10:00+) |
| Memory | Прохождение с Flashlight (FL) |
| Metronome | Рекорд по наименьшему Unstable Rate |
| Easter Egg | Ювелирная точность «мемных» цифр |
Final HP = (Base HP × DDM × Log-LSS × Relativity Factor) + Σ Bonuses
| Результат | Base HP |
|---|---|
| 🥇 Победа | 100 HP |
| ✅ Условие выполнено | 60 HP |
| 30 HP | |
| 📋 Участие | 10 HP |
| 💰 Спонсорство | 20 HP |
DDM: max(0.8, min(2.0, (SR × 0.24) − 0.16))
Log-LSS: 0.7 + (0.3 × log₂(seconds / 60 + 1))
| Бонус | HP |
|---|---|
| 🎯 Flawless Execution (100%) | +25 |
| 🎯 Elite Precision (≥99%) | +15 |
| 🎯 Extra Challenge (HD + HR) | +10 |
| 🎯 Zero Fifty (0x50) | +10 |
| 🎯 Vanguard (первый скор) | +15 |
| Стек | |
|---|---|
| Язык | Python 3.12 |
| Фреймворк | aiogram 3.25.0 |
| База данных | SQLite + SQLAlchemy (async) |
| API | osu! API v2 |
| ML | Pure-Python Random Forest регрессия (без numpy/sklearn) |
| Рендеринг | Pillow |
| Хостинг | Linux (Ubuntu/Debian) |
| @NaumRedlo | | @nazeetskyyy |
- Telegram: @NaumRedlo, @nazeetskyyy
- osu!: NaumRedlo, nazeetskyyy
- GitHub: Project 1984: CLASSIFIED
Project 1984 © 2026 — обновлено 02.05.2026
"Big Brother is watching you play." 👁️