Отличная находка! Вы перехватили трафик, и теперь абсолютно ясно, какая технология здесь используется.

Это протокол STOMP (Simple Text Oriented Messaging Protocol), который работает поверх WebSockets. Это очень популярный стандарт, который часто используется в связке с Java Spring Boot на бэкенде (на это указывают характерные префиксы маршрутов: /app/..., /topic/..., /user/topic/...).

Давайте разберем, что именно происходит в этом логе:

1. Авторизация и подключение (Handshake)

CONNECT
Authorization:eyJ0eXAiOi...
accept-version:1.2,1.1,1.0
heart-beat:0,0

Ваш клиент устанавливает STOMP-соединение. Он передает ваш JWT-токен в заголовке Authorization. В токене (внутри payload) даже видно ваш userId ("sub":"163"). Сервер отвечает фреймом CONNECTED, подтверждая, что версия протокола 1.2 и ваш user-name:163.

2. Получение событий лобби

MESSAGE
destination:/topic/lobby
...
{"CHANGE_GAME":{"creator":{"userId":163,"name":"Rabestro"...

Сервер прислал вам (через публичный канал /topic/lobby) уведомление о том, что статус игры 03e0de84-6107-11f1-a103-87edb3fbcb1d изменился на PLAY. Вы играете против бота DC Coach Master.

3. Подписка на канал конкретной игры

SUBSCRIBE
id:sub-2
destination:/user/topic/game/instance/03e0de84-6107-11f1-a103-87edb3fbcb1d

Как только игра началась, ваш браузер оформляет подписку на личный канал этой игры (префикс /user/ означает, что сообщения в этом канале будут приходить персонально вам). Сюда сервер будет присылать ходы оппонента, результаты бросков кубиков и таймеры.

4. Отправка команд серверу

SEND
destination:/app/game/instance/03e0de84-6107-11f1-a103-87edb3fbcb1d
...
{"type":"UPDATE_STATE", ...}
 
SEND
destination:/app/game/instance/03e0de84-6107-11f1-a103-87edb3fbcb1d
...
{"type":"THROW_DICES","gameId":"03e0de84-6107-11f1-a103-87edb3fbcb1d"}

Ваш браузер отправляет команды (префикс /app/ означает, что сообщение пойдет на обработку в контроллер бэкенда). Сначала отправляется техническая информация о сессии, а затем команда THROW_DICES — запрос на бросок кубиков для вашего хода.


Как автоматизировать это (Реверс-инжиниринг)

Так как это стандартный протокол STOMP, вам не нужно вручную формировать эти текстовые блоки (фреймы). Существуют готовые библиотеки для работы со STOMP.

Пример на Python (для бота)

Если вы хотите написать скрипт или бота, вы можете использовать библиотеку stomp.py или современные асинхронные библиотеки вроде aiostomp.

Вот примерная логика того, как это будет выглядеть на Python:

import time
import json
import stomp # pip install stomp.py
 
# Подставьте ваш реальный токен
TOKEN = "eyJ0eXAiOi..."
GAME_ID = "03e0de84-6107-11f1-a103-87edb3fbcb1d"
 
class MyListener(stomp.ConnectionListener):
    def on_error(self, frame):
        print('ОШИБКА:', frame.body)
 
    def on_message(self, frame):
        print('ПОЛУЧЕНО СООБЩЕНИЕ:', frame.body)
        # Здесь вы парсите JSON и реагируете на ходы соперника
 
# Обычно endpoint для WebSockets выглядит как /ws или /stomp
# Нужно найти точный URL (wss://dicechess.com/ws-endpoint) в Network (вкладка Headers)
conn = stomp.Connection12([('dicechess.com', 443)])
 
# Для wss (secure websocket) нужно настроить SSL
conn.set_ssl(for_hosts=[('dicechess.com', 443)])
 
conn.set_listener('', MyListener())
 
# Шаг 1: CONNECT
conn.connect(headers={'Authorization': TOKEN}, wait=True)
 
# Шаг 3: SUBSCRIBE (подписка на игру)
conn.subscribe(
    destination=f'/user/topic/game/instance/{GAME_ID}',
    id='sub-2',
    ack='auto'
)
 
# Шаг 4: SEND (отправка команды)
throw_dices_payload = json.dumps({
    "type": "THROW_DICES",
    "gameId": GAME_ID
})
 
conn.send(
    destination=f'/app/game/instance/{GAME_ID}',
    body=throw_dices_payload,
    content_type='application/json'
)
 
# Держим скрипт запущенным, чтобы слушать ответы
while True:
    time.sleep(1)

Что нужно сделать дальше:

  1. Посмотрите в инструментах разработчика (Network вкладка Headers для WebSocket-запроса), какой именно URL используется для подключения (например, wss://dicechess.com/ws).
  2. Дождитесь ответа сервера после вашей команды THROW_DICES. Скорее всего, сервер пришлет сообщение MESSAGE в подписанный канал /user/topic/game/instance/... с результатами броска.
  3. Попробуйте сделать ход на доске и перехватите следующий пакет SEND. Он покажет, в каком формате передаются координаты фигур (вероятно, что-то вроде {"type":"MAKE_MOVE", "from":"e2", "to":"e4"}).