Skip to content

NaumRedlo/1984

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

190 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎯 1984 | Global & Competitive Bot

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 Меню справки

osu! статистика

Команда Описание
rs / recent Последняя сыгранная карта
compare [username] Сравнение статистики с другим игроком
leaderboard / lb / top Таблица лидеров (9 категорий)
leaderboardmap / lbm [id/url] Локальный лидерборд карты

Hunter Points System (HPS)

Команда Описание
hps [link/id] Анализ HP-потенциала карты
bountylist / bli Список активных баунти
bountydetails / bde [id] Детали баунти
submit [id] Отправить результат на баунти

BeatSkill (BSK)

Команда Описание
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 (BSK)

BeatSkill — рейтинговая система 1v1 дуэлей на пуле карт. Вместо единого рейтинга у каждого игрока есть 4 ортогональных компонента скилла в абсолютной шкале 0 – 10★:

Компонент Что измеряет
🎯 Aim Точность движений, прыжки, угловые паттерны
Speed Стримы, бёрсты, BPM-выносливость
💎 Accuracy Точность попаданий, OD-карты
🛡️ Consistency Выносливость на длинных картах, HP-карты

Каждая карта в пуле имеет свои веса w_aim / w_speed / w_acc / w_cons, определяющие, какой компонент на ней важнее. После раунда обновляются только те компоненты игрока, которые карта проверяет.

Pick / Ban фаза

Дуэль использует персональные пулы под слабости каждого игрока:

  1. Каждому игроку формируется свой пул из 6 карт, подобранных так, чтобы максимально нагружать его слабые компоненты (variant-C selection).
  2. Соперники получают в DM пул противника и одновременно банят до 3 карт — каждый бьёт по сильным сторонам другого.
  3. Перед каждым раундом оба игрока выбирают карту из оставшихся; приоритет — у игрока с меньшим μ.
  4. Дуэль идёт до 1 000 000 суммарных очков (composite score).
  5. На время вызова приходит пинг сопернику в личку, ошибки Telegram (BadRequest) больше не ломают флоу.
  6. Активные дуэли переживают рестарт бота — состояние раунда восстанавливается из БД, включая собранный пул карт.

Подсчёт раунда

Раунд оценивается чистым execution-метриком, без зависимости от pp:

composite_score = 0.7·(accuracy · combo_ratio) + 0.3·miss_penalty
где miss_penalty = 1 / (1 + misses/5), итог скейлится до 200 000 очков на раунд.

Глубокий анализ карт (Deep Analysis)

При добавлении карты в пул бот:

  1. Скачивает .osu файл и парсит паттерны:

    • Стримы, бёрсты, death streams (по интервалам между нотами)
    • Углы движения курсора, back-and-forth паттерны
    • Скорость прыжков между нотами
    • Дисперсию SV (scroll velocity) и плотности нот
    • HP drain rate как индикатор нагрузки на consistency
  2. Запрашивает osu! API (/beatmaps/{id}/attributes):

    • aim_difficulty, speed_difficulty — значения от движка osu!
    • slider_factor — влияние слайдеров на сложность
  3. Вычисляет начальные веса на основе полученных данных.

ML-модель

Ночью (02:00 по MSK) запускается pure-Python Random Forest в 3 уровня надёжности — каждая карта получает веса из самого сильного источника, для которого хватает данных:

  1. Per-map корреляция (data_driven) — карта набрала ≥ MIN_ROUNDS_PER_MAP раундов и компонент-исход коррелирует. Веса берутся из реальной истории матчей.

  2. Round-level Random Forest (rf_prior) — общий лес обучается на истории всех раундов: предсказывает win-margin по (map_features, total_diff, share_diffs, map×share interactions). Из обученного леса через partial-dependence извлекаются веса для каждой карты пула.

  3. Эвристика (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.


🏆 Система рангов (HPS)

Ранг Диапазон 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 Ювелирная точность «мемных» цифр

🧮 Формула начисления HP

Final HP = (Base HP × DDM × Log-LSS × Relativity Factor) + Σ Bonuses

Результат Base HP
🥇 Победа 100 HP
✅ Условие выполнено 60 HP
⚠️ Частично (≥ 98%) 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 |


📞 Поддержка


Project 1984 © 2026 — обновлено 02.05.2026

"Big Brother is watching you play." 👁️

About

Telegram-бот для соревновательной системы наград в osu! (исключительно для чата «1984»)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages