Enha: filter out some words

This commit is contained in:
Grail Finder
2025-06-19 18:37:16 +03:00
parent d4daa02155
commit 2db1c246a4
10 changed files with 3402 additions and 5927 deletions

View File

@ -12,6 +12,7 @@ import (
"log/slog"
"net/http"
"os"
"strconv"
"strings"
)
@ -93,6 +94,27 @@ type Bot struct {
// DoneCh chan bool
}
func convertToSliceOfStrings(value any) ([]string, error) {
switch v := value.(type) {
case []string:
// Directly return if it's already []string
return v, nil
case []interface{}:
// Convert each element to string
result := make([]string, len(v))
for i, item := range v {
str, ok := item.(string)
if !ok {
return nil, fmt.Errorf("element at index %d is not a string (got %T)", i, item)
}
result[i] = str
}
return result, nil
default:
return nil, fmt.Errorf("unsupported type: %T", value)
}
}
// StartBot
func (b *Bot) StartBot() {
for {
@ -138,8 +160,18 @@ func (b *Bot) StartBot() {
room.ActionHistory = append(room.ActionHistory, action)
room.MimeDone = true
eventPayload = mimeResp.Clue + mimeResp.Number
guessLimitU64, err := strconv.ParseUint(mimeResp.Number, 10, 8)
if err != nil {
b.log.Warn("failed to parse bot given limit", "mimeResp", mimeResp, "bot_name", b.BotName)
}
room.ThisTurnLimit = uint8(guessLimitU64)
case models.UserRoleGuesser:
for _, word := range tempMap["guesses"].([]string) {
guesses, err := convertToSliceOfStrings(tempMap["guesses"])
if err != nil {
b.log.Warn("failed to parse bot given guesses", "mimeResp", tempMap, "bot_name", b.BotName)
continue
}
for _, word := range guesses {
color, exists := room.WCMap[word]
b.log.Debug("bot trying to open card", "word", word, "color",
color, "exists", exists)