Enha: bot names avoid collision
This commit is contained in:
		| @@ -294,7 +294,14 @@ func HandleAddBot(w http.ResponseWriter, r *http.Request) { | |||||||
| 		abortWithError(w, err.Error()) | 		abortWithError(w, err.Error()) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	botname := fmt.Sprintf("bot_%d", len(llmapi.SignalChanMap)+1) // what if many rooms? | 	var botname string | ||||||
|  | 	maxID, err := repo.PlayerGetMaxID(r.Context()) | ||||||
|  | 	if err != nil { | ||||||
|  | 		log.Warn("failed to get players max id") | ||||||
|  | 		botname = fmt.Sprintf("bot_%d", len(llmapi.SignalChanMap)+1) // what if many rooms? | ||||||
|  | 	} else { | ||||||
|  | 		botname = fmt.Sprintf("bot_%d", maxID+1) // what if many rooms? | ||||||
|  | 	} | ||||||
| 	_, err = llmapi.NewBot(role, team, botname, fi.Room.ID, cfg, false) | 	_, err = llmapi.NewBot(role, team, botname, fi.Room.ID, cfg, false) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		abortWithError(w, err.Error()) | 		abortWithError(w, err.Error()) | ||||||
|   | |||||||
| @@ -19,6 +19,7 @@ type PlayersRepo interface { | |||||||
| 	PlayerList(ctx context.Context, isBot bool) ([]models.Player, error) | 	PlayerList(ctx context.Context, isBot bool) ([]models.Player, error) | ||||||
| 	PlayerListAll(ctx context.Context) ([]models.Player, error) | 	PlayerListAll(ctx context.Context) ([]models.Player, error) | ||||||
| 	PlayerListByRoom(ctx context.Context, roomID string) ([]models.Player, error) | 	PlayerListByRoom(ctx context.Context, roomID string) ([]models.Player, error) | ||||||
|  | 	PlayerGetMaxID(ctx context.Context) (uint32, error) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (p *RepoProvider) PlayerListNames(ctx context.Context) ([]string, error) { | func (p *RepoProvider) PlayerListNames(ctx context.Context) ([]string, error) { | ||||||
| @@ -96,6 +97,15 @@ func (p *RepoProvider) PlayerList(ctx context.Context, isBot bool) ([]models.Pla | |||||||
| 	return players, nil | 	return players, nil | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func (p *RepoProvider) PlayerGetMaxID(ctx context.Context) (uint32, error) { | ||||||
|  | 	var maxID uint32 | ||||||
|  | 	err := sqlx.GetContext(ctx, p.DB, &maxID, "SELECT COALESCE(MAX(id), 0) FROM players") | ||||||
|  | 	if err != nil { | ||||||
|  | 		return 0, err | ||||||
|  | 	} | ||||||
|  | 	return maxID, nil | ||||||
|  | } | ||||||
|  |  | ||||||
| func (p *RepoProvider) PlayerListAll(ctx context.Context) ([]models.Player, error) { | func (p *RepoProvider) PlayerListAll(ctx context.Context) ([]models.Player, error) { | ||||||
| 	var players []models.Player | 	var players []models.Player | ||||||
| 	query := "SELECT id, room_id, username, team, role, is_bot FROM players;" | 	query := "SELECT id, room_id, username, team, role, is_bot FROM players;" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Grail Finder
					Grail Finder