fixes lol
All checks were successful
Build and Push / build-all (push) Successful in 1m30s

This commit is contained in:
doomtube 2026-01-09 00:06:36 -05:00
parent 89c2e1630d
commit 804d6aed2a

View file

@ -700,6 +700,20 @@ func (m *ChessMatch) MatchLeave(ctx context.Context, logger runtime.Logger, db *
})
dispatcher.BroadcastMessage(OpCodeGameOver, msg, nil, nil, true)
// Update match label to finished so it's not detected as active
label := MatchLabel{
Game: "chess960",
Status: "finished",
Result: s.Result,
White: s.WhiteName,
WhiteID: s.WhiteID,
Black: s.BlackName,
BlackID: s.BlackID,
PositionID: s.PositionID,
}
labelJSON, _ := json.Marshal(label)
dispatcher.MatchLabelUpdate(string(labelJSON))
logger.Info("Game forfeited: %s", s.Result)
}
}
@ -753,14 +767,77 @@ type MoveResult struct {
Reason string
}
// Convert Chess960 FEN castling notation to standard notation for chess library compatibility
func convertChess960FenForLibrary(fenStr string) string {
parts := strings.Split(fenStr, " ")
if len(parts) < 3 {
return fenStr
}
castling := parts[2]
// Check if it's already standard notation or empty
if castling == "-" || castling == "KQkq" || castling == "KQ" || castling == "kq" ||
castling == "K" || castling == "Q" || castling == "k" || castling == "q" ||
castling == "Kq" || castling == "Qk" || castling == "Kk" || castling == "Qq" {
return fenStr
}
// Convert Chess960 file-based notation (like HBhb) to standard KQkq
newCastling := ""
hasWhiteKingside := false
hasWhiteQueenside := false
hasBlackKingside := false
hasBlackQueenside := false
for _, c := range castling {
if c >= 'A' && c <= 'H' {
// White castling - higher file = kingside, lower = queenside
if c >= 'E' {
hasWhiteKingside = true
} else {
hasWhiteQueenside = true
}
} else if c >= 'a' && c <= 'h' {
// Black castling
if c >= 'e' {
hasBlackKingside = true
} else {
hasBlackQueenside = true
}
}
}
if hasWhiteKingside {
newCastling += "K"
}
if hasWhiteQueenside {
newCastling += "Q"
}
if hasBlackKingside {
newCastling += "k"
}
if hasBlackQueenside {
newCastling += "q"
}
if newCastling == "" {
newCastling = "-"
}
parts[2] = newCastling
return strings.Join(parts, " ")
}
// Validate chess move using corentings/chess/v2 library
func validateChessMove(fenStr, from, to, promotion string, logger runtime.Logger) MoveResult {
result := MoveResult{Turn: "w"}
logger.Info("validateChessMove: FEN=%s, move=%s%s", fenStr, from, to)
// Convert Chess960 castling notation to standard for library compatibility
convertedFen := convertChess960FenForLibrary(fenStr)
logger.Info("validateChessMove: original FEN=%s, converted=%s, move=%s%s", fenStr, convertedFen, from, to)
// Parse FEN
fen, err := chess.FEN(fenStr)
fen, err := chess.FEN(convertedFen)
if err != nil {
logger.Error("validateChessMove: FEN parse error: %v", err)
return result