Files
NowChessSystems/modules/official-bots/src/main/scala/de/nowchess/bot/BotController.scala
T
Janis Eccarius 260db25803
Build & Test (NowChessSystems) TeamCity build finished
feat(official-bots): activate opening book in expert bot (native-safe)
Load the Polyglot opening book as a classpath resource and wire it into
the expert HybridBot. Previously the bot supported Option[PolyglotBook]
but BotController passed None, so the book was never used.

PolyglotBook.fromResource reads via getResourceAsStream so the book is
embedded in the GraalVM native image instead of read from the filesystem
(FileInputStream) — no file needs mounting into the pod. The filesystem
apply(path) factory is kept for tests. Moved codekiddy.bin into
resources as opening_book.bin. Dropped the per-probe debug println.

NCS-43

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 23:17:52 +02:00

27 lines
980 B
Scala

package de.nowchess.bot
import de.nowchess.bot.bots.{ClassicalBot, HybridBot}
import de.nowchess.bot.util.PolyglotBook
import jakarta.enterprise.context.ApplicationScoped
import org.jboss.logging.Logger
object BotController:
private val log = Logger.getLogger(classOf[BotController])
private val openingBook = PolyglotBook.fromResource("/opening_book.bin")
private val bots: Map[String, Bot] = Map(
"easy" -> ClassicalBot(BotDifficulty.Easy),
"medium" -> ClassicalBot(BotDifficulty.Medium),
"hard" -> ClassicalBot(BotDifficulty.Hard),
"expert" -> HybridBot(BotDifficulty.Expert, vetoReporter = log.debug(_), book = Some(openingBook)),
)
def getBot(name: String): Option[Bot] = bots.get(name.toLowerCase)
def listBots: List[String] = bots.keys.toList.sorted
@ApplicationScoped
class BotController:
def getBot(name: String): Option[Bot] = BotController.getBot(name)
def listBots: List[String] = BotController.listBots