Files
tiennm99bot/internal/modules/wordle/render.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

30 lines
774 B
Go

package wordle
import (
"strings"
"github.com/tiennm99/tiennm99bot/internal/modules/wordle/wordlist"
)
// renderGuess formats one guess as the NYT share-pattern: word on one line,
// emoji marker row below.
//
// CRANE
// 🟩🟨⬜🟩🟩
func renderGuess(word string, results []LetterScore) string {
return strings.ToUpper(word) + "\n" + wordlist.EmojiRow(results)
}
// renderBoard joins all prior guesses, blank-line separated. Used when a
// player asks for `/wordle` mid-round.
func renderBoard(guesses []GuessRecord) string {
if len(guesses) == 0 {
return "No guesses yet. Reply with `/wordle <word>`."
}
rows := make([]string, len(guesses))
for i, g := range guesses {
rows[i] = renderGuess(g.Word, g.Results)
}
return strings.Join(rows, "\n\n")
}