Files
tiennm99bot/internal/modules/wordle/lookup.go
T
tiennm99 c0231ceadf feat(wordledaily): add the daily Wordle HTML5 game
/wordledaily sends a BotFather game card whose page plays one shared word
per day, changing at 07:00 ICT. The server checks guesses, saves each
player's board after every guess and keeps NYT-style stats. A win is
reported with setGameScore, and in a group one live results message shows
everyone's colour grids.

/wordledaily_subscribe and /wordledaily_unsubscribe opt a chat or topic in
to the 07:00 push: yesterday's recap, opening with the answer and the
group's win streak, then today's card.

The HTML5 game plumbing that noitu used is now shared in util/htmlgame, and
the wordle word list and scoring live in wordle/wordlist.
2026-10-09 17:20:02 +07:00

27 lines
907 B
Go

package wordle
import "github.com/tiennm99/tiennm99bot/internal/modules/wordle/wordlist"
// normalizeWord lowercases input and strips anything outside a-z.
func normalizeWord(input string) string { return wordlist.Normalize(input) }
// rejectReason classifies why validateGuess returned not-ok. rejectMessage in
// handlers.go maps each reason to its user-facing reply.
type rejectReason = wordlist.Reason
const (
reasonEmpty = wordlist.ReasonEmpty
reasonLength = wordlist.ReasonLength
reasonUnknown = wordlist.ReasonUnknown
)
// guessResult is the validateGuess outcome; Word is always the normalized
// input.
type guessResult = wordlist.Result
// validateGuess normalizes input then checks length + dictionary membership.
// Reasons in priority order: empty > length > unknown.
func validateGuess(dict map[string]struct{}, input string) guessResult {
return wordlist.Validate(dict, input)
}