🤖 dicechess-bots — структура репозитория

Приватный репозиторий для экспериментов: наш Scala.js-движок играет против сайт-ботов dicechess.com (DC Coach Beginner/Amateur/Master) через STOMP — это бенчмарк силы алгоритма. Родственник расширения (то же «наш бот против сайта»), но в виде Node-раннера, а не браузерного MV3. Предыстория и выбор стека — Игра против роботов.

Структура

  1. package.json — ES-модуль; зависимости @stomp/stompjs (STOMP) и ws (WebSocket-клиент для Node). Скомпилированный движок подключён как локальная зависимость: "@rabestro/dicechess-engine": "file:../dicechess-engine-scala".
  2. index.js — входная точка: грузит .env, инициализирует бота, подключает к WebSocket-коннектору.
  3. src/connector.js — соединение с dicechess.com:
    • установление соединения с нужными заголовками (Origin, User-Agent, JWT);
    • подписка на лобби /topic/lobby;
    • автоподписка на игровую комнату при матче с участием BOT_USER_ID;
    • жизненный цикл игры (UPDATE_STATE, бросок THROW_DICES, ход MOVE).
  4. src/bots/engineBot.js — изолированный класс бота: импортирует локальный Scala.js-движок, строит DFEN (подмешивает кубики к шахматному FEN), вызывает DiceChess.getBestMove с выбранным алгоритмом (greedy, random); умеет применять ходы через DiceChess.applyMove.
  5. .env — JWT-токен, ID игрока (BOT_USER_ID), WebSocket URL. Токены — только в .env, не в Git.

Гоча сборки DFEN

buildDfen обязан сортировать значения кубиков (p < n < b < r < q < k) перед записью в 7-е поле DFEN — иначе парсер движка их не примет (та же конвенция, что и dice_sorted в аналитике).

Как пользоваться

# 1. собрать движок (если менялся Scala-код)
cd ../dicechess-engine-scala && sbt rootJS/fastOptJS
# 2. запустить раннер
cd ../dicechess-bots && npm run play
#    → "Successfully connected to Dice Chess WebSocket!"

Дальше — открыть dicechess.com в браузере под своим аккаунтом и начать игру против сайт-бота: Node-раннер перехватит её через WebSocket, подпишется и начнёт ходить сам; ходы движка видно в окне браузера в реальном времени. Новые алгоритмы добавляются в src/bots/ и переключаются через .env.

Связанное