Система уровней
За что капает XP, как считается уровень и какие формулы стоят под капотом
Система уровней — это сердце активности сервера. Идея проста как палка: люди болтают и сидят в войсах → получают опыт (XP) → растут в уровнях → им за это что-то перепадает. А где есть награда, там есть и азарт 🎰
На этой странице — всё без воды: за что начисляется XP, при каких условиях, и какие именно формулы крутятся под капотом. Да, с настоящими цифрами из кода, а не «ну примерно».
TL;DR для нетерпеливых. Писать осмысленные сообщения → 5–15 XP за штуку. Сидеть в войсе с кем-то (не в муте!) → ~5 XP в минуту. Уровень требует 5·уровень² + 50·уровень + 100 опыта. За каждый новый уровень — немного валюты, а иногда и роль. Всё.
💬 XP за сообщения
Каждое осмысленное сообщение в чате приносит опыт.
- За сообщение начисляется случайное количество XP в диапазоне от
xpPerMessageMinдоxpPerMessageMax. - Значения по умолчанию: от 5 до 15 XP.
- Учитываются только сообщения длиннее 3 символов. «да», «лол», «+» и спам из точек опыт не дают — извини, чат-фермеры 🚜
XP за сообщение = случайное целое в диапазоне [min, max]
по умолчанию = случайное от 5 до 15Почему диапазон, а не фикс? Чтобы нельзя было точно «просчитать» гринд и чтобы прогресс ощущался чуть живее. Один раз тебе выпадет 5, другой — 15. Маленькое казино в каждом сообщении.
🔊 XP за голосовые каналы
За время в войсе тоже капает опыт, но с условиями — иначе все бы просто молча висели в пустом канале ради халявы.
Раз в минуту Маяри смотрит, кто сидит в голосовых, и начисляет XP, только если выполнено всё это:
- ✅ ты не в муте и не в глухоте (ни сам себя, ни сервер тебя);
- ✅ в канале есть хотя бы ещё один активный человек (войс — это про общение, а не про медитацию в одиночестве 🧘);
- ✅ канал не приватный (закрытый) и не ограничен лимитом в 1 человека;
- ✅ канал не в списке исключённых.
Формула голосового опыта:
XP в минуту = округлить( базовый_XP × групповой_множитель )
по умолчанию = округлить( 3 × 1.5 ) = 5 XP/минxpPerVoiceMinute(базовый XP) — по умолчанию3.xpGroupMultiplier(групповой множитель) — по умолчанию1.5.
Нюанс про время. Время в войсе (то, что в профиле) считается, даже если ты сидишь один — лишь бы не в муте. А XP идёт только за компанию: соло в открытом канале можно, но опыт за это не положен 🤷
Отдельная история — приватные каналы и «одиночки» (с лимитом в 1 человека). В них не идёт ни время, ни XP: молча провисеть всю ночь в закрытом войсе — это фарм часов, а не активность. Хочешь расти — сиди там, где есть жизнь 🫂
📈 Как XP превращается в уровни
Вот тут начинается математика, но обещаю — не страшная.
Чтобы перейти на следующий уровень, нужно накопить определённый порог XP. Он растёт вместе с уровнем по формуле:
Нужно XP для уровня = 5 × уровень² + 50 × уровень + 100Как только опыта набралось достаточно — уровень повышается на 1, а счётчик XP сбрасывается и копится заново до следующего порога.
Чтобы было нагляднее, вот сколько опыта стоит каждый рывок (при настройках по умолчанию):
| Переход | Нужно XP | ≈ сообщений (по 10 XP) | ≈ минут в войсе (по 5 XP) |
|---|---|---|---|
| 0 → 1 | 100 | ~10 | ~20 |
| 1 → 2 | 155 | ~16 | ~31 |
| 2 → 3 | 220 | ~22 | ~44 |
| 3 → 4 | 295 | ~30 | ~59 |
| 5 → 6 | 475 | ~48 | ~95 |
| 10 → 11 | 1100 | ~110 | ~220 |
| 20 → 21 | 3100 | ~310 | ~620 |
| 50 → 51 | 15100 | ~1510 | ~3020 |
Замечаешь подвох? Из-за уровень² каждый следующий уровень даётся всё тяжелее. Первые уровни пролетаешь за вечер, а вот 50-й — это уже маленький подвиг и повод для уважения 🏅 Так и задумано: чтобы топ таблицы лидеров что-то да значил.
🪙 Награда за новый уровень
Каждое повышение уровня — это не только красивая циферка. За него выдаётся валюта:
- Если на сервере задан фиксированный
currencyReward— выдаётся именно столько за каждый уровень. - Если фикс не задан (по умолчанию
0) — выдаётся случайное нечётное число от 1 до 9 (1, 3, 5, 7 или 9).
Награда за уровень = currencyReward, если он > 0
= случайное из {1, 3, 5, 7, 9}, если не заданА ещё бустеры сервера могут получать множитель к награде и к XP за сообщения — если на сервере включены и настроены бонусы за буст. Маленькое «спасибо» тем, кто поддерживает сервер 💎
🎁 Роли за уровни
Самая мотивирующая часть. Можно настроить роли-награды: достиг уровня — получил роль. Работает в двух режимах:
- Накопительный (по умолчанию) — роли копятся. Достиг 5, 10 и 20 уровня — носишь все три роли.
- Только высшая (
removePreviousRole) — оставляется лишь одна, самая крутая роль из доступных. Дорос до новой — старая снимается автоматически.
Чтобы роли реально выдавались, Маяри нужно:
- право «Управлять ролями»;
- её собственная роль должна стоять в списке выше всех ролей-наград.
Если роль-награда висит выше роли бота — Discord физически не даст её выдать. Это не баг Маяри, это правило иерархии ролей самого Discord. Просто перетащи роль Маяри повыше 🆙
Роли проверяются и синхронизируются тихо при каждом сообщении — так что если ты поправил награды задним числом, они подтянутся сами, без перезахода.
🚫 Где XP не начисляется
Иногда опыт в определённых местах не нужен (флудилки, музыкальные каналы, AFK-войсы). Для этого есть списки исключений:
- Исключённые каналы — ни сообщения, ни голос в них не дают XP.
- Исключённые категории — то же самое, но сразу для всех каналов внутри категории.
Удобно, чтобы спам-канал не превращался в ферму уровней 🌾
🔔 Уведомления о повышении
Когда кто-то берёт новый уровень, Маяри может это отпраздновать — отправить сообщение в выбранный канал или личным пингом через систему уведомлений. Текст полностью кастомизируется: обычное сообщение или красивый эмбед (включая формат V2).
В шаблон можно подставлять переменные — например {newLevel}, {oldLevel}, {reward} и {currencyEmoji}. Полный список ищи на странице Тэги конструктора сообщений.
Совет напоследок. Не делай пороги и награды слишком жирными сразу. Лучше начать скромно и подкручивать по ощущениям: если чат притих — добавь вкусную роль на ближайший уровень, и увидишь, как народ снова оживает 📣