🤖 dicechess-bots — структура репозитория
Приватный репозиторий для экспериментов: наш Scala.js-движок играет против сайт-ботов dicechess.com (DC Coach Beginner/Amateur/Master) через STOMP — это бенчмарк силы алгоритма. Родственник расширения (то же «наш бот против сайта»), но в виде Node-раннера, а не браузерного MV3. Предыстория и выбор стека — Игра против роботов.
Структура
package.json— ES-модуль; зависимости@stomp/stompjs(STOMP) иws(WebSocket-клиент для Node). Скомпилированный движок подключён как локальная зависимость:"@rabestro/dicechess-engine": "file:../dicechess-engine-scala".index.js— входная точка: грузит.env, инициализирует бота, подключает к WebSocket-коннектору.src/connector.js— соединение сdicechess.com:- установление соединения с нужными заголовками (
Origin,User-Agent, JWT); - подписка на лобби
/topic/lobby; - автоподписка на игровую комнату при матче с участием
BOT_USER_ID; - жизненный цикл игры (
UPDATE_STATE, бросокTHROW_DICES, ходMOVE).
- установление соединения с нужными заголовками (
src/bots/engineBot.js— изолированный класс бота: импортирует локальный Scala.js-движок, строит DFEN (подмешивает кубики к шахматному FEN), вызываетDiceChess.getBestMoveс выбранным алгоритмом (greedy,random); умеет применять ходы черезDiceChess.applyMove..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.
Связанное
- Игра против роботов — почему Node/Scala.js, а не Python+IPC; куда положить раннер.
- Расширение dicechess-extension — браузерный вариант той же идеи (подмена игрока на
bot:<algorithm>). - Simple Text Oriented Messaging Protocol — STOMP, на котором работает коннектор.