Рушій гейміфікації для Discord-спільнот
Vroshik перетворює щоденну активність на прогрес: рівні й щоденні серії, колекційний кам'яний дракончик, сезонний батлпас, аркадні міні-ігри на віртуальних кредитах і внутрішні лобі матчів — один Discord-бот плюс вебпанель.
- 186
- слеш-команд
- 38
- модулів бота
- 316
- маршрутів вебпанелі
- 27
- перемикачів функцій
Пораховано за вихідним кодом.
Учасники заробляють монети й досвід за те, що приходять, грають і допомагають, — і витрачають їх на компаньйона, косметику та події. Кожне число на екрані — від сервера.
Що він уміє
Дванадцять систем, які живлять одна одну. Ризиковіші з них мають власний перемикач у панелі власника.
Рівні й рейтинги
Досвід за повідомлення, хвилини в голосі, матчі, квести й щоденний дарунок; рейтинги сервера й глобальні.
level = ⌊√(XP / 100)⌋
Щоденний дарунок і серії
Безкоштовна скриня щодня й більша — за кожну 7-денну серію, з 48-годинною пільгою, тож один пропущений вечір пробачається.
скриня 7-денної серії
Економіка двох валют
Монети заробляються активністю й витрачаються в грі; кристали — преміальна валюта для косметики й статусу. Перекази мають невеликий податок.
монети + кристали
Компаньйон і лігво
Збирайте, годуйте й прокачуйте компаньйонів VRoshik; лігво росте разом із найсильнішим.
44 дизайни · 7 рідкостей
Скрині з відкритими шансами
Кожна скриня показує точні шанси; лічильник гарантії забезпечує епічні й легендарні дропи; тижневі ліміти.
епічний гарантовано до 15 000
Сезонний батлпас
Безкоштовна й преміальна доріжки із сезонними квестами; досвід пропуску йде від тих самих дій, що й звичайний.
сезони + квести
Аркадні міні-ігри
Монетка, Crash, Mines і дві гри з каскадними барабанами — на віртуальні монети з опублікованими рівнями виплат.
лише віртуальні кредити
Pick'em і прогнози
Розклад про-матчів Dota 2 з PandaScore та OpenDota; учасники прогнозують результати на віртуальні монети; кожен матч розраховується рівно один раз.
ідемпотентний розрахунок
Внутрішні лобі матчів
Черга однією командою, капітани набирають команди, Steam-бот створює справжнє лобі Dota 2; кожне зігране лобі платить монети й досвід.
30 команд лобі
Турніри
Набір на Battle Cup із лімітом слотів для великих вечорів, а також турніри спільноти на сайті.
Battle Cup
Кімнати й спілкування
Приватні голосові кімнати «зайди — створи», кімнати в оренду, пари й міжсерверний чат, з'єднаний із сайтом.
голосові кімнати
Косметика й статус
Фони профілю, титули, кастомні ролі й профільні картки, що рендеряться на сервері; Зала легенд для давніх прихильників.
картки з сервера
Компаньйон, якого хочеться збирати
VRoshik — маленький кам'яний дракончик, який живе в лігві кожного учасника. Щоденні дарунки, серії та зароблені скрині приносять нові образи — 44 дизайни у 7 рідкостях, кожен із рідкісним сяйливим (shiny) варіантом.
- Лігво у трьох рівнях — годуйте й прокачуйте компаньйонів; що сильніший найкращий із них, то більше лігво: печера, сховище, тронна зала.
- Дублікати мають сенс — вони перетворюються на пил для крафту, а достатньо копій зливаються в shiny-варіант.
- Чесно за задумом — шанси опубліковано, лічильник гарантії забезпечує рідкісні дропи, тижневі ліміти лишають це хобі.














Шанси, висічені в камені
Шанси скринь — не таємниця: ті самі числа, з якими кидає сервер, бачить кожен гравець. Таблицю нижче згенеровано з робочого конфігу.
| Скриня | Звичайний | Незвичайний | Рідкісний | Епічний | Легендарний | Міфічний | Ціна · ліміт |
|---|---|---|---|---|---|---|---|
| 64 % | 28 % | 8 % | — | — | — | Безкоштовно · за кожну 7-денну серію; перша — щонайменше рідкісна | |
| 70 % | 27 % | 3 % | — | — | — | 500 монет · 3 / тиждень | |
| 24 % | 45 % | 26 % | 5 % | — | — | 1 500 монет · 2 / тиждень · Епічний — з 8-го дня | |
| — | — | 42,2 % | 45 % | 12 % | 0,8 % | 3 000 монет · 1 / тиждень · з 8-го дня | |
| — | — | — | 60 % | 36 % | 4 % | 10 000 монет · 1 / 28 днів · з 29-го дня |
Платні скрині відкриваються лише за монети, зароблені активністю, — ніколи за кристали чи реальні гроші. Версія конфігу: vroshik-econ-v2. Відкрити скриню в демо
Зіграйте просто тут
Чотири фронтенд-модулі з робочого продукту працюють у вашому браузері на локальних рушіях із робочою математикою. Нікуди нічого не надсилається.
VRosh Camp
Каскадні барабани 6 × 5. Чотири Егіди будять дракона: 8-секундне відео перетворення, палаючий табір і фріспини з наростальним множником. Раунди заздалегідь зіграв робочий рушій.
- Canvas 2D
- відеоцеремонія
- звук у такт музиці
- рівень виплат 94,8 %
Демо не завантажилося. Відкрийте його в новій вкладці.
Монетка 3D
Монета на WebGL із процедурним рельєфом, відблисками й розмиттям руху. Спершу вирішується результат, потім фізика садить монету рівно на цю сторону.
- WebGL 1
- 2D-резерв
- 50/50 · ×1.96
Демо не завантажилося. Відкрийте його в новій вкладці.
Crash
Ракета летить експоненційною кривою; заберіть до вибуху. Прихована точка вибуху — за формулою робочого рушія з перевагою 2 %.
- Canvas 2D
- автозбір
- P(≥ m) = 0.98 / m
Демо не завантажилося. Відкрийте його в новій вкладці.
Скрині компаньйона
Відкрийте чотири платні скрині за демо-монети. Стрічка їде до результату, кинутого з опублікованими шансами, а лічильники гарантії заповнюються.
- відкриті шанси
- лічильники гарантії
- Shiny 0,5 %
Демо не завантажилося. Відкрийте його в новій вкладці.
Економіка, захищена від зловживань і без виведення в гроші
Гравці ставляться до віртуальних монет як до грошей, тож рушій теж: кожне правило нижче виконується на сервері й покрите тестами.
- try_charge · tx()
Атомарний облік
Кожен рух монет — одне умовне оновлення в транзакції: списання відбувається повністю або не відбувається зовсім, тож паралельні запити не можуть увести баланс у мінус.
- ключі операцій
Ідемпотентність за замовчуванням
Відкриття скрині має ключ операції, матч розраховується один раз, оплата зараховується один раз — повтор ніколи не заплатить двічі.
- RNG на сервері
Сервер вирішує, екран анімує
Результат кидається на сервері ще до анімації — скрині криптографічним генератором, раунди барабанів зі збереженим seed; сцени лише приїжджають до отриманого результату.
- 429 · Retry-After
Ліміти частоти
Паузи й ліміти за хвилину для кожного гравця; автогра чекає на сервер, а не падає з помилкою.
- без виходу в гроші
Жодного виведення
Монети й кристали не можна вивести чи продати. Платні скрині беруть лише монети, зароблені активністю, а вимикач запуску закриває обмін кристалів на монети.
- 18+ · caps
Захист покупок
Пакети кристалів (Telegram Stars чи крипта) можна закрити підтвердженням 18+, місячним лімітом витрат і мінімальним віком акаунта Discord — усе перевіряє сервер.
Змагання, які працюють самі
Події — це те, що оживляє спільноту. Vroshik сам веде запис, лобі й результати, тож модератори теж можуть грати.

Внутрішні лобі
Запис, драфт капітанів, заміни й бани — слеш-командами; міст Steam створює лобі Dota 2, а бот платить кожному гравцеві.

Battle Cup
Великі набори з лімітом слотів для турнірних вечорів.

Pick'em
Прогнози на про-матчі за віртуальні монети; результати розраховуються автоматично й рівно один раз.

Сезони батлпасу
Сезонні квести перетворюють щоденну активність на нагороди.

Рейтинги
Рейтинги сервера й глобальні тримають змагання на виду.





Статус, який видно: давні прихильники отримують статую в Залі легенд — камінь, бронза, золото й нарешті лава.
Кожна функція має вимикач
У панелі власника 27 перемикачів функцій — від цілих модулів до окремих ризикованих опцій. Бот і сайт читають ті самі перемикачі наживо, тож до гравців ніщо не потрапляє без «так» власника.
- 12 ролей, одне джерело правди — ранги зіставлено з можливостями в одному модулі, яким користуються і бот, і сайт.
- Один журнал дій — дії персоналу з Discord і з вебу потрапляють в один журнал.
- Безпечна відмова — якщо перемикач не прочитався, діє типове значення — для всього ризикованого це «вимкнено».
- Модуль міні-ігорУвімк.
- Pick'em і прогнозиУвімк.
- Ядро компаньйона й лігвоВимк.
- Скрині компаньйона (лише зароблені монети)Вимк.
- VRosh Camp: запускВимк.
- VRosh Camp: дракон-вайлд у фріспинахВимк.
- Міжсерверний глобальний чатВимк.
- Оренда кімнат на сайтіУвімк.
- Оплата через Telegram StarsВимк.
- Перевірка 18+ і місячний ліміт витратВимк.
- Вимикач запуску: закрити обмін кристалів на монетиВимк.
- Дозволити ролям сервера керувати економікоюВимк.
Архітектура
Три сервіси навколо однієї бази даних. Бот і вебпанель імпортують ту саму економіку, шанси й математику ігор, тож правило змінюється рівно в одному місці; міст лобі спілкується з вебпанеллю через API з авторизацією.
Discord
Слеш-команди, кнопки й голос; команди синхронізуються для кожного сервера.
Браузер
Вебпанель через HTTPS із входом через Discord OAuth.
Steam · Dota 2
Справжні лобі Dota 2, які створює окремий акаунт Steam.
Discord-бот
Python · discord.py — 38 модулі, 186 слеш-команд, фонові цикли для лобі, ретрансляції чату й оренди.
сервіс systemdВебпанель
Python · Flask + Jinja на gunicorn — 316 маршрутів: гаманець, ігри, колекція, панель власника.
один воркер · 8 потоківМіст лобі
Node.js · node-dota2 — опитує вебпанель зі спільним токеном, створює лобі, повертає результати.
авторизація токеномСпільне ядро
Один двомовний шар даних (SQLite у режимі WAL або PostgreSQL) з атомарними грошовими примітивами, плюс чисті рушії міні-ігор, барабанів, шансів і компаньйона — їх імпортують обидва процеси.
Оплати
Бот Telegram Stars і рахунки Crypto Pay зараховують кристали рівно один раз на замовлення.
Дані матчів
PandaScore та OpenDota — розклад, результати й статистика гравців.
Стріми й медіа
Twitch для трансляцій; yt-dlp для музичного модуля.
Технології
Бекенд
- Python 3
- discord.py 2
- Flask 3
- Jinja2
- gunicorn
- aiosqlite
Дані
- SQLite · WAL
- діалект PostgreSQL
- версійований JSON-конфіг
Фронтенд
- Vanilla JS · ES-модулі
- Canvas 2D
- WebGL 1
- Web Audio API
- CSS-змінні
Медіа
- картки через Pillow
- процедурна 3D-монета
- аудіоспрайти · синхронізація з бітом
Інтеграції
- Discord API · OAuth
- Steam · node-dota2
- Telegram Bot API · Stars
- Crypto Pay
- PandaScore
- OpenDota
- Twitch
Інфраструктура й якість
- Linux · systemd
- Caddy
- Cloudflare
- офсайт-бекапи
- юніт- і гоночні тести
- калібрування Монте-Карло
179 команд в 11 модулях
Згенеровано з вихідного коду бота: кожна слеш-команда з параметрами й тим, хто може її використати. 70 — для всіх учасників, 21 — для модераторів, 88 — для адміністраторів.
| Команда | Що робить | Хто |
|---|---|---|
/profile | Картка профілю: рівень, статистика й колекція userучасник | Усі |
/balance | Показати баланс монет userучасник | Усі |
/daily | Отримати щоденні монети (раз на 24 год) | Усі |
/top | Глобальні рейтинги гравців categoryвибір | Усі |
/arcade crash | Множник росте — забери виграш до обвалу amountчисло | Усі |
/close pick | Вибір капітана: взяти гравця в драфт за номером numberчисло | Усі |
/pay | Переказати монети іншому гравцеві userучасникamountчисло | Усі |

Створив Олег Макух
Продукт, бекенд, фронтенд і арт-дирекція — від і до
Я спроєктував економіку й прогресію, написав бота й вебпанель, зібрав ігрові фронтенди реального часу та міст лобі Steam і підтримую все це в продакшні. Vroshik виріс усередині живої ігрової спільноти; ця сторінка показує його як самостійний продукт.