member

Объект содержит информацию с данными пользователя.

{
    "member_id":  1,
    "user_name":  "Andrew",
    "ref_code":   "7KQ9XA",
    "is_premium": 0,
    "is_admin":   0,
    "is_banned":  0,
    "arena_initialized": 0,
    "arena_onboarded": 1,
    "character_name": "BraveKnight42",
    "community":  0,
    "inviter": {
        "member_id":  2,
        "user_name": "Alex"
    },
    "invites":    0,
    "created":    1757544925,
    "created_at": 1757544925,
    "options": {
        "level":               2,
        "levelup":             false,
        "exp":                 0,
        "energy_regeneration": 1,
        "energy_capacity":     50,
        "energy_current_tier": 1,
        "energy_tier_reset_at": 1758067200,
        "energy_at":           0,
        "time_shift":          0
    },
    "data":       {
        ...
    },
    "gacha":      {
        "count":        1,
        "cooldown":     300,
        "spin":         1758498973,
        "spin_at":      1758498973,
        "spin_free":    1758498776,
        "spin_free_at": 1758498776,
    },
    "slots":      {
        "available": 5,
        "slot_1":    6,
        "slot_2":    0,
        "slot_3":    0,
        "slot_4":    0,
        "slot_5":    0
    },
    "wallet":     [
        {...currency},
        {...currency},
        {...currency}
    ],
    "levels":     [
        {...level},
        {...level},
        {...level}
    ],
    "skills":     [
        {...skill},
        {...skill},
        {...skill}
    ],
    "activity":   [
        {...activity},
        {...activity},
        {...activity}
    ],
    "triggers": [
        {...trigger},
        {...trigger},
        {...trigger},
    ],
    "feature_variants": [
        {...feature_variant},
        {...feature_variant},
        {...feature_variant}
    ],
    "bounty": [
        {...bounty},
        {...bounty},
        {...bounty},
    ],
    "quests": {...quests_state},
    "achievements": {...achievements_state},
    "unclaimedQuestsCount": 1,
    "unclaimedAchievementsCount": 2,
    "dailyChestProgress": {...daily_chest_progress}
}
Поле Тип Описание
member_id int Идентификатор пользователя
user_name string Отображаемое имя пользователя
ref_code string Содержит реферальный идентификатор пользователя (всегда одной длины)
is_premium int Есть ли у пользователя Telegram Premium
is_admin int Является ли пользователь администратором, вычисляется по списку тестеров (Telegram ID или mid_<member id>); на non-production также true для mobile-пользователей
is_banned int Заблокирован ли пользователь
arena_initialized int Инициализирована ли арена (/arena/init). Подсказка, чтобы клиент не выяснял первый заход ошибкой — разбор ниже
arena_onboarded int Прошёл ли игрок онбординг арены (победа над Цукером). Та же подсказка: бой до онбординга отбивается кодом 10061
character_name string Имя персонажа, выбранное на арене. Только после онбординга; до него поля нет — разбор ниже
community int Вступил ли пользователь в сообщество
inviter object/null Объект с информацией о пользователе, который пригласил текущего игрока
inviter.member_id int Идентификатор пригласившего пользователя
inviter.user_name string Отображаемое имя пригласившего пользователя
invites int Количество приглашенных пользователей
created int Время регистрации пользователя в timestamp
created_at int Время регистрации пользователя в timestamp
options object Объект с дополнительной информацией пользователя
options.level int Текущий уровень персонажа пользователя
options.levelup bool Можно ли увеличить уровень игрока и получить за это награду
options.exp int Текущее количество опыта игрока
options.energy_regeneration int Количество восстанавливаемой энергии
options.energy_capacity int Максимальное количество накапливаемой энергии
options.energy_current_tier int Текущий шаг стоимости покупки энергии
options.energy_tier_reset_at int Время следующего сброса шага стоимости покупки энергии в timestamp
options.energy_at int Время последнего начисления энергии игрока
data object Объект с дополнительными полями (подробнее)
gacha object Объект с данными гача-автомата пользователя
gacha.count int Количество вращений автомата пользователем
gacha.cooldown int Таймаут бесплатного вращения автомата
gacha.spin int Время последнего вращения автомата за токены в timestamp
gacha.spin_at int Время последнего вращения автомата за токены в timestamp
gacha.spin_free int Время последнего бесплатного вращения автомата в timestamp
gacha.spin_free_at int Время последнего бесплатного вращения автомата в timestamp
gacha.items.{gacha_id}.event_id string Идентификатор текущего запуска ивентовой гачи (lifetime.schedule[].id). Отсутствует у гач без расписания
gacha.items.{gacha_id}.progress object Прогресс сундуков гачи. Отсутствует у гач без chestProgress
gacha.items.{gacha_id}.progress.current int Очки прогресса в текущем запуске. Каждая успешная крутка добавляет pointsPerSpin из конфига
gacha.items.{gacha_id}.progress.max int Длина шкалы в очках (chestProgress.maxPoints)
gacha.items.{gacha_id}.progress.chests array Сундуки в порядке возрастания порога
gacha.items.{gacha_id}.progress.chests[].id string Идентификатор сундука внутри гачи
gacha.items.{gacha_id}.progress.chests[].required_points int Порог очков, с которого сундук доступен
gacha.items.{gacha_id}.progress.chests[].state string locked - порог не достигнут, available - можно забрать, claimed - награда выдана
gacha.items.{gacha_id}.progress.chests[].reward string Идентификатор набора наград из таблицы rewards, по которому клиент строит предпросмотр
slots object Объект со слотами умений
slots.available int Количество доступных для активации слотов
slots.slot_n int Идентификатор умения (0 - не используется)
wallet array Список с объектами валют пользователя
levels array Список с объектами уровней пользователя
skills array Список с объектами умений пользователя
activity array Список с объектами активностей пользователя
triggers array Список с объектами триггеров пользователя
feature_variants array Список вариантов фич пользователя
bounty array Список с объектами наград пользователя
quests object Состояние ежедневных заданий пользователя
achievements object Состояние достижений пользователя
unclaimedQuestsCount int Количество ежедневных заданий с доступной наградой
unclaimedAchievementsCount int Количество достижений с доступной наградой
dailyChestProgress object Короткое состояние daily chest progress

arena_initialized — подсказка, а не истина

Поле отвечает на один вопрос: звать клиенту /arena/init или сразу /arena/info. До него клиент выяснял это ошибкой — звал /arena/info, получал законный по контракту отказ ArenaNotInitialized (10060) и только потом инициализировал арену. Отказ правильный, но в критический канал алертов уходит любая ошибка API, то есть каждый новый игрок арены поднимал критическое сообщение. Порядок вызовов на первом заходе стал init → info, число запросов не изменилось.

Это подсказка, и обрабатывать 10060 всё равно нужно. Значение устаревает — игрок сменил аккаунт, администратор сбросил арену игрока кнопкой в админке, — а сервер старше поля его вообще не присылает. Поэтому договор такой: выключает только явный ноль, всё остальное (единица, отсутствие поля) означает «пробуй /arena/info», а 10060 остаётся страховкой. Сервер отказывать не перестал и не перестанет: явный /arena/init существует затем, чтобы игрок не становился валидным противником, ничего не выбрав.

Поле приезжает и в ответе /auth/* — там рендерится тот же объект пользователя, — поэтому отдельный запрос ради него не нужен.

arena_onboarded — прошёл ли игрок онбординг арены

0 — игрок зарегистрирован на арене (или ещё нет), но Цукера в арене не победил: все экраны арены работают, а участия в боях нет — сам не атакует, его не атакуют, наград не получает. Бой, ре-бой, обновление целей и клейм наград до онбординга сервер отбивает кодом 10061 (ArenaNotOnboarded), и поле существует, чтобы клиент не узнавал об этом ошибкой — тот же приём, что у arena_initialized. Онбординг завершается методом /arena/onboarding/complete.

Договор тот же: подсказка, а не истина. Сервер старше поля его не присылает — отсутствие поля значит «онбординга на сервере нет, игрок — участник»; 10061 остаётся страховкой. Внутри арены то же значение приходит блоком onboarding в /arena/info.

character_name — имя персонажа

Имя, которое игрок выбрал на арене, — имя его персонажа везде: на базе, в профиле, в боях и диалогах, а не только на аренных экранах. Поле приходит, только когда игрок прошёл онбординг арены (arena_onboarded = 1), и равно arena.name из /arena/info. До онбординга поля нет: на арене у игрока случайное имя, которое видит только он сам, а вне арены клиент показывает имя героя, выбранное из списка, как раньше. Сервер старше поля его тоже не присылает — правило клиента одно: character_name, если оно есть, иначе выбранное из списка имя.

Имя меняется методом /arena/customization/set (правила имени, уникальность, отказы — там же). Это текст игрока, а не ключ локализации: его нельзя пропускать через перевод. Поле, как и соседние подсказки, приезжает и в ответе /auth/*.