Fix: bot recovery

This commit is contained in:
Grail Finder
2025-06-20 11:06:48 +03:00
parent 2db1c246a4
commit 1d51697c1a
4 changed files with 24 additions and 18 deletions

View File

@ -83,10 +83,10 @@ func saveFullInfo(fi *models.FullInfo) error {
func notifyBotIfNeeded(fi *models.FullInfo) {
if botName := fi.Room.WhichBotToMove(); botName != "" {
log.Debug("got botname", "name", botName)
log.Debug("got botname", "name", botName, "channel_len", len(llmapi.SignalChanMap[botName]))
llmapi.SignalChanMap[botName] <- true
log.Debug("after sending signal", "name", botName)
}
log.Debug("no bot", "room_id", fi.Room.ID)
}
// cache
@ -169,11 +169,22 @@ func getFullInfoByCtx(ctx context.Context) (*models.FullInfo, error) {
return resp, nil
}
func leaveRole(fi *models.FullInfo) {
fi.Room.RedTeam.Guessers = utils.RemoveFromSlice(fi.State.Username, fi.Room.RedTeam.Guessers)
fi.Room.BlueTeam.Guessers = utils.RemoveFromSlice(fi.State.Username, fi.Room.BlueTeam.Guessers)
if fi.Room.RedTeam.Mime == fi.State.Username {
fi.Room.RedTeam.Mime = ""
}
if fi.Room.BlueTeam.Mime == fi.State.Username {
fi.Room.BlueTeam.Mime = ""
}
}
func joinTeam(ctx context.Context, role, team string) (*models.FullInfo, error) {
// get username
fi, _ := getFullInfoByCtx(ctx)
fi.Room.RedTeam.Guessers = utils.RemoveFromSlice(fi.State.Username, fi.Room.RedTeam.Guessers)
fi.Room.BlueTeam.Guessers = utils.RemoveFromSlice(fi.State.Username, fi.Room.BlueTeam.Guessers)
// leave gueesers if present
leaveRole(fi)
// get room
if role == "mime" {
if team == "blue" {
@ -186,9 +197,6 @@ func joinTeam(ctx context.Context, role, team string) (*models.FullInfo, error)
fi.Room.BlueTeam.Color = "blue"
fi.State.Team = "blue"
fi.State.Role = "mime"
if fi.Room.RedTeam.Mime == fi.State.Username {
fi.Room.RedTeam.Mime = ""
}
} else if team == "red" {
if fi.Room.RedTeam.Mime != "" {
// error: alredy taken
@ -199,9 +207,6 @@ func joinTeam(ctx context.Context, role, team string) (*models.FullInfo, error)
fi.Room.RedTeam.Color = "red"
fi.State.Team = "red"
fi.State.Role = "mime"
if fi.Room.BlueTeam.Mime == fi.State.Username {
fi.Room.BlueTeam.Mime = ""
}
} else {
err := errors.New("uknown team:" + team)
return nil, err
@ -306,7 +311,7 @@ func recoverBot(bm map[string]string) error {
return fmt.Errorf("no such room: %s; err: %w", bm["room_id"], err)
}
log.Debug("recovering bot", "bot", bm)
_, err := llmapi.NewBot(bm["role"], bm["team"], bm["bot_name"], bm["room_id"], cfg)
_, err := llmapi.NewBot(bm["role"], bm["team"], bm["bot_name"], bm["room_id"], cfg, true)
if err != nil {
return err
}